Workflows
Workflow je vizuální mapa toho, co má váš agent dělat krok za krokem — kdo mluví první, na co se ptát, kdy větvit, kdy přepojit hovor a kdy ho předat jinému agentovi. Sestavujete ji na plátně tím, že pokládáte uzly a propojujete je.
Použijte workflow, když jediný prompt nestačí — když má hovor jasné fáze («nejprve kvalifikovat, pak sebrat detaily, pak rezervovat nebo přepojit»), když potřebujete deterministický routing podle odpovědí volajícího (ne «AI to obvykle zvládne»), nebo když má agent předat kus práce specialistovi.
Prompt je jedna dlouhá instrukce. Agent ji přečte jednou a používá ji po celý hovor. Workflow je mnoho malých instrukcí, jedna na uzel, s explicitními přechody mezi nimi. Graf řídí hovor — agent každého uzlu vlastní jen svůj kousek.
Pokud váš agent už dobře funguje s jediným promptem, workflow nepotřebujete. Sáhněte po workflows, když začnete do promptu hromadit pravidla «pokud X tak Y» a přestanou spolehlivě fungovat.
Editor
Editor workflow žije na vlastní záložce na stránce agenta. Vidíte plátno s uzlem Start a uzlem End ve výchozím nastavení. Přidáváte uzly z lišty nástrojů, přetahujete je na plátno a propojujete hranami.
Pravý panel se mění podle toho, co vyberete:
- Klik na uzel — otevře jeho panel nastavení (prompt, pole, proměnné extrakce atd.).
- Klik na hranu — otevře nastavení jejího triggeru (AI decides / Condition / Always).
- Panel Variables (tlačítko v liště) vypisuje každou proměnnou workflow se skokem jedním kliknutím na uzel, který ji nastavuje nebo čte.
Spusťte Test Call v prohlížeči přímo z editoru — svítící světluška sleduje pozici živě, abyste viděli přesně, který uzel je aktivní v každém okamžiku.
Workflows mají tři stavy:
- Draft — editovatelný, ještě ne v provozu. Použijte Test Call k otestování.
- Active — v provozu pro reálné hovory. Agent používá tento workflow od dalšího hovoru.
- Template — opakovaně použitelný template, nikdy přímo navázaný na agenta. Můžete ho instancovat na více agentech.
Uzly
Každý uzel je krok v konverzaci. Různé typy uzlů dělají různé věci — jedny mluví, jiné poslouchají, jiné směrují, jiné spouštějí nástroje.
Agent
Uzel Agent je srdce etapy workflow. Když graf dorazí k uzlu Agent, ten agent převezme slovo a vede konverzaci, dokud něco nespustí přechod.
Konfigurujete osobnost a úkol uzlu Agent přímo na plátně (záložka Prompt se otevře po kliknutí na uzel) — toto je prompt pro tu část konverzace, ne pro celý hovor. Můžete také připojit znalostní báze a nástroje na uzel.
Greeting — úvodní fráze. Pokud je toto vstupní uzel (první zastávka po Start), je to první věc, kterou volající slyší.
Když graf řídí hovor, hlavní prompt agenta (ten ze záložky Model) je nahrazen promptem aktivního uzlu. Je to záměrné — graf vlastní osobnost a úkol pro každou etapu, ne jediný fixní prompt konkurující.
Subagent
Subagent je pomocník, který běží inline — přebírá konverzaci pro konkrétní úkol, pak vrátí výsledek tomu, kdo ho vyvolal.
Subagenti se hodí, když je kus práce opakovaně použitelný nebo působí odděleně: «ověř identitu volajícího», «seber doručovací adresu», «kvalifikuj leada metodou SPIN». Rodičovský agent zavolá subagenta, ten udělá svoje, ohlásí výsledek, rodič pokračuje tam, kde skončil.
Uzly Subagent mají stejné záložky jako uzel Agent (Prompt, Knowledge, Tools, Actions) — editor automaticky vytvoří skrytého backing-agenta za vás. Toho skrytého agenta nevidíte v hlavním seznamu a nezapočítává se do limitu agentů vašeho plánu.
Return variable — pole, kam uložit výsledek subagenta (např. identity_verified, lead_score).
Message (Say)
Uzel Say vysloví fixní frázi — bez tahu AI, bez improvizace. Použijte ho pro přechody («Moment, přepojuji…»), povinná právní upozornění nebo předdefinovaná potvrzení, kde slova záleží.
Text — co říct. Podporuje tokeny {{variable}} pro vložení zachycených hodnot, např. "Děkuji {{first_name}}, rezervoval jsem pro vás na {{appointment_time}}."
Uzel Say spotřebovává tah — agent přes to nic nepřidá.
Gather Input
Uzel Gather Input položí otázku a zachytí odpověď volajícího do proměnné.
Prompt — otázka, kterou se zeptat. Podporuje {{tokens}}.
Variable — jméno pole, kam uložit odpověď.
Použijte pokaždé, když potřebujete konkrétní hodnotu před pokračováním — email, číslo účtu, počet osob, kategorii problému. Další tah volajícího se stává hodnotou; můžete na ní větvit hranou Condition hned poté.
Update State
Uzel Update State zapisuje jednu či více hodnot do proměnných workflow, aniž by mluvil nebo se ptal. Použijte pro přednastavení výchozích, označení flagů průběhu nebo skládání hodnot z předchozích kroků.
Variable / Value — pár klíč-hodnota. More variables (optional) — další páry klíč-hodnota.
Jak klíče, tak hodnoty podporují {{tokens}}, takže můžete skládat nové hodnoty z existujících.
Condition
Uzel Condition je čistě routovací uzel — nemluví, neptá se, jen pošle hovor po vystupující větvi, která se shoduje.
Samotná podmínka žije na každé výstupní hraně, ne na uzlu — viz hrany Condition níže.
Použijte uzel Condition, když chcete jasný bod «fan-out» ve svém grafu: mnoho větví závislých na hodnotě proměnné. Ve srovnání s umístěním podmínek na hranách Agent uzlů činí dedikovaný uzel Condition routovací logiku vizuálně zřejmou.
Tool
Uzel Tool spustí jeden z připojených nástrojů agenta jako krok grafu — bez toho, aby AI měla slovo v jeho zavolání. Použijte, když chcete fakt, ne konverzaci: «najdi tohoto zákazníka», «zkontroluj skladovou zásobu», «GET aktuální počasí».
Můžete:
- Vybrat jeden z existujících nástrojů agenta (vyhledání v kalendáři, hledání ve znalostní bázi, konkrétní akci integrace), nebo
- Nakonfigurovat inline HTTP volání přímo v uzlu (URL, metoda, hlavičky, parametry, body).
Odpověď nástroje se zpřístupní všem následujícím uzlům. Pokud je odpověď JSON objekt, každé pole nejvyšší úrovně se stane vlastní proměnnou — odpověď jako {"is_known": true, "tier": "gold"} zapíše jak is_known, tak tier, abyste na nich mohli větvit.
Každé textové pole v uzlu Tool — URL, hodnoty hlaviček, body — podporuje {{tokens}}. Vsuňte proměnnou do cesty URL, hlavičky nebo body bez psaní kódu.
Pokud volání nástroje selže (chyba HTTP, timeout, síť), uzel zaloguje selhání a graf jde dál — bez dat. Naplánujte své podmínky níže tak, aby zvládly případ «žádná hodnota».
Integration
Uzel Integration je zaměřená varianta Tool, pro připojené externí služby — Google Calendar, Outlook, HubSpot. Vyberete providera a konkrétní akci (např. check_availability, create_event), zadáte parametry, a uzel volá integraci deterministicky.
Pokud integrace není připojena u tohoto agenta, uzel projde bez akce — váš graf pokračuje. Zkontrolujte podmínky níže na případ «neběželo».
Phone Transfer
Uzel Phone Transfer přepojí hovor (warm transfer) na externí telefonní číslo. Po úspěšném přepojení hovor opustil váš workflow — váš agent už není na lince.
Number — cílové číslo v mezinárodním formátu s úvodním + (např. +15551234567). Podporuje {{tokens}}, takže číslo může pocházet z předchozího kroku (např. odpověď na «s kterou pobočkou Vás spojit?»).
Pokud se přepojení nepodaří (neplatné číslo, nikdo nezvedá, není nastavené telefonní připojení), graf se vrátí a aktuální agent zůstává na lince. Konverzace pokračuje normálně dál — agent se může omluvit a zkusit jinou cestu.
End Call
Uzel End Call uzavírá — agent řekne nakonfigurované zakončení a pak zavěsí. Použijte jako čistý terminus pro větve «vše hotovo» nebo pro větev «nemůžeme pomoct, omlouváme se» z náročné Condition.
Nevyžaduje konfiguraci kromě vstupní hrany.
Znovupoužití workflow (Sub-workflow)
Uzel Sub-workflow je rezervovaný pro vložení dalšího workflow jako pod-grafu. Tento uzel je v editoru, ale ještě není plně zapojen — graf přes něj projde, aniž by cokoli udělal. Nespoléhejte na něj pro provozní hovory. Aktivujeme ho, až vydáme znovupoužitelné pod-grafy.
Hrany (Připojení)
Propojujete uzel s dalším skrze hranu. Trigger hrany rozhoduje, kdy se přechod spustí.
Jsou tři triggery:
| Trigger | Kdo rozhoduje | Kdy se spouští |
|---|---|---|
| AI decides | AI | Když konverzace činí toto přirozeným dalším krokem. AI dostane «nástroj přechodu», který může zavolat. |
| Condition | Runtime | Když proměnná odpovídá pravidlu, které jste napsali. Vyhodnoceno před odpovědí AI. |
| Always | Runtime | Bezpodmínečně — jakmile zdrojový uzel skončí. Bez vstupu volajícího, bez AI. |
AI decides (založeno na intent)
Použijte AI decides, když jen AI může rozhodnout, kdy přepnout — «pokud se volající ptá na ceny, přepoj na agenta prodeje», «pokud to zní jako stížnost, spusť subagent omluvy».
Napíšete krátký popis intentu na hraně (např. «Volající se ptá na ceny nebo chce upgradovat»). AI ji vidí jako nástroj označený tímto intentem a rozhoduje, zda ho zavolat na základě konverzace. Pokud je přítomno více AI-decides hran, AI vybere nejvýše jednu za tah.
Condition (deterministické větvení)
Použijte Condition, když chcete, aby graf — ne AI — rozhodoval na základě známého faktu: «pokud lead_score > 7, pošli na closera; jinak ukonči zdvořile».
Conditions jsou vyhodnoceny před odpovědí AI, takže vždy vyhrávají nad AI v tom tahu. AI nemůže přepsat podmínku, která se shoduje.
Můžete sestavit podmínku z těchto operátorů:
| Operátor | Význam | Příklad |
|---|---|---|
| equals | přesná shoda (case-insensitive pro text) | intent equals "billing" |
| not equals | neshoduje se | status not equals "active" |
| contains | shoda podřetězce (case-insensitive) | feedback contains "broken" |
| greater than | numerické > | lead_score greater than 7 |
| less than | numerické < | wait_minutes less than 5 |
Můžete také kombinovat klauzule s All (všechny se musí shodovat — AND) nebo Any (alespoň jedna se musí shodovat — OR), a vnořovat je. Pravidlo jako «volající je známý a jeho tier je gold nebo premium» se stává:
All:
- is_known equals true
- Any:
- tier equals gold
- tier equals premium
Pokud odkazujete na proměnnou, která ještě nebyla nastavena (např. AI ji nikdy nezachytila), podmínky na ní vždy selhávají — bez chyby, jen se neshodují. Takže loyalty_tier equals "gold" vrací false, pokud loyalty_tier nikdy nebyl nastaven. Navrhujte své větve tak, aby to zvládly — obvykle s větví else (viz níže).
Větev else — když žádná podmínka neodpovídá
Pokud máte více Condition hran vystupujících z uzlu a žádná se neshoduje, hovor spadne na ne-Condition hranu nejnižší priority (Always nebo AI-decides hrana). Pokud není žádný fallback vůbec, AI získá zpět kontrolu a může pokračovat volně.
Běžný vzor: několik Conditions pro známé cesty plus hrana Always na catch-all (řekni něco, pak End Call nebo přepoj).
Always (auto-advance)
Použijte Always, když je další krok bezpodmínečný — bez rozhodnutí, bez vstupu volajícího. Dvě přirozené použití:
- Řetězení kroků: SAY → UPDATE_STATE → SAY → TOOL → Condition. Každý krok skončí a hrana Always okamžitě posune dál.
- Auto-posun poté, co agent skončí mluvit: uzel Agent s vystupující hranou Always znamená «jakmile AI přestane mluvit, posuň dál» — bez nutnosti, aby volající odpověděl. Užitečné pro monologové toky jako prezentační agent, který přednese a přejde na další sekci.
Condition a Always (deterministické) vždy vyhrávají nad AI decides. Pokud se Condition shoduje, nástroje přechodu AI jsou v tom tahu ignorovány. To vám umožňuje psát pravidla, která AI nemůže obejít.
Proměnné
Proměnné jsou paměť workflow. Většina věcí ve workflow buď nastavuje proměnnou, nebo ji čte.
Deklarace proměnných
Panel Variables (tlačítko v liště) zobrazuje každou proměnnou workflow s kroky, které ji nastavují nebo čtou. Klikněte na proměnnou pro skok na setter; je to nejrychlejší způsob, jak najít, kde něco jde špatně.
Můžete deklarovat proměnnou s výchozí hodnotou v panelu — užitečné pro flagy jako escalated=false, které musí existovat od začátku, aby vaše podmínky nepadaly tiše kvůli «nepřítomnosti».
Jak se proměnné nastavují
| Zdroj | Příklad |
|---|---|
| Výchozí hodnoty (deklarované v panelu Variables) | escalated = false nastavené před začátkem hovoru |
| Gather Input | Mluvená odpověď volajícího se zachytí do proměnné uzlu |
| Update State | Zapisujete hodnotu (literál nebo skládaná s {{tokens}}) přímo |
| Výsledek Tool / Integration | Celá odpověď je uložena pod jménem uzlu; pokud je odpověď JSON objekt, každé pole nejvyšší úrovně se také stane vlastní proměnnou |
| Return ze Subagenta | To, co subagent finalizuje, se ukládá do return proměnné uzlu subagent |
Čtení proměnných — {{tokens}}
Všude, kde můžete psát text v uzlu — prompt Agenta, text Say, prompt Gather, URL/body/hlavičky Tool, číslo Phone Transfer, hodnota Update State, hodnoty podmínek — můžete vložit {{variable}} a bude nahrazeno v runtime.
Tečkované cesty také fungují pro vnořená data — např. pokud byla odpověď Tool {"customer": {"name": "Anna", "tier": "gold"}}, můžete číst {{customer.name}} nebo {{customer.tier}}.
Pokud token odkazuje na neexistující proměnnou, doslovný text {{name}} je ponechán tak, jak je (není vybělen). Je to záměrné — činí to rozbité templates snadno odhalitelnými v test call, místo aby je tiše spolykal.
Časté vzory
Kvalifikuj → Větvi → Směruj
Start
└─ Agent (greeting + qualify)
└─ Gather Input (intent)
└─ Condition: intent == "sales" → Agent (sales)
└─ Condition: intent == "support" → Subagent (triage)
└─ Always (catch-all) → Say "Let me connect you" → Phone Transfer
Vyhledej → Personalizuj
Start
└─ Tool (CRM lookup, writes is_known, name, tier)
└─ Condition: is_known == true → Agent (warm greeting with {{name}})
└─ Always (else) → Agent (cold greeting)
Opakovaně použitelný helper (Subagent side-trip)
Agent (main conversation)
└─ AI decides: "Caller mentions an address" → Subagent (address collector)
└─ on finish: result = full_address
└─ Agent continues with {{full_address}}
Co je zamčené během workflow hovoru
Některé výchozí hodnoty se mění, když graf řídí hovor:
- Jazyk je uzamčen na ten, který používá první agent workflow. AI nemůže měnit jazyk uprostřed hovoru. Tím se zabrání tomu, aby model sjel do špatného jazyka v hlučném tahu.
- Hlavní prompt agenta je nahrazen promptem aktivního uzlu. Je to pravidlo «graf vlastní personu» — viz warning pod Agent.
- První zpráva pochází z greetinga vstupního uzlu, ne z pole «Begin Message» agenta.
Ochrana proti smyčce — Step Budget
Každý workflow má maximální počet přechodů na hovor (výchozí 25). Pokaždé, když graf přejde na nový uzel, čítač klesne o jedničku. Když dosáhne nuly, runtime přestane dělat přechody, aby zabránil neřízeným smyčkám.
Pro tento případ můžete zvolit záložní uzel (typicky Phone Transfer nebo End Call) — jakmile je budget vyčerpán, hovor je tam odkloněn.
Zřídka na to musíte myslet — je to záchranná síť pro grafy, které se omylem zacyklí. Pokud na to narazíte v normálním používání, pravděpodobně máte někde cyklus.
Testování
Tlačítko Test Call v editoru otevírá hovor v prohlížeči s aktuálním draftem workflow. Zatímco běží, svítící světluška se pohybuje mezi uzly na plátně, abyste viděli přesně, kde se hovor nachází. Editor je uzamčen během test call, aby změny nedesynchronizovaly živý stav.
Použijte Test Call k ověření:
- Vaše podmínky odpovídají hodnotám, které očekáváte (podívejte se, zda světluška přeskakuje větev, o které jste si myslel, že se spustí).
- Vaše tokeny jsou nahrazeny správně (poslouchejte zavěšený
{{name}}, pokud hodnota nebyla nastavena). - Selhání nástrojů degradují vlídně (vaše fallback trasa skutečně spustí).
Selhání, která je třeba znát
| Situace | Co se stane |
|---|---|
| Volání Tool / Integration selže | Graf pokračuje bez dat. Vaše podmínky níže by měly zvládnout chybějící proměnnou. |
| Phone Transfer selže (neplatné číslo, nikdo nezvedá, není nastavené telefonní připojení) | Graf se vrátí, aktuální agent zůstává na lince a konverzace pokračuje normálně dál. |
| Subagent se nepodaří spustit | Odbočka je zrušena, rodičovský agent zůstává na lince a vysloví se krátká fráze o selhání. |
{{missing_variable}} v textu | Ponecháno doslovně ve výstupu — snadné odhalit v test calls. |
| Uzel Sub-workflow | Aktuálně projde kolem, aniž by cokoli udělal. Zatím na něj nespoléhejte. |
| Step budget vyčerpán | Odkloní na záložní uzel, pokud je nastaven, jinak AI získá zpět kontrolu. |
Kdy NE-používat Workflow
Workflows jsou mocné, ale nejsou správnou odpovědí pro každého agenta. Zůstaňte u jediného promptu, když:
- Konverzace je otevřená («odpovídat na otázky volajícího o našich produktech»).
- Nemáte jasnou větvící logiku — většina rozhodnutí jsou úsudky, které AI dobře zvládá.
- Napsal byste jen uzel Agent a End Call — to je jen prompt s kroky navíc.
Sáhněte po workflow, když:
- Můžete načrtnout hovor jako vývojový diagram se třemi nebo více odlišnými etapami.
- Potřebujete alespoň jedno deterministické větvení na proměnné (Condition).
- Chcete znovupoužít kus konverzace napříč více agenty (subagent).
- Už hromadíte pravidla «pokud volající řekne X, tak dělá Y» v promptu a nejsou spolehlivá.