Megérkezett a ThunderPhone 2.0.Önkiszolgálóan, már 2¢/perctől.Olvassa el a bejelentést

Using the dashboard

Ügynöklépések és átadások

Ossza fel az ügynököt lépésekre saját utasításokkal, eszközökkel és gyűjtött értékekkel, és adja át a hívásokat az ügynökök között hívás közben.

Egyetlen prompt egyszerre adja meg a modellnek a teljes feladatot. A Lépések a hívás egy-egy szakaszát adják meg: minden lépésnek saját utasításai, saját eszközei, opcionális, szó szerint elmondandó mondata és a továbblépés előtt begyűjtendő értékei vannak. Az Átadások lehetővé teszik, hogy a szervezet egy másik ügynöke hívás közben átvegye a beszélgetést, a leirattal együtt, így a hívónak nem kell ismételnie magát.

Minden ügynök egyetlen promptként indul. Semmi sem változik rajta, amíg nem ad hozzá lépéseket vagy átadásokat.

Lépések vagy egyetlen prompt?

Használjon lépéseket, haMaradjon az egyetlen promptnál, ha
A hívásnak egymás után végrehajtandó szakaszai vannak: előbb ellenőrzés, majd foglalás.A beszélgetés nyitott végű: GYIK, recepció, általános támogatás.
Az ügynöknek egy értéket kell rögzítenie a továbblépés előtt.Semmit sem kell kötött sorrendben begyűjteni.
Egy szabályt soha nem szabad megszegni, például: „a 18 év alatti hívókat gondviselőhöz kell irányítani”.A modell megítélése minden ághoz megfelelő.
Egy keresést a hívás meghatározott pontján kell futtatni.Az eszközök bármikor meghívhatók, amikor a hívó kéri.
A hívás egy része egy másik ügynökhöz tartozik, saját prompttal és hanggal.Egyetlen persona kezel mindent.

A lépések nem előre megírt telefonos menürendszert alkotnak. Egy lépésen belül a modell ugyanúgy vezeti a beszélgetést, mint egyetlen prompttal. A lépés határozza meg, min dolgozik, mely eszközöket használhatja, és mire van szüksége, mielőtt továbbléphet.

Hogyan épül fel egy lépéseket használó ügynök

Ha egy ügynöknek vannak lépései, a prompt tartalmazza a megosztott utasításokat: a minden lépésben érvényes personát és szabályokat. Minden lépés saját utasításokat ad ezekhez. Minden fordulóban a modell látja a megosztott utasításokat, az aktuális lépés nevét és utasításait, valamint az eddig begyűjtött értékeket.

A szerkesztőben váltson az ügynöknél az Egyetlen prompt beállításról a Lépések beállításra. Lépésenként kap egy kártyát a lépés nevével, utasításaival, kimondandó sorával, eszközeivel, begyűjtött értékeivel és átmeneteivel, egy átadásválasztót, valamint a lépések csak olvasható folyamatábráját. Az egyetlen promptra való visszaváltás egy összevont promptot kínál, amely egyesíti a megosztott utasításokat és az összes lépést.

Az API-n keresztül a steps és a handoffs az ügynök mezői. Mint minden ügynökmező, a PATCH ezeket a vázlatban készíti elő; a POST /v1/agents/{agent_id}/deploy élesíti őket. A "steps": null elküldése visszaváltja az ügynököt egyetlen promptra. A teszthívások és a Beszélgetés a vázlatot használják.

Lépésmezők

MezőJelentés
idKötelező. Kisbetűk, számjegyek és aláhúzásjelek használhatók, betűvel kezdődve, legfeljebb 40 karakter hosszban. Az ügynökön belül egyedi.
nameKötelező megjelenítési név, 1–80 karakter.
instructionsKötelező, legfeljebb 20 000 karakter. A prompt mezőhöz hasonlóan támogatja a {{var}} hívásváltozókat.
sayOpcionális, a lépésbe belépéskor szó szerint kimondandó sor, legfeljebb 1 000 karakter. Támogatja a {{var}} változókat.
toolsA null a lépés számára az ügynökhöz kapcsolt összes eszközt elérhetővé teszi. Egy lista név alapján azokra az eszközökre korlátozza a lépést. A beépített műveletek, például az end_call és a transfer_call, minden lépésben az ügynök beállításait követik.
collectA lépés legfeljebb 20 értéket gyűjt be. Mindegyikhez tartozik name, type, description és required mező (alapértelmezés szerint true).
on_enter_toolOpcionális eszköznév, amely automatikusan meghívódik a lépésbe belépéskor. Lásd: Webhooklépések.
transitionsA lépés lehetséges következő céljainak rendezett listája. Lásd: Átmenetek.
global_whenOpcionális. A lépést bármely lépésből elérhetővé teszi. Lásd: Globális lépések.
voiceOpcionális hangazonosító ehhez a lépéshez. Figyelmen kívül marad, ha az ügynök egyéni hangkonfigurációt használ.

