ThunderPhone 2.0 on nüüd saadaval.Iseteenindusena alates 2 senti/min.Loe uudist

Webhooks

Sündmuste kataloog

Kõik veebikonksu sündmusetüübid, mida ThunderPhone saadab.

Iga veebikonksu sisus on väli type, mille väärtus on üks sellel lehel toodud sündmusetüüpidest. Kui tellid lõpp-punkti, peab massiiv events sisaldama soovitud sündmusetüüpe (või olema tühi, et tellida kõik sündmused — välja arvatud kõnepõhised sündmused telephony.turn / web.turn, mis edastatakse ainult neile lõpp-punktidele, kus need on selgesõnaliselt nimetatud).

Neid sündmusi edastatakse kahel viisil:

Allolevad näidispayloadid näitavad lõpp-punkti ümbrist selle edastusjärjekorras (võtmed on sorditud tähestikuliselt: data, event_id, type); pärandedastused sisaldavad sama data ilma event_id-ta.

Kõnesündmused

telephony.incoming

Saadetakse, kui sissetulev kõne jõuab ühele sinu telefoninumbrile. Lõpp-punkti edastused on fire-and-forget-teavitused, mis saadetakse iga sissetuleva kõne korral, olenemata sellest, kas number on häälagendi või webhooki jaoks seadistatud. Numbrid, millele pole agenti määratud, saavad lisaks pärandwebhooki kaudu blokeeriva seadistustaotluse — täieliku päringu- ja vastusskeemi leiad jaotisest telephony.incoming / web.incoming.

{
  "data": {
    "call_id": 987654321,
    "from_number": "+14155550199",
    "to_number": "+15551234567"
  },
  "event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
  "type": "telephony.incoming"
}
VäliTüüpKirjeldus
agent_idinteger | nullKõne käsitlenud agent, kui agent oli määratud
agent_namestring | nullKõne käsitlenud agent, kui agent oli määratud
returning_callobjectEsineb ainult siis, kui number helistas sellele helistajale viimase 30 päeva jooksul: varasema kõne call_id, agent_id, started_at ja outcome. Vaata tagasihelistamisi
sip_headersobjectEsineb ainult siis, kui kõne saabus X-* või User-to-User SIP-päistega (SIP-aadressid ja käsitsi loodud SIP-ühendused): päise nimi väiketähtedega → väärtus. Vaata SIP-päiseid

telephony.complete

Saadetakse, kui sissetulev või väljaminev telefonikõne lõpeb. Mitteblokeeriv. Sisaldab transkriptsiooni, salvestise URL-i, kui see on saadaval, ja arvelduse kokkuvõtet. Andmekoorma skeemi leiad jaotisest telephony.complete / web.complete.

VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud agent, kui agent oli määratud
agent_namestring | nullKõnet käsitlenud agent, kui agent oli määratud

telephony.tool

Saadetakse pärast seda, kui telefonikõne kutsub välja funktsioonitööriista. Mitteblokeeriv audititeavitus — tööriist on selle sündmuse edastamise ajaks juba käivitatud; see hõlmab sinu enda funktsioonitööriistu ja sisseehitatud tööriista send_sms (mitte muid sisseehitatud, teadmistebaasi, rakenduseühenduse ega MCP tööriistu). send_sms puhul on nii arguments.to kui ka arguments.body väärtusega [REDACTED]. Ka lõpetamise transkriptsioonid varjavad need; sisu ja adressaadi saad hankida organisatsioonipõhisest SMS-i ressursist, kasutades vastuse message_id.

