Open in
Kroky agenta a odovzdávanie hovorov
Rozdeľte agenta na kroky s vlastnými pokynmi, nástrojmi a zhromaždenými hodnotami a počas hovoru odovzdávajte hovory medzi agentmi.
Jedna výzva dáva modelu celú úlohu naraz. Kroky mu dávajú vždy jednu fázu hovoru: každý krok má vlastné pokyny, vlastné nástroje, voliteľnú vetu vyslovenú doslova a hodnoty, ktoré musí zhromaždiť pred pokračovaním. Odovzdania umožňujú, aby počas hovoru prevzal konverzáciu iný agent vo vašej organizácii so zachovaným prepisom, takže volajúci nikdy nemusí nič opakovať.
Každý agent začína ako jedna výzva. Nič sa na tom nezmení, kým nepridáte kroky alebo odovzdania.
Kroky alebo jedna výzva?
| Použite kroky, keď | Ponechajte jednu výzvu, keď |
|---|---|
| Hovor má fázy, ktoré musia prebehnúť v poradí: najprv overenie, potom rezervácia. | Konverzácia je otvorená: časté otázky, recepcia, všeobecná podpora. |
| Pred pokračovaním agenta sa musí zachytiť hodnota. | Nič sa nemusí zhromažďovať v pevnom poradí. |
| Pravidlo sa nesmie nikdy porušiť, napríklad „volajúci mladší ako 18 rokov sa presmerujú na zákonného zástupcu“. | Úsudok modelu je dostatočný pre každú vetvu. |
| Vyhľadanie sa musí vykonať v pevne určenom bode hovoru. | Nástroje možno volať vždy, keď o to volajúci požiada. |
| Časť hovoru patrí inému agentovi s vlastnou výzvou a hlasom. | Jedna persona zvládne všetko. |
Kroky nie sú skriptovaný telefónny strom. V rámci kroku model vedie konverzáciu rovnako ako pri jednej výzve. Krok určuje, na čom pracuje, ktoré nástroje môže používať a čo potrebuje pred tým, než ho môže opustiť.
Ako sa vytvára agent s krokmi
Keď má agent kroky, jeho prompt obsahuje spoločné pokyny: personu a
pravidlá, ktoré platia v každom kroku. Každý krok k nim pridáva vlastné
pokyny. Pri každom ťahu model vidí spoločné pokyny, názov a pokyny aktuálneho
kroku a doteraz zhromaždené hodnoty.
V nástroji na vytváranie prepnite agenta z Jedna výzva na Kroky. Získate kartu pre každý krok s jeho názvom, pokynmi, vetou na vyslovenie, nástrojmi, zhromaždenými hodnotami a prechodmi, výberom odovzdaní a grafom krokov iba na čítanie. Prepnutie späť na jednu výzvu ponúkne zlúčenú výzvu, ktorá spája spoločné pokyny a všetky kroky.
Cez API sú steps a handoffs polia objektu
agent. Rovnako ako každé pole agenta, PATCH ich
uloží do konceptu; POST /v1/agents/{agent_id}/deploy ich aktivuje. Odoslanie
"steps": null prepne agenta späť na jednu výzvu. Testovacie hovory a
Hovoriť používajú koncept.
Polia kroku
| Pole | Význam |
|---|---|
id | Povinné. Malé písmená, číslice a podčiarkovníky, začína písmenom, maximálne 40 znakov. Jedinečné v rámci agenta. |
name | Povinný zobrazovaný názov, 1 až 80 znakov. |
instructions | Povinné, maximálne 20 000 znakov. Podporuje premenné hovoru {{var}}, rovnako ako prompt. |
say | Voliteľná veta vyslovená doslova pri vstupe do kroku, maximálne 1 000 znakov. Podporuje {{var}}. |
tools | null poskytne kroku každý nástroj pripojený k agentovi. Zoznam obmedzí krok na tieto nástroje podľa názvu. Vstavané akcie, ako napríklad end_call a transfer_call, sa v každom kroku riadia nastaveniami agenta. |
collect | Až 20 hodnôt, ktoré krok zhromažďuje. Každá má name, type, description a required (predvolene true). |
on_enter_tool | Voliteľný názov nástroja, ktorý sa automaticky zavolá pri vstupe do kroku. Pozrite si časť Kroky webhookov. |
transitions | Zoradený zoznam miest, kam môže krok pokračovať. Pozrite si časť Prechody. |
global_when | Voliteľné. Umožní dosiahnuť krok z ľubovoľného kroku. Pozrite si časť Globálne kroky. |
voice | Voliteľné ID hlasu pre tento krok. Ignoruje sa, keď agent používa vlastnú konfiguráciu hlasu. |
Samotný graf je {"start_step": "<step id>", "steps": [...]}. Hovor sa
začína v start_step.
Prechody
Každý prechod má to, ID kroku a presne jednu z týchto možností:
when: prirodzený jazyk a model rozhoduje. Agent má vstavaný nástrojgo_to_step, ktorý uvádza kroky, do ktorých sa môže presunúť, pričom každéwhenpredstavuje dôvod na jeho výber.condition: pravidlo pre zhromaždené hodnoty a kód rozhoduje. Model ho nemôže preskočiť ani sa mu vyhnúť rozhovorom."always": true: pokračovať bez kontroly. Kód rozhoduje ako prvý: hneď po vstupe do kroku alebo po zhromaždení jeho povinných hodnôt zvíťazí prvý zodpovedajúci prechodconditionaleboalways, skôr než model môže vybraťwhen. Preto umiestnitealwaysza podmienky ako ich záložnú možnosť alebo samostatne na priame prepojenie kroku s nasledujúcim krokom. Krok salwaysnikdy nečaká na voľbuwhen.
condition má tvar {"value": <collected name or dotted path>, "op": <op>, "target": <literal>}:
op | Platí, keď hodnota |
|---|---|
eq, ne | sa rovná alebo nerovná target |
lt, lte, gt, gte | je menšia než, najviac, väčšia než alebo najmenej target |
in, not_in | je alebo nie je jednou z hodnôt v zozname target |
exists, missing | bola alebo nebola zhromaždená (bez target) |
eq, ne, in a not_in porovnávajú text bez rozlišovania veľkosti písmen
po odstránení medzier. Čísla sa porovnávajú ako čísla a dátumy ako reťazce
YYYY-MM-DD. Hodnota, ktorá nikdy nebola zhromaždená, spôsobí, že každý op je
nepravdivý okrem missing.
Píšte when a global_when ako podmienku, napríklad „Volajúci chce
rezervovať termín“, nie ako niečo, čo má agent povedať. Agent ich vidí ako
interné poznámky k smerovaniu a je mu nariadené, aby ich nikdy nečítal nahlas
ani nespomínal, že mení kroky.
Keď model zavolá go_to_step:
- Musí byť prítomná každá hodnota
requiredv kroku. Ak niektorá chýba, model dostane informáciu, ktorá to je, a požiada o ňu volajúceho. - Hodnoty sa uložia.
- Prechody
conditionaalwayssa kontrolujú v poradí. Zvíťazí prvá zhoda. - V opačnom prípade sa agent presunie do kroku, ktorý vybral model.
- Ak sa nič nezhoduje a model neuviedol žiadny krok, agent zostane tam, kde je.
Skok do globálneho kroku je výnimkou: volajúci zmenil tému, takže sa vykoná aj vtedy, keď v aktuálnom kroku stále chýbajú povinné hodnoty, a pred kontrolou podmienok daného kroku.
Prechody condition a always sa kontrolujú aj pri každom vstupe do kroku,
takže séria krokov, o ktorých rozhoduje kód, prebehne naraz. Reťazec sa zastaví:
- pri kroku, ktorý už počas tohto behu navštívil;
- po 8 presunoch;
- pri kroku, ktorý ešte má povinné hodnoty na zhromaždenie, pokiaľ krok nemá
on_enter_tool(krok webhooku sa vždy smeruje podľa svojho výsledku).
Vysloví sa iba riadok say kroku, v ktorom sa reťazec zastaví.
Krok bez prechodov je koncový. Agent sa tam dokončí a ukončí alebo presmeruje hovor svojimi bežnými vstavanými akciami.
Zhromažďovanie hodnôt
Uveďte, čo krok potrebuje, v collect. Model odovzdá hodnoty pri volaní
go_to_step a zostanú dostupné po zvyšok hovoru.
type | Obsahuje |
|---|---|
string | Ľubovoľný text |
number | Číslo |
boolean | true alebo false |
date | Dátum vo formáte YYYY-MM-DD |
Zhromaždené hodnoty sú obsahom hovoru. Zobrazujú sa pri hovore vedľa prepisu a platia pre ne rovnaké pravidlá uchovávania, odstránenia a redakcie. Keď je nahrávanie hovoru agenta vypnuté, zhromaždené hodnoty sa ani neukladajú, ani neodosielajú vo webhookoch; časová os krokov zostáva zachovaná. Pozrite si časť Kde to vidieť pri hovore.
Riadky say
say sa vysloví presne tak, ako je napísané, keď agent vstúpi do kroku. Model
potom v rovnakej odpovedi pokračuje v novom kroku a vie, že riadok bol práve
vyslovený, takže ho neopakuje. Použite say pre pozdravy, povinné oznámenia
a pevne dané znenie a zvyšok odpovede nechajte na modeli.
say v úvodnom kroku je úvodná veta agenta, keď hovorí ako prvý, po
akomkoľvek oznámení o súhlase. Keď hovorí ako prvý volajúci, otvorí prvú
odpoveď agenta osobe, nikdy nie IVR alebo uvítaniu hlasovej schránky.
say kroku sa znovu nevysloví, keď sa hovor doň vráti cez
__previous__ alebo odovzdanie späť. Napíšte ho tak, ako má znieť: vypíšte
všetko, čo by hlas mohol nesprávne prečítať. Riadky say podporujú premenné
hovoru {{var}}, nie však zhromaždené hodnoty.
Kroky webhooku
Nastavte on_enter_tool na jeden z nástrojov agenta a spustí sa hneď po vstupe
do kroku bez čakania na model. Jeho argumentmi sú zhromaždené hodnoty, ktorých
názvy zodpovedajú názvom parametrov nástroja. Výsledok sa uloží ako
zhromaždená hodnota s názvom <tool>_result, skrátená na 4 KB, a prechody
condition a always kroku sa okamžite skontrolujú, takže vyhľadávanie môže
hovor smerovať podľa vlastného výsledku.
Uložená hodnota má dve polia:
| Pole | Obsahuje |
|---|---|
status | Stavový kód HTTP, ktorý vrátil váš endpoint. |
response | Telo odpovede. |
Smerujte podľa poľa tela pomocou lookup_account_result.response.<field> a
podľa stavového kódu pomocou lookup_account_result.status.
Vyhľadávanie beží maximálne 8 sekúnd alebo do vlastného časového limitu nástroja, ak je kratší. Ak trvá dlhšie ako 3 sekundy, agent povie krátku vetu, aby volajúci neostal v tichu. Ak váš endpoint vráti stavový kód 400 alebo vyšší, alebo neodpovie včas, agent volajúcemu povie, že to práve teraz nemohol overiť, a pokračuje v tom, čo môže urobiť.
Globálne kroky
Krok s global_when je dostupný z ľubovoľného kroku vždy, keď daný opis
platí. Model rozhoduje rovnako ako pri when. Použite ho pre témy, ktoré môže
volajúci otvoriť kedykoľvek: otázky týkajúce sa fakturácie, žiadosť o človeka,
sťažnosť.
Prechod s "to": "__previous__" v globálnom kroku vráti hovor do kroku, ktorý
bol aktívny pred ním, takže volajúci pokračuje tam, kde skončil. Krok sa obnoví:
jeho on_enter_tool sa znovu nespustí, jeho say sa neopakuje a agent v ňom
pokračuje bez začatia odznova.
Odovzdania
handoffs uvádza ďalších agentov vo vašej organizácii, ktorí môžu prevziať hovor:
[{"agent_id": 413, "when": "The caller asks about billing or a refund"}]Agent dostane vstavaný nástroj hand_off s týmito agentmi a dôvodmi. Rovnako
ako pri prechodoch je každé when internou poznámkou na smerovanie, ktorá sa
nikdy neprečíta nahlas.
Keď agent hovor odovzdá, jednou krátkou vetou volajúcemu povie, kam bude presmerovaný, napríklad „Samozrejme, prepojím vás na naše fakturačné oddelenie“, svojím vlastným hlasom. Potom prevezme prompt, kroky, nástroje a hlas cieľového agenta a hovor pokračuje s rovnakým prepisom. Nový agent sa stručne predstaví a odpovie na poslednú požiadavku volajúceho; neoznamuje presmerovanie. Vedomostná báza cieľového agenta je od tej chvíle k dispozícii.
Keď hovor prvýkrát dosiahne agenta, začne v jeho start_step: spustí sa
on_enter_tool kroku a vysloví sa jeho say. Keď je hovor odovzdaný späť
agentovi, ktorého už navštívil, tento agent pokračuje v kroku, v ktorom bol,
bez spustenia on_enter_tool, opakovania jeho say alebo opätovného
predstavenia sa. Zhromaždené hodnoty zdieľajú všetci agenti v hovore.
- Cieľ musí byť agent v rovnakej organizácii a agent nemôže odovzdať hovor sám sebe.
- Všetko na úrovni hovoru zostáva pri agentovi, ktorý hovor prijal: produkt, jazyky, kto hovorí prvý, hlasová schránka, oznámenie o súhlase a každé ďalšie nastavenie hovoru.
- Ciele môžu hovor odovzdať ďalej aj späť. Jeden hovor môže dosiahnuť až 8 agentov.
- Testovací hovor spúšťa koncept agenta, ktorého testujete. Agenti, ktorým hovor odovzdá, spúšťajú svoje nasadené verzie.
- Ak majú dvaja agenti nástroj s rovnakým názvom a odlišnými definíciami, pre hovor sa zachová iba jeden a vždy má prednosť agent, ktorý hovor prijal. Tvorca vás upozorní pri ukladaní.
- Agent môže mať odovzdania aj bez krokov. Použije sa celý jeho prompt bez úprav.
go_to_step a hand_off sú vyhradené pre agentov s krokmi alebo odovzdaniami,
preto vaše vlastné nástroje nemôžu používať tieto názvy.
Kde to vidieť v hovore
Otvorte hovor v Histórii hovorov. Časová os krokov vedľa prepisu zobrazuje každý krok, do ktorého hovor vstúpil, a dôvod, pričom spolu s nimi sú uvedené aj zhromaždené hodnoty.
Objekt hovoru a webhook po dokončení
hovoru (telephony.complete / web.complete) nesú
rovnaké údaje ako steps_trace a collected_values. Pri hovoroch bez krokov
chýbajú oba.
"steps_trace": [
{"t_ms": 0, "agent": "a412", "step": "greet", "via": "start"},
{"t_ms": 51230, "agent": "a412", "step": "verify", "via": "model"},
{"t_ms": 98410, "agent": "a412", "step": "minor", "via": "condition"}
],
"collected_values": {"full_name": "Dana Reyes", "dob": "2010-04-02", "age": 15}agent je a, za ktorým nasleduje identifikátor agenta. via uvádza, čo
presunulo hovor:
via | Význam |
|---|---|
start | Hovor začal v tomto kroku. |
model | Model vybral krok prostredníctvom go_to_step, when alebo global_when. |
condition | Zhodol sa prechod condition alebo always. |
on_enter | Prechod sa zhodol s výsledkom kroku webhooku. |
handoff | Hovor prevzal iný agent. |
Kde sa kroky spúšťajú
Kroky sa natívne spúšťajú v produktoch Spark, Bolt a všetkých produktoch Storm, pri prichádzajúcich, odchádzajúcich a kampanových hovoroch, testovacích hovoroch, ako aj webových hovoroch a hovoroch z widgetov.
Všade inde agent stále funguje, iba bez štruktúry: spúšťa zlúčený prompt, ktorý v poradí spája zdieľané pokyny a každý krok. To zahŕňa:
- experimentálne produkty Bolt;
- relácie Realtime vrátane relácií pre uloženého agenta;
- vložené konfigurácie vrátené webhookom dynamickej konfigurácie hovoru.
Webhook, ktorý vráti
agent_id, použije kroky daného agenta.
Limity
| Limit | Hodnota |
|---|---|
| Kroky na agenta | 100 |
| Zhromaždené hodnoty na krok | 20 |
| Ciele odovzdania na agenta | 8 |
| Agenti dostupní v rámci jedného hovoru | 8 |
Veľkosť JSON steps | 200 KB |
instructions kroku | 20 000 znakov |
Riadok say | 1 000 znakov |
Uložený výsledok on_enter_tool | 4 KB |
Uloženie, ktoré poruší pravidlo, vráti 400 s cestou k chybnému poľu, napríklad
steps.steps[2].transitions[0].to. Názvy nástrojov v tools a
on_enter_tool musia byť nástroje pripojené k agentovi.
Jazyky pre jednotlivé kroky, skriptované kroky, ktoré preskakujú model, a zhromaždené hodnoty v riadkoch say nie sú podporované.
Importovaní agenti
Import z Retell, Bland, Vapi alebo ElevenLabs prevedie agentov s viacerými promptmi, toky, cesty a pracovné postupy na kroky a skupiny a presmerovania agentov na odovzdania medzi importovanými agentmi. Stránka kontroly zobrazí oboje pred importom.
Príklad: príjem pacientov v zubnej ambulancii
Tri kroky v poradí: privítanie, získanie údajov pacienta, rezervácia.
{
"prompt": "You are Ava, the front desk assistant at Acme Dental. Be warm and brief. Ask one question at a time.",
"steps": {
"start_step": "greet",
"steps": [
{
"id": "greet",
"name": "Greeting",
"instructions": "Greet the caller and ask how you can help.",
"say": "Thanks for calling Acme Dental, this is Ava. How can I help you today?",
"tools": null,
"collect": [],
"transitions": [
{"to": "details", "when": "The caller wants to book an appointment"}
]
},
{
"id": "details",
"name": "Patient details",
"instructions": "Ask for the caller's full name, date of birth and the reason for the visit. Read the date of birth back and ask the caller to confirm it.",
"tools": null,
"collect": [
{"name": "full_name", "type": "string", "description": "Caller's full name", "required": true},
{"name": "dob", "type": "date", "description": "Date of birth", "required": true},
{"name": "reason", "type": "string", "description": "Reason for the visit", "required": true},
{"name": "new_patient", "type": "boolean", "description": "First visit to the practice", "required": false}
],
"transitions": [
{"to": "book", "when": "The caller has confirmed their details"}
]
},
{
"id": "book",
"name": "Book",
"instructions": "Offer the two earliest open slots from book_slot and book the one the caller picks. Confirm the date and time, then say goodbye and end the call.",
"tools": ["book_slot"],
"collect": [],
"transitions": []
}
]
}
}Pripravte ho pomocou PATCH /v1/agents/{agent_id}, vyskúšajte ho cez Hovor a potom ho nasaďte.
Krok details nemôže odovzdať na rezerváciu, kým nie sú zhromaždené meno, dátum narodenia
a dôvod; new_patient je voliteľný.
Príklad: vetva podmienená vekom
Model môže hovoriť s kýmkoľvek, ale kód rozhoduje, komu sa zarezervuje termín. Získajte vek a potom podľa neho smerujte skôr, než sa zohľadní vlastná voľba modelu.
{
"id": "verify",
"name": "Verify age",
"instructions": "Ask for the caller's age.",
"tools": null,
"collect": [
{"name": "age", "type": "number", "description": "Caller's age in years", "required": true}
],
"transitions": [
{"to": "guardian", "condition": {"value": "age", "op": "lt", "target": 18}},
{"to": "book", "when": "The caller has given their age"}
]
}Volajúci, ktorý povie pätnásť, prejde do guardian bez ohľadu na to, čo rozhodne model.
Všetci ostatní prejdú do book. Obe sú bežné kroky na inom mieste v grafe.
Príklad: krok webhooku na vyhľadanie účtu
Volajúci uvedie číslo účtu, vyhľadanie sa spustí pri prechode do ďalšieho kroku
a jeho výsledok vyberie trasu. Kroky not_found, collections a support
sú kvôli stručnosti vynechané.
[
{
"id": "identify",
"name": "Identify",
"instructions": "Ask for the caller's account number and read it back digit by digit.",
"tools": null,
"collect": [
{"name": "account_number", "type": "string", "description": "Account number", "required": true}
],
"transitions": [
{"to": "lookup", "when": "The caller has confirmed their account number"}
]
},
{
"id": "lookup",
"name": "Look up account",
"instructions": "Tell the caller what you found on their account and ask how you can help.",
"tools": ["lookup_account"],
"collect": [],
"on_enter_tool": "lookup_account",
"transitions": [
{"to": "not_found", "condition": {"value": "lookup_account_result.response.found", "op": "eq", "target": false}},
{"to": "collections", "condition": {"value": "lookup_account_result.response.account_status", "op": "in", "target": ["past_due", "suspended"]}},
{"to": "support", "when": "The caller needs help with an active account"}
]
}
]lookup_account prijíma account_number, pretože jeho parameter má tento
názov. Ak telo odpovede obsahuje "found": false, hovor prejde do
not_found. Ak je jeho account_status past_due alebo suspended, prejde do
collections. Aktívny účet zostáva v lookup, kde model pomôže a následne
prejde do support. Ak chcete neúspešné vyhľadanie odoslať do vlastného kroku,
najprv pridajte podmienky pre stav: odpoveď s chybou uloží svoj stavový kód, takže
{"value": "lookup_account_result.status", "op": "gte", "target": 400}
ju zachytí, a časový limit alebo žiadna odpoveď uloží "error", takže
{"value": "lookup_account_result.status", "op": "eq", "target": "error"}
zachytí tento prípad.
Príklad: recepcia a fakturácia
Dvaja agenti. Recepcia (agent 412) prijíma každý hovor a otázky týkajúce sa
fakturácie odovzdáva agentovi fakturácie (agent 413) s vlastnou výzvou,
nástrojmi a hlasom.
Na recepcii:
{
"handoffs": [
{"agent_id": 413, "when": "The caller asks about a bill, a payment or a refund"}
]
}U agenta fakturácie, aby mohol volajúceho odovzdať späť:
{
"handoffs": [
{"agent_id": 412, "when": "The billing question is resolved and the caller needs something else"}
]
}Recepcia povie krátku vetu, napríklad „Spojím vás s naším tímom fakturácie“, a agent fakturácie sa predstaví a pokračuje v konverzácii tam, kde ju recepcia ukončila. Keď fakturácia odovzdá hovor späť, recepcia pokračuje tam, kde bola, bez opätovného pozdravu volajúceho. Produkt hovoru, jazyky, oznámenie o súhlase a ďalšie nastavenia hovoru zostávajú na recepcii, pretože hovor prijala ona.
Ak fakturácia potrebuje iba vlastné pokyny, nie vlastného agenta, použite namiesto toho globálny krok na recepcii. Keď je otázka zodpovedaná, hovor sa vráti do kroku, v ktorom sa volajúci nachádzal:
{
"id": "billing",
"name": "Billing questions",
"instructions": "Answer questions about bills and payments. Offer to send a payment link by email.",
"tools": null,
"collect": [],
"transitions": [
{"to": "__previous__", "when": "The billing question is answered"}
],
"global_when": "The caller asks about a bill or payment at any point"
}Ďalšie kroky
Napíšte zdieľané pokyny a pokyny pre kroky, ktoré fungujú aj pri telefonáte.
Vytvorte nástroje, ktoré volajú vaše kroky a kroky webhookov.
Pred nasadením spustite rovnaké scenáre pre každú vetvu.
Každé pole agenta, koncept a nasadenie.