Catalog de evenimente
Toate tipurile de evenimente webhook emise de ThunderPhone.
Fiecare corp de webhook are un câmp type a cărui valoare este unul dintre
tipurile de evenimente de pe această pagină. Când vă abonați la un
endpoint, matricea events trebuie să conțină
tipurile de evenimente dorite (sau să fie goală pentru a vă abona la toate —
cu excepția evenimentelor per tură telephony.turn /
web.turn, care sunt livrate numai endpointurilor care
le menționează explicit).
Aceste evenimente sunt transmise în două stiluri:
- Livrările către endpoint sunt întotdeauna notificări neblocante
cu reîncercări: răspundeți cu
orice cod 2xx; plicul conține un
event_idpentru deduplicare. - Schimburile blocante rulează numai pe
webhookul moștenit cu un singur URL: cererea de
configurare
telephony.incoming/web.incoming(numere în modul webhook și chei de widget, expirare după 10 s) și dispecerizarea instrumentelor în modul webhook. Răspunsul dumneavoastră modelează apelul activ.
Exemplele de sarcini utile de mai jos arată plicul endpointului în ordinea sa
de transmitere (chei sortate alfabetic: data, event_id, type); livrările
moștenite conțin aceleași data fără event_id.
Evenimente de apel
telephony.incoming
Trimis când un apel de intrare ajunge la unul dintre
numerele dumneavoastră de telefon. Livrările către endpoint sunt
notificări fire-and-forget trimise pentru fiecare apel de intrare, indiferent
dacă numărul este configurat pentru agent sau pentru webhook. Numerele fără
un agent atribuit primesc suplimentar cererea de configurare blocantă
pe webhookul legacy — consultați
telephony.incoming / web.incoming pentru
schema completă de cerere / răspuns.
{
"data": {
"call_id": 987654321,
"from_number": "+14155550199",
"to_number": "+15551234567"
},
"event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
"type": "telephony.incoming"
}telephony.complete
Trimis când se încheie un apel telefonic de intrare sau de ieșire. Ne-blocant.
Include transcrierea, URL-ul înregistrării când este disponibil și rezumatul facturării. Consultați
telephony.complete / web.complete pentru
schema payloadului.
telephony.tool
Trimis după ce un apel telefonic invocă un instrument de funcție. Notificare de audit ne-blocantă — instrumentul a fost deja executat când este livrat acest eveniment; acoperă propriile dumneavoastră instrumente de funcție (nu instrumente integrate, de bază de cunoștințe, de conexiune la aplicație sau MCP).
{
"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"
}response este rezultatul executat: {"status": <http status>, "response": <your endpoint's JSON>} în caz de succes sau
{"status": <status>, "error": "<message>"} în caz de eșec.
telephony.turn
Trimis în timp ce un apel telefonic este în desfășurare, o dată pentru fiecare
tur de vorbire, pe măsură ce are loc — răspunsurile rostite ale agentului și
tururile transcrise ale apelantului. Vă permite să urmăriți conversația în direct
prin webhookuri simple, în loc să interogați periodic
GET /v1/calls/{call_id}/transcript.
Ne-blocant.
{
"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"
}| Câmp | Tip | Descriere |
|---|---|---|
position | integer | Indexul turului în istoricul apelului — o identitate stabilă pentru ordonare |
role | string | assistant (vorbirea agentului) sau user (vorbirea apelantului) |
text | string | Textul transcrierii turului, așa cum este cunoscut la momentul emiterii |
entry_type | string | Tipul intrării de istoric subiacente: completion (agent) sau user_turn / span (apelant) |
start_ms, end_ms | integer | Decalajele audio în ms de la începutul apelului; prezente numai când sincronizarea redării era deja cunoscută la momentul emiterii |
web.incoming
Echivalentul pentru canalul web al telephony.incoming, trimis când începe o
sesiune de widget web sau un apel de testare a microfonului din builder.
Livrările către endpoint sunt fire-and-forget pentru fiecare sesiune web.
Cheile publicabile în mode="webhook" primesc suplimentar cererea de configurare
blocantă pe webhookul legacy — acea cerere blocantă are o formă diferită (origin_domain,
publishable_key_prefix; fără numere de telefon). Consultați
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"
}from_number este întotdeauna literalul "web". Pentru sesiunile de widget în modul webhook,
to_number este gol (numărul agentului sesiunii este atribuit
după configurare); pentru apelurile de testare a microfonului din builder, origin_domain și
publishable_key_prefix sunt goale.
web.complete
Echivalentul pentru canalul web al telephony.complete, care acoperă apelurile
din widgetul web (direction: "web") și apelurile de testare a microfonului din builder
(direction: "test"). Ne-blocant. Aceeași formă de payload ca
telephony.complete, plus origin_domain,
cu from_number setat la "web".
web.tool
Echivalentul pentru canalul web al telephony.tool. data conține
origin_domain în loc de from_number / to_number.
web.turn
Echivalentul pentru canalul web al telephony.turn,
care acoperă apelurile din widgetul web și apelurile de testare a microfonului din builder. Aceeași formă
de payload, cu origin_domain în loc de from_number / to_number.
La fel ca telephony.turn, necesită o abonare explicită — nu
este livrat niciodată printr-un array events gol.
Evenimente vocale
Crearea unei voci personalizate este asincronă. Aceste evenimente neblocante vă permit să reacționați la un rezultat final, în loc să interogați repetat endpointul cu detaliile clonei.
voice.ready
Trimis când o voce personalizată finalizează procesarea și poate fi atribuită unui agent.
{
"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
Trimis când procesarea unei voci personalizate ajunge la o eroare permanentă.
{
"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"
}| Câmp | Tip | Descriere |
|---|---|---|
voice.id | șir | ID-ul public al vocii personalizate |
voice.name | șir | Valoarea vocii agentului în formatul custom:<public_id> |
voice.display_name | șir | Numele vocii afișat organizației |
voice.language | șir | Codul unic de limbă al clonei |
voice.gender | șir | male, female sau un șir gol |
voice.status | șir | ready pentru voice.ready; failed pentru voice.failed |
voice.failure_reason | șir | Gol la reușită; detalii despre eroarea de procesare la eșec |
voice.created_at, voice.updated_at | marcaj temporal | Marcaje temporale ISO 8601 |
reason | șir | Detalii despre eroare; prezent numai pentru voice.failed |
Evenimente de calitate
call.graded
Trimis de fiecare dată când o rulare de evaluare AI se finalizează pentru un apel. Nu blochează execuția.
{
"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…"
}
},
"event_id": "7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",
"type": "call.graded"
}| Câmp | Tip | Descriere |
|---|---|---|
grade.id | integer | ID-ul evaluării |
grade.score | integer | null | 0–100 |
grade.call_outcome | string | success, failure, unknown sau no_conversation |
grade.summary | string | Rezumat într-un paragraf |
grade.detected_issues | array | Șiruri de probleme găsite de evaluator |
grade.status | string | Întotdeauna completed — sunt emise numai rulările finalizate |
grade.grader_model | string | Evaluatorul care a produs rezultatul (de exemplu, heuristic-v1) |
grade.graded_at, grade.created_at | timestamp |
issue.reported
Trimis când este creat un raport de problemă —
fie depus de un utilizator din tabloul de bord (source: "user"), fie
automat de evaluarea apelului (source: "system"). Nu blochează execuția.
{
"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"
}| Câmp | Tip | Descriere |
|---|---|---|
issue_report.severity | string | critical, warning sau info |
issue_report.status | string | open sau resolved |
issue_report.source | string | user (depus din tabloul de bord) sau system (creat prin evaluare) |
Evenimente pentru apeluri de test
test-call.completed
Trimis când o
rulare de apel de test
atinge o stare terminală — completed sau failed, inclusiv rulările
care au eșuat la lansare și nu au produs niciodată un apel. Nu blochează
execuția. Util pentru conectarea rulărilor CI în lot la sistemele dumneavoastră
de chat/notificări.
{
"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"
}| Câmp | Tip | Descriere |
|---|---|---|
test_call_run.target_type | string | agent sau phone_number |
test_call_run.target_id | integer | ID-ul agentului sau ID-ul numărului de telefon vizat de rulare, corespunzător cu target_type |
test_call_run.status | string | completed sau failed |
test_call_run.call_id | integer | null | null când rularea a eșuat înainte de inițierea unui apel |
test_call_run.error_message | string | Gol în caz de reușită |
Evenimente de alertă
alert.triggered
Trimis atunci când o regulă de alertă cu canalul Livrare către webhookuri de dezvoltator activat își depășește pragul. Nu blochează execuția. O regulă se declanșează o dată, apoi respectă perioada de răcire, astfel încât o încălcare susținută produce un eveniment pentru fiecare fereastră de răcire.
{
"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"
}| Câmp | Tip | Descriere |
|---|---|---|
event_id (din data) | UUID | ID-ul de declanșare al alertei — diferit de event_id de livrare din plic |
rule_id, rule_name | UUID, șir de caractere | Regula care s-a declanșat |
metric | șir de caractere | success_rate, failure_rate, avg_score, call_volume sau suite_regression |
comparator | șir de caractere | lt, lte, gt sau gte |
metric_value | număr | Valoarea metricii în fereastra de evaluare când regula s-a declanșat |
threshold | număr | Pragul configurat |
window_hours | număr întreg | Fereastra glisantă de evaluare |
fired_at | marcaj temporal |
Consultați ghidul pentru alerte pentru crearea regulilor, a metricilor, a perioadelor de răcire și pentru canalele de e-mail / Slack.
Asociate
Încărcătura blocantă pentru apelurile de intrare la care trebuie să răspundeți.
Transcrierea și metricile de după apel.
Abonați un URL la un subset al acestor evenimente.
Cum sunt generate evenimentele telephony.tool / web.tool.