{
  "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 käivitatud tulemus: õnnestumise korral {"status": <http status>, "response": <your endpoint's JSON>} või ebaõnnestumise korral {"status": <status>, "error": "<message>"}.

VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud agent, kui agent oli määratud
agent_namestring | nullKõnet käsitlenud agent, kui agent oli määratud

telephony.turn

Saadetakse telefonikõne ajal üks kord iga kõnet sisaldava vestluskorra kohta — agendi väljaöeldud vastuste ja helistaja transkribeeritud vestluskordade kohta. Võimaldab sul jälgida reaalajas vestlust tavaliste webhookide kaudu, selle asemel et küsitleda GET /v1/calls/{call_id}/transcript. Mitteblokeeriv.

{
  "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"
}
VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud agent, kui agent oli määratud
agent_namestring | nullKõnet käsitlenud agent, kui agent oli määratud
positionintegerVestluskorra indeks kõneajaloos — stabiilne tunnus järjestamiseks
rolestringassistant (agendi kõne) või user (helistaja kõne)
textstringVestluskorra transkriptsioonitekst sündmuse väljastamise ajal teadaoleval kujul
entry_typestringAluseks oleva ajalookirje tüüp: completion (agent) või user_turn / span (helistaja)
start_ms, end_msintegerHeli nihked millisekundites alates kõne algusest; olemas ainult siis, kui taasesituse ajastus oli sündmuse väljastamise ajal juba teada

web.incoming

telephony.incoming veebikanali vaste, mis saadetakse siis, kui veebividina seanss või koosturi mikrofoni testkõne algab. Lõpp-punkti edastused on fire-and-forget kõigi veebiseansside korral. Avaldatavad võtmed režiimis mode="webhook" saavad lisaks pärandwebhooki kaudu blokeeriva seadistustaotluse — selle blokeeriva taotluse kuju on erinev (origin_domain, publishable_key_prefix; telefoninumbreid pole). Vt 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 alati literaal "web". Webhooki režiimis vidinaseansside puhul on to_number tühi (seansi agendi number määratakse pärast seadistamist); koosturi mikrofoni testkõnede puhul on origin_domain ja publishable_key_prefix tühjad.

VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud agent, kui agent oli määratud
agent_namestring | nullKõnet käsitlenud agent, kui agent oli määratud

web.complete

telephony.complete veebikanali vaste, mis hõlmab veebividina kõnesid (direction: "web") ja koosturi mikrofoni testkõnesid (direction: "test"). Mitteblokeeriv. Andmekoorma kuju on sama mis telephony.complete puhul, lisaks on olemas origin_domain ning from_number väärtuseks on "web".

VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud agent, kui agent oli määratud
agent_namestring | nullKõnet käsitlenud agent, kui agent oli määratud

web.tool

telephony.tool veebikanali vaste. data sisaldab from_number / to_number asemel välja origin_domain.

VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud agent, kui agent oli määratud
agent_namestring | nullKõnet käsitlenud agent, kui agent oli määratud

web.turn

telephony.turn veebikanali vaste, mis hõlmab veebividina kõnesid ja koosturi mikrofoni testkõnesid. Andmekoorma kuju on sama, kuid from_number / to_number asemel on origin_domain. Nagu telephony.turn, nõuab see selgesõnalist tellimust — seda ei edastata kunagi tühja events massiivi kaudu.

VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud agent, kui agent oli määratud
agent_namestring | nullKõnet käsitlenud agent, kui agent oli määratud

call.transfer_completed

Saadetakse üks kord kõne kohta koos kõneedastuse lõpptulemusega: külmedastus või inimestevaheline sild, mis jääb soojast edastusest alles pärast häälagendi lahkumist. Ei blokeeri ning saadetakse ainult lõpp-punktidesse (mitte kunagi pärand- ühe-URL-iga webhooki). See saabub pärast kõne telephony.complete sündmust: kui operaator võtab kõne üle või edastus ebaõnnestub või, kui ThunderPhone lõi kõnesilla, pärast silla lõppemist.

{
  "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"
}
VäliTüüpKirjeldus
call_idintegerKõne, mis edastati
agent_idinteger | nullHäälagent, kes kõnet käsitles, kui see oli määratud
agent_namestring | nullHäälagent, kes kõnet käsitles, kui see oli määratud
transfer_outcomestringrefer_accepted: operaator võttis kõne üle. bridged: ThunderPhone hoidis helistaja ja sihtkoha ise ühendatuna, kas seetõttu, et operaator keeldus külmedastusest, või kuna sooja edastuse häälagent lahkus. bridge_unanswered: operaator keeldus külmedastusest ja sihtkoht ei vastanud ThunderPhone'i enda kõnele. failed: edastus ei õnnestunud ja kõne lõppes
destinationstring | nullNumber, millele kõne edastati
sip_statusinteger | nullOperaatori SIP-olek, kui see keeldus külmedastusest: 403 (näiteks Twilio trunk ilma kõneedastuseta), 405 või 501. null, kui operaator ei keeldunud
bridge_kindstring | nullAinult bridged: cold_fallback (ThunderPhone'i ühendatud tagasilükatud külmedastus) või warm (sooja edastuse kaks osalejat pärast häälagendi lahkumist)
bridge_secondsinteger | nullAinult bridged: ThunderPhone'i arveldatud sillaaeg sekundites
bridge_total_centsinteger | nullAinult bridged: silla maksumus USA sentides pärast tasuta kõnekrediidi rakendamist, arveldatakse eraldi kõne billing_total_cents väärtusest

Samad väärtused on kõneobjektil nimedega transfer_outcome, transfer_destination, transfer_sip_status, transfer_bridge_kind, transfer_bridge_seconds ja transfer_bridge_total_cents. event_id on iga sama kõne edastuse puhul sama, seega korduv teavitus ei tekita teist sündmust.

call.billed

Saadetakse mahupõhiselt arveldatud kõne korral: kui selle tasu kinnitatakse, mõni minut pärast kõne lõppu, kui kasutusandmed on laekunud, ning uuesti iga kord, kui hiljem laekunud kasutus suurendab tasu. Kõne telephony.complete / web.complete sündmus sisaldab billing_pending: true ja null arveldusvälju. See ei blokeeri midagi ning saadetakse ainult lõpp-punktidele (mitte kunagi pärandühe-URL-iga veebikonksule). Kõned, mille eest arveldatakse nende lõppemisel, sisaldavad arveldusandmeid lõpetamissündmuses ega saa call.billed sündmust.

Järjekord ei ole tagatud: tasu ootab tavaliselt lõpetamissündmust, kuid call.billed võib saabuda enne seda (näiteks tund aega kinni peetud lõpetamissündmuse või eri aegadel uuesti proovitud edastuste tõttu) ning kaks call.billed sündmust võivad saabuda vales järjekorras. Säilita iga call_id kohta sündmus, mille billing_seq on suurim.

{
  "data": {
    "adjustment_cents": null,
    "agent_id": 12,
    "agent_name": "Front desk",
    "billable_minutes": 3.0,
    "billing_seq": 1,
    "billing_total_cents": 10,
    "call_id": 987654321,
    "reason": "settled"
  },
  "event_id": "7c1d2e3f-4a5b-5c6d-8e7f-9a0b1c2d3e4f",
  "type": "call.billed"
}
VäliTüüpKirjeldus
call_idtäisarvKõne, mille eest arveldati
agent_idtäisarv | nullKõnet käsitlenud häälagent, kui see oli määratud
agent_namestring | nullKõnet käsitlenud häälagent, kui see oli määratud
reasonstringsettled: kõne tasu. adjusted: pärast tasu määramist laekunud kasutus, mis seda suurendas (tasu ei vähene kunagi)
billing_seqtäisarvTasu jaoks 1, seejärel iga suurenemise jaoks 2, 3, ... Suurim vastuvõetud väärtus on kõne praegune arveldus
billable_minutesarvArveldatud minutid, ümardatud lähima veerandminutini
billing_total_centstäisarvKõik, mis kõne eest on seni USA sendina tasutud, pärast tasuta kõnekrediidi arvestamist, sealhulgas adjusted suurendamised
adjustment_centstäisarv | nullAinult adjusted: see suurendamine USA sentides pärast tasuta kõnekrediidi arvestamist

Samad summad on kõneobjektil väljadena billable_minutes ja billing_total_cents. event_id on sama ühe billing_seq iga edastuse korral, seega korduv teade ei tekita kunagi teist sündmust.


SMS-i sündmused

SMS-i sündmused kirjeldavad organisatsiooni ühendatud Twilio või Telnyxi konto kaudu saadetud sõnumeid. Sõnumi sisu jäetakse välja ja to varjatakse. Too organisatsioonipõhine sõnum välja GET /v1/sms/{message_id} abil, kui vajad selle sisu või adressaati. source on api, agent_tool, followup või pre_call (kampaania tekst enne helistamist), nagu on kirjeldatud sõnumi objektis.

Iga SMS-sündmus sisaldab scheduled_send_id: selle ajastatud saatmise ID-d, mille jaoks tekst saadeti, või null teksti puhul, mida ei ajastatud. Ajastatud tekstide source on "scheduled".

sms.sent

Saadetakse, kui kliendi operaator võtab väljamineva SMS-i päringu vastu. See ei ole seadmesse kohaletoimetamise kinnitus.

{
  "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",
    "scheduled_send_id": null,
    "segment_count": 1,
    "source": "agent_tool",
    "status": "accepted",
    "to": "[REDACTED]"
  },
  "event_id": "0ae347b4-1716-45bb-9a0e-b52373586e37",
  "type": "sms.sent"
}

sms.failed

Saadetakse pärast operaatori püsivat tagasilükkamist, kui ajutiste vigade korduskatsed on ammendatud, kui tulemus on lõplikult teadmata või kui Twilio teatab, et vastuvõetud sõnum jäi kohale toimetamata või ebaõnnestus. Viimasel juhul oli sõnumi sms.sent juba saadetud ja status jääb väärtuseks "accepted". error_code on stabiilne ThunderPhone’i kood ning error_message kirjeldab kliendi toimingut, kui see on saadaval. status: "unknown" tähendab, et operaator võis SMS-i vastu võtta; kontrolli seda operaatori logist, sest ThunderPhone ei saada seda automaatselt uuesti.

sms.received

Reserveeritud sissetuleva SMS-i toele. Praeguses versioonis ei saadeta ühtki sms.received sündmust. Sissetulevate operaatori webhookide seadistus ja allkirja kontrollimine avaldatakse eraldi.


Ajastatud sündmused

Ajastatud saatmised, mis välja ei lähe, käivitavad ühe neist sündmustest. Välja minev saatmine käivitab selle asemel tavapärased sündmused: tekstsõnumi puhul sms.* sündmused, millel on määratud scheduled_send_id, ning kõne puhul kõnesündmused, mille telephony.complete sündmusel on scheduled_send_id. Mõlemad ei blokeeri. Kui saatmisel on agent, saavad need ka selle agendi agendipõhised lõpp-punktid.

Koormus sisaldab ainult ID-sid, olekut ja aegu: mitte kunagi tekstsõnumi sisu ega kõne muutujaid või konteksti ning to on redigeeritud. Ülejäänu saamiseks kasuta GET /v1/scheduled/{id}.

scheduled.skipped

Saadetakse, kui saatmine jäetakse tahtlikult saatmata. reason on expired (seda ei õnnestunud enne expires_at väärtust välja saata), opted_out (number on loobumisnimekirjas, sealhulgas juhul, kui see lisati pärast saatmise loomist), quiet_hours (saatmise aeg saabus väljaspool adressaadi ajavööndis kehtivat ajavahemikku kell 8.00–21.00), sender_not_ready (tekstsõnumi numbrilt ei saa enam saata) või outbound_tcpa_unconfirmed (kõne saatmise aeg saabus enne organisatsiooni TCPA kinnituse registreerimist).

{
  "data": {
    "agent_id": null,
    "created_at": "2026-11-01T18:02:11.204Z",
    "detail": "The send could not go out before its expires_at, so it was not sent late.",
    "expires_at": "2026-11-03T17:30:00Z",
    "external_id": "appointment-4815",
    "from_number": "+15551234567",
    "id": "6f1c0b8e-3a52-4c1f-9a0b-2f4f7d8a91c3",
    "reason": "expired",
    "send_at": "2026-11-03T17:00:00Z",
    "source": "api",
    "status": "skipped",
    "to": "[REDACTED]",
    "type": "sms"
  },
  "event_id": "2b0f6c43-74c9-4d43-a1f4-0d6a2f8e51a7",
  "type": "scheduled.skipped"
}

scheduled.failed

Saadetakse, kui ThunderPhone proovis saata, kuid saatmine ei õnnestunud. reason on saatmise enda tõrge: SMS-i veakood, näiteks tekstsõnumi puhul carrier_rejected, või kõne tagasilükkamise või ebaõnnestumise põhjus, näiteks blokeeritud sihtkoha reegel (näiteks premium_rate) või agent_deleted. Andmekoormusel on samad väljad nagu sündmusel scheduled.skipped.

VäliTüüpKirjeldus
idstringAjastatud saatmise ID
typestringsms või call
statusstringskipped või failed
reasonstringMiks, nagu eespool; sama väärtus kui saatmise status_reason
detailstringLoetav selgitus
sourcestringMis saatmise lõi: api
external_idstring | nullSinu saatmise võti või null
from_numberstringSaatja number
tostringAlati "[REDACTED]"
agent_idinteger | nullKõned: häälagent; tekstsõnumid: null
send_at, expires_at, created_attimestampISO 8601

Häälesündmused

Kohandatud hääle loomine on asünkroonne. Need mitteblokeerivad sündmused võimaldavad sul reageerida lõpptulemusele, selle asemel et küsitleda klooni üksikasjade lõpp-punkti.

voice.ready ja voice.failed edastatakse ainult organisatsiooniülesele lõpp-punktile, millel on events: []. Neid ei saa valida selgesõnaliste sündmusefiltritena.

voice.ready

Saadetakse, kui kohandatud hääle töötlemine lõpeb ja selle saab määrata agendile.

{
  "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

Saadetakse, kui kohandatud hääle töötlemine lõpeb püsiva tõrkega.

{
  "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"
}
VäliTüüpKirjeldus
voice.idstringKohandatud hääle avalik ID
voice.namestringHäälagendi hääle väärtus vormingus custom:<public_id>
voice.display_namestringOrganisatsioonile nähtav hääle nimi
voice.languagestringKlooni ühe keele kood
voice.genderstringmale, female või tühi string
voice.statusstringready sündmuse voice.ready korral; failed sündmuse voice.failed korral
voice.failure_reasonstringEdu korral tühi; tõrke korral töötlemise tõrke üksikasjad
voice.created_at, voice.updated_atajatempelISO 8601 ajatemplid
reasonstringTõrke üksikasjad; olemas ainult sündmusel voice.failed

Kvaliteedisündmused

call.graded

Saadetakse alati, kui kõne tehisintellektipõhine hindamine on lõpule jõudnud. Mitteblokeeriv.

{
  "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"
}
VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud häälagent, kui see oli määratud
agent_namestring | nullKõnet käsitlenud häälagent, kui see oli määratud
grade.idintegerHinde ID
grade.scoreinteger | null0–100
grade.call_outcomestringsuccess, failure, unknown või no_conversation
grade.summarystringÜhe lõiguga kokkuvõte
grade.detected_issuesarrayHindaja tuvastatud probleemide stringid
grade.statusstringAlati completed — sündmuse saadavad ainult lõpetatud käitused
grade.grader_modelstringMilline hindaja tulemuse koostas (nt heuristic-v1)
grade.graded_at, grade.created_attimestamp
reportobject | nullKliendile nähtav kõne aruanne: tulemuse silt, tähelepanu vajamise märgis ja põhjus, helistaja, ühe rea kokkuvõte, helistaja kogemus. Varajase heuristilise hinde korral on see null või pending-aruanne, mille väljad on kohatäited; täieliku hinde sündmus sisaldab lõpetatud aruannet

call.data_extracted

Saadetakse alati, kui struktureeritud andmete ekstraktimine edukalt lõpeb, sealhulgas hilise korduskatse korral pärast telephony.complete / web.complete või käsitsi uuesti käivitamisel kaudu POST /v1/calls/{call_id}/extract. Mitteblokeeriv.

Blokeerivas ekstraktimisrežiimis ootab lõpetamissündmus tavaliselt kuni 75-sekundilise ekstraktimise eelarve lõpuni. Kui ekstraktimise tööprotsess kaob, väljastab tootmiskeskkonna lõpetamise töötlemine (iga viie minuti järel) lõpetamissündmuse, mille blocking_deadline_at on möödunud, enne järgmise ekstraktimiskatse alustamist. Hilisem edukas tulemus edastatakse eraldi selle sündmusena.

{
  "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"
}
VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud häälagent, kui see oli määratud
agent_namestring | nullKõnet käsitlenud häälagent, kui see oli määratud
summarystring | nullLõpetatud kõne kokkuvõte, kui häälagendil on Genereeri kõne kokkuvõte sisse lülitatud; seega edastab hiline ekstraktimissündmus ka kokkuvõtte, mis ei jõudnud lõpetamisaknas kohale; muul juhul null. Kokkuvõttega, kuid ekstraktimisväljadeta häälagendid ei saada kunagi seda sündmust: loe hiline kokkuvõte käsuga GET /v1/calls/{call_id}
extracted_data.statusstringSelle sündmuse korral alati completed
extracted_data.fieldsobjectVäärtused on võtmetega määratud konfigureeritud ekstraktimisväljade järgi; mittesaadavad väärtused on null
extracted_data.evidenceobjectTõendid on ekstraktimisväljade järgi võtmetega. Mitte-null väärtusel on täpne struktuurselt kontrollitud tsitaat (kuni 1 000 tähemärki), speaker_role (caller või agent) ja turn_index; pikemad mudeli tagastatud tsitaadid lükatakse kärpimise asemel tagasi ning tõend on null alati, kui selle väli on null
extracted_data.verificationstringverified ainult siis, kui sõltumatu tõendite kontroll tagastas iga kandidaadvälja jaoks täpselt ühe kehtiva otsuse. unavailable tähendab, et kontroll ebaõnnestus, aegus, sellel polnud piisavalt eelarvet või see tagastas vigase või osalise väljundi. Täielikult mittesaadav kontroll säilitab kliendipoolseks ülevaatuseks struktuurselt põhjendatud väärtused. Osalise väljundi korral rakendatakse kehtivad otsused ja iga kandidaat, millel pole täpselt üht kehtivat otsust, muudetakse nulliks
extracted_data.field_reasonsobjectPõhjused väljade järgi, mis muudeti nulliks struktuurse põhjendamise või sõltumatu kontrollija poolt
extracted_data.schema_versionstringSelle ekstraktimise jaoks kasutatud täpse väljaskeemi räsi
extracted_attimestampISO 8601 lõpetamise aeg
modelstringEkstraktimiseks kasutatud mudel

campaign.completed

Saadetakse üks kord, kui kampaania liigub olekust running olekusse completed, olenemata sellest, kas selle ajakava lõppes või kõik kontaktid jõudsid lõppolekusse. Käivitaja korduskatsed ei saada uut sündmust. See organisatsioonitaseme elutsükli sündmus edastatakse ainult organisatsiooni ulatusega lõpp-punktidele, mitte häälagendi ulatusega lõpp-punktidele. Mitteblokeeriv.

{
  "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,
      "skipped": 4,
      "remaining": 0
    }
  },
  "event_id": "8d8f52ce-6b46-423f-9dde-cea0b91ec135",
  "type": "campaign.completed"
}