Maga a gráf: {"start_step": "<step id>", "steps": [...]}. A hívás a start_step lépésben kezdődik.

Átmenetek

Minden átmenet rendelkezik to értékkel, egy lépésazonosítóval, valamint pontosan az alábbiak egyikével:

  • when: természetes nyelvű feltétel, amelyről a modell dönt. Az ügynök egy beépített go_to_step eszközt kap, amely felsorolja azokat a lépéseket, amelyekre továbbléphet, és minden when annak indoklásaként szolgál, hogy miért válassza azt.
  • condition: a begyűjtött értékekre vonatkozó szabály, amelyről a kód dönt. A modell nem hagyhatja ki, és nem kerülheti meg beszéddel.
  • "always": true: továbblépés ellenőrzés nélkül. A kód dönt először: amint egy lépésbe belép, vagy amikor a kötelező értékei összegyűlnek, az első egyező condition vagy always átmenet érvényesül, mielőtt a modell when értéket választhatna. Ezért az always értéket a feltételek után helyezze el tartalékként, vagy önmagában, hogy egy lépést közvetlenül a következőhöz fűzzön. Az always értékkel rendelkező lépés soha nem vár when választásra.

A condition formátuma: {"value": <collected name or dotted path>, "op": <op>, "target": <literal>}:

opAkkor igaz, ha az érték
eq, nemegegyezik a target értékkel, vagy nem egyezik meg vele
lt, lte, gt, gtekisebb, legfeljebb akkora, nagyobb vagy legalább akkora, mint a target
in, not_inszerepel, vagy nem szerepel a target listában lévő értékek között
exists, missingbe lett gyűjtve, vagy nem lett begyűjtve (nincs target)

Az eq, ne, in és not_in a szöveget szóközök eltávolítása után, kis- és nagybetűktől függetlenül hasonlítja össze. A számokat számként, a dátumokat pedig YYYY-MM-DD karakterláncként hasonlítja össze. Az a érték, amelyet soha nem gyűjtöttek be, a missing kivételével minden operátor esetén hamis értéket eredményez.

A when és global_when értékeket feltételként írja meg, például „A hívó időpontot szeretne foglalni”, ne pedig kimondandó szövegként. Az ügynök ezeket belső útválasztási megjegyzésekként látja, és azt az utasítást kapja, hogy soha ne olvassa fel őket, illetve ne említse, hogy lépést vált.

Amikor a modell meghívja a go_to_step eszközt:

  1. A lépés minden required értékének jelen kell lennie. Ha valamelyik hiányzik, a modell megkapja, hogy melyik az, és elkéri a hívótól.
  2. Az értékek tárolódnak.
  3. A condition és always átmenetek ellenőrzése sorrendben történik. Az első egyezés érvényesül.
  4. Ellenkező esetben az ügynök arra a lépésre lép, amelyet a modell választott.
  5. Ha semmi nem egyezik, és a modell nem nevezett meg lépést, az ügynök a jelenlegi lépésben marad.

A globális lépésre való ugrás kivétel: a hívó témát váltott, ezért az ugrás akkor is megtörténik, ha az aktuális lépésben még hiányoznak kötelező értékek, és még az adott lépés feltételeinek ellenőrzése előtt.

A condition és always átmenetek ellenőrzése minden alkalommal megtörténik, amikor egy lépésbe belép, így a kód által vezérelt lépések sorozata egy menetben lefut. A lánc leáll:

  • annál a lépésnél, amelyet ezen futás során már felkeresett;
  • 8 ugrás után;
  • annál a lépésnél, amelyben még kötelező értékeket kell begyűjteni, kivéve, ha a lépés rendelkezik on_enter_tool eszközzel (egy webhooklépés mindig az eredménye alapján irányít tovább).

Csak annak a lépésnek a say sora hangzik el, ahol a lánc megáll.

Az átmenetek nélküli lépés végponti. Az ügynök ott befejezi, és a szokásos beépített műveleteivel befejezi vagy átirányítja a hívást.

