ThunderPhone 2.0 уже доступний.Самостійне підключення — від 2 центів за хвилину.Прочитати анонс

Webhooks

Кінцеві точки вебхуків

Керуйте кількома URL-адресами вебхуків із секретами для кожної кінцевої точки та фільтрами подій.

Система вебхуків на основі кінцевих точок дає змогу зареєструвати кілька адресатів для кожної організації, кожного з окремим секретом, власним статусом і власною підпискою на підмножину типів подій. Це рекомендована модель для всіх нових інтеграцій.

Порівняйте із застарілим вебхуком з однією URL-адресою, який зберігається для зворотної сумісності, але підтримує лише одну URL-адресу на організацію.

Кінцеві точки

МетодШляхНеобхідна рольОпис
GET/v1/developer/webhook-endpointsadmin+Отримати список кінцевих точок
POST/v1/developer/webhook-endpointsadmin+Створити кінцеву точку
PATCH/v1/developer/webhook-endpoints/{endpoint_id}admin+Оновити мітку / URL-адресу / події / статус
DELETE/v1/developer/webhook-endpoints/{endpoint_id}admin+Видалити кінцеву точку
POST/v1/developer/webhook-endpoints/{endpoint_id}/testadmin+Надіслати підписану тестову доставку

Об’єкт кінцевої точки

{
  "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"
}
ПолеТипОпис
idUUIDІдентифікатор кінцевої точки
labelрядокВідображувана назва, 1–120 символів
urlрядокHTTPS URL-адреса; http://localhost дозволено для розробки
eventsмасив рядківТипи подій за підпискою (див. припустимі значення). Порожній масив підписує на всі події, крім явних подій для кожного ходу (telephony.turn / web.turn)
statusрядокactive, disabled (призупинено вручну) або failing (встановлюється автоматично, коли доставка вичерпує свій 24-годинний графік повторних спроб без жодної відповіді 2xx)
secret_hintрядокПерші 4 й останні 4 символи секрету підпису з багатокрапкою (a1b2…9f0e) — достатньо, щоб зіставити його із секретом, який ви зберегли локально, не розкриваючи повне значення
created_at, updated_atпозначка часу

Припустимі типи подій

events перевіряється за цим точним набором — значення поза списком повертають 400. Див. каталог подій для структури корисного навантаження кожного типу.

  • 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

Статуси кінцевих точок

  • active — доставки виконуються у звичайному режимі.
  • disabled — призупинено вручну через PATCH. Запити не надсилаються. Ми ніколи не змінюємо статус кінцевої точки disabled; повернути його до active — завжди ваше рішення.
  • failing — встановлюється автоматично, коли доставка до кінцевої точки вичерпує весь графік повторних спроб (8 спроб протягом 24 годин), так і не отримавши відповіді 2xx. Кінцева точка зі статусом помилки не отримує подальшого трафіку. Після виправлення кінцевої точки поверніть її статус до active через PATCH; доставки, чий графік повторних спроб ще не вичерпано, відновляться з того місця, де зупинилися.

Список кінцевих точок

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

Повертає масив об’єктів кінцевих точок.


Створення ендпойнта

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

Поля запиту

ПолеТипОбов’язковеОпис
labelрядоктак1–120 символів
urlрядоктакHTTPS URL (http дозволено лише для localhost / 127.0.0.1)
eventsмасивніПорожнє або пропущене значення підписує на всі події, крім telephony.turn / web.turn, для яких потрібна явна підписка. Потрібно використовувати значення зі списку Допустимі типи подій; дублікати видаляються

Повертає 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
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
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
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Повертає 204 No Content. Доставка на URL негайно припиняється; повторні спроби, що виконуються, скасовуються.


Пов’язані матеріали