Webhook крайни точки
Системата за уебкуки, базирана на крайни точки, Ви позволява да регистрирате множество дестинации за организация, всяка със собствена тайна, собствен статус и собствен абонамент за подмножество от типове събития. Това е препоръчителният модел за всички нови интеграции.
Сравнете с остарелия уебкук с един URL, който се запазва за обратна съвместимост, но поддържа само един URL за организация.
Крайни точки
| Метод | Път | Изисквана роля | Описание |
|---|---|---|---|
GET | /v1/developer/webhook-endpoints | admin+ | Извеждане на списък с крайни точки |
POST | /v1/developer/webhook-endpoints | admin+ | Създаване на крайна точка |
PATCH | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | Актуализиране на етикет / URL / събития / статус |
DELETE | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | Изтриване на крайна точка |
POST | /v1/developer/webhook-endpoints/{endpoint_id}/test | admin+ | Изпращане на подписана тестова доставка |
Обект на крайна точка
{
"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"
}
| Поле | Тип | Описание |
|---|---|---|
id | UUID | Идентификатор на крайната точка |
label | string | Показвано име, 1–120 знака |
url | string | HTTPS URL; http://localhost е разрешен за разработка |
events | масив от string | Абонирани типове събития (вижте валидните стойности). Празен масив се абонира за всички събития |
status | string | active, disabled (ръчно спрян) или failing (задава се автоматично, когато доставката изчерпи 24-часовия си график за повторни опити без нито един 2xx) |
secret_hint | string | Първите 4 и последните 4 знака от тайната за подписване с многоточие (a1b2…9f0e) — достатъчни, за да сверите тайната, която сте запазили локално, без да разкривате пълната стойност |
created_at, updated_at | timestamp |
Валидни типове събития
events се валидира спрямо този точен набор — стойности извън списъка
връщат 400. Вижте Каталога на събитията за формата
на payload за всеки тип.
telephony.incoming,telephony.complete,telephony.toolweb.incoming,web.complete,web.toolcall.gradedissue.reportedtest-call.completedalert.triggered
Статуси на крайните точки
active— доставките протичат нормално.disabled— ръчно спрян чрезPATCH. Не се изпращат заявки. Ние никога не променяме статуса на крайна точка сdisabled; връщането му наactiveвинаги е Ваше решение.failing— задава се автоматично, когато доставка до крайната точка изчерпи целия си график за повторни опити (8 опита за 24 часа), без никога да получи 2xx. Крайна точка с неуспешен статус не получава допълнителен трафик. След като крайната точка бъде поправена, задайте чрезPATCHстатуса ѝ обратно наactive; доставките, чийто график за повторни опити все още не е изчерпан, продължават оттам, докъдето са стигнали.
Извеждане на списък с крайни точки
curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
Връща масив от обекти на крайни точки.
Създаване на крайна точка
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"]
Полета на заявката
| Поле | Тип | Задължително | Описание |
|---|---|---|---|
label | низ | да | 1–120 знака |
url | низ | да | HTTPS URL (http е разрешен само за localhost / 127.0.0.1) |
events | масив | не | Празна или пропусната стойност абонира за всички събития. Трябва да използвате стойностите, изброени във Валидни типове събития; дубликатите се премахват |
Връща 201 Created с обекта на крайната точка и
допълнително поле secret от най-горно ниво, съдържащо необработения ключ за подписване —
48-символен шестнадесетичен низ:
{
"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"
}
Актуализиране на крайна точка
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"]
}'
| Поле | Тип | Описание |
|---|---|---|
label | низ | |
url | низ | |
events | масив | |
status | низ | active или disabled. Задайте active, за да активирате отново крайна точка, която сървърът е маркирал като failing |
Връща 200 OK с актуализирания обект на крайната точка.
Изпращане на тестова доставка
Изпратете синтетично събитие webhook.test до една крайна точка чрез стандартния
конвейер за доставка, включително канонична JSON сериализация,
X-ThunderPhone-Signature, записване на доставката и отчитане на повторните опити.
Тестът е насочен към избраната крайна точка независимо от нейния филтър events.
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
Крайната точка получава обвивка от вида:
{
"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 връща 200 OK след първия опит, дори ако местоназначението
върне грешка. Проверете success, status, response_code и error
за резултата от доставката:
{
"success": true,
"event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
"event_type": "webhook.test",
"status": "delivered",
"response_code": 204,
"error": ""
}
webhook.test е синтетично и не може да бъде добавено към абонамента events
на крайна точка. Ако първият опит е неуспешен, доставката следва същия
график за повторни опити като обикновените доставки на събития.
Изтриване на крайна точка
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
Връща 204 No Content. Доставката до URL адреса спира незабавно;
повторните опити в ход се прекратяват.