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

Webhooks

Eseménykatalógus

A ThunderPhone által kibocsátott összes webhookesemény-típus.

Minden webhook törzse tartalmaz egy type mezőt, amelynek értéke az oldalon szereplő eseménytípusok egyike. Amikor feliratkozik egy végpontra, az events tömbnek tartalmaznia kell a kívánt eseménytípusokat (vagy üresnek kell lennie, ha mindenre fel szeretne iratkozni — kivéve a körönkénti eseményeket telephony.turn / web.turn, amelyeket csak azoknak a végpontoknak kézbesítünk, amelyek kifejezetten megnevezik őket).

Ezeket az eseményeket két kézbesítési mód továbbítja:

Az alábbi példaterhek a végpontborítékot a vezetékes sorrendjében mutatják (a kulcsok ábécérendben: data, event_id, type); a régi kézbesítések ugyanazt a data adatot tartalmazzák event_id nélkül.

Hívási események

telephony.incoming

Akkor kerül elküldésre, amikor egy bejövő hívás eléri az Ön egyik telefonszámát. A végpontkézbesítések minden bejövő híváshoz elküldött, azonnali válasz nélküli értesítések, függetlenül attól, hogy a szám ügynökhöz vagy webhookhoz van-e konfigurálva. A hozzárendelt ügynök nélküli számok emellett a régi webhookon kapják meg a blokkoló konfigurációs kérést — a teljes kérés-/válaszsémát itt találja: telephony.incoming / web.incoming.

{
  "data": {
    "call_id": 987654321,
    "from_number": "+14155550199",
    "to_number": "+15551234567"
  },
  "event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
  "type": "telephony.incoming"
}
MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök neve, ha volt hozzárendelve

telephony.complete

Akkor kerül elküldésre, amikor egy bejövő vagy kimenő telefonhívás véget ér. Nem blokkoló. Tartalmazza az átiratot, a felvétel URL-jét, ha elérhető, valamint a számlázási összesítőt. A hasznos teher sémáját itt találja: telephony.complete / web.complete.

MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök neve, ha volt hozzárendelve

telephony.tool

Akkor kerül elküldésre, miután egy telefonhívás meghív egy függvényeszközt. Nem blokkoló naplózási értesítés — az eszköz már lefutott, amikor ez az esemény kézbesítésre kerül; lefedi az Ön saját függvényeszközeit és a beépített send_sms eszközt (de nem más beépített, tudásbázis-, alkalmazáskapcsolati vagy MCP-eszközöket). A send_sms esetében mind az arguments.to, mind az arguments.body értéke [REDACTED]. A befejezési átiratok is kitakarják ezeket; a tartalmat és a címzettet a szervezeti hatókörű SMS-erőforrásból kérheti le a válasz message_id értékével.

{
  "data": {
    "arguments": { "date": "2026-04-21" },
    "call_id": 987654321,
    "from_number": "+14155550199",
    "response": {
      "response": { "available_slots": ["9:00 AM", "2:00 PM"] },
      "status": 200
    },
    "to_number": "+15551234567",
    "tool_name": "search_appointments"
  },
  "event_id": "1f0a7c3e-52d4-4a0e-8f4b-b1a6a1c0d9e2",
  "type": "telephony.tool"
}

