Open in
Tapahtumaluettelo
Kaikki webhook-tapahtumatyypit, jotka ThunderPhone lähettää.
Jokaisella webhookin rungolla on type-kenttä, jonka arvo on yksi tämän sivun tapahtumatyypeistä. Kun tilaat
päätepisteen, events-taulukon on sisällettävä haluamasi
tapahtumatyypit (tai sen on oltava tyhjä, jos haluat tilata kaikki —
lukuun ottamatta vuorokohtaisia tapahtumia telephony.turn /
web.turn, jotka toimitetaan vain päätepisteisiin, joissa
ne on nimetty erikseen).
Nämä tapahtumat toimitetaan kahdella tavalla:
- Päätepistetoimitukset ovat aina estämättömiä ilmoituksia, joissa käytetään uudelleenyrityksiä: vastaa millä tahansa 2xx-vastauksella; kuori sisältää
event_id-kentän duplikoinnin poistamista varten. - Estävät vaihdot suoritetaan vain
vanhassa yhden URL-osoitteen webhookissa:
telephony.incoming/web.incoming-määrityspyynnössä (webhook-tilan numerot: 13 s, mukaan lukien yksi uudelleenyritys; webhook-tilan widget-avaimet: 10 s) sekä webhook-tilan työkalun välityksessä. Vastauksesi muokkaa käynnissä olevaa puhelua.
Alla olevat esimerkkikuormat näyttävät päätepistekuoren siirtojärjestyksessä
(avaimet aakkosjärjestyksessä: data, event_id, type); vanhat
toimitukset sisältävät saman data-sisällön ilman event_id-kenttää.
Puhelutapahtumat
telephony.incoming
Lähetetään, kun saapuva puhelu tavoittaa jonkin
puhelinnumeroistasi. Päätepistetoimitukset ovat
jokaisesta saapuvasta puhelusta lähetettäviä ei-estäviä ilmoituksia riippumatta
siitä, onko numero määritetty agentille vai webhookille. Numerot, joille ei ole
määritetty agenttia, vastaanottavat lisäksi estävässä määrityspyynnössä
vanhaan webhookiin — katso
telephony.incoming / web.incoming, jossa on
koko pyynnön ja vastauksen skeema.
{
"data": {
"call_id": 987654321,
"from_number": "+14155550199",
"to_number": "+15551234567"
},
"event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
"type": "telephony.incoming"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
telephony.complete
Lähetetään, kun saapuva tai lähtevä puhelu päättyy. Ei-estävä.
Sisältää litteroinnin, tallenteen URL-osoitteen, kun se on saatavilla, sekä laskutusyhteenvedon. Katso
telephony.complete / web.complete
hyötykuorman skeemaa varten.
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
telephony.tool
Lähetetään sen jälkeen, kun puhelu kutsuu
funktiotyökalua. Ei-estävä tarkastusilmoitus —
työkalu on jo suoritettu, kun tämä tapahtuma toimitetaan; se kattaa
omat funktiotyökalusi ja sisäänrakennetun send_sms-työkalun (ei muita sisäänrakennettuja,
tietämyskanta-, sovellusyhteys- tai MCP-työkaluja). Työkalulle send_sms
sekä arguments.to että arguments.body ovat [REDACTED]. Myös
valmistumislitteroinnit peittävät ne; hae sisältö ja vastaanottaja
organisaatiokohtaisesta SMS-resurssista vastauksen message_id-arvon avulla.
{
"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 on suoritettu tulos: {"status": <http status>, "response": <your endpoint's JSON>} onnistumisessa tai
{"status": <status>, "error": "<message>"} epäonnistumisessa.
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
telephony.turn
Lähetetään puhelun ollessa käynnissä, kerran jokaisesta
puhetta sisältävästä vuorosta sen tapahtuessa — agentin puhutut vastaukset ja
soittajan litteroidut vuorot. Voit seurata reaaliaikaista keskustelua
tavallisten webhookien kautta sen sijaan, että kyselisit toistuvasti
GET /v1/calls/{call_id}/transcript-päätepistettä.
Ei-estävä.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
position | integer | Vuoron indeksi puheluhistoriassa — vakaa tunniste järjestämistä varten |
role | string | assistant (agentin puhe) tai user (soittajan puhe) |
text | string | Vuoron litterointiteksti sellaisena kuin se tiedetään lähetyshetkellä |
entry_type | string | Taustalla olevan historiatietueen tyyppi: completion (agentti) tai user_turn / span (soittaja) |
start_ms, end_ms | integer | Äänen siirtymät millisekunteina puhelun alusta; mukana vain, kun toistoaikataulu oli jo tiedossa lähetyshetkellä |
web.incoming
telephony.incoming-tapahtuman verkkokanavavastine, joka lähetetään, kun
verkko-widgetin istunto tai rakennustyökalun mikrofonitestipuhelu
alkaa. Päätepistetoimitukset ovat ei-estäviä kaikille verkkoistunnoille.
Julkaistavat avaimet tilassa mode="webhook" vastaanottavat lisäksi
estävässä määrityspyynnössä vanhaan webhookiin — kyseisellä estävällä
pyynnöllä on eri rakenne (origin_domain,
publishable_key_prefix; ei puhelinnumeroita). Katso
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 on aina kirjaimellinen "web". Webhook-tilan widget-
istunnoissa to_number on tyhjä (istunnon agentin numero määritetään
määrityksen jälkeen); rakennustyökalun mikrofonitestipuheluissa origin_domain ja
publishable_key_prefix ovat tyhjiä.
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
web.complete
telephony.complete-tapahtuman verkkokanavavastine, joka kattaa verkko-
widgetpuhelut (direction: "web") ja rakennustyökalun mikrofonitestipuhelut
(direction: "test"). Ei-estävä. Hyötykuorman rakenne on sama kuin
telephony.complete-tapahtumassa, lisäksi mukana on origin_domain,
ja from_number on asetettu arvoon "web".
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
web.tool
telephony.tool-tapahtuman verkkokanavavastine. data sisältää
origin_domain-arvon from_number / to_number-arvojen sijaan.
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
web.turn
telephony.turn-tapahtuman verkkokanavavastine, joka
kattaa verkko-widgetpuhelut ja rakennustyökalun mikrofonitestipuhelut. Hyötykuorman
rakenne on sama, mutta siinä käytetään origin_domain-arvoa
from_number / to_number-arvojen sijaan. Kuten telephony.turn, se
edellyttää nimenomaista tilausta — sitä ei koskaan toimiteta tyhjän
events-taulukon kautta.
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun agentti oli määritetty |
call.transfer_completed
Lähetetään kerran puhelua kohden puhelunsiirron
lopputuloksen yhteydessä: kylmä siirto tai ihmisten välinen silta, joka jää jäljelle
lämpimästä siirrosta, kun agentti poistuu puhelusta.
Ei estävä, ja toimitetaan vain päätepisteisiin (ei koskaan vanhaan
yhden URL-osoitteen webhookiin). Saapuu puhelun telephony.complete-tapahtuman jälkeen:
kun operaattori ottaa puhelun haltuunsa tai siirto epäonnistuu tai, kun
ThunderPhone on sillannut puhelun, kun silta päättyy.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
call_id | integer | Siirretty puhelu |
agent_id | integer | null | Puhelun käsitellyt agentti, kun sellainen oli määritetty |
agent_name | string | null | Puhelun käsitellyt agentti, kun sellainen oli määritetty |
transfer_outcome | string | refer_accepted: operaattori otti puhelun haltuunsa. bridged: ThunderPhone piti soittajan ja kohteen itse yhdistettyinä joko siksi, että operaattori kieltäytyi kylmästä siirrosta, tai siksi, että lämpimän siirron agentti poistui puhelusta. bridge_unanswered: operaattori kieltäytyi kylmästä siirrosta, eikä kohde vastannut ThunderPhonen omaan puheluun. failed: siirto ei onnistunut ja puhelu päättyi |
destination | string | null | Numero, johon puhelu siirrettiin |
sip_status | integer | null | Operaattorin SIP-tila, kun se kieltäytyi kylmästä siirrosta: 403 (esimerkiksi Twilio-runkoyhteys ilman puhelunsiirtoa), 405 tai 501. null, kun operaattori ei kieltäytynyt siitä |
bridge_kind | string | null | Vain bridged: cold_fallback (kylmä siirto, josta kieltäydyttiin ja jonka ThunderPhone yhdisti) tai warm (lämpimän siirron kaksi osapuolta agentin poistuttua) |
bridge_seconds | integer | null | Vain bridged: ThunderPhonen laskuttama sillatun puhelun aika sekunteina |
bridge_total_cents | integer | null | Vain bridged: sillan hinta Yhdysvaltain sentteinä mahdollisen maksuttoman puheluhyvityksen jälkeen, laskutetaan erikseen puhelun billing_total_cents-arvosta |
Samat arvot ovat puheluobjektissa
nimillä transfer_outcome, transfer_destination, transfer_sip_status,
transfer_bridge_kind, transfer_bridge_seconds ja
transfer_bridge_total_cents. event_id on sama jokaisessa toimituksessa
samalle puhelulle, joten toistettu ilmoitus ei koskaan tuota toista tapahtumaa.
SMS-tapahtumat
SMS-tapahtumat kuvaavat organisaation yhdistetyn Twilio- tai Telnyx-tilin kautta
lähetettyjä viestejä. Viestin sisältö jätetään pois ja to peitetään.
Hae organisaatiokohtainen viesti osoitteesta
GET /v1/sms/{message_id}, kun tarvitset sen
sisältöä tai vastaanottajaa.
sms.sent
Lähetetään, kun asiakkaan operaattori hyväksyy lähtevän SMS-pyynnön. Tämä ei ole laitteen toimitusvahvistus.
{
"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
Lähetetään pysyvän operaattorihylkäyksen jälkeen, kun tilapäisten virheiden
uudelleenyritykset on käytetty loppuun tai kun lopputulos on pysyvästi
tuntematon. error_code on vakaa ThunderPhone-koodi ja error_message kertoo
asiakkaan tarvittavan toimenpiteen, kun sellainen on saatavilla. status: "unknown"
tarkoittaa, että operaattori on voinut hyväksyä SMS-viestin; täsmäytä se
operaattorin lokissa, koska ThunderPhone ei lähetä sitä automaattisesti
uudelleen.
sms.received
Varattu saapuvien SMS-viestien tuelle. Nykyisessä versiossa ei lähetetä
sms.received-tapahtumia. Saapuvien viestien operaattoriwebhookin määritys ja
allekirjoituksen vahvistus julkaistaan erikseen.
Puhetapahtumat
Mukautetun äänen luonti on asynkroninen. Näiden estämättömien tapahtumien avulla voit reagoida lopulliseen tulokseen sen sijaan, että kyselisit toistuvasti kloonin tietojen päätepistettä.
voice.ready ja voice.failed toimitetaan vain koko organisaation kattavaan
päätepisteeseen, jossa on events: []. Niitä ei voi valita nimenomaisiksi
tapahtumasuodattimiksi.
voice.ready
Lähetetään, kun mukautetun äänen käsittely valmistuu ja ääni voidaan määrittää agentille.
{
"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
Lähetetään, kun mukautetun äänen käsittely päättyy pysyvään virheeseen.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
voice.id | merkkijono | Mukautetun äänen julkinen tunniste |
voice.name | merkkijono | Agentin ääniarvo muodossa custom:<public_id> |
voice.display_name | merkkijono | Organisaatiolle näkyvä äänen nimi |
voice.language | merkkijono | Kloonin yksittäisen kielen koodi |
voice.gender | merkkijono | male, female tai tyhjä merkkijono |
voice.status | merkkijono | ready kohteelle voice.ready; failed kohteelle voice.failed |
voice.failure_reason | merkkijono | Tyhjä onnistumisessa; käsittelyvirheen tiedot virheessä |
voice.created_at, voice.updated_at | aikaleima | ISO 8601 -aikaleimat |
reason | merkkijono | Virheen tiedot; mukana vain kohteessa voice.failed |
Laatutapahtumat
call.graded
Lähetetään aina, kun puhelun tekoälyarviointi valmistuu. Ei-estävä.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun hoitanut agentti, kun agentti oli määritetty |
agent_name | string | null | Puhelun hoitanut agentti, kun agentti oli määritetty |
grade.id | integer | Arvioinnin tunniste |
grade.score | integer | null | 0–100 |
grade.call_outcome | string | success, failure, unknown tai no_conversation |
grade.summary | string | Yhden kappaleen yhteenveto |
grade.detected_issues | array | Arvioijan löytämät ongelmamerkkijonot |
grade.status | string | Aina completed — vain valmistuneet ajot lähettävät tapahtuman |
grade.grader_model | string | Tuloksen tuottanut arviointimalli (esim. heuristic-v1) |
grade.graded_at, grade.created_at | timestamp | |
report | object | null | Asiakkaalle näkyvä puheluraportti: lopputuloksen tunniste, huomiota vaativan tilan merkintä ja syy, soittaja, yhden rivin yhteenveto, soittajan kokemus. Varhaisessa heuristisessa arvioinnissa se on null tai pending-raportti, jonka kentät ovat paikkamerkkejä; täyden arvioinnin tapahtuma sisältää valmiin raportin |
call.data_extracted
Lähetetään aina, kun strukturoidun datan poiminta valmistuu onnistuneesti,
mukaan lukien myöhäinen uudelleenyritys telephony.complete- / web.complete-tapahtuman jälkeen tai manuaalinen uudelleensuoritus
POST /v1/calls/{call_id}/extract-kutsulla.
Ei-estävä.
Estävässä poimintatilassa valmistumistapahtuma odottaa normaalisti enintään
75 sekunnin poimintäbudjetin ajan. Jos poimintatyöprosessi katoaa, tuotannon
viimeistelytyhjennys (viiden minuutin välein) vapauttaa valmistumistapahtuman,
jonka blocking_deadline_at on umpeutunut, ennen kuin se aloittaa uuden
poimintayrityksen. Myöhempi onnistuminen toimitetaan erikseen tällä
tapahtumalla.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun hoitanut agentti, jos sellainen oli määritetty |
agent_name | string | null | Puhelun hoitanut agentti, jos sellainen oli määritetty |
summary | string | null | Valmistunut puheluyhteenveto, kun agentilla on Luo puheluyhteenveto käytössä, joten myös myöhäinen poimintatapahtuma toimittaa yhteenvedon, joka ei ehtinyt valmistumisikkunaan; muulloin null. Agentit, joilla on yhteenveto mutta ei poimintakenttiä, eivät koskaan lähetä tätä tapahtumaa: hae myöhäinen yhteenveto komennolla GET /v1/calls/{call_id} |
extracted_data.status | string | Tälle tapahtumalle aina completed |
extracted_data.fields | object | Arvot on avainnettu määritetyillä poimintakenttien avaimilla; arvo null tarkoittaa, ettei arvo ole saatavilla |
extracted_data.evidence | object | Todisteet on avainnettu poimintakentän mukaan. Muulla kuin null-arvolla on täsmällinen rakenteellisesti tarkistettu lainaus (enintään 1 000 merkkiä), speaker_role (caller tai agent) ja turn_index; mallin palauttamat pidemmät lainaukset hylätään katkaisemisen sijaan, ja todiste on null aina, kun sen kenttä on null |
extracted_data.verification | string | verified vain, kun riippumaton todistetarkistus palautti täsmälleen yhden kelvollisen päätelmän jokaiselle ehdokaskentälle. unavailable tarkoittaa, että tarkistus epäonnistui, aikakatkaistiin, sille ei riittänyt budjettia tai se palautti virheellisen muotoista tai osittaista tulostetta. Kokonaan saatavilla olematon tarkistus säilyttää rakenteellisesti perustellut arvot asiakkaan tarkistettaviksi. Osittaisessa tulosteessa kelvolliset päätelmät otetaan käyttöön ja jokainen ehdokas, jolla ei ole täsmälleen yhtä kelvollista päätelmää, asetetaan null-arvoksi |
extracted_data.field_reasons | object | Syyt kentittäin kentille, jotka asetettiin null-arvoksi rakenteellisen perustelun tai riippumattoman varmentajan vuoksi |
extracted_data.schema_version | string | Tähän poimintaan käytetyn täsmällisen kenttäskeeman tiiviste |
extracted_at | timestamp | ISO 8601 -valmistumisaika |
model | string | Poimintaan käytetty malli |
campaign.completed
Lähetetään kerran, kun kampanja siirtyy tilasta running tilaan completed,
riippumatta siitä, päättyikö sen aikataulu vai saavuttivatko kaikki kontaktit
lopputilat. Suorittajan uudelleenyritykset eivät lähetä uutta tapahtumaa. Tämä
organisaatiotason elinkaaritapahtuma toimitetaan vain organisaatiokohtaisiin
päätepisteisiin, ei agenttikohtaisiin päätepisteisiin. Ei-estävä.
{
"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"
}Neljä lopputulosmäärää ovat erillisiä, ja niiden summa on contacts_total:
completed sisältää onnistuneet kontaktit; no_answer sisältää lopputilaan
päätyneet epäonnistuneet tai yrityskertansa käyttäneet kontaktit, joiden
viimeinen lopputulos oli vastaamattomuus; failed sisältää kaikki muut
lopputilaan päätyneet epäonnistuneet tai yrityskertansa käyttäneet kontaktit;
ja remaining sisältää odottavat, ajoitetut tai parhaillaan soitettavat
kontaktit. Uudelleenyritystä odottava kontakti on remaining, vaikka sen
viimeisin yritys olisi päättynyt vastaamattomuuteen. Käynnissä olevat puhelut
täsmäytetään ennen vain kerran lähetettävää valmistumisen tilannekuvaa.
started_at on määritetty kampanjan alkamisaika tai kampanjan luontiaika, jos
alkamisaikaa ei määritetty.
issue.reported
Lähetetään, kun ongelmaraportti luodaan —
joko käyttäjän hallintapaneelista tekemänä (source: "user") tai
puheluarvioinnin automaattisesti luomana (source: "system"). Ei-estävä.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun hoitanut agentti, jos sellainen oli määritetty |
agent_name | string | null | Puhelun hoitanut agentti, jos sellainen oli määritetty |
issue_report.severity | string | critical, warning tai info |
issue_report.status | string | open tai resolved |
issue_report.source | string | user (tehty hallintapaneelista) tai system (arvioinnin luoma) |
issue.escalated
Lähetetään, kun ongelmamalli lähetetään ThunderPhonelle henkilöstön tarkistettavaksi: Ilmoita ThunderPhonelle -toiminnon jälkeen tai kun Korjaa tekoälyllä ei voi vahvistaa asiakkaan puolella tehtyä korjausta ja reitittää ongelman automaattisesti. Vain organisaationlaajuiset päätepisteet vastaanottavat tämän tapahtuman.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
automatic | boolean | true automaattiselle eskaloinnille; false manuaaliselle eskaloinnille |
cluster_id | UUID | Eskaloitu ongelmamalli |
escalation_id | UUID | Eskalointitietue |
status | string | open, kun tapahtuma lähetetään |
Tämä on ilmoitus, ei todistenippu. Käytä cluster_id-arvoa yhdistääksesi sen
ongelmamalliin. Katso Ilmoita ThunderPhonelle.
Testipuhelutapahtumat
test-call.completed
Lähetetään, kun
testipuheluajo
saavuttaa lopullisen tilan — completed tai failed, mukaan lukien ajot,
jotka epäonnistuivat käynnistyksessä eivätkä koskaan tuottaneet puhelua. Ei estä suorittamista. Hyödyllinen eräajettavien CI-ajojen
liittämiseen keskustelu- ja ilmoitusjärjestelmiisi.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
agent_id | integer | null | Puhelun hoitanut agentti, kun sellainen oli määritetty |
agent_name | string | null | Puhelun hoitanut agentti, kun sellainen oli määritetty |
test_call_run.target_type | string | agent tai phone_number |
test_call_run.target_id | integer | Agentin tunnus tai puhelinnumeron tunnus, johon ajo kohdistui, target_type-arvon mukaisesti |
test_call_run.status | string | completed tai failed |
test_call_run.call_id | integer | null | null, kun ajo epäonnistui ennen puhelun soittamista |
test_call_run.error_message | string | Tyhjä onnistuneessa ajossa |
Hälytystapahtumat
alert.triggered
Lähetetään, kun hälytyssääntö, jossa Toimita kehittäjän webhookeihin -kanava on käytössä, ylittää kynnysarvonsa. Ei estä suorittamista. Sääntö käynnistyy kerran ja noudattaa sen jälkeen jäähtymisaikaansa, joten jatkuva rajan ylitys tuottaa yhden tapahtuman jokaista jäähtymisikkunaa kohti.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
event_id (kohteessa data) | UUID | Hälytyksen käynnistymisen tunnus — eri kuin kirjekuoren toimituksen event_id |
rule_id, rule_name | UUID, string | Käynnistynyt sääntö |
metric | string | success_rate, failure_rate, avg_score, call_volume tai suite_regression |
comparator | string | lt, lte, gt tai gte |
metric_value | number | Mittarin arvo arviointi-ikkunan aikana, jolloin sääntö käynnistyi |
threshold | number | Määritetty kynnysarvo |
window_hours | integer | Liukuva arviointi-ikkuna |
fired_at | timestamp |
Katso Hälytykset-oppaasta, miten luot sääntöjä, mittareita, jäähtymisaikoja sekä sähköposti- ja Slack-kanavia.
Migraatiotapahtumat
migration.call.complete
Lähetetään, kun
POST /v1/migrations/{id}/calls-pyynnöllä tehty puhelu päättyy riippumatta siitä, kummalla alustalla se käytiin. Ei estä muita toimintoja. Se saapuu enintään noin 5 minuuttia puhelun päättymisen jälkeen. data sisältää kaikki
telephony.complete-tapahtuman kentät sekä migration-lohkon. ThunderPhonen soittama puhelu lähettää myös tavalliseen tapaan telephony.complete-tapahtuman samalla call_id-tunnuksella. Toisen alustan puhelu, joka ei ole päättynyt 2 tunnin jälkeen tai jonka migraatio päättyi tai menetti avaimensa ensin, lähetetään tilalla status: "unknown" ilman puhelutallennetta.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
migration.id | UUID | Migraatio |
migration.routing_id | UUID | Reititetty puhelu sellaisena kuin se palautettiin, kun soitit sen |
migration.arm | string | ours (ThunderPhone soitti sen) tai vendor (toinen alusta soitti sen) |
migration.vendor | string | retell, vapi, elevenlabs tai bland |
migration.vendor_call_id | string | null | Toisen alustan puhelutunnus; null, kun arvo on ours |
migration.metadata | object | Puhelua soitettaessa lähettämäsi metadata |
migration.vendor_cost_usd | string | null | Toisen alustan ilmoittama puhelun hinta, jos se ilmoitti sen |
call_id | integer | null | ThunderPhone-puhelutunnus; null, kun arvo on vendor |
status | string | Kun arvo on vendor: completed, kun vastaanottaja puhui, failed, kun hän ei puhunut, ja unknown kuten yllä. Kun arvo on ours: kuten telephony.complete-tapahtumassa |
vendor-puheluissa ThunderPhonella ei ole laskutus- tai poimintatietoja:
billable_minutes, billing_total_cents ja extracted_data ovat null,
product ja voice ovat tyhjiä, recording_mode on vendor, ja
recording_url on toisen alustan linkki, jos se antoi sellaisen.
migration.rollback
Lähetetään, kun migraation asteittainen siirto ohjaa kaikki puhelut automaattisesti takaisin toiselle alustalle: 3 puhelua ei muodostanut yhteyttä ThunderPhoneen 15 minuutin sisällä, 2 ThunderPhoneen ohjattua puhelua päättyi ennen kuin agentti vastasi tai ThunderPhonen tehtävän lopputulosaste putosi yli määritetyn rajan toisen alustan vastaavaa astetta alemmaksi. Ei estävä, kerran kutakin palautusta kohden. Tämän jälkeen ThunderPhonen puheluosuus on 0 %, ja migraatio on keskeytetty, kunnes joku jatkaa sitä agentin Migraatio-välilehdellä. Tietosisältö ei sisällä puhelinnumeroita, litteraatioita eikä puhelutunnuksia.
{
"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"
}| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
migration_id | UUID | Migraatio |
vendor | merkkijono | retell, vapi, elevenlabs tai bland |
reason | merkkijono | ours_failed_burst (3 epäonnistunutta yhteyttä 15 minuutissa), dropped_calls (2 puhelua päättyi ennen kuin agentti vastasi, 30 minuutin sisällä) tai rate_gap (tehtävän lopputulosasteiden ero vähintään rollback_min_calls arvioidussa puhelussa kummallakin puolella) |
previous_percent | kokonaisluku | ThunderPhonen puheluosuus ennen palautusta |
ours_percent | kokonaisluku | Aina 0 |
step | kokonaisluku | null | Aikatauluvaihe, jossa se oli (alkaen arvosta 0) |
ours / theirs | objekti | null | Nykyisen vaiheen arvioidut puhelut ja niiden onnistumisaste; theirs voi koskea viimeisiä 30 päivää, kun vaiheessa on liian vähän puheluita. null, jos niitä ei ollut |
ours_failed | kokonaisluku | Viimeisten 15 minuutin aikana lasketut epäonnistuneet yhteydet |
dropped | kokonaisluku | Viimeisten 30 minuutin aikana keskeytyneiksi lasketut puhelut |
rolled_back_at | aikaleima |
Aiheeseen liittyvää
Estävä saapuvan puhelun hyötykuorma, johon sinun on vastattava.
Puhelun jälkeinen transkriptio ja mittarit.
Tilaa URL-osoite osaan näistä tapahtumista.
Miten telephony.tool / web.tool -tapahtumat luodaan.