Open in
Webhook-endepunkter
Administrer flere webhook-URL-er med hemmeligheter per endepunkt og hendelsesfiltre.
Det endepunktbaserte webhook-systemet lar deg registrere flere destinasjoner per organisasjon, hver med sin egen hemmelighet, sin egen status og sitt eget abonnement på et utvalg hendelsestyper. Dette er den anbefalte modellen for alle nye integrasjoner.
Sammenlign med eldre enkelt-URL-webhook, som beholdes for bakoverkompatibilitet, men bare støtter én URL per organisasjon.
Endepunkter
| Metode | Sti | Påkrevd rolle | Beskrivelse |
|---|---|---|---|
GET | /v1/developer/webhook-endpoints | admin+ | Vis endepunkter |
POST | /v1/developer/webhook-endpoints | admin+ | Opprett et endepunkt |
PATCH | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | Oppdater etikett / URL / hendelser / status |
DELETE | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | Slett et endepunkt |
POST | /v1/developer/webhook-endpoints/{endpoint_id}/rotate-secret | admin+ | Bytt ut signeringshemmeligheten |
POST | /v1/developer/webhook-endpoints/{endpoint_id}/test | admin+ | Send en signert testlevering |
GET | /v1/developer/webhook-deliveries | admin+ | Inspiser nylige leveringsresultater for endepunkter og eldre integrasjoner |
Endepunktobjekt
{
"id": "c4d5e6f7-...",
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"],
"status": "active",
"agent_id": 42,
"agent_name": "Support Agent",
"secret_hint": "a1b2…9f0e",
"paused_at": null,
"pause_last_error": "",
"pause_undelivered_count": null,
"created_at": "2026-04-20T18:24:10.113Z",
"updated_at": "2026-04-20T18:24:10.113Z"
}| Felt | Type | Beskrivelse |
|---|---|---|
id | UUID | Endepunkt-ID |
label | string | Visningsnavn, 1–120 tegn |
url | string | HTTPS-URL; http://localhost er tillatt for utvikling |
events | array of string | Abonnerte hendelsestyper (se gyldige verdier). Et tomt array abonnerer på alle hendelser bortsett fra hendelsene per tur som må angis eksplisitt (telephony.turn / web.turn) |
status | string | active, disabled (satt på pause manuelt) eller failing (settes automatisk når en levering bruker opp sin 24-timers plan for nye forsøk uten én eneste 2xx) |
agent_id | integer | null | Stemmeagenten dette endepunktet er avgrenset til; null betyr organisasjonsomfattende |
agent_name | string | null | Navnet på den avgrensede stemmeagenten, eller null for et organisasjonsomfattende endepunkt |
secret_hint | string | De første 4 og siste 4 tegnene i signeringshemmeligheten med en ellipse (a1b2…9f0e) — nok til å kryssreferere hemmeligheten du lagret lokalt uten å eksponere hele verdien |
paused_at | timestamp | null | Når ThunderPhone satte endepunktet til failing. null mens det er active eller disabled |
pause_last_error | string | Den siste leveringsfeilen da endepunktet ble satt på pause, for eksempel HTTP 503: Service Unavailable. Tom med mindre det er failing |
pause_undelivered_count | integer | null | Hendelser som ikke er levert siden endepunktets siste vellykkede levering, telt da det ble satt på pause |
created_at, updated_at | timestamp |
Gyldige hendelsestyper
events valideres mot nøyaktig dette settet — verdier utenfor listen
returnerer 400. Se Hendelseskatalog for formen på
nyttelasten til hver type.
telephony.incoming,telephony.complete,telephony.tool,telephony.turnweb.incoming,web.complete,web.tool,web.turnsms.sent,sms.failedsms.received(reservert; ennå ikke sendt)call.graded,call.data_extracted,call.transfer_completedcampaign.completedissue.reported,issue.escalatedtest-call.completedalert.triggered
issue.escalated har ingen stemmeagentkontekst og leveres bare til
organisasjonsomfattende endepunkter.
voice.ready og voice.failed kan ikke velges eksplisitt. For å motta
dem må du opprette et organisasjonsomfattende endepunkt med events: []. En tom
hendelsesliste mottar alle støttede hendelser unntatt telephony.turn og web.turn,
som må velges eksplisitt.
Endepunktstatuser
active— leveringer flyter normalt.disabled— satt på pause manuelt viaPATCH. Ingen forespørsler sendes. Vi endrer aldri statusen til etdisabled-endepunkt; det er alltid du som velger å sette det tilbake tilactive.failing— angis automatisk når en levering til endepunktet bruker opp hele forsøksplanen sin på nytt (8 forsøk over 24 timer) uten noen gang å få en 2xx. Et endepunkt med feil mottar ingen ytterligere trafikk. Vi sender e-post til organisasjonens eiere og administratorer når dette skjer, og dashbordet viser det pausede endepunktet med en Reaktiver-knapp. Når endepunktet er rettet, bruker duPATCHfor å sette statusen tilbake tilactive; leveringer der forsøksplanen ennå ikke er utløpt, fortsetter der de slapp.
List opp endepunkter
curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"Returnerer en matrise med endepunktobjekter.
Send ?agent_id=42 for å returnere bare endepunkter som er avgrenset til den stemmeagenten.
Endepunkter avgrenset til stemmeagent
Organisasjonsomfattende endepunkter mottar alle samsvarende hendelser. Et endepunkt med
agent_id mottar bare samsvarende hendelser for samtaler håndtert av den stemmeagenten;
hendelser uten stemmeagentkontekst, som alert.triggered, når det aldri. Du
kan også opprette og administrere disse endepunktene fra stemmeagentbyggerens
seksjon Webhooks.
Opprett et endepunkt
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"]
}'result = requests.post(
"https://api.thunderphone.com/v1/developer/webhook-endpoints",
headers={"Authorization": "Bearer sk_live_YOUR_API_KEY"},
json={
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"],
},
).json()
secret = result["secret"]
endpoint_id = result["id"]Forespørselsfelt
| Felt | Type | Obligatorisk | Beskrivelse |
|---|---|---|---|
label | string | ja | 1–120 tegn |
url | string | ja | HTTPS-URL (http er bare tillatt for localhost / 127.0.0.1) |
events | array | nei | Tom/utelatt abonnerer på alle hendelser unntatt telephony.turn / web.turn, som krever et eksplisitt abonnement. Må bruke verdiene oppført i Gyldige hendelsestyper; duplikater fjernes |
agent_id | integer | null | nei | Begrens leveringen til en stemmeagent i denne organisasjonen; utelat eller bruk null for et organisasjonsomfattende endepunkt |
Returnerer 201 Created med endepunktobjektet pluss
et ekstra secret-felt på øverste nivå som inneholder den rå signeringsnøkkelen — en
48-tegns heksadesimal streng:
{
"id": "c4d5e6f7-…",
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"],
"status": "active",
"secret_hint": "a1b2…9f0e",
"created_at": "2026-04-20T18:24:10.113Z",
"updated_at": "2026-04-20T18:24:10.113Z",
"secret": "a1b2c37e08d94f5b16a2c8d90e7f3a4b5c6d7e8f90a19f0e"
}Oppdater et endepunkt
curl -X PATCH https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "Production — Call + Grade events",
"events": ["telephony.incoming", "telephony.complete", "call.graded"]
}'| Felt | Type | Beskrivelse |
|---|---|---|
label | string | |
url | string | |
events | array | |
status | string | active eller disabled. Angi active for å aktivere på nytt et endepunkt som serveren har merket som failing |
agent_id | integer | null | Angi en stemmeagent-ID for å begrense endepunktet, eller null for å gjøre det organisasjonsomfattende |
Returnerer 200 OK med det oppdaterte endepunktobjektet.
Roter signeringshemmeligheten
Erstatt et endepunkts signeringshemmelighet, for eksempel når den er mistet eller kan ha blitt lekket. For et agentavgrenset endepunkt kan du også bruke dashbordet: Åpne agentens Webhooker-seksjon og velg Regenerer hemmelighet på endepunktet. Organisasjonsomfattende endepunkter roteres via API-et.
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../rotate-secret \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'| Felt | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
include_copies | boolsk | nei | Standardverdien er true. Gir også den nye hemmeligheten til organisasjonens andre endepunkter som har samme URL og samme gjeldende hemmelighet, for eksempel kopier av dette endepunktet på andre agenter, slik at én mottaker fortsatt verifiserer med én hemmelighet |
Returnerer 200 OK:
{
"endpoint": { "id": "c4d5e6f7-...", "secret_hint": "7f3a…c21d", "...": "..." },
"secret": "7f3a90b2c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5c21d",
"rotated_endpoint_ids": ["c4d5e6f7-..."]
}| Felt | Type | Beskrivelse |
|---|---|---|
endpoint | objekt | Endepunktobjektet med den nye secret_hint |
secret | streng | Den nye signeringshemmeligheten. Returneres bare i dette svaret |
rotated_endpoint_ids | matrise med UUID-er | Alle endepunkter som nå bruker den nye hemmeligheten |
Send en testlevering
Send en syntetisk webhook.test-hendelse til ett endepunkt ved hjelp av den vanlige
leveringsprosessen, inkludert kanonisk JSON-serialisering, begge
signaturhodene, leveringslogging og registrering av nye forsøk.
Testen retter seg mot det valgte endepunktet uavhengig av events-filteret.
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"Endepunktet mottar en konvolutt som denne:
{
"data": {
"message": "ThunderPhone webhook test",
"sent_at": "2026-07-17T20:12:34.567890+00:00"
},
"event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
"type": "webhook.test"
}API-et returnerer 200 OK etter første forsøk, selv om destinasjonen
returnerer en feil. Kontroller success, status, response_code og error
for leveringsresultatet:
{
"success": true,
"event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
"event_type": "webhook.test",
"status": "delivered",
"response_code": 204,
"error": ""
}webhook.test er syntetisk og kan ikke legges til i et endepunkts events-
abonnement. Hvis første forsøk mislykkes, prøver ThunderPhone på nytt én gang
omtrent ett minutt senere og stopper deretter. Leveringen viser da status: "failed"
under Feilsøk leveringer. En testlevering markerer aldri
endepunktet som failing.
For å konfigurere en utløser mot en ekte hendelsesstruktur, kan du sende et valgfritt
event_type. Leveringen er fortsatt syntetisk og inneholder "sample": true;
anropsrelaterte eksempler bruker call_id: 0 og agent_id: 0.
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_type":"call.graded"}'event_type godtar enhver verdi fra Gyldige hendelsestyper.
Hvis du utelater det, beholdes den generiske webhook.test-atferden.
Slett et endepunkt
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"Returnerer 204 No Content. Levering til URL-en stopper umiddelbart;
pågående nye forsøk avbrytes.
Feilsøk leveringer
Før du konkluderer med at en webhook ikke ble sendt, bør du kontrollere
GET /v1/developer/webhook-deliveries.
Den viser nylige forsøk fra begge webhook-systemene, inkludert anrops-ID,
URL-opprinnelse, HTTP-status, antall forsøk, tillatt feilkategori og tidspunkt
for neste forsøk. Den returnerer aldri hendelsesnyttelasten, transkripsjonen, lagret
feiltekst, svartekst eller URL-bane.
Du kan også se den samme nylige historikken i Agenter → velg en agent → Webhooks → Nylige leveringer. Radene viser endepunktetiketten og URL-opprinnelsen som ble brukt i det siste forsøket. Dette er driftsstatus, ikke en uforanderlig revisjonslogg: Hvis du sletter et endepunkt, slettes også leveringsradene.
Ved en n8n-404 må du først bekrefte at arbeidsflyten er aktiv, godtar POST og bruker
produksjonswebhook-URL-en i stedet for test-URL-en. En 401 eller 403 peker på
autentisering eller signaturvalidering; tidsavbrudd peker på forsinkelse
eller tilgjengelighet hos destinasjonen; TLS-feil peker på sertifikatkjeden,
vertsnavnet eller utløpsdatoen.