Що таке вебхук і для чого він потрібен
Рекомендації щодо обробки вебхуків
Вебхук (Webhook) — це механізм автоматичного надсилання сповіщень із нашого сервісу у вашу систему (CRM, ERP, 1С, власний додаток тощо) при настанні певних подій за допомогою HTTP(S) запитів.
Замість того щоб регулярно опитувати API (наприклад, перевіряти статус доставки SMS), ваш сервер отримує HTTP(S)-запит у момент, коли подія дійсно відбулася.
Використання вебхуків дозволяє:
На даний момент доступні такі типи подій:
Перейдіть у Панель управління → API → Вебхуки і натисніть кнопку «Створити вебхук». Відкриється форма створення нового вебхука.
У формі створення вебхука вкажіть такі параметри:
Визначає подію в системі Mobizon, при настанні якої надсилатиметься вебхук.
Доступні варіанти:
Формат, у якому дані вебхука надсилатимуться на ваш сервер:
rawxmljsonВибирайте формат залежно від можливостей вашого обробника.
URL, на який надсилатимуться вебхуки.
Обмеження:
Важливо:
Секретний ключ використовується для перевірки справжності запиту.
Особливості:
Якщо секретний ключ не задано:
Встановіть прапорець «Активний», якщо вебхук має почати роботу відразу після створення.
Натисніть кнопку «Зберегти». Створений вебхук з'явиться у списку.
200–299 не пізніше ніж через 5 секунд.200–299, система виконає повторне надсилання.Повторні спроби доставки:
Усі вебхуки надсилаються HTTP(S)-запитом методом POST.
| Поле | Опис |
|---|---|
eventId | Унікальний ідентифікатор події (однаковий для повторних спроб) |
eventType | Тип події (наприклад, sms-delivery-report) |
eventCreateTs | Дата і час створення події (yyyy-mm-dd hh:mm:ss) |
webhookId | Ідентифікатор вебхука |
attempt | Номер спроби доставки |
data | Дані події |
sign | Цифровий підпис запиту |
sms-delivery-report){
"eventId": 26,
"eventType": "sms-delivery-report",
"eventCreateTs": "2026-01-15 11:42:28",
"webhookId": 1,
"attempt": 1,
"data": {
"campaignId": 245455096,
"messageId": 169275418,
"segNum": 3,
"statusUpdateTs": "2026-01-15 11:42:08",
"status": "DELIVRD",
"to": "380737893456"
},
"sign": "3f0a37cf5e27fe0615504b6d700b4b657ecfd39d"
}
data| Поле | Опис |
|---|---|
campaignId | ID SMS-кампанії |
messageId | ID SMS-повідомлення |
segNum | Кількість сегментів SMS |
statusUpdateTs | Час оновлення статусу |
status | Підсумковий статус доставки |
to | Номер отримувача |
Вебхуки для форм можуть надсилатися при різних діях користувача: надсиланні форми, підтвердженні контакту або відписці.
form-submission)Подія надсилається відразу після успішного заповнення та надсилання форми користувачем.
{
"eventId": 40,
"eventType": "form-submission",
"eventCreateTs": "2026-01-15 16:53:30",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"submissionId": 3680,
"items": [
{
"submissionDataId": 12303,
"fieldId": 3744,
"fieldType": "TEXT_STRING",
"fieldName": "Ім'я",
"value": "Ivan"
},
{
"submissionDataId": 12304,
"fieldId": 3745,
"fieldType": "EMAIL",
"fieldName": "E-mail",
"value": "test@mobizon.com",
"confirmationRequired": 1
},
{
"submissionDataId": 12305,
"fieldId": 3746,
"fieldType": "MOBILE",
"fieldName": "Мобільний",
"value": "380737893456",
"confirmationRequired": 1
}
]
},
"sign": "0a38941c47689e3cb3634db817cd4851d2511c47"
}
Опис поля items
Кожен елемент масиву відповідає одному полю форми.
| Поле | Опис |
|---|---|
submissionDataId | ID значення поля форми |
fieldId | ID поля форми |
fieldType | Тип поля (TEXT_STRING, EMAIL, MOBILE та ін.) |
fieldName | Назва поля |
value | Значення, введене користувачем |
confirmationRequired | Ознака необхідності підтвердження (1 — потрібно) |
form-contact-confirmation)Подія надсилається після підтвердження користувачем email-адреси або номера телефону за допомогою коду в SMS або Email.
{
"eventId": 42,
"eventType": "form-contact-confirmation",
"eventCreateTs": "2026-01-15 16:54:15",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"submissionId": 3680,
"item": {
"submissionDataId": 12305,
"fieldId": 3746,
"fieldType": "MOBILE",
"fieldName": "Мобільний",
"value": "380737893456",
"confirmationTs": "2026-01-15 16:54:14"
}
},
"sign": "fe0da5443a9f5cadd0e972301415816cec481137"
}
form-contact-unsubscribe)Подія надсилається, якщо користувач відписався через форму відписки.
{
"eventId": 45,
"eventType": "form-contact-unsubscribe",
"eventCreateTs": "2026-01-15 17:33:47",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"unsubscribeTs": "2026-01-15 17:33:46",
"items": [
{
"submissionId": 3675,
"submissionDataId": 12289,
"fieldId": 3745,
"fieldType": "EMAIL",
"fieldName": "E-mail",
"value": "test@mobizon.com",
"confirmationTs": ""
}
]
},
"sign": "06b78cf55ad19f9810babc415e86535384b74663"
}
Для перевірки використовується поле sign, що обчислюється за алгоритмом SHA1.
Рядок для підпису формується в такому порядку:
eventId|attempt|eventCreateTs|secretKey
Де secretKey — секретний ключ, вказаний при створенні вебхука.
$secretKey = 'secret123';
$payload = json_decode(file_get_contents('php://input'), true);
$hash = sha1(
$payload['eventId'] . '|' .
$payload['attempt'] . '|' .
$payload['eventCreateTs'] . '|' .
$secretKey
);
if (hash_equals($hash, $payload['sign'])) {
http_response_code(200);
} else {
http_response_code(403);
}
eventId і не обробляти одну і ту саму подію повторно.| Проблема | Можлива причина |
|---|---|
| Вебхук не приходить | URL недоступний або перевищено число редиректів |
| Повторні сповіщення | Сервер не повернув HTTP 200 вчасно |
| Підпис не збігається | Невірний секретний ключ або порядок полів |
| Помилка обробки | Відсутня перевірка структури payload |
Вебхуки дозволяють отримувати дані про статуси SMS та форми:
Коректна перевірка підпису та акуратна обробка повторних запитів забезпечують надійну інтеграцію.