Értékek begyűjtése

Sorolja fel a lépéshez szükséges adatokat a collect mezőben. A modell átadja az értékeket, amikor meghívja a go_to_step eszközt, és azok a hívás hátralévő részében elérhetők maradnak.

typeTartalma
stringBármilyen szöveg
numberEgy szám
booleantrue vagy false
dateEgy dátum YYYY-MM-DD formátumban

A begyűjtött értékek a hívás tartalmának részét képezik. A hívásnál, az átirat mellett jelennek meg, és ugyanazok a megőrzési, törlési és kitakarási szabályok vonatkoznak rájuk. Amikor az ügynök hívásrögzítése ki van kapcsolva, a begyűjtött értékek sem tárolásra, sem webhookokba küldésre nem kerülnek; a lépés idővonala azonban igen. Lásd: Hol látható ez egy hívásnál.

Kimondandó sorok

A say pontosan úgy hangzik el, ahogyan meg van írva, amikor az ügynök belép a lépésbe. A modell ezután ugyanabban a válaszban folytatja az új lépésben, tudva, hogy a sor éppen elhangzott, ezért nem ismétli meg. Használja a say mezőt üdvözlésekhez, kötelező tájékoztatásokhoz és rögzített megfogalmazásokhoz, a válasz többi részét pedig bízza a modellre.

A kezdő lépés say mezője az ügynök nyitósora, amikor ő szólal meg először, bármilyen hozzájárulási tájékoztatás után. Amikor a hívó szólal meg először, ez nyitja meg az ügynök első, személynek szóló válaszát, soha nem IVR-nek vagy hangpostaköszöntőnek.

Egy lépés say mezője nem hangzik el újra, amikor a hívás a __previous__ vagy egy visszaadás révén tér vissza hozzá. Írja úgy, ahogyan hangzania kell: írjon ki mindent, amit a hang félreolvashat. A kimondandó sorok támogatják a {{var}} hívásváltozókat, de a begyűjtött értékeket nem.

Webhooklépések

Állítsa az on_enter_tool értékét az ügynök egyik eszközére, és az a lépésbe való belépéskor azonnal lefut, a modellre való várakozás nélkül. Az argumentumai azok a begyűjtött értékek, amelyek neve megegyezik az eszköz paraméterneveivel. Az eredmény <tool>_result nevű begyűjtött értékként tárolódik, 4 KB-ra csonkolva, és a lépés condition és always átmeneteit azonnal ellenőrzi a rendszer, így a lekérdezés a saját eredménye alapján is irányíthatja a hívást.

A tárolt érték két mezőt tartalmaz:

MezőTartalma
statusAz Ön végpontja által visszaadott HTTP-állapotkód.
responseA válasz törzse.

Egy törzsmező alapján a lookup_account_result.response.<field>, az állapotkód alapján pedig a lookup_account_result.status használatával irányíthat.

A lekérdezés legfeljebb 8 másodpercig fut, illetve az eszköz saját időkorlátjáig, ha az rövidebb. Ha 3 másodpercnél tovább tart, az ügynök mond egy rövid sort, hogy a hívó ne maradjon csendben. Ha az Ön végpontja 400-as vagy magasabb állapotot ad vissza, vagy nem válaszol időben, az ügynök közli a hívóval, hogy ezt most nem tudta ellenőrizni, és azzal folytatja, amit meg tud tenni.

Globális lépések

Egy global_when mezővel rendelkező lépés bármely lépésből elérhető, amikor az adott leírás teljesül. A modell dönt erről, ugyanúgy, mint a when esetében. Használja olyan témákhoz, amelyeket a hívó bármikor felhozhat: számlázási kérdésekhez, emberi munkatárs kéréséhez, panaszhoz.

Egy globális lépés "to": "__previous__" értékű átmenete visszaviszi a hívást ahhoz a lépéshez, amely előtte aktív volt, így a hívó ott folytathatja, ahol abbahagyta. A lépés folytatódik: az on_enter_tool nem fut le újra, a say nem ismétlődik meg, és az ügynök elölről kezdés nélkül folytatja.

Átadások

A handoffs felsorolja a szervezetében lévő többi ügynököt, amelyek átvehetik a hívást:

[{"agent_id": 413, "when": "The caller asks about billing or a refund"}]

Az ügynök beépített hand_off eszközt kap ezekkel az ügynökökkel és indokokkal. Az átmenetekhez hasonlóan minden when belső útválasztási megjegyzés, amelyet soha nem olvas fel.

