ThunderPhone 2.0 este acum disponibil.Îl configurați singur, de la 2 ¢/min.Citiți anunțul

Webhooks

Puncte terminale webhook

Gestionați mai multe URL-uri webhook cu secrete pentru fiecare punct terminal și filtre de evenimente.

Sistemul de webhook-uri bazat pe endpointuri vă permite să înregistrați mai multe destinații per organizație, fiecare cu propriul secret, propriul status și propria abonare la un subset de tipuri de evenimente. Acesta este modelul recomandat pentru toate integrările noi.

Comparați cu webhook-ul vechi cu un singur URL, care este păstrat pentru compatibilitate retroactivă, dar acceptă un singur URL per organizație.

Endpointuri

MetodăCaleRol necesarDescriere
GET/v1/developer/webhook-endpointsadmin+Listează endpointurile
POST/v1/developer/webhook-endpointsadmin+Creează un endpoint
PATCH/v1/developer/webhook-endpoints/{endpoint_id}admin+Actualizează eticheta / URL-ul / evenimentele / statusul
DELETE/v1/developer/webhook-endpoints/{endpoint_id}admin+Șterge un endpoint
POST/v1/developer/webhook-endpoints/{endpoint_id}/testadmin+Trimite o livrare de test semnată

Obiect endpoint

{
  "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"
}
CâmpTipDescriere
idUUIDID endpoint
labelșirNume afișat, 1–120 de caractere
urlșirURL HTTPS; http://localhost este permis pentru dezvoltare
eventsmatrice de șiruriTipuri de evenimente abonate (consultați valorile valide). O matrice goală se abonează la toate evenimentele, cu excepția evenimentelor explicite per tură (telephony.turn / web.turn)
statusșiractive, disabled (pus în pauză manual) sau failing (setat automat când o livrare își epuizează programul de reîncercări de 24 h fără niciun 2xx)
secret_hintșirPrimele 4 și ultimele 4 caractere ale secretului de semnare, cu puncte de suspensie (a1b2…9f0e) — suficiente pentru a corela secretul salvat local, fără a expune valoarea completă
created_at, updated_atmarcă temporală

Tipuri de evenimente valide

events este validat în raport cu acest set exact — valorile din afara listei returnează 400. Consultați Catalogul de evenimente pentru structura încărcăturii utile a fiecărui tip.

  • telephony.incoming, telephony.complete, telephony.tool, telephony.turn
  • web.incoming, web.complete, web.tool, web.turn
  • call.graded
  • issue.reported
  • test-call.completed
  • alert.triggered

Statusuri endpoint

  • active — livrările sunt efectuate normal.
  • disabled — pus în pauză manual prin PATCH. Nu sunt trimise cereri. Nu modificăm niciodată statusul unui endpoint disabled; readucerea acestuia la active vă aparține întotdeauna.
  • failing — setat automat când o livrare către endpoint își epuizează întregul program de reîncercări (8 încercări în 24 de ore) fără să primească vreodată un 2xx. Un endpoint care este în starea de eșec nu mai primește trafic. După remedierea endpointului, faceți PATCH pentru a-i readuce statusul la active; livrările al căror program de reîncercări nu s-a epuizat încă reiau de unde au rămas.

Listează endpointurile

cURL
curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Returnează o matrice de obiecte endpoint.


Creați un endpoint

cURL
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"]
  }'
Python
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"]

Câmpuri de solicitare

CâmpTipObligatoriuDescriere
labelșir de caractereda1–120 de caractere
urlșir de caracteredaURL HTTPS (http este permis numai pentru localhost / 127.0.0.1)
eventsmatricenuO valoare goală/omisă abonează la toate evenimentele, cu excepția telephony.turn / web.turn, care necesită abonare explicită. Trebuie să utilizați valorile enumerate în Tipuri de evenimente valide; duplicatele sunt eliminate

Returnează 201 Created cu obiectul Endpoint, plus un câmp suplimentar secret la nivel superior, care conține cheia brută de semnare — un șir hexazecimal de 48 de caractere:

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

Actualizați un endpoint

cURL
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"]
  }'
CâmpTipDescriere
labelșir de caractere
urlșir de caractere
eventsmatrice
statusșir de caractereactive sau disabled. Setați active pentru a reactiva un endpoint pe care serverul l-a marcat ca failing

Returnează 200 OK cu obiectul Endpoint actualizat.


Trimiteți o livrare de test

Trimiteți un eveniment sintetic webhook.test către un endpoint folosind fluxul normal de livrare, inclusiv serializarea JSON canonică, X-ThunderPhone-Signature, înregistrarea livrării și gestionarea reîncercărilor. Testul vizează endpointul selectat, indiferent de filtrul său events.

cURL
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Endpointul primește un plic precum:

{
  "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-ul returnează 200 OK după prima încercare, chiar dacă destinația returnează o eroare. Verificați success, status, response_code și error pentru rezultatul livrării:

{
  "success": true,
  "event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
  "event_type": "webhook.test",
  "status": "delivered",
  "response_code": 204,
  "error": ""
}

webhook.test este sintetic și nu poate fi adăugat la abonamentul events al unui endpoint. Dacă prima încercare eșuează, livrarea urmează același program de reîncercări ca livrările normale de evenimente.


Ștergeți un endpoint

cURL
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Returnează 204 No Content. Livrarea către URL se oprește imediat; reîncercările în curs sunt abandonate.


Resurse asociate