ThunderPhone 2.0 je tady.Spustíte sami, od 2 ¢/min.Přečíst oznámení

Webhooks

Koncové body webhooků

Spravujte více adres URL webhooků s tajnými klíči a filtry událostí pro jednotlivé koncové body.

Systém webhooků založený na koncových bodech vám umožňuje zaregistrovat více cílů pro každou organizaci, přičemž každý má vlastní tajný klíč, vlastní stav a vlastní odběr podmnožiny typů událostí. Toto je doporučený model pro všechny nové integrace.

Porovnejte jej se starším webhookem s jednou adresou URL, který je zachován kvůli zpětné kompatibilitě, ale podporuje pouze jednu adresu URL na organizaci.

Koncové body

MetodaCestaPožadovaná rolePopis
GET/v1/developer/webhook-endpointsadmin+Vypsat endpointy
POST/v1/developer/webhook-endpointsadmin+Vytvořit endpoint
PATCH/v1/developer/webhook-endpoints/{endpoint_id}admin+Aktualizovat štítek / URL / události / stav
DELETE/v1/developer/webhook-endpoints/{endpoint_id}admin+Odstranit endpoint
POST/v1/developer/webhook-endpoints/{endpoint_id}/rotate-secretadmin+Nahradit tajný klíč pro podpis
POST/v1/developer/webhook-endpoints/{endpoint_id}/testadmin+Odeslat podepsané testovací doručení
GET/v1/developer/webhook-deliveriesadmin+Zkontrolovat nedávné výsledky doručení endpointů a starších doručení

Objekt koncového bodu

{
  "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"
}
PoleTypPopis
idUUIDID koncového bodu
labelřetězecZobrazovaný název, 1–120 znaků
urlřetězecAdresa URL HTTPS; pro vývoj je povoleno http://localhost
eventspole řetězcůTypy odebíraných událostí (viz platné hodnoty). Prázdné pole odebírá všechny události kromě událostí jednotlivých tahů dostupných pouze při výslovném odběru (telephony.turn / web.turn)
statusřetězecactive, disabled (ručně pozastaveno) nebo failing (nastaví se automaticky, když doručení vyčerpá svůj 24hodinový plán opakování bez jediného 2xx)
agent_idcelé číslo | nullHlasový agent, pro kterého je tento koncový bod vymezen; null znamená pro celou organizaci
agent_nameřetězec | nullNázev hlasového agenta, pro kterého je koncový bod vymezen, nebo null pro koncový bod platný pro celou organizaci
secret_hintřetězecPrvní 4 a poslední 4 znaky podpisového tajného klíče s výpustkou (a1b2…9f0e) — stačí k porovnání s tajným klíčem uloženým lokálně, aniž by se odhalila celá hodnota
paused_atčasové razítko | nullKdy ThunderPhone nastavil koncový bod na failing. null, dokud je active nebo disabled
pause_last_errorřetězecPoslední chyba doručení při pozastavení koncového bodu, například HTTP 503: Service Unavailable. Prázdné, pokud stav není failing
pause_undelivered_countcelé číslo | nullUdálosti nedoručené od posledního úspěšného doručení koncového bodu, započítané při jeho pozastavení
created_at, updated_atčasové razítko

Platné typy událostí

events se ověřuje podle přesně této sady — hodnoty mimo seznam vrátí 400. Tvar datové části jednotlivých typů najdete v katalogu událostí.

  • telephony.incoming, telephony.complete, telephony.tool, telephony.turn
  • web.incoming, web.complete, web.tool, web.turn
  • sms.sent, sms.failed
  • sms.received (rezervováno; zatím se nevysílá)
  • call.graded, call.data_extracted, call.transfer_completed
  • campaign.completed
  • issue.reported, issue.escalated
  • test-call.completed
  • alert.triggered

issue.escalated nemá kontext agenta a doručuje se pouze koncovým bodům pro celou organizaci.

voice.ready a voice.failed nelze vybrat explicitně. Chcete-li je přijímat, vytvořte koncový bod pro celou organizaci s events: []. Prázdný seznam událostí přijímá všechny podporované události kromě telephony.turn a web.turn, které musí být vybrány explicitně.

Stavy koncového bodu

  • active — doručování probíhá normálně.
  • disabled — ručně pozastaveno pomocí PATCH. Neodesílají se žádné požadavky. Stav endpointu disabled nikdy neměníme; o jeho přepnutí zpět na active vždy rozhodujete vy.
  • failing — nastaví se automaticky, když doručování do endpointu vyčerpá celý plán opakování (8 pokusů během 24 hodin), aniž by kdy obdrželo odpověď 2xx. Endpoint ve stavu selhání nepřijímá žádný další provoz. Když k tomu dojde, odešleme e-mail vlastníkům a správcům vaší organizace a řídicí panel zobrazí pozastavený endpoint s tlačítkem Znovu aktivovat. Po opravě endpointu pomocí PATCH změňte jeho stav zpět na active; doručování, jehož plán opakování ještě nevypršel, bude pokračovat tam, kde skončilo.

Výpis koncových bodů

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

Vrací pole objektů koncových bodů. Předejte ?agent_id=42, chcete-li vrátit pouze koncové body omezené na tohoto agenta.

Koncové body omezené na agenta