A response a végrehajtott eredmény: siker esetén {"status": <http status>, "response": <your endpoint's JSON>}, hiba esetén pedig {"status": <status>, "error": "<message>"}.

MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök neve, ha volt hozzárendelve

telephony.turn

Telefonhívás folyamatban léte közben kerül elküldésre, minden beszédet tartalmazó fordulóhoz annak megtörténtekor — az ügynök kimondott válaszaihoz és a hívó átírt fordulóihoz. Lehetővé teszi az élő beszélgetés követését egyszerű webhookokon keresztül, a GET /v1/calls/{call_id}/transcript lekérdezése helyett. Nem blokkoló.

{
  "data": {
    "call_id": 987654321,
    "entry_type": "completion",
    "from_number": "+14155550199",
    "position": 7,
    "role": "assistant",
    "start_ms": 15200,
    "text": "How many employees does your company have?",
    "to_number": "+15551234567"
  },
  "event_id": "8d3f5a2c-7b1e-4c9a-b6d0-2e4f6a8c0d1e",
  "type": "telephony.turn"
}
MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök neve, ha volt hozzárendelve
positionintegerA forduló indexe a hívási előzményekben — stabil azonosító a rendezéshez
rolestringassistant (ügynöki beszéd) vagy user (hívói beszéd)
textstringA forduló átiratszövege, az esemény kibocsátásakor ismert állapot szerint
entry_typestringA mögöttes előzménybejegyzés típusa: completion (ügynök), vagy user_turn / span (hívó)
start_ms, end_msintegerHangeltolások ms-ban a hívás kezdetétől; csak akkor szerepelnek, ha a lejátszási időzítés már ismert volt az esemény kibocsátásakor

web.incoming

A telephony.incoming webcsatornás megfelelője, amely akkor kerül elküldésre, amikor egy webes widget-munkamenet vagy egy szerkesztőbeli mikrofonteszt-hívás elindul. A végpontkézbesítések minden webes munkamenethez azonnali válasz nélküli értesítések. A mode="webhook" módban lévő publikálható kulcsok emellett a régi webhookon kapják meg a blokkoló konfigurációs kérést — ennek a blokkoló kérésnek eltérő struktúrája van (origin_domain, publishable_key_prefix; nincsenek telefonszámok). Lásd: telephony.incoming / web.incoming.

{
  "data": {
    "call_id": 987654322,
    "from_number": "web",
    "origin_domain": "https://example.com",
    "publishable_key_prefix": "pk_live_a1b2",
    "to_number": "+15551234567"
  },
  "event_id": "9a2b4c6d-8e0f-4a1b-9c2d-3e4f5a6b7c8d",
  "type": "web.incoming"
}

A from_number mindig a szó szerinti "web" érték. Webhook módú widget-munkameneteknél a to_number üres (a munkamenet ügynökszáma a konfiguráció után kerül hozzárendelésre); szerkesztőbeli mikrofonteszt-hívásoknál az origin_domain és a publishable_key_prefix üres.

MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök neve, ha volt hozzárendelve

web.complete

A telephony.complete webcsatornás megfelelője, amely a webes widget-hívásokat (direction: "web") és a szerkesztőbeli mikrofonteszt-hívásokat (direction: "test") fedi le. Nem blokkoló. A hasznos teher struktúrája megegyezik a telephony.complete struktúrájával, az origin_domain mezővel kiegészítve, a from_number pedig "web" értékre van állítva.

MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök neve, ha volt hozzárendelve

web.tool

A telephony.tool webcsatornás megfelelője. A data a from_number / to_number helyett az origin_domain értéket tartalmazza.

MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök neve, ha volt hozzárendelve

web.turn

A telephony.turn webcsatornás megfelelője, amely a webes widget-hívásokat és a szerkesztőbeli mikrofonteszt-hívásokat fedi le. A hasznos teher struktúrája megegyezik, de a from_number / to_number helyett az origin_domain szerepel. A telephony.turn eseményhez hasonlóan ehhez is kifejezett feliratkozás szükséges — üres events tömbön keresztül soha nem kerül kézbesítésre.

MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök neve, ha volt hozzárendelve

call.transfer_completed

Hívásonként egyszer küldve, egy hívásátirányítás végső eredményével: hideg átirányítás esetén, illetve a meleg átirányítás után fennmaradó emberi kapcsolattal, miután az ügynök kilép. Nem blokkoló, és csak végpontokra kerül kézbesítésre (a régi, egyetlen URL-es webhookra soha). A hívás telephony.complete eseménye után érkezik: amikor a szolgáltató átveszi a hívást vagy az átirányítás sikertelen, illetve amikor ThunderPhone áthidalta a hívást, az áthidalás befejeződésekor.

{
  "data": {
    "agent_id": 12,
    "agent_name": "Front desk",
    "bridge_kind": "cold_fallback",
    "bridge_seconds": 255,
    "bridge_total_cents": 5,
    "call_id": 987654321,
    "destination": "+15555550102",
    "sip_status": 403,
    "transfer_outcome": "bridged"
  },
  "event_id": "5b0f6c1e-9d2a-5e7b-8c4d-1a2b3c4d5e6f",
  "type": "call.transfer_completed"
}
MezőTípusLeírás
call_idintegerAz átirányított hívás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök, ha volt hozzárendelve
transfer_outcomestringrefer_accepted: a szolgáltató átvette a hívást. bridged: ThunderPhone maga tartotta kapcsolatban a hívót és a célállomást, vagy azért, mert a szolgáltató elutasította a hideg átirányítást, vagy mert a meleg átirányítás ügynöke kilépett. bridge_unanswered: a szolgáltató elutasította a hideg átirányítást, és a célállomás nem fogadta ThunderPhone saját hívását. failed: az átirányítás nem sikerült, és a hívás véget ért
destinationstring | nullAz a szám, amelyre a hívást átirányították
sip_statusinteger | nullA szolgáltató SIP-állapota, amikor elutasította a hideg átirányítást: 403 (például hívásátirányítás nélküli Twilio-trönk), 405 vagy 501. null, ha a szolgáltató nem utasította el
bridge_kindstring | nullCsak bridged esetén: cold_fallback (ThunderPhone által összekapcsolt, elutasított hideg átirányítás) vagy warm (a meleg átirányítás két résztvevője, miután az ügynök távozott)
bridge_secondsinteger | nullCsak bridged esetén: a ThunderPhone által számlázott áthidalási idő másodpercben
bridge_total_centsinteger | nullCsak bridged esetén: az áthidalás költsége USD-centben, az esetleges ingyenes hívásegyenleg levonása után, a hívás billing_total_cents összegétől külön számlázva

Ugyanezek az értékek a hívásobjektumon is elérhetők transfer_outcome, transfer_destination, transfer_sip_status, transfer_bridge_kind, transfer_bridge_seconds és transfer_bridge_total_cents néven. Az event_id minden kézbesítéskor azonos egy adott hívásnál, ezért egy ismételt jelentés nem hoz létre második eseményt.


SMS-események

Az SMS-események a szervezet csatlakoztatott Twilio- vagy Telnyx-fiókján keresztül küldött üzeneteket írják le. Az üzenet törzse kimarad, a to pedig ki van takarva. Amikor szüksége van a tartalomra vagy a címzettre, kérje le a szervezeti hatókörű üzenetet a GET /v1/sms/{message_id} végponton.

sms.sent

Akkor kerül elküldésre, amikor az ügyfél szolgáltatója elfogad egy kimenő SMS-kérést. Ez nem a készülékre történő kézbesítésről szóló visszaigazolás.

{
  "data": {
    "accepted_at": "2026-09-19T15:42:10.113Z",
    "agent_id": 12,
    "call_id": 987654321,
    "created_at": "2026-09-19T15:42:09.901Z",
    "direction": "outbound",
    "error_code": null,
    "error_message": null,
    "from_number": "+15551234567",
    "id": "313a3117-827b-46e9-a01a-ac1493838724",
    "provider": "twilio",
    "provider_id": "SM0123456789abcdef0123456789abcdef",
    "segment_count": 1,
    "source": "agent_tool",
    "status": "accepted",
    "to": "[REDACTED]"
  },
  "event_id": "0ae347b4-1716-45bb-9a0e-b52373586e37",
  "type": "sms.sent"
}

sms.failed

Végleges szolgáltatói elutasítás után, az átmeneti hibák miatti újrapróbálkozások kimerülésekor, illetve akkor kerül elküldésre, ha az eredmény véglegesen ismeretlen. Az error_code stabil ThunderPhone-kód, az error_message pedig megadja az ügyfél teendőjét, ha rendelkezésre áll. A status: "unknown" azt jelenti, hogy a szolgáltató esetleg elfogadta az SMS-t; egyeztesse ezt a szolgáltatói naplóban, mert a ThunderPhone nem küldi el újra automatikusan.

sms.received

Bejövő SMS-ek támogatásához van fenntartva. A jelenlegi kiadásban nem kerülnek kibocsátásra sms.received események. A bejövő szolgáltatói webhook konfigurációja és az aláírás ellenőrzése külön érkezik.


Hangesemények

Az egyéni hang létrehozása aszinkron. Ezek a nem blokkoló események lehetővé teszik, hogy lekérdezés helyett egy végleges eredményre reagáljon a hangklón részleteinek végpontján.

A voice.ready és a voice.failed csak egy szervezetszintű, events: [] beállítású végpontra érkezik. Nem választhatók ki explicit eseményszűrőként.

voice.ready

Akkor kerül elküldésre, amikor az egyéni hang feldolgozása befejeződik, és hozzárendelhető egy ügynökhöz.

{
  "data": {
    "voice": {
      "created_at": "2026-07-30T14:12:08.317Z",
      "display_name": "Support voice",
      "failure_reason": "",
      "gender": "female",
      "id": "cv_2f6f90b0e9a34ee8b39be7d1",
      "language": "en",
      "name": "custom:cv_2f6f90b0e9a34ee8b39be7d1",
      "status": "ready",
      "updated_at": "2026-07-30T14:13:31.605Z"
    }
  },
  "event_id": "2d5f0a61-e9b5-4a3c-b684-29d7d9e4b214",
  "type": "voice.ready"
}

voice.failed

Akkor kerül elküldésre, amikor az egyéni hang feldolgozása végleges hibával leáll.

{
  "data": {
    "reason": "audio sample could not be processed",
    "voice": {
      "created_at": "2026-07-30T14:12:08.317Z",
      "display_name": "Support voice",
      "failure_reason": "audio sample could not be processed",
      "gender": "female",
      "id": "cv_2f6f90b0e9a34ee8b39be7d1",
      "language": "en",
      "name": "custom:cv_2f6f90b0e9a34ee8b39be7d1",
      "status": "failed",
      "updated_at": "2026-07-30T14:13:31.605Z"
    }
  },
  "event_id": "3493e985-1a75-4f77-a10a-e74af440cd31",
  "type": "voice.failed"
}
MezőTípusLeírás
voice.idstringAz egyéni hang nyilvános azonosítója
voice.namestringAz ügynök hangértéke custom:<public_id> formátumban
voice.display_namestringA szervezet számára megjelenített hangnév
voice.languagestringA klón egyetlen nyelvi kódja
voice.genderstringmale, female vagy üres karakterlánc
voice.statusstringready a voice.ready esetén; failed a voice.failed esetén
voice.failure_reasonstringSiker esetén üres; hiba esetén a feldolgozási hiba részletei
voice.created_at, voice.updated_attimestampISO 8601 időbélyegek
reasonstringA hiba részletei; csak voice.failed esetén van jelen

Minőségi események

call.graded

Akkor kerül elküldésre, amikor egy hívás AI-értékelési futtatása befejeződik. Nem blokkoló.

{
  "data": {
    "call_id": 987654321,
    "grade": {
      "call_outcome": "success",
      "created_at": "2026-04-20T18:25:11.002Z",
      "detected_issues": [],
      "graded_at": "2026-04-20T18:25:11.002Z",
      "grader_model": "heuristic-v1",
      "id": 5512,
      "score": 92,
      "status": "completed",
      "summary": "Caller asked about their policy and got a full answer…"
    },
    "report": null
  },
  "event_id": "7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",
  "type": "call.graded"
}
MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök, ha volt hozzárendelve
grade.idintegerÉrtékelés azonosítója
grade.scoreinteger | null0–100
grade.call_outcomestringsuccess, failure, unknown vagy no_conversation
grade.summarystringEgybekezdéses összefoglaló
grade.detected_issuesarrayAz értékelő által talált problémák szövegei
grade.statusstringMindig completed — csak a befejezett futások bocsátanak ki eseményt
grade.grader_modelstringMelyik értékelő készítette az eredményt (pl. heuristic-v1)
grade.graded_at, grade.created_attimestamp
reportobject | nullAz ügyfélnek szóló hívásjelentés: eredménycímke, figyelmet igényel jelző és indok, hívó, egysoros összefoglaló, hívói élmény. Egy korai heurisztikus értékelésnél null, vagy pending jelentés, amelynek mezői helyőrzők; a teljes értékelés eseménye tartalmazza a befejezett jelentést

call.data_extracted

Akkor kerül elküldésre, amikor a strukturált adatkinyerés sikeresen befejeződik, beleértve a telephony.complete / web.complete utáni késői újrapróbálkozást vagy a POST /v1/calls/{call_id}/extract útján indított manuális újrafuttatást. Nem blokkoló.

Blokkoló kinyerési módban a befejezési esemény általában legfeljebb a 75 másodperces kinyerési keretre vár. Ha a kinyerési munkafolyamat elvész, az éles környezetbeli véglegesítési feldolgozás (ötpercenként) kibocsát egy befejezési eseményt, amelynek blocking_deadline_at értéke lejárt, mielőtt újabb kinyerési kísérletet indítana. Egy későbbi siker külön eseményként kerül kézbesítésre.

{
  "data": {
    "call_id": 987654321,
    "agent_id": 12,
    "agent_name": "Acme intake",
    "extracted_data": {
      "status": "completed",
      "fields": {
        "customer_name": "Alex Morgan",
        "appointment_date": "2026-04-23"
      },
      "evidence": {
        "customer_name": {
          "quote": "My name is Alex Morgan",
          "speaker_role": "caller",
          "turn_index": 4
        },
        "appointment_date": {
          "quote": "April 23 works for me",
          "speaker_role": "caller",
          "turn_index": 7
        }
      },
      "verification": "verified",
      "field_reasons": {},
      "schema_version": "92850758e231a3c95a..."
    },
    "extracted_at": "2026-04-20T18:25:11.002Z",
    "model": "<model id>",
    "summary": "Alex Morgan called to book a follow-up visit and confirmed Thursday, April 23."
  },
  "event_id": "4d79ef1d-c2b1-4ed6-85b8-8326bd2895ef",
  "type": "call.data_extracted"
}
MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök, ha volt hozzárendelve
summarystring | nullA befejezett hívásösszefoglaló, ha az ügynöknél be van kapcsolva a Hívásösszefoglaló létrehozása, így a késői kinyerési esemény a befejezési időablakból kimaradt összefoglalót is kézbesíti; egyébként null. Az összefoglalóval, de kinyerési mezők nélkül rendelkező ügynökök soha nem bocsátják ki ezt az eseményt: késői összefoglalóhoz használja a GET /v1/calls/{call_id} végpontot
extracted_data.statusstringEnnél az eseménynél mindig completed
extracted_data.fieldsobjectA konfigurált kinyerési mezőkulcsok alapján kulcsolt értékek; a nem elérhető értékek null
extracted_data.evidenceobjectA kinyerési mezők alapján kulcsolt bizonyítékok. Egy nem null érték tartalmazza a pontos, strukturálisan ellenőrzött idézetet (legfeljebb 1 000 karakter), a speaker_role értéket (caller vagy agent) és a turn_index értéket; a modell által visszaadott hosszabb idézetek levágás helyett elutasításra kerülnek, és a bizonyíték mindig null, ha a mezője null
extracted_data.verificationstringCsak akkor verified, ha a független bizonyítékellenőrzési lépés minden jelölt mezőhöz pontosan egy érvényes döntést adott vissza. Az unavailable azt jelenti, hogy a lépés meghiúsult, időtúllépés történt, nem állt rendelkezésre elegendő keret, vagy hibás formátumú, illetve részleges kimenetet adott vissza. A teljesen nem elérhető lépés megőrzi az ügyfél általi felülvizsgálathoz a strukturálisan megalapozott értékeket. Részleges kimenet esetén az érvényes döntések alkalmazásra kerülnek, és minden olyan jelölt mező nullázódik, amelyhez nincs pontosan egy érvényes döntés
extracted_data.field_reasonsobjectA strukturális megalapozás vagy a független ellenőrző által nullázott mezők alapján kulcsolt indokok
extracted_data.schema_versionstringAz ehhez a kinyeréshez használt pontos mezőséma kivonata
extracted_attimestampISO 8601 szerinti befejezési idő
modelstringA kinyeréshez használt modell

campaign.completed

Egyszer kerül elküldésre, amikor egy kampány állapota running értékről completed értékre vált, függetlenül attól, hogy az ütemezése ért véget, vagy minden kapcsolat elérte a végállapotot. A futtató újrapróbálkozásai nem bocsátanak ki újabb eseményt. Ez a szervezetszintű életciklus-esemény csak szervezeti hatókörű végpontokhoz kerül kézbesítésre, ügynökszintű végpontokhoz nem. Nem blokkoló.

{
  "data": {
    "campaign_id": "3f6b2c9e-2a0d-4c63-b6d6-a708dc98f403",
    "name": "May win-back",
    "agent_id": 12,
    "status": "completed",
    "started_at": "2026-04-20T17:00:00Z",
    "completed_at": "2026-04-20T18:25:11Z",
    "counts": {
      "contacts_total": 150,
      "completed": 121,
      "failed": 11,
      "no_answer": 18,
      "remaining": 0
    }
  },
  "event_id": "8d8f52ce-6b46-423f-9dde-cea0b91ec135",
  "type": "campaign.completed"
}

A négy eredményszám egymást kizárja, és összegük contacts_total: a completed a sikeres kapcsolatokat tartalmazza; a no_answer azon végleges sikertelen/kimerült kapcsolatokat tartalmazza, amelyek végső eredménye válasz nélküli volt; a failed minden más végleges sikertelen/kimerült kapcsolatot tartalmaz; a remaining pedig a függőben lévő, ütemezett vagy éppen hívott kapcsolatokat tartalmazza. Az újrapróbálkozásra váró kapcsolat remaining, még akkor is, ha a legutóbbi kísérlet válasz nélküli volt. A folyamatban lévő hívások egyeztetése az egyszeri befejezési pillanatfelvétel előtt történik. A started_at a konfigurált kampányindítási idő, vagy a kampány létrehozásának időpontja, ha nem volt indítási idő konfigurálva.

issue.reported

Akkor kerül elküldésre, amikor létrejön egy problémajelentés — akár egy felhasználó rögzíti a kezelőfelületről (source: "user"), akár a hívásértékelés hozza létre automatikusan (source: "system"). Nem blokkoló.

{
  "data": {
    "call_id": 987654321,
    "issue_report": {
      "created_at": "2026-04-20T18:25:11.002Z",
      "description": "Five-second silence before responding to the main question.",
      "id": 4321,
      "severity": "warning",
      "source": "system",
      "status": "open",
      "title": "Agent paused too long"
    }
  },
  "event_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
  "type": "issue.reported"
}
MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha volt hozzárendelve
agent_namestring | nullA hívást kezelő ügynök, ha volt hozzárendelve
issue_report.severitystringcritical, warning vagy info
issue_report.statusstringopen vagy resolved
issue_report.sourcestringuser (a kezelőfelületről rögzítve) vagy system (értékelés által létrehozva)

issue.escalated

Akkor kerül elküldésre, amikor egy problémamintát munkatársi felülvizsgálatra küldenek a ThunderPhonehoz: a Jelentés a ThunderPhonenak művelet után, vagy amikor a Javítás AI-val nem tud ügyféloldali javítást megerősíteni, és automatikusan továbbítja a problémát. Ezt az eseményt csak szervezetszintű végpontok kapják meg.

{
  "data": {
    "automatic": false,
    "cluster_id": "7ac2844c-2df0-4fa8-a560-7378da649e19",
    "escalation_id": "ec99f52b-c8c0-41dd-a4f2-dd8a07b10894",
    "status": "open"
  },
  "event_id": "d8f8f420-7a42-45ba-bcf1-b747f9bbecda",
  "type": "issue.escalated"
}
MezőTípusLeírás
automaticbooleantrue automatikus eszkaláció esetén; false manuális eszkaláció esetén
cluster_idUUIDEszkalált problémaminta
escalation_idUUIDEszkalációs rekord
statusstringAz esemény kibocsátásakor open

Ez egy értesítés, nem a bizonyítékcsomag. A cluster_id használatával kapcsolhatja össze a problémamintával. Lásd: Jelentés a ThunderPhonenak.


Teszthívási események

test-call.completed

Akkor kerül elküldésre, amikor egy teszthívás-futtatás végső állapotba kerül — completed vagy failed, beleértve azokat a futtatásokat is, amelyek az indításkor meghiúsultak, és soha nem hoztak létre hívást. Nem blokkoló. Hasznos a kötegelt CI-futtatások csevegési/értesítési rendszereihez való kapcsolásához.

{
  "data": {
    "test_call_run": {
      "call_id": 987654321,
      "completed_at": "2026-04-20T18:25:04.822Z",
      "error_message": "",
      "id": 7110,
      "status": "completed",
      "target_id": 12,
      "target_type": "agent"
    }
  },
  "event_id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "type": "test-call.completed"
}
MezőTípusLeírás
agent_idinteger | nullA hívást kezelő ügynök, ha hozzá volt rendelve
agent_namestring | nullA hívást kezelő ügynök, ha hozzá volt rendelve
test_call_run.target_typestringagent vagy phone_number
test_call_run.target_idintegerA futtatás célzott ügynökazonosítója vagy telefonszám-azonosítója, a target_type értékének megfelelően
test_call_run.statusstringcompleted vagy failed
test_call_run.call_idinteger | nullnull, ha a futtatás a hívás indítása előtt meghiúsult
test_call_run.error_messagestringSiker esetén üres

Riasztási események

alert.triggered

Akkor kerül elküldésre, amikor egy riasztási szabály, amelynél engedélyezve van a Kézbesítés fejlesztői webhookokra csatorna, átlépi a küszöbértékét. Nem blokkoló. Egy szabály egyszer aktiválódik, majd betartja a várakozási idejét, így egy tartós küszöbsértés várakozási időablakonként egy eseményt hoz létre.

{
  "data": {
    "comparator": "lt",
    "event_id": "b8e6a1d4-2c3f-4a5b-9c8d-7e6f5a4b3c2d",
    "fired_at": "2026-04-20T18:00:00+00:00",
    "metric": "success_rate",
    "metric_value": 71.4,
    "rule_id": "d2c3b4a5-6f7e-4d8c-9b0a-1c2d3e4f5a6b",
    "rule_name": "Success rate below 80%",
    "threshold": 80.0,
    "window_hours": 24
  },
  "event_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a",
  "type": "alert.triggered"
}
MezőTípusLeírás
event_id (a data mezőben)UUIDA riasztás aktiválási azonosítója — eltér a boríték kézbesítési event_id értékétől
rule_id, rule_nameUUID, stringAz aktiválódott szabály
metricstringsuccess_rate, failure_rate, avg_score, call_volume vagy suite_regression
comparatorstringlt, lte, gt vagy gte
metric_valuenumberA metrika értéke az értékelési ablakban, amikor a szabály aktiválódott
thresholdnumberA konfigurált küszöbérték
window_hoursintegerVisszatekintő értékelési ablak
fired_attimestamp

A szabályok, metrikák, várakozási idők, valamint az e-mail- és Slack-csatornák létrehozásáról lásd a Riasztások útmutatót.


Migrációs események

migration.call.complete

Akkor kerül elküldésre, amikor egy POST /v1/migrations/{id}/calls végponton keresztül indított hívás véget ér, függetlenül attól, hogy melyik platform kezelte. Nem blokkoló. A hívás befejezése után legfeljebb körülbelül 5 perccel érkezik meg. A data tartalmazza a telephony.complete összes mezőjét, valamint egy migration blokkot. A ThunderPhone által indított hívás a szokásos módon telephony.complete eseményt is küld, ugyanazzal a call_id értékkel. A másik platformon futó hívás, amely 2 óra elteltével sem ért véget, vagy amelynek migrációja előbb befejeződött, illetve elvesztette a kulcsát, status: "unknown" értékkel és átirat nélkül kerül elküldésre.

{
  "data": {
    "agent_id": 42,
    "agent_name": "Front desk",
    "billable_minutes": null,
    "billing_total_cents": null,
    "call_id": null,
    "direction": "outbound",
    "duration_seconds": 94,
    "end_reason": "user_hangup",
    "end_time": "2026-10-06T17:01:34+00:00",
    "extracted_data": null,
    "from_number": "+15551234567",
    "migration": {
      "arm": "vendor",
      "id": "5f0c2a9e-7b1d-4c3e-8a6f-2d9e1b4c7a30",
      "metadata": {
        "lead_id": "8812"
      },
      "routing_id": "9b2f8c1e-4d3a-4f6b-8e2d-1a7c5b9e0f34",
      "vendor": "retell",
      "vendor_call_id": "call_6a1f0e",
      "vendor_cost_usd": "0.1240"
    },
    "product": "",
    "recording_mode": "vendor",
    "recording_url": "https://…",
    "start_time": "2026-10-06T17:00:00+00:00",
    "status": "completed",
    "summary": "The callee booked a table for two on Thursday.",
    "thunderphone_retained_call_content": true,
    "to_number": "+14155552671",
    "transcripts": [
      {
        "content": "Hi Ada, this is Rosa's calling about your booking.",
        "role": "agent"
      },
      {
        "content": "Yes, Thursday works.",
        "role": "user"
      }
    ],
    "transfer_number": null,
    "unresolved_variables": [],
    "variables": {
      "first_name": "Ada"
    },
    "voice": ""
  },
  "event_id": "7c1e2f3a-4b5c-4d6e-8f7a-9b0c1d2e3f4a",
  "type": "migration.call.complete"
}
MezőTípusLeírás
migration.idUUIDA migráció
migration.routing_idUUIDAz átirányított hívás azonosítója, amelyet a hívás indításakor kapott vissza
migration.armstringours (a ThunderPhone indította) vagy vendor (a másik platform indította)
migration.vendorstringretell, vapi, elevenlabs vagy bland
migration.vendor_call_idstring | nullA másik platform hívásazonosítója; ours esetén null
migration.metadataobjectA hívás indításakor elküldött metadata
migration.vendor_cost_usdstring | nullA másik platform által jelentett hívásköltség, ha jelentett ilyet
call_idinteger | nullA ThunderPhone hívásazonosítója; vendor esetén null
statusstringvendor esetén: completed, ha a hívott fél beszélt, failed, ha nem beszélt, illetve a fentiek szerint unknown. ours esetén: a telephony.complete szerint

vendor hívás esetén a ThunderPhone nem rendelkezik számlázási vagy kinyerési adatokkal: a billable_minutes, a billing_total_cents és az extracted_data értéke null, a product és a voice üres, a recording_mode értéke vendor, a recording_url pedig a másik platform hivatkozása, ha megadott ilyet.

migration.rollback

Akkor kerül elküldésre, amikor egy migráció fokozatos átváltása önállóan minden hívást visszahelyez a másik platformra: 15 percen belül 3 hívásnak nem sikerült kapcsolódnia a ThunderPhone-hoz, 2 ThunderPhone-hoz irányított hívás az AI-ügynök válasza előtt véget ért, vagy a ThunderPhone feladateredmény-aránya a konfigurált különbségnél nagyobb mértékben maradt el a másik platformétól. Nem blokkoló, visszaállításonként egyszer kerül elküldésre. Ezt követően a ThunderPhone részesedése 0%, és a migráció szünetel, amíg valaki újra nem indítja azt az AI-ügynök Migráció lapján. A payload nem tartalmaz telefonszámokat, átiratokat vagy hívásazonosítókat.

{
  "data": {
    "agent_id": 42,
    "agent_name": "Front desk",
    "dropped": 0,
    "migration_id": "5f0c2a9e-7b1d-4c3e-8a6f-2d9e1b4c7a30",
    "ours": {
      "graded": 20,
      "success_rate": 0.8
    },
    "ours_failed": 3,
    "ours_percent": 0,
    "previous_percent": 25,
    "reason": "ours_failed_burst",
    "rolled_back_at": "2026-10-10T12:05:00+00:00",
    "step": 1,
    "theirs": {
      "graded": 20,
      "success_rate": 0.8
    },
    "vendor": "retell"
  },
  "event_id": "3d1f6b2a-8c4e-5a7b-9d0e-2f1a3b4c5d6e",
  "type": "migration.rollback"
}
MezőTípusLeírás
migration_idUUIDA migráció
vendorstringretell, vapi, elevenlabs vagy bland
reasonstringours_failed_burst (3 sikertelen kapcsolat 15 percen belül), dropped_calls (2 hívás az AI-ügynök válasza előtt ért véget, 30 percen belül) vagy rate_gap (a feladateredmény-arány különbsége oldalanként legalább rollback_min_calls értékelt hívás esetén)
previous_percentintegerA ThunderPhone hívásrészesedése a visszaállítás előtt
ours_percentintegerMindig 0
stepinteger | nullAz ütemezési lépés, amelyen a migráció volt (0-alapú)
ours / theirsobject | nullAz aktuális lépés értékelt hívásai és azok sikerességi aránya; ha a lépésben túl kevés a hívás, a theirs az elmúlt 30 napot jelentheti. Ha nem voltak ilyenek, null
ours_failedintegerAz elmúlt 15 percben számított sikertelen kapcsolatok
droppedintegerAz elmúlt 30 percben megszakadtként számított hívások
rolled_back_attimestamp

Kapcsolódó elemek