Osvědčené postupy pro nasazení agentů Copilot Studio v Teams
Klíčové postupy pro správu stavů relací, zpracování aktualizací a zajištění spolehlivého výkonu při nasazení agentů Copilot Studio do Microsoft Teams.
Nasazení Copilot Studio Agent do Microsoft Teams přináší specifické výzvy, které u webového chatu obvykle neřešíte. Konverzace v Teams zůstávají aktivní prakticky neomezeně dlouho, události pro start konverzace se nespouštějí automaticky a změny se mohou projevit se zpožděním kvůli cachování (takže uživatelé nemusí vždy pracovat s nejnovější verzí). Pokud chcete dodat spolehlivou uživatelskou zkušenost, je potřeba tyto nuance znát a počítat s nimi.
V čem je nasazení do Teams jiné
- Konverzace může běžet napříč dny bez automatického resetu. To se liší od „sessions“, které jsou analytický koncept a přepočítávají se podle toho, kdy dojde k neaktivitě.
- Conversation Start se spustí jen úplně poprvé (když se konverzace vytvoří). Odinstalace a následná reinstalace do Teams další trigger nevygeneruje.
- Zastaralý kontext a expirované tokeny mohou způsobovat nečekané chování
- Aktualizace se nemusí projevit okamžitě kvůli cachování
Chaty v Teams jsou z principu perzistentní – pro vývojáře botů to znamená jak příležitosti, tak i komplikace.
Výzva: Session State
Na rozdíl od WebChat, kde každá session začíná „na čisto“, Teams drží stav v rámci jedné konverzace. Tahle perzistence je skvělá pro kontinuitu, ale přináší i typické problémy:
- Stale Context: Historie konverzace se automaticky nemaže a může mást LLM (standardně se používá posledních 10 turnů, pokud historii explicitně nevyčistíte)
- Token Expiration: Autentizace konektorů může během dlouhých konverzací vypršet
- Context Limits: Nahromaděná historie může narazit na token limity
- Update Delays: Uživatelé mohou i po aktualizaci dál běžet na staré logice bota
Řešení vyžaduje proaktivní práci se session managementem a jasné instrukce pro uživatele.
Správa životního cyklu session
Krok 1: Reset při neaktivitě
Vytvořte nové topic a jako trigger zvolte „The user is inactive for awhile“, aby se session po neaktivitě automaticky resetovala:
Postup nastavení:
- Přidejte event trigger „The user is inactive for awhile“ a v jeho properties upravte dobu neaktivity (např. timeout 15 minut)
- Přidejte jeden (nebo více) node „Clear variables“, který vymaže session proměnné a historii konverzace, aby nedocházelo k přetečení kontextu
- Ukončete konverzaci a označte session jako resolved
Nastavte timeout neaktivity, aby se session zbytečně „nezakonzervovala“.
Díky tomu se bot při delší neaktivitě uživatele sám vrátí do čistého stavu.
Vyčištění stavu při neaktivitě pomáhá držet se v limitech délky kontextu a zároveň předchází nečekanému chování, když se uživatel vrátí později.
Krok 2: Nasměrujte uživatele po resetu
Po vyčištění stavu pošlete jasnou zprávu, co se stalo:
1
"Vypadá to, že naše konverzace byla delší dobu neaktivní, takže jsem pro jistotu smazal předchozí kontext. Napište prosím „hello“ a začneme novou chatovací relaci."
Má to dva zásadní přínosy:
- Vysvětlí reset – uživatelé chápou, proč se ztratil kontext
- Spustí Greeting topic – vyzve uživatele, aby se konverzace správně znovu inicializovala
Proč zrovna „hello“? V Teams se totiž ConversationStart event nespouští automaticky. Bot začne reagovat až po první zprávě od uživatele. Když uživatele navedete, aby napsali „hello“ (nebo jiný pozdrav), spustíte tím Greeting topic a provede se Vaše inicializační logika.
V nasazení pro Teams berte Greeting topic jako start konverzace – ne ConversationStart.
Krok 3: Dejte uživatelům k dispozici debug příkazy
Do nápovědy zahrňte příkaz /debug clearstate:
1
"Pokud se něco nechová správně, zkuste napsat /debug clearstate – obnovím tím svůj stav."
Tento speciální příkaz vynutí kompletní reset konverzace:
- vymaže celý stav konverzace
- odstraní informace o konektorech z cache
- znovu provede autentizaci konektorů
- načte nejnovější verzi Agent
Kdy se hodí:
- bot působí „zaseknutě“ a pracuje se zastaralými informacemi
- vypršela autentizace konektoru
- po úpravách logiky bota
- když je chování nekonzistentní
Transparentnost a ladění
Využijte OnKnowledgeRequested pro lepší přehled
Query rewrite je důležitý krok v knowledge pipeline v Copilot Studio. Když uživatel položí dotaz, systém neposílá do search indexů původní text „tak jak je“. Nejprve dotaz přepíše tak, aby se lépe vyhledával napříč více zdroji znalostí (lexical i semantic). Díky tomu bývají výsledky relevantnější a přesnější.
Zapněte trigger OnKnowledgeRequested, abyste viděli, co Agent ve skutečnosti hledá:
Implementace:
- Zapněte trigger OnKnowledgeRequested (přes YAML, protože v UI zatím není)
- Přidejte node Message, který zobrazí vyhledávací dotaz
- Uživatelům zobrazte: „Vyhledávám ve znalostní bázi: {keywords}“
Tento trigger je zatím dostupný jen přes YAML.
1
2
3
4
kind: AdaptiveDialog
beginDialog:
kind: OnKnowledgeRequested
id: main
OnKnowledgeRequested pro transparentnost ukáže vyhledávací dotaz po query rewrite.
Získáte tak read-only přístup k upravenému vyhledávacímu dotazu (query rewrite), který orchestrator vygeneroval z uživatelovy otázky.
Přínosy:
- Pomáhá odhalit, kdy se míjí záměr (intent)
- Uživatelům ukáže, co se dohledává
- Zvyšuje důvěru v to, co bot dělá
- Tvůrcům (makers) usnadní testování
Příklad: Uživatel se zeptá „Jak si resetuji heslo?“ a bot zobrazí „(debug) Vyhledávám v HR FAQ: ‚reset hesla‘“.
Můžete vidět keyword search i semantic search – všimněte si, že druhý dotaz Agent před vyhledáváním přepsal.
OnKnowledgeRequested používejte při vývoji pro ověření query rewrite a pak se rozhodněte, jestli ho necháte viditelné i v produkci.
Správa verzí a aktualizace
Zobrazte uživatelům verzi bota
Do odpovědí Agenta vždy přidejte identifikátor verze – buď přes topic „Greeting“, nebo přes samostatný topic „Version“:
1
"Contoso Helpdesk Bot – Version 1.3 (Nov 2025)"
Doporučené postupy:
- Aktualizujte řetězec s verzí při každém publish
- Uveďte ho v uvítací zprávě
- Odkazujte na něj při řešení incidentů a troubleshooting
Pomůže to jak uživatelům, tak makerům rychle ověřit, jaký build právě běží. Když uživatel nahlásí problém ve v1.2, ale Vy už máte venku v1.3, hned víte, že si potřebuje aktualizaci „natáhnout“ (typicky refresh).
Aktualizace metadat verze zároveň pomáhá obejít cache – změna popisu nebo názvu přiměje Teams, aby to braly jako update.
Vynucení aktualizace při publish
Při publikování do Teams zapněte volbu „Force newest version“:
Co to dělá: Vynutí okamžitý update – jakmile uživatel příště pošle agentovi zprávu, použije se nejnovější publikovaná verze. Nové topics se projeví při další zprávě, kterou uživatel botovi pošle.
Zapněte Force Update, aby všichni uživatelé dostali nejnovější verzi agenta.
Pozor: Vynucená aktualizace přeruší jakoukoli právě probíhající konverzaci, takže tuto možnost používejte s rozmyslem.
Specifika pro Teams
Správně nastavte logiku uvítání
Protože se „Conversation Start“ spustí jen jednou (při první instalaci):
- Použijte topic Greetings pro logiku, kterou chcete spouštět na začátku konverzace
- Doplňte psané instrukce do popisu Teams aplikace
- Přidejte užitečný tip: „Po vypršení časového limitu napište ‚hello‘ a začněte novou konverzaci“
Vylaďte triggers a fallbacky
Uživatelé v Teams komunikují přirozeně v konverzaci, proto:
- Pokryjte běžné varianty pozdravů v popisu topicu
- Ošetřete i rozloučení
- Uveďte více ukázkových utterances
- Nastavte fallback tak, aby byl pro uživatele srozumitelný a vstřícný
Fallback strategie:
- Použijte OnKnowledgeRequested pro zachycení situací, kdy se nepodaří spárovat topic
- Vkládejte užitečné nápovědy
- Přesměrujte na relevantní topics podle klíčových slov
- Pokud uživatel opravdu „uvízne“, vyzvěte ho k přeformulování dotazu
Řiďte autentizaci connectorů
Pokud používáte connectory (ServiceNow, Office, Outlook apod.):
Otestujte autentizační flow:
- Ověřte, že se při prvním použití zobrazí login card
- Počkejte na vypršení tokenu (typicky cca hodina) a zkuste to znovu – ověřte, že se connector automaticky znovu autentizuje
- Upravte flow tak, aby zneplatnil existující connection, a otestujte, že se v konverzaci znovu vyžádá consent card
Známý problém: Connectory nemusí během dlouhých relací obnovovat tokeny.
Řešení: Použijte reset po neaktivitě nebo /debug clearstate, aby se znovu spustil OAuth flow.
Předajte příkaz „clearstate“ support týmům a power uživatelům, aby měli rychlou možnost základního troubleshooting.
Testování v reálných podmínkách
Počítejte s persistent sessions
V Teams 1:1 chatech zůstává kontext zachovaný, dokud ho výslovně nevymažete:
Výhody:
- Skvělé pro návaznost konverzace
- Uživatel se může vrátit a bot si „pamatuje“
Výzvy:
- Chyby a zastaralý kontext v konverzaci přetrvávají
- Změněná logika se neprojeví automaticky
- Při testování musíte se setrvačností session počítat
Strategie testování nasazení
- Nejdřív nasazení jen pro sebe (volba „Show to only me“)
-
Testujte reálné scénáře:
- Otevřete chat znovu třeba po hodině
- Publikujte update a ověřte, že se změny opravdu projevily
- Otestujte Teams na mobilu i desktopu
- Ověřte, že se Adaptive Cards správně vykreslují napříč klienty
- Otestujte reakce na akce v různých kontextech
Checklist pro robustní nasazení do Teams
- Trigger OnInactivity je nastavený tak, aby mazal historii konverzace
- Zprávy pro uživatele vysvětlují reset a navádí, jak konverzaci znovu spustit
-
/debug clearstateje zdokumentované pro uživatele - Trigger OnKnowledgeRequested je během vývoje zapnutý kvůli transparentnosti
- V odpovědích bota je uvedený identifikátor verze
- Při publikaci je zapnuté Force Update
- Greeting topic řeší inicializaci v Teams (a NE start konverzace)
- Trigger phrases pokrývají různé varianty formulací v konverzaci
- Fallback chování je pro uživatele srozumitelné a vstřícné
- Autentizace connectorů je důkladně otestovaná
- Proběhlo testování v Teams v reálných podmínkách
Hlavní doporučení
- Řiďte životnost session pomocí triggerů pro neaktivitu a možností clearstate
- Zpřehledněte, co bot dělá: přes query rewrites a zprávy o stavu
- Počítejte se specifiky Teams kanálů: ruční pozdrav, persistent memory
- Udržujte bota aktuální díky správnému versioning a vynuceným aktualizacím
- Dejte uživatelům do ruky self-service příkazy pro troubleshooting
Vyzkoušejte si to sami
- Přidejte trigger OnInactivity, který po 15 minutách vyčistí proměnné
- Nastavte přívětivou zprávu, která uživatele vyzve, aby napsali „hello“
- Během testování zapněte OnKnowledgeRequested, aby se zobrazovaly vyhledávací dotazy
- Do uvítací zprávy doplňte informaci o verzi
- Nasazujte se zapnutým Force Update a otestujte, jak se chová persistence session
Máte dotazy nebo zkušenosti s nasazením do Teams? Podělte se o ně v komentářích níže nebo na komunitních fórech.
Tento článek vznikl s využitím materiálu z microsoft.github.io. Osobní postřehy a komentáře jsou moje vlastní.