Koncové body pro celou organizaci přijímají všechny odpovídající události. Koncový bod s agent_id přijímá pouze odpovídající události pro hovory vyřízené daným agentem; události bez kontextu agenta, jako například alert.triggered, jej nikdy nedosáhnou. Tyto koncové body můžete také vytvářet a spravovat v sekci Webhooky editoru agenta.


Vytvoření endpointu

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"]

Pole požadavku

PoleTypPovinnéPopis
labelřetězecano1–120 znaků
urlřetězecanoHTTPS URL (http je povoleno pouze pro localhost / 127.0.0.1)
eventspolenePrázdné/vynechané pole přihlásí odběr všech událostí kromě telephony.turn / web.turn, které vyžadují výslovný odběr. Musí používat hodnoty uvedené v části Platné typy událostí; duplicity jsou odstraněny
agent_idcelé číslo | nullneOmezí doručování na agenta v této organizaci; pro endpoint platný pro celou organizaci pole vynechte nebo použijte null

Vrací 201 Created s objektem endpointu a dalším polem secret na nejvyšší úrovni obsahujícím nezpracovaný podpisový klíč — 48znakový hexadecimální řetězec:

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

Aktualizace endpointu

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"]
  }'
PoleTypPopis
labelřetězec
urlřetězec
eventspole
statusřetězecactive nebo disabled. Nastavením active znovu povolíte endpoint, který server označil jako failing
agent_idcelé číslo | nullNastavte ID agenta pro omezení endpointu, nebo null, aby platil pro celou organizaci

Vrací 200 OK s aktualizovaným objektem endpointu.


Obnovení podpisového tajemství

Nahraďte podpisové tajemství endpointu, například pokud se ztratilo nebo mohlo uniknout. Pro endpoint vázaný na agenta můžete také použít dashboard: otevřete sekci Webhooky agenta a u endpointu vyberte Znovu vygenerovat tajemství. Endpointy platné pro celou organizaci se obnovují prostřednictvím API.

cURL
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 '{}'
PoleTypPovinnéPopis
include_copiesbooleanneVýchozí hodnota je true. Nové tajemství také přiřadí ostatním endpointům vaší organizace, které mají stejnou adresu URL a stejné aktuální tajemství, například kopiím tohoto endpointu u jiných agentů, aby jeden příjemce nadále ověřoval pomocí jednoho tajemství

Vrací 200 OK:

{
  "endpoint": { "id": "c4d5e6f7-...", "secret_hint": "7f3a…c21d", "...": "..." },
  "secret": "7f3a90b2c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5c21d",
  "rotated_endpoint_ids": ["c4d5e6f7-..."]
}
PoleTypPopis
endpointobjectObjekt endpointu s novým secret_hint
secretstringNové podpisové tajemství. Vrací se pouze v této odpovědi
rotated_endpoint_idspole UUIDKaždý endpoint, který nyní používá nové tajemství

Odeslání testovacího doručení

Odešlete syntetickou událost webhook.test do jednoho endpointu pomocí standardního procesu doručení, včetně kanonické serializace JSON, obou hlaviček podpisu, záznamu o doručení a evidence opakovaných pokusů. Test cílí na vybraný endpoint bez ohledu na jeho filtr events.

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

Koncový bod obdrží obálku podobnou této:

{
  "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 vrátí 200 OK po prvním pokusu, i když cíl vrátí chybu. Výsledek doručení zjistíte kontrolou success, status, response_code a error:

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

webhook.test je syntetická událost a nelze ji přidat k odběru events koncového bodu. Pokud první pokus selže, ThunderPhone jej přibližně o minutu později jednou zopakuje a poté se zastaví; doručení pak zobrazí status: "failed" v části Ladění doručení. Testovací doručení nikdy neoznačí koncový bod jako failing.

Chcete-li nakonfigurovat spouštěč pro skutečnou strukturu události, předejte volitelný parametr event_type. Doručení je stále syntetické a obsahuje "sample": true; ukázky související s hovory používají call_id: 0 a 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 přijímá libovolnou hodnotu z Platných typů událostí. Jeho vynechání zachová obecné chování webhook.test.


Odstranění koncového bodu

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

Vrátí 204 No Content. Doručování na URL se okamžitě zastaví; probíhající opakované pokusy jsou zrušeny.


Ladění doručení

Než dospějete k závěru, že webhook nebyl odeslán, zkontrolujte GET /v1/developer/webhook-deliveries. Zobrazuje nedávné pokusy z obou systémů webhooků, včetně ID hovoru, původu URL, stavu HTTP, počtu pokusů, kategorie povoleného selhání a času dalšího opakovaného pokusu. Nikdy nevrací datovou část události, přepis, uložený text chyby, tělo odpovědi ani cestu URL.

Stejnou nedávnou historii můžete zobrazit také v části Agenti → vyberte agenta → Webhooky → Poslední doručení. Řádky zobrazují štítek koncového bodu a původ URL použitý při posledním pokusu. Jde o provozní stav, nikoli neměnný auditní záznam: odstraněním koncového bodu se odstraní také jeho řádky doručení.

U chyby n8n 404 nejprve ověřte, že je pracovní postup aktivní, přijímá POST a používá produkční URL webhooku namísto testovací URL. Chyba 401 nebo 403 ukazuje na ověřování nebo validaci podpisu; časové limity ukazují na latenci nebo dostupnost cíle; chyby TLS ukazují na řetězec certifikátů, název hostitele nebo platnost.


Související