Átadáskor az ügynök a saját hangján egy rövid mondattal tájékoztatja a hívót arról, hová kerül, például: „Rendben, átirányítom a számlázási csapatunkhoz.” Ezután a célügynök promptja, lépései, eszközei és hangja veszi át az irányítást, a hívás pedig ugyanazzal az átirattal folytatódik. Az új ügynök röviden bemutatkozik, és válaszol a hívó legutóbbi kérésére; nem jelenti be az átadást. Ettől kezdve a célügynök tudásbázisa érhető el.

Amikor egy hívás először ér el egy ügynököt, az adott ügynök start_step lépésében indul: a lépés on_enter_tool eszköze lefut, és a say szövege elhangzik. Amikor a hívást visszaadják egy már korábban meglátogatott ügynöknek, az ügynök ott folytatja, ahol korábban tartott, az on_enter_tool futtatása, a say ismétlése vagy újbóli bemutatkozás nélkül. Az összegyűjtött értékeket a hívás minden ügynöke megosztja.

  • A célügynöknek ugyanahhoz a szervezethez kell tartoznia, és egy ügynök nem adhatja át a hívást saját magának.
  • Minden hívásszintű beállítás annál az ügynöknél marad, amelyik fogadta a hívást: a termék, a nyelvek, hogy ki beszél először, a hangposta, a hozzájárulási tájékoztató és minden egyéb hívásbeállítás.
  • A célügynökök további átadásokat is végezhetnek, akár visszafelé is. Egy hívás legfeljebb 8 ügynököt érhet el.
  • Egy teszthívás a tesztelt ügynök piszkozatát futtatja. Azok az ügynökök, amelyeknek átadja a hívást, a telepített verziójukat futtatják.
  • Ha két ügynöknek azonos nevű, de eltérő definíciójú eszköze van, csak az egyik marad meg a hívásban, és mindig a hívást fogadó ügynök eszköze élvez elsőbbséget. A szerkesztő mentéskor figyelmezteti Önt.
  • Egy ügynök lépések nélkül is rendelkezhet átadásokkal. Ebben az esetben a teljes promptja változatlanul használatos.

A go_to_step és a hand_off név fenntartott a lépésekkel vagy átadásokkal rendelkező ügynökökön, ezért saját eszközei nem használhatják ezeket a neveket.

Hol láthatja ezt egy hívásnál

Nyissa meg a hívást a Híváselőzmények menüpontban. Az átirat mellett megjelenő lépésidővonal mutatja, melyik lépésbe lépett be a hívás, és miért; az összegyűjtött értékek is itt szerepelnek.

A hívásobjektum és a hívásbefejezési webhook (telephony.complete / web.complete) ugyanazokat az adatokat tartalmazza steps_trace és collected_values formájában. Mindkettő hiányzik a lépések nélküli hívásoknál.

"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}

Az agent az a betűből és az ügynökazonosítóból áll. A via azt jelzi, mi léptette tovább a hívást:

viaJelentés
startA hívás ebben a lépésben kezdődött.
modelA modell a go_to_step, egy when vagy egy global_when alapján választotta ki a lépést.
conditionEgy condition vagy always átmenet teljesült.
on_enterEgy átmenet egy webhooklépés eredménye alapján teljesült.
handoffEgy másik ügynök átvette a hívást.

Hol futnak a lépések

A lépések natívan futnak a Spark, Bolt és minden Storm terméken, bejövő, kimenő és kampányhívásoknál, teszthívásoknál, valamint webes és widgetes hívásoknál.

Minden más esetben az ügynök továbbra is működik, csak struktúra nélkül: egy összevont promptot futtat, amely sorrendben egyesíti a közös utasításokat és az összes lépést. Ez a következőkre terjed ki:

  • a kísérleti Bolt termékekre;
  • Realtime munkamenetekre, beleértve a mentett ügynökök munkameneteit is;
  • egy dinamikus híváskonfiguráció webhook által visszaadott beágyazott konfigurációkra. Az agent_id értéket visszaadó webhook az adott ügynök lépéseit használja.

Korlátok

KorlátÉrték
Lépések száma ügynökönként100
Begyűjtött értékek száma lépésenként20
Átadási célok száma ügynökönként8
Egy hívásban elérhető ügynökök száma8
A steps JSON mérete200 KB
Lépésenkénti instructions20 000 karakter
say sor1 000 karakter
Tárolt on_enter_tool eredmény4 KB

