Open in
Webhook-slutpunkter
Hantera flera webhook-URL:er med hemligheter och händelsefilter per slutpunkt.
Det endpointbaserade webhook-systemet låter dig registrera flera destinationer per organisation, var och en med sin egen hemlighet, sin egen status och sin egen prenumeration på en delmängd av händelsetyper. Detta är den rekommenderade modellen för alla nya integrationer.
Jämför med den äldre webhooken med en enda URL, som behålls för bakåtkompatibilitet men endast stöder en URL per organisation.
Slutpunkter
| Metod | Sökväg | Obligatorisk roll | Beskrivning |
|---|---|---|---|
GET | /v1/developer/webhook-endpoints | admin+ | Lista slutpunkter |
POST | /v1/developer/webhook-endpoints | admin+ | Skapa en slutpunkt |
PATCH | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | Uppdatera etikett / URL / händelser / status |
DELETE | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | Ta bort en slutpunkt |
POST | /v1/developer/webhook-endpoints/{endpoint_id}/rotate-secret | admin+ | Ersätt signeringshemligheten |
POST | /v1/developer/webhook-endpoints/{endpoint_id}/test | admin+ | Skicka en signerad testleverans |
GET | /v1/developer/webhook-deliveries | admin+ | Granska senaste leveransresultat för slutpunkter och äldre integrationer |
Slutpunktsobjekt
{
"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"
}| Fält | Typ | Beskrivning |
|---|---|---|
id | UUID | Slutpunkts-id |
label | sträng | Visningsnamn, 1–120 tecken |
url | sträng | HTTPS-URL; http://localhost tillåts för utveckling |
events | matris av strängar | Prenumererade händelsetyper (se giltiga värden). En tom matris prenumererar på alla händelser utom händelser per tur som endast kan prenumereras explicit på (telephony.turn / web.turn) |
status | sträng | active, disabled (pausad manuellt) eller failing (ställs in automatiskt när en leverans förbrukar sitt återförsöksschema på 24 timmar utan en enda 2xx-respons) |
agent_id | heltal | null | Röstagenten som denna slutpunkt är begränsad till; null innebär organisationsomfattande |
agent_name | sträng | null | Namnet på den begränsade röstagenten, eller null för en organisationsomfattande slutpunkt |
secret_hint | sträng | De första 4 och sista 4 tecknen i signeringshemligheten med en ellips (a1b2…9f0e) — tillräckligt för att jämföra med hemligheten du sparat lokalt utan att exponera hela värdet |
paused_at | tidsstämpel | null | När ThunderPhone satte slutpunkten till failing. null medan den är active eller disabled |
pause_last_error | sträng | Det senaste leveransfelet när slutpunkten pausades, till exempel HTTP 503: Service Unavailable. Tomt om den inte är failing |
pause_undelivered_count | heltal | null | Händelser som inte har levererats sedan slutpunktens senaste lyckade leverans, räknade när den pausades |
created_at, updated_at | tidsstämpel |
Giltiga händelsetyper
events valideras mot exakt denna uppsättning — värden utanför listan
returnerar 400. Se Händelsekatalog för varje typs
payload-format.
telephony.incoming,telephony.complete,telephony.tool,telephony.turnweb.incoming,web.complete,web.tool,web.turnsms.sent,sms.failedsms.received(reserverad; ännu inte skickad)call.graded,call.data_extracted,call.transfer_completedcampaign.completedissue.reported,issue.escalatedtest-call.completedalert.triggered
issue.escalated har inget agentkontext och levereras endast till
organisationsomfattande slutpunkter.
voice.ready och voice.failed kan inte väljas uttryckligen. Skapa en
organisationsomfattande slutpunkt med events: [] för att ta emot dem. En tom
händelselista tar emot alla händelser som stöds utom telephony.turn och
web.turn, som måste väljas uttryckligen.
Slutpunktsstatusar
active— leveranser fungerar normalt.disabled— pausad manuellt viaPATCH. Inga förfrågningar skickas. Vi ändrar aldrig statusen för endisabled-endpoint; att ändra tillbaka den tillactiveär alltid ditt beslut.failing— ställs in automatiskt när en leverans till endpointen förbrukar hela sitt återförsöksschema (8 försök under 24 timmar) utan att någonsin få en 2xx. En felande endpoint tar inte emot någon ytterligare trafik. Vi skickar e-post till organisationens ägare och administratörer när detta händer, och instrumentpanelen visar den pausade endpointen med en knapp för att återaktivera. När endpointen har åtgärdats, ändra dess status medPATCHtillbaka tillactive; leveranser vars återförsöksschema ännu inte har löpt ut återupptas där de slutade.
Lista slutpunkter
curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"Returnerar en array med slutpunktsobjekt.
Ange ?agent_id=42 för att endast returnera slutpunkter som är begränsade till den agenten.
Agentspecifika slutpunkter
Organisationsomfattande slutpunkter tar emot varje matchande händelse. En slutpunkt med
agent_id tar endast emot matchande händelser för samtal som hanteras av den agenten;
händelser utan agentkontext, exempelvis alert.triggered, når den aldrig. Du kan
också skapa och hantera dessa slutpunkter från avsnittet
Webhooks i agentbyggaren.
Skapa en slutpunkt
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"]Begärandefält
| Fält | Typ | Obligatoriskt | Beskrivning |
|---|---|---|---|
label | string | ja | 1–120 tecken |
url | string | ja | HTTPS-URL (http tillåts endast för localhost / 127.0.0.1) |
events | array | nej | Tomt/utelämnat prenumererar på alla händelser utom telephony.turn / web.turn, som kräver en uttrycklig prenumeration. Måste använda värdena som anges i Giltiga händelsetyper; dubbletter tas bort |
agent_id | integer | null | nej | Begränsa leveransen till en agent i den här organisationen; utelämna eller använd null för en organisationsomfattande slutpunkt |
Returnerar 201 Created med slutpunktsobjektet samt
ett extra secret-fält på toppnivå som innehåller den råa signeringsnyckeln — en
hexadecimala sträng med 48 tecken:
{
"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"
}Uppdatera en slutpunkt
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"]
}'| Fält | Typ | Beskrivning |
|---|---|---|
label | string | |
url | string | |
events | array | |
status | string | active eller disabled. Ange active för att återaktivera en slutpunkt som servern har markerat som failing |
agent_id | integer | null | Ange ett agent-id för att begränsa slutpunkten, eller null för att göra den organisationsomfattande |
Returnerar 200 OK med det uppdaterade slutpunktsobjektet.
Rotera signeringshemligheten
Ersätt en slutpunkts signeringshemlighet, till exempel om den har gått förlorad eller kan ha läckt. För en agentspecifik slutpunkt kan du även använda instrumentpanelen: öppna agentens avsnitt Webhooks och välj Återskapa hemlighet på slutpunkten. Organisationsomfattande slutpunkter roteras via API:t.
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 '{}'| Fält | Typ | Obligatoriskt | Beskrivning |
|---|---|---|---|
include_copies | boolesk | nej | Standardvärdet är true. Ger även den nya hemligheten till organisationens andra slutpunkter som har samma URL och samma aktuella hemlighet, till exempel kopior av denna slutpunkt på andra agenter, så att en mottagare fortsätter att verifiera med en och samma hemlighet |
Returnerar 200 OK:
{
"endpoint": { "id": "c4d5e6f7-...", "secret_hint": "7f3a…c21d", "...": "..." },
"secret": "7f3a90b2c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5c21d",
"rotated_endpoint_ids": ["c4d5e6f7-..."]
}| Fält | Typ | Beskrivning |
|---|---|---|
endpoint | objekt | Endpoint-objektet med dess nya secret_hint |
secret | sträng | Den nya signeringshemligheten. Returneras endast i detta svar |
rotated_endpoint_ids | matris med UUID | Varje slutpunkt som nu använder den nya hemligheten |
Skicka en testleverans
Skicka en syntetisk webhook.test-händelse till en endpoint via den vanliga
leveransprocessen, inklusive kanonisk JSON-serialisering, båda
signaturhuvudena, leveransloggning och hantering av återförsök.
Testet riktas mot den valda endpointen oavsett dess events-filter.
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"Slutpunkten tar emot ett kuvert som detta:
{
"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 returnerar 200 OK efter det första försöket, även om destinationen
returnerar ett fel. Kontrollera success, status, response_code och error
för leveransresultatet:
{
"success": true,
"event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
"event_type": "webhook.test",
"status": "delivered",
"response_code": 204,
"error": ""
}webhook.test är syntetisk och kan inte läggas till i en slutpunkts events-
prenumeration. Om det första försöket misslyckas försöker ThunderPhone igen en gång
ungefär en minut senare och stoppar sedan; leveransen visas då med status: "failed"
under Felsök leveranser. En testleverans markerar aldrig
slutpunkten som failing.
Om du vill konfigurera en utlösare mot en verklig händelseform kan du skicka ett valfritt
event_type. Leveransen är fortfarande syntetisk och innehåller "sample": true;
samtalsrelaterade exempel använder call_id: 0 och 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 accepterar alla värden från Giltiga händelsetyper.
Om du utelämnar det behålls det generella webhook.test-beteendet.
Ta bort en slutpunkt
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"Returnerar 204 No Content. Leverans till URL:en stoppas omedelbart;
pågående återförsök avbryts.
Felsök leveranser
Innan du drar slutsatsen att en webhook inte skickades bör du kontrollera
GET /v1/developer/webhook-deliveries.
Den visar senaste försök från båda webhook-systemen, inklusive samtals-id,
URL-ursprung, HTTP-status, antal försök, vitlistad felkategori och tid för nästa
återförsök. Den returnerar aldrig händelsens nyttolast, transkription, lagrad feltext,
svarstext eller URL-sökväg.
Du kan även se samma senaste historik i Agenter → välj en agent → Webhooks → Senaste leveranser. Rader visar slutpunktens etikett och det URL-ursprung som användes vid det senaste försöket. Detta är driftstatus snarare än en oföränderlig granskningslogg: om du tar bort en slutpunkt tas även dess leveransrader bort.
För en n8n-404 ska du först bekräfta att arbetsflödet är aktivt, accepterar POST och använder
produktionswebhookens URL i stället för test-URL:en. En 401 eller 403 pekar på
autentisering eller signaturvalidering; tidsgränser pekar på fördröjning
eller tillgänglighet hos destinationen; TLS-fel pekar på certifikatkedjan, värdnamnet eller utgångsdatumet.