ThunderPhone 2.0 er lanceret.Selvbetjening fra 2 cent/min.Læs mere om lanceringen

Webhooks

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:

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"
}
FeltTypeBeskrivelse
positionintegerTurens indeks i opkaldshistorikken — en stabil identitet til sortering
rolestringassistant (agentens tale) eller user (opkalderens tale)
textstringTurens transskriberede tekst, som den er kendt på udsendelsestidspunktet
entry_typestringTypen for den underliggende historikpost: completion (agent) eller user_turn / span (opkalder)
start_ms, end_msintegerLydforskydninger 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"
}
FeltTypeBeskrivelse
voice.idstrengOffentligt id for brugerdefineret stemme
voice.namestrengAgentstemmeværdi i formatet custom:<public_id>
voice.display_namestrengOrganisationsvendt stemmenavn
voice.languagestrengKlonens sprogkode
voice.genderstrengmale, female eller en tom streng
voice.statusstrengready for voice.ready; failed for voice.failed
voice.failure_reasonstrengTom ved succes; detalje om behandlingsfejl ved fejl
voice.created_at, voice.updated_attidsstempelISO 8601-tidsstempler
reasonstrengFejldetalje; 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"
}
FeltTypeBeskrivelse
grade.idintegerVurderings-id
grade.scoreinteger | null0–100
grade.call_outcomestringsuccess, failure, unknown eller no_conversation
grade.summarystringOpsummering på ét afsnit
grade.detected_issuesarrayProblemstrenge fundet af vurdereren
grade.statusstringAltid completed — kun fuldførte kørsler udsendes
grade.grader_modelstringHvilken vurderingsmodel der producerede resultatet (f.eks. heuristic-v1)
grade.graded_at, grade.created_attimestamp

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"
}
FeltTypeBeskrivelse
issue_report.severitystringcritical, warning eller info
issue_report.statusstringopen eller resolved
issue_report.sourcestringuser (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"
}
FeltTypeBeskrivelse
test_call_run.target_typestringagent eller phone_number
test_call_run.target_idintegerAgent-id'et eller telefonnummer-id'et, som kørslen målrettede, svarende til target_type
test_call_run.statusstringcompleted eller failed
test_call_run.call_idinteger | nullnull, når kørslen mislykkedes, før et opkald blev foretaget
test_call_run.error_messagestringTom 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"
}
FeltTypeBeskrivelse
event_id (i data)UUIDId for advarslens udløsning — adskilt fra konvoluttens leverings-event_id
rule_id, rule_nameUUID, strengReglen, der blev udløst
metricstrengsuccess_rate, failure_rate, avg_score, call_volume eller suite_regression
comparatorstrenglt, lte, gt eller gte
metric_valuetalMetrikkens værdi i vinduet, da reglen blev udløst
thresholdtalDen konfigurerede tærskel
window_hoursheltalLøbende evalueringsvindue
fired_attidsstempel

Se vejledningen til advarsler for at oprette regler, metrikker, nedkølingsperioder og e-mail- / Slack-kanaler.


Relateret