A szabályt sértő mentés 400 választ ad a hibás mező elérési útjával, például: steps.steps[2].transitions[0].to. A tools és az on_enter_tool eszközneveinek az ügynökhöz csatolt eszközöknek kell lenniük.

A lépésenkénti nyelvek, a modellt kihagyó szkriptelt lépések és a say sorokon belüli begyűjtött értékek nem támogatottak.

Importált ügynökök

A Retellből, Blandből, Vapiból vagy ElevenLabsból történő importálás a több promptos ügynököket, folyamatokat, útvonalakat és munkafolyamatokat lépésekként, a csapatokat és az ügynökátadásokat pedig az importált ügynökök közötti átadásokként hozza át. Az ellenőrzési oldal mindkettőt megjeleníti az importálás előtt.

Példa: fogászati előzetes adatfelvétel

Három lépés sorrendben: üdvözlés, a páciens adatainak begyűjtése, foglalás.

{
  "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": []
      }
    ]
  }
}

Állítsa be előkészítettként a PATCH /v1/agents/{agent_id} használatával, próbálja ki a Beszélgetés funkcióval, majd telepítse. A details lépés nem adhatja át a hívást a foglalásnak, amíg a név, a születési dátum és az ok nincs begyűjtve; a new_patient nem kötelező.

Példa: életkorhoz kötött elágazás

A modell bárkivel beszélhet, de a kód dönti el, ki kap foglalást. Gyűjtse be az életkort, majd ez alapján irányítsa tovább a hívást, mielőtt a modell saját választása érvényesülne.

{
  "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"}
  ]
}

A tizenötöt mondó hívó a guardian lépéshez kerül, függetlenül attól, hogy a modell mit dönt. Mindenki más a book lépéshez kerül. Mindkettő a gráf más pontján található normál lépés.

Példa: fióklekérdezési webhooklépés

A hívó megad egy fiókszámot, a lekérdezés a következő lépésbe való belépéskor fut le, és az eredménye választja ki az útvonalat. A rövidség kedvéért a not_found, collections és support lépések nem szerepelnek.

[
  {
    "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"}
    ]
  }
]

A lookup_account megkapja az account_number értékét, mert a paraméterének ez a neve. Ha a válasz törzse "found": false értéket tartalmaz, a hívás a not_found lépésre kerül. Ha az account_status értéke past_due vagy suspended, a hívás a collections lépésre kerül. Az aktív fiók a lookup lépésben marad, ahol a modell segít, majd továbblép a support lépésre. Ha a sikertelen lekérdezést külön lépésre szeretné küldeni, először adjon hozzá feltételeket az állapothoz: egy hibaválasz tárolja az állapotkódját, ezért a {"value": "lookup_account_result.status", "op": "gte", "target": 400} észleli ezt, az időtúllépés vagy válasz hiánya pedig "error" értéket tárol, ezért a {"value": "lookup_account_result.status", "op": "eq", "target": "error"} észleli azt.

Példa: recepciótól számlázásig

Két ügynök. A recepció (a 412-es ügynök) minden hívást fogad, és a számlázással kapcsolatos kérdéseket egy saját utasításokkal, eszközökkel és hanggal rendelkező számlázási ügynöknek (a 413-as ügynöknek) adja át.

A recepción:

{
  "handoffs": [
    {"agent_id": 413, "when": "The caller asks about a bill, a payment or a refund"}
  ]
}

A számlázási ügynökön, hogy vissza tudja adni a hívót:

{
  "handoffs": [
    {"agent_id": 412, "when": "The billing question is resolved and the caller needs something else"}
  ]
}

A recepció egy rövid mondatot mond, például: „Átirányítom a számlázási csapatunkhoz”, a számlázási ügynök pedig bemutatkozik, és ott folytatja a beszélgetést, ahol a recepció abbahagyta. Amikor a számlázás visszaadja a hívást, a recepció onnan folytatja, ahol tartott, anélkül hogy újra köszöntené a hívót. A hívás terméke, nyelvei, hozzájárulási tájékoztatója és egyéb hívásbeállításai a recepciónál maradnak, mert ő fogadta a hívást.

Ha a számlázásnak csak saját utasításokra van szüksége, külön ügynökre nem, használjon inkább globális lépést a recepción. Amikor a kérdés megválaszolásra kerül, a hívás visszatér ahhoz a lépéshez, amelyben a hívó korábban volt:

{
  "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"
}

Következő lépések