Workflow definíciós séma
A Create from Definition és az Update Agent számára átadott workflow_definition objektum határozza meg a teljes beszélgetési gráfot. Ugyanaz a struktúra, amelyet a Dashboard vizuális workflow-készítője olvas és ír – az ügynök felépítése a felhasználói felületen egy workflow_definition-t eredményez a motorháztető alatt, és bármi, amit vizuálisan konfigurálhat, ugyanúgy JSON-ként kifejezhető.
{
"nodes": [...],
"edges": [...]
}
Node-ok
Minden Node a beszélgetés egy-egy lépését képviseli.
{
"id": "uuid-string",
"type": "agentNode",
"position": { "x": 100, "y": 200 },
"data": { ... }
}
| Mező | Típus | Leírás |
|---|---|---|
id | String | Egyedi Node ID (UUID ajánlott) |
type | String | Az alábbi Node-típusok egyike |
position | tárgy | Vizuális koordináták a workflow-készítőben |
data | tárgy | Node konfigurációja — a mezők típusonként változnak |
Node-típusok
| Típus | Leírás |
|---|---|
startCall | Telefonhívások belépési pontja |
endCall | Megszakítja a hívást |
agentNode | LLM-alapú beszélgetés lépés |
globalNode | Globális konfiguráció alkalmazva az összes Agent Node-on |
trigger | Belépési pont API-ból indított, nem telefonos Workflow Runokhoz |
webhook | HTTP-kérést küld, amikor eléri |
qa | Minőségelemzést futtat a befejezett híváson |
Node adatmezők
Közös mezők (minden Node-típus)
| Mező | Típus | Alapértelmezett | Leírás |
|---|---|---|---|
name | String | szükséges | A Node megjelenített neve |
prompt | String | szükséges* | LLM rendszerkérdés. *Nem szükséges a trigger, webhook, qa Node-okhoz |
allow_interrupt | logikai | false | Engedélyezze a hívónak, hogy megszakítsa az ügynököt a beszéd közben |
wait_for_user_response | logikai | false | Szünet, és várja meg a hívó fél bevitelét, mielőtt folytatná |
wait_for_user_response_timeout | szám | null | Másodpercek, amíg várni kell a bevitelre az időkorlát előtt |
detect_voicemail | logikai | false | Hangposta észlelése és kezelése kimenő hívásoknál |
delayed_start | logikai | false | A Node végrehajtásának késleltetése |
delayed_start_duration | szám | null | Késleltetés másodpercben |
add_global_prompt | logikai | true | Egyesítse a globalNode promptot a Node |
agentNode — adatkinyerés
| Mező | Típus | Alapértelmezett | Leírás |
|---|---|---|---|
extraction_enabled | logikai | false | Strukturált adatok kinyerése a beszélgetésből |
extraction_prompt | String | null | Egyéni prompt a kivonás irányításához |
extraction_variables | tömb | [] | Kivonandó változók (lásd alább) |
Kivonási változó séma:
{
"name": "customer_intent",
"type": "string",
"prompt": "What did the customer want to achieve?"
}
A type a string, number vagy boolean egyike.
agentNode — Toolok
| Mező | Típus | Leírás |
|---|---|---|
tool_uuids | string[] | Az ehhez a Node-hoz csatolandó Toolok (HTTP API, hívásátvitel stb.) azonosítói |
document_uuids | string[] | A Node számára elérhető tudásbázis-dokumentumok azonosítói |
trigger Node
| Mező | Típus | Leírás |
|---|---|---|
trigger_path | String | Egyedi UUID, amely az API trigger endpoint elérési útja lesz |
webhook Node
| Mező | Típus | Alapértelmezett | Leírás |
|---|---|---|---|
enabled | logikai | true | Elindul-e ez a webhook elérésekor |
http_method | String | — | GET, POST, PUT, PATCH vagy DELETE |
endpoint_url | String | — | Cél URL |
credential_uuid | String | null | Tárolt credential UUID-je |
custom_headers | tömb | [] | További kérésfejlécek [{"key": "...", "value": "..."}] |
payload_template | Object | null | Kérelem törzssablonja (támogatja a kontextusváltozókat) |
qa Node
| Mező | Típus | Alapértelmezett | Leírás |
|---|---|---|---|
qa_enabled | logikai | true | Minőségbiztosítási elemzés engedélyezése |
qa_system_prompt | String | null | Egyedi értékelési prompt |
qa_model | String | null | Az értékeléshez használható LLM-modell |
qa_min_call_duration | egész | 15 | Minimális hívás időtartama másodpercben a QA futtatásához |
qa_voicemail_calls | logikai | false | Hangposta-hívások felvétele a minőségbiztosításba |
qa_sample_rate | egész | 100 | Az elemzésre irányuló hívások százalékos aránya (1–100) |
Edge-ek
Mindegyik Edge két Node-ot köt össze, és meghatározza, hogy az átmenet mikor indul el.
{
"id": "edge-uuid",
"source": "node-uuid-a",
"target": "node-uuid-b",
"data": {
"label": "Customer confirms",
"condition": "The customer has confirmed their appointment",
"transition_speech": "Great, I've got that noted."
}
}
| Mező | Típus | Leírás |
|---|---|---|
id | String | Egyedi élazonosító |
source | String | A kiinduló Node azonosítója |
target | String | A Target Node azonosítója |
data.label | String | A workflow-készítőben látható rövid címke |
data.condition | String | A természetes nyelvi feltétel, amelyet az LLM kiértékel, hogy kiváltsa ezt az Edge-et |
data.transition_speech | String | Opcionális beszéd, amelyet az ügynök mond az átmenet előtt |
Érvényesítési szabályok
- Az élekben lévő összes
sourceéstargetazonosítónak hivatkoznia kell a meglévő Node ID-kra - A
trigger,webhookésqakivételével minden Node-nak nem üresnek kell lennie aprompt-nek. - A Node ID-knak egyedinek kell lenniük a workflow-ban
- Minden workflow-nak pontosan egy
startCallvagytriggerNode-nak kell lennie belépési pontként
Minimális példa
{
"nodes": [
{
"id": "start-1",
"type": "startCall",
"position": { "x": 0, "y": 0 },
"data": {
"name": "Start",
"prompt": "You are a friendly assistant. Greet the caller and ask how you can help."
}
},
{
"id": "end-1",
"type": "endCall",
"position": { "x": 400, "y": 0 },
"data": {
"name": "End",
"prompt": "Thank the caller and say goodbye."
}
}
],
"edges": [
{
"id": "edge-1",
"source": "start-1",
"target": "end-1",
"data": {
"label": "Done",
"condition": "The caller's question has been answered and they want to end the call"
}
}
]
}