Neli tulemuste arvu on üksteist välistavad ja nende summa on contacts_total: completed sisaldab edukaid kontakte; no_answer sisaldab lõpetatud nurjunud või ammendunud kontakte, mille lõpptulemuseks oli vastamata kõne; failed sisaldab kõiki muid lõpetatud nurjunud või ammendunud kontakte; ja remaining sisaldab ootel, ajastatud või parajasti helistatavaid kontakte. Uuesti proovimist ootav kontakt on remaining, isegi kui selle viimane katse lõppes vastamata kõnega. Käimasolevad kõned kooskõlastatakse enne ühekordset lõpetamise tõmmist. started_at on kampaania seadistatud algusaeg või kampaania loomise aeg, kui algusaega ei seadistatud. skipped ei ole viies kategooria: see loendab failed hulka kuuluvaid kontakte, mille numbritüübi filter lõpetas ilma kõneta.

issue.reported

Saadetakse, kui luuakse probleemiaruanne — kas kasutaja esitab selle töölaualt (source: "user") või kõne hindamine loob selle automaatselt (source: "system"). Mitteblokeeriv.

{
  "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"
}
VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud häälagent, kui see oli määratud
agent_namestring | nullKõnet käsitlenud häälagent, kui see oli määratud
issue_report.severitystringcritical, warning või info
issue_report.statusstringopen või resolved
issue_report.sourcestringuser (esitatud töölaualt) või system (loodud hindamise poolt)

issue.escalated

Saadetakse, kui probleemimuster saadetakse ThunderPhone'ile töötajate ülevaatuseks: pärast Teavita ThunderPhone'i või siis, kui Paranda tehisintellektiga ei suuda kinnitada kliendipoolset parandust ja suunab probleemi automaatselt edasi. Selle sündmuse saavad ainult kogu organisatsiooni hõlmavad lõpp-punktid.

{
  "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"
}
VäliTüüpKirjeldus
automaticbooleantrue automaatse eskaleerimise korral; false käsitsi eskaleerimise korral
cluster_idUUIDEskaleeritud probleemimuster
escalation_idUUIDEskaleerimise kirje
statusstringSündmuse saatmisel open

See on teavitus, mitte tõendite kogum. Kasuta cluster_id, et seostada see probleemimustriga. Vaata Teavita ThunderPhone'i.


Testkõne sündmused

test-call.completed

Saadetakse, kui testkõne käitus jõuab lõppolekusse — completed või failed, sealhulgas käitused, mis ebaõnnestusid käivitamisel ega loonud kunagi kõnet. Mitteblokeeriv. Kasulik CI pakettkäituste ühendamiseks sinu vestlus- ja teavitussüsteemidega.

{
  "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"
}
VäliTüüpKirjeldus
agent_idinteger | nullKõnet käsitlenud agent, kui see oli määratud
agent_namestring | nullKõnet käsitlenud agent, kui see oli määratud
test_call_run.target_typestringagent või phone_number
test_call_run.target_idintegerAgendi ID või telefoninumbri ID, millele käitus oli suunatud, vastavalt väärtusele target_type
test_call_run.statusstringcompleted või failed
test_call_run.call_idinteger | nullnull, kui käitus ebaõnnestus enne kõne algatamist
test_call_run.error_messagestringEduka tulemuse korral tühi

Hoiatuste sündmused

alert.triggered

Saadetakse, kui hoiatusreegel, mille kanal Edasta arendaja veebikonksudele on lubatud, ületab oma lävendi. Mitteblokeeriv. Reegel käivitub ühe korra ja järgib seejärel oma jahtumisperioodi, seega tekitab püsiv rikkumine ühe sündmuse iga jahtumisperioodi akna kohta.

{
  "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"
}
VäliTüüpKirjeldus
event_id (väljal data)UUIDHoiatuse käivituse ID — erineb ümbrise edastuse event_id väärtusest
rule_id, rule_nameUUID, stringKäivitunud reegel
metricstringsuccess_rate, failure_rate, avg_score, call_volume või suite_regression
comparatorstringlt, lte, gt või gte
metric_valuenumberMõõdiku väärtus akna jooksul, mil reegel käivitus
thresholdnumberSeadistatud lävend
window_hoursintegerTagasivaatav hindamisaken
fired_attimestamp

Reeglite, mõõdikute, jahtumisperioodide ning e-posti- ja Slacki kanalite loomiseks vaata hoiatuste juhendit.


Telefoninumbri sündmused

phone_number.spam_risk_changed

Saadetakse, kui rämpspostimärgise jälgimine (tasuline lisafunktsioon, saadaval toe kaudu taotluse alusel) tuvastab, et jälgitava numbri rämpspostirisk tõuseb väärtusele medium või high (väärtuselt low, kui näitu veel pole, või väärtuselt medium väärtusele high). Ei blokeeri. Märgistatuks jääva numbri kohta sündmust uuesti ei saadeta; saadetakse siis, kui number taastub väärtusele low ja märgistatakse hiljem uuesti. Sündmusel puudub agendi kontekst, seega saavad selle ainult kogu organisatsiooni hõlmavad lõpp-punktid. Organisatsiooni omanikud ja administraatorid saavad ka meili.

{
  "data": {
    "checked_at": "2026-10-21T14:41:07+00:00",
    "phone_number": "+13125550100",
    "phone_number_id": 412,
    "previous_spam_risk": "low",
    "scores": {
      "connection": 31,
      "engagement": 40,
      "maturity": 82,
      "sentiment": 22
    },
    "spam_category": "Telemarketer",
    "spam_risk": "high"
  },
  "event_id": "6f1c2d3e-4b5a-4c6d-8e7f-9a0b1c2d3e4f",
  "type": "phone_number.spam_risk_changed"
}
VäliTüüpKirjeldus
phone_numberstringNumber vormingus E.164
phone_number_idinteger | nullSelle ID jaotises Telefoninumbrid
spam_riskstringmedium või high
previous_spam_riskstring | nullRisk viimase näidu ajal; enne esimest näitu null
spam_categorystring | nullMärgis, mida operaatorid võivad kuvada, näiteks Telemarketer või Survey. Käsitle seda vaba tekstina
scoresobjectIga väärtus on 0 kuni 100 või null, kuni kõnemahtu on piisavalt: maturity (kui väljakujunenud number on), connection (kas inimesed vastavad), engagement (kas nad jäävad liinile), sentiment (kas nad blokeerivad numbri või teatavad sellest)
checked_attimestampMillal ThunderPhone tulemuse luges

Migratsioonisündmused

migration.call.complete

Saadetakse, kui POST /v1/migrations/{id}/calls kaudu algatatud kõne lõpeb, olenemata sellest, milline platvorm kõne vastu võttis. Ei blokeeri. See saabub kuni umbes 5 minutit pärast kõne lõppu. data sisaldab kõiki telephony.complete välju ning plokki migration. ThunderPhone'i algatatud kõne saadab tavapäraselt ka telephony.complete sündmuse sama call_id-ga. answered_by on null, kui kõne võttis vastu teine platvorm. Teisel platvormil tehtud kõne, mis ei ole 2 tunni pärast lõppenud või mille migratsioon lõppes või kaotas enne oma võtme, saadetakse väärtusega status: "unknown" ja ilma transkriptsioonita.

{
  "data": {
    "agent_id": 42,
    "agent_name": "Front desk",
    "answered_by": null,
    "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"
}
VäliTüüpKirjeldus
migration.idUUIDMigratsioon
migration.routing_idUUIDSuunatud kõne, nagu tagastati selle algatamisel
migration.armstringours (ThunderPhone algatas selle) või vendor (selle algatas teine platvorm)
migration.vendorstringretell, vapi, elevenlabs või bland
migration.vendor_call_idstring | nullTeise platvormi kõne ID; null väärtuse ours korral
migration.metadataobjectKõne algatamisel saadetud metadata
migration.vendor_cost_usdstring | nullTeise platvormi teatatud kõne maksumus, kui see selle esitas
call_idinteger | nullThunderPhone'i kõne ID; null väärtuse vendor korral
statusstringvendor korral: completed, kui kõne saaja rääkis, failed, kui ta ei rääkinud, ning unknown nagu eespool. ours korral: nagu sündmuses telephony.complete

vendor-kõne korral puuduvad ThunderPhone'il arvelduse ja andmete ekstraktimise andmed: billable_minutes, billing_total_cents ja extracted_data on null, product ja voice on tühjad, recording_mode on vendor ning recording_url on teise platvormi link, kui see selle andis.

migration.rollback

Saadetakse siis, kui migratsiooni järkjärguline ümberlülitus suunab kõik kõned iseseisvalt tagasi teisele platvormile: 3 kõnet ei õnnestunud 15 minuti jooksul ThunderPhone'iga ühendada, 2 ThunderPhone'ile suunatud kõnet lõppesid enne, kui häälagent vastas, või ThunderPhone'i ülesande tulemuse määr langes teise platvormi omast rohkem kui seadistatud vahe võrra madalamale. Mitteblokeeriv, üks kord iga tagasipööramise kohta. Pärast seda on ThunderPhone'i kõneosakaal 0% ja migratsioon on peatatud, kuni keegi jätkab seda häälagendi vahekaardil Migratsioon. Andmekoormus ei sisalda telefoninumbreid, transkripte ega kõne ID-sid.

{
  "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"
}
VäliTüüpKirjeldus
migration_idUUIDMigratsioon
vendorstringretell, vapi, elevenlabs või bland
reasonstringours_failed_burst (3 nurjunud ühendust 15 minuti jooksul), dropped_calls (2 kõnet lõppesid enne, kui häälagent vastas, 30 minuti jooksul) või rate_gap (ülesande tulemuse määra vahe vähemalt rollback_min_calls hinnatud kõne puhul kummalgi poolel)
previous_percentintegerThunderPhone'i kõneosakaal enne tagasipööramist
ours_percentintegerAlati 0
stepinteger | nullAjakava etapp, millel see oli (algab 0-st)
ours / theirsobject | nullPraeguse etapi hinnatud kõned ja nende edukuse määr; theirs võib olla viimase 30 päeva näitaja, kui etapis on liiga vähe kõnesid. null, kui neid ei olnud
ours_failedintegerViimase 15 minuti jooksul loendatud nurjunud ühendused
droppedintegerViimase 30 minuti jooksul katkestatuteks loetud kõned
rolled_back_attimestamp

Seotud