Hændelseskatalog
Alle webhook-hændelsestyper, som ThunderPhone udsender.
Hver webhook-brødtekst har et type-felt, hvis værdi er en af
begivenhedstyperne på denne side. Når du abonnerer på et
endepunkt, skal events-arrayet indeholde de
begivenhedstyper, du ønsker (eller være tomt for at abonnere på alt —
undtagen begivenhederne pr. tur telephony.turn /
web.turn, som kun leveres til endepunkter, der
angiver dem eksplicit).
Disse begivenheder leveres på to måder:
- Leveringer til endepunkter er altid ikke-blokerende notifikationer
med genforsøg: svar med
en vilkårlig 2xx; konvolutten indeholder et
event_idtil deduplikering. - Blokerende udvekslinger kører kun på den
ældre webhook med én URL: konfigurationsanmodningen
telephony.incoming/web.incoming(numre i webhook-tilstand og widgetnøgler, timeout på 10 s) og værktøjsdistribuering i webhook-tilstand. Dit svar former det aktive opkald.
Eksempelpayloads nedenfor viser endepunktkonvolutten i dens transmissionsrækkefølge
(nøgler sorteret alfabetisk: data, event_id, type); ældre
leveringer indeholder de samme data uden event_id.
Opkaldshændelser
telephony.incoming
Sendes, når et indgående opkald når et af dine
telefonnumre. Leveringer til endpoints er
send-og-glem-notifikationer, der sendes for alle indgående opkald, uanset
om nummeret er agentkonfigureret eller webhookkonfigureret. Numre uden
en tildelt agent modtager derudover den blokerende konfigurationsanmodning
på den ældre webhook — se
telephony.incoming / web.incoming for
det fulde skema for anmodning og svar.
{
"data": {
"call_id": 987654321,
"from_number": "+14155550199",
"to_number": "+15551234567"
},
"event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
"type": "telephony.incoming"
}telephony.complete
Sendes, når et indgående eller udgående telefoniopkald afsluttes. Ikke-blokerende.
Indeholder transskriptionen, optagelses-URL'en, når den er tilgængelig, og en faktureringsoversigt. Se
telephony.complete / web.complete for
payloadskemaet.
telephony.tool
Sendes, efter et telefoniopkald kalder et funktionsværktøj. Ikke-blokerende revisionsnotifikation — værktøjet er allerede blevet udført, når denne hændelse leveres; den dækker dine egne funktionsværktøjer (ikke indbyggede værktøjer, værktøjer til vidensbase, appforbindelser eller MCP-værktøjer).
{
"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 er det udførte resultat: {"status": <http status>, "response": <your endpoint's JSON>} ved succes eller
{"status": <status>, "error": "<message>"} ved fejl.
telephony.turn
Sendes, mens et telefoniopkald er i gang, én gang for hver
taleindeholdende tur, efterhånden som den sker — agentens talte svar og
opkalderens transskriberede ture. Gør det muligt at følge den live samtale
via almindelige webhooks i stedet for at polle
GET /v1/calls/{call_id}/transcript.
Ikke-blokerende.
{
"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"
}| Felt | Type | Beskrivelse |
|---|---|---|
position | integer | Turens indeks i opkaldshistorikken — en stabil identitet til sortering |
role | string | assistant (agentens tale) eller user (opkalderens tale) |
text | string | Turens transskriberede tekst, som den er kendt på udsendelsestidspunktet |
entry_type | string | Typen for den underliggende historikpost: completion (agent) eller user_turn / span (opkalder) |
start_ms, end_ms | integer | Lydforskydninger i ms siden opkaldets start; findes kun, når afspilningstidspunktet allerede var kendt på udsendelsestidspunktet |
web.incoming
Webkanalens tilsvarende hændelse til telephony.incoming, sendt når en
webwidget-session eller et opkald fra en mikrofontest i builderen
starter. Leveringer til endpoints er send-og-glem for hver websession.
Publicerbare nøgler i mode="webhook" modtager derudover den
blokerende konfigurationsanmodning på den ældre webhook — den
blokerende anmodning har en anden form (origin_domain,
publishable_key_prefix; ingen telefonnumre). Se
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 er altid den bogstavelige værdi "web". For widgetsessioner
i webhooktilstand er to_number tomt (sessionens agentnummer tildeles
efter konfiguration); for opkald fra mikrofontest i builderen er origin_domain og
publishable_key_prefix tomme.
web.complete
Webkanalens tilsvarende hændelse til telephony.complete, som dækker opkald
fra webwidgets (direction: "web") og opkald fra mikrofontest i builderen
(direction: "test"). Ikke-blokerende. Samme payloadform som
telephony.complete, plus origin_domain,
med from_number sat til "web".
web.tool
Webkanalens tilsvarende hændelse til telephony.tool. data indeholder
origin_domain i stedet for from_number / to_number.
web.turn
Webkanalens tilsvarende hændelse til telephony.turn,
som dækker opkald fra webwidgets og opkald fra mikrofontest i builderen. Samme
payloadform med origin_domain i stedet for from_number / to_number.
Ligesom telephony.turn kræver den et eksplicit abonnement — den
leveres aldrig via et tomt events-array.
Stemmehændelser
Oprettelse af brugerdefinerede stemmer foregår asynkront. Disse ikke-blokerende hændelser lader dig reagere på et afsluttende resultat i stedet for at foretage polling af slutpunktet for klondetaljer.
voice.ready
Sendes, når en brugerdefineret stemme er færdigbehandlet og kan tildeles en 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
Sendes, når behandlingen af en brugerdefineret stemme når en permanent fejl.
{
"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"
}| Felt | Type | Beskrivelse |
|---|---|---|
voice.id | streng | Offentligt id for brugerdefineret stemme |
voice.name | streng | Agentstemmeværdi i formatet custom:<public_id> |
voice.display_name | streng | Organisationsvendt stemmenavn |
voice.language | streng | Klonens sprogkode |
voice.gender | streng | male, female eller en tom streng |
voice.status | streng | ready for voice.ready; failed for voice.failed |
voice.failure_reason | streng | Tom ved succes; detalje om behandlingsfejl ved fejl |
voice.created_at, voice.updated_at | tidsstempel | ISO 8601-tidsstempler |
reason | streng | Fejldetalje; findes kun på voice.failed |
Kvalitetshændelser
call.graded
Sendes, når en AI-vurderingskørsel fuldføres for et opkald. Ikke-blokerende.
{
"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"
}| Felt | Type | Beskrivelse |
|---|---|---|
grade.id | integer | Vurderings-id |
grade.score | integer | null | 0–100 |
grade.call_outcome | string | success, failure, unknown eller no_conversation |
grade.summary | string | Opsummering på ét afsnit |
grade.detected_issues | array | Problemstrenge fundet af vurdereren |
grade.status | string | Altid completed — kun fuldførte kørsler udsendes |
grade.grader_model | string | Hvilken vurderingsmodel der producerede resultatet (f.eks. heuristic-v1) |
grade.graded_at, grade.created_at | timestamp |
issue.reported
Sendes, når en problemrapport oprettes —
enten indsendt af en bruger fra dashboardet (source: "user") eller
automatisk af opkaldsvurdering (source: "system"). Ikke-blokerende.
{
"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"
}| Felt | Type | Beskrivelse |
|---|---|---|
issue_report.severity | string | critical, warning eller info |
issue_report.status | string | open eller resolved |
issue_report.source | string | user (indsendt fra dashboardet) eller system (oprettet af vurdering) |
Hændelser for testopkald
test-call.completed
Sendes, når en
testopkaldskørsel
når en afsluttende status — completed eller failed, herunder kørsler,
der mislykkedes ved start og aldrig oprettede et opkald. Ikke-blokerende. Nyttig
til at forbinde CI-batchkørsler med dine chat- og notifikationssystemer.
{
"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"
}| Felt | Type | Beskrivelse |
|---|---|---|
test_call_run.target_type | string | agent eller phone_number |
test_call_run.target_id | integer | Agent-id'et eller telefonnummer-id'et, som kørslen målrettede, svarende til target_type |
test_call_run.status | string | completed eller failed |
test_call_run.call_id | integer | null | null, når kørslen mislykkedes, før et opkald blev foretaget |
test_call_run.error_message | string | Tom ved succes |
Advarselsbegivenheder
alert.triggered
Sendes, når en advarselsregel med kanalen Lever til udviklerwebhooks aktiveret overskrider sin tærskel. Ikke-blokerende. En regel udløses én gang og overholder derefter sin nedkølingsperiode, så en vedvarende overskridelse giver én begivenhed pr. nedkølingsvindue.
{
"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"
}| Felt | Type | Beskrivelse |
|---|---|---|
event_id (i data) | UUID | Id for advarslens udløsning — adskilt fra konvoluttens leverings-event_id |
rule_id, rule_name | UUID, streng | Reglen, der blev udløst |
metric | streng | success_rate, failure_rate, avg_score, call_volume eller suite_regression |
comparator | streng | lt, lte, gt eller gte |
metric_value | tal | Metrikkens værdi i vinduet, da reglen blev udløst |
threshold | tal | Den konfigurerede tærskel |
window_hours | heltal | Løbende evalueringsvindue |
fired_at | tidsstempel |
Se vejledningen til advarsler for at oprette regler, metrikker, nedkølingsperioder og e-mail- / Slack-kanaler.
Relateret
Den blokerende nyttelast for indgående opkald, som du skal svare på.
Transskription og metrikker efter opkaldet.
Abonner en URL på et udsnit af disse begivenheder.
Sådan genereres begivenhederne telephony.tool / web.tool.