ThunderPhone 2.0 er lansert.Kom i gang selv, fra 2 ¢/min.Les mer om lanseringen

Webhooks

Hendelseskatalog

Alle webhook-hendelsestyper ThunderPhone sender ut.

Hver webhook-tekst har et type-felt med en verdi som er én av hendelsestypene på denne siden. Når du abonnerer på et endepunkt, må events-matrisen inneholde hendelsestypene du vil ha (eller være tom for å abonnere på alt — med unntak av hendelsene per tur telephony.turn / web.turn, som bare leveres til endepunkter som navngir dem eksplisitt).

To leveringsstiler overfører disse hendelsene:

  • Endepunktleveringer er alltid ikke-blokkerende varsler med nye forsøk: svar med en hvilken som helst 2xx-kode; konvolutten inneholder en event_id for deduplisering.
  • Blokkerende utvekslinger kjøres bare på den eldre webhooken med én URL: forespørselen om konfigurasjon for telephony.incoming / web.incoming (numre i webhook-modus og widget-nøkler, 10 s tidsavbrudd) og verktøysutsending i webhook-modus. Svaret ditt former den aktive samtalen.

Eksempelnedlastene nedenfor viser endepunktkonvolutten i overføringsrekkefølgen sin (nøkler sortert alfabetisk: data, event_id, type); eldre leveringer inneholder samme data uten event_id.

Anropshendelser

telephony.incoming

Sendes når et innkommende anrop når ett av telefonnumrene dine. Leveringer til endepunkter er fire-and-forget-varsler som sendes for hvert innkommende anrop, enten nummeret er konfigurert med en agent eller webhook. Numre uten en tilordnet agent mottar i tillegg den blokkerende konfigurasjonsforespørselen på den eldre webhooken — se telephony.incoming / web.incoming for fullt skjema for forespørsel / 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 innkommende eller utgående telefonianrop avsluttes. Ikke-blokkerende. Inkluderer transkripsjonen, opptaks-URL når tilgjengelig, og faktureringssammendrag. Se telephony.complete / web.complete for payloadskjemaet.

telephony.tool

Sendes etter at et telefonianrop har kalt et funksjonsverktøy. Ikke-blokkerende revisjonsvarsel — verktøyet er allerede kjørt når denne hendelsen leveres; den dekker dine egne funksjonsverktøy (ikke innebygde verktøy, kunnskapsbase-, app-tilkoblings- eller MCP-verktøy).

{
  "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 resultatet som ble kjørt: {"status": <http status>, "response": <your endpoint's JSON>} ved suksess, eller {"status": <status>, "error": "<message>"} ved feil.

telephony.turn

Sendes mens et telefonianrop pågår, én gang for hver taleholdige tur idet den skjer — agentens talte fullføringer og innringerens transkriberte turer. Lar deg følge samtalen direkte via vanlige webhooks i stedet for å polle GET /v1/calls/{call_id}/transcript. Ikke-blokkerende.

{
  "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"
}
FeltTypeBeskrivelse
positionintegerTurens indeks i anropshistorikken — en stabil identitet for sortering
rolestringassistant (agenttale) eller user (innringertale)
textstringTurens transkripsjonstekst slik den er kjent på utsendingstidspunktet
entry_typestringDen underliggende typen historikkoppføring: completion (agent), eller user_turn / span (innringer)
start_ms, end_msintegerLydforskyvninger i ms siden anropet startet; finnes bare når avspillingstidspunktet allerede var kjent på utsendingstidspunktet

web.incoming

Webkanalekvivalenten til telephony.incoming, sendt når en webwidget-økt eller et mikrofontestanrop i byggeren starter. Leveringer til endepunkter er fire-and-forget for hver webøkt. Publiserbare nøkler i mode="webhook" mottar i tillegg den blokkerende konfigurasjonsforespørselen på den eldre webhooken — den blokkerende forespørselen har en annen 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 alltid den bokstavelige verdien "web". For widgetøkter i webhook-modus er to_number tomt (øktens agentnummer tilordnes etter konfigurasjon); for mikrofontestanrop i byggeren er origin_domain og publishable_key_prefix tomme.

web.complete

Webkanalekvivalenten til telephony.complete, som dekker anrop fra webwidgeter (direction: "web") og mikrofontestanrop i byggeren (direction: "test"). Ikke-blokkerende. Samme payloadform som telephony.complete, pluss origin_domain, med from_number satt til "web".

web.tool

Webkanalekvivalenten til telephony.tool. data inneholder origin_domain i stedet for from_number / to_number.

web.turn

Webkanalekvivalenten til telephony.turn, som dekker anrop fra webwidgeter og mikrofontestanrop i byggeren. Samme payload- form, med origin_domain i stedet for from_number / to_number. I likhet med telephony.turn krever den et eksplisitt abonnement — den leveres aldri gjennom en tom events-array.


Stemmehendelser

Opprettelse av tilpassede stemmer skjer asynkront. Disse ikke-blokkerende hendelsene lar deg reagere på et endelig resultat i stedet for å spørre endepunktet for klonedetaljer.

voice.ready

Sendes når en tilpasset stemme er ferdig behandlet og kan tilordnes til 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 av en tilpasset stemme ender i en permanent feil.

{
  "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"
}
FeltTypeBeskrivelse
voice.idstringOffentlig ID for tilpasset stemme
voice.namestringStemmeverdi for agenten i formatet custom:<public_id>
voice.display_namestringStemmenavn som vises for organisasjonen
voice.languagestringKlonens enkeltstående språkkode
voice.genderstringmale, female eller en tom streng
voice.statusstringready for voice.ready; failed for voice.failed
voice.failure_reasonstringTom ved suksess; detalj om behandlingsfeil ved feil
voice.created_at, voice.updated_attimestampISO 8601-tidsstempler
reasonstringFeildetalj; finnes bare i voice.failed

Kvalitetshendelser

call.graded

Sendes hver gang en AI-vurdering fullføres for et anrop. Blokkerer ikke.

{
  "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"
}
FeltTypeBeskrivelse
grade.idintegerVurderings-ID
grade.scoreinteger | null0–100
grade.call_outcomestringsuccess, failure, unknown eller no_conversation
grade.summarystringSammendrag på ett avsnitt
grade.detected_issuesarrayProblemstrenger funnet av vurdereren
grade.statusstringAlltid completed — bare fullførte kjøringer sender hendelser
grade.grader_modelstringHvilken vurderingsmodell som produserte resultatet (f.eks. heuristic-v1)
grade.graded_at, grade.created_attimestamp

issue.reported

Sendes når en problemrapport opprettes — enten meldt inn av en bruker fra dashbordet (source: "user") eller automatisk av anropsvurdering (source: "system"). Blokkerer ikke.

{
  "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"
}
FeltTypeBeskrivelse
issue_report.severitystringcritical, warning eller info
issue_report.statusstringopen eller resolved
issue_report.sourcestringuser (meldt inn fra dashbordet) eller system (opprettet av vurdering)

Hendelser for testanrop

test-call.completed

Sendes når en testanropskjøring når en endelig status — completed eller failed, inkludert kjøringer som mislyktes ved oppstart og aldri opprettet et anrop. Blokkerer ikke. Nyttig for å koble CI-kjøringer i batch til chat- og varslingssystemene dine.

{
  "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"
}
FeltTypeBeskrivelse
test_call_run.target_typestringagent eller phone_number
test_call_run.target_idintegerAgent-ID-en eller telefonnummer-ID-en som kjøringen var rettet mot, i samsvar med target_type
test_call_run.statusstringcompleted eller failed
test_call_run.call_idinteger | nullnull når kjøringen mislyktes før et anrop ble foretatt
test_call_run.error_messagestringTom ved vellykket kjøring

Varselhendelser

alert.triggered

Sendes når en varselregel med kanalen Lever til utviklerwebhooks aktivert krysser terskelen sin. Ikke-blokkerende. En regel utløses én gang og respekterer deretter nedkjølingsperioden, slik at et vedvarende brudd produserer én hendelse per nedkjølingsvindu.

{
  "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"
}
FeltTypeBeskrivelse
event_id (i data)UUIDVarslets utløsnings-ID — forskjellig fra konvoluttens leverings-event_id
rule_id, rule_nameUUID, strengRegelen som ble utløst
metricstrengsuccess_rate, failure_rate, avg_score, call_volume eller suite_regression
comparatorstrenglt, lte, gt eller gte
metric_valuetallMetrikkens verdi i vinduet da regelen ble utløst
thresholdtallDen konfigurerte terskelen
window_hoursheltallEtterfølgende evalueringsvindu
fired_attidsstempel

Se veiledningen for varsler for å opprette regler, metrikk, nedkjølingsperioder og e-post- og Slack-kanaler.


Relatert