Вебхуки для відстеження активності

Вебхуки — це метод відстеження в реальному часі активності контактів у системі eSputnik і надсилання сповіщень про цю активність на URL-адресу клієнта.

Вебхуки налаштовуються шляхом додавання зовнішньої URL-адреси до вашого облікового запису, після чого ви зможете автоматично отримувати дані про дії контактів у різних медіаканалах за допомогою POST-запитів.

Система надсилає запити на ваш сервер щоразу, коли відбувається одна з таких подій:

  • Відправлено — повідомлення відправлено контактові (тільки для каналу Mobile Push);
  • Доставлено — повідомлення надійшло контактові;
  • Не доставлено — повідомлення не було доставлено;
  • Читали — контакт відкрив повідомлення;
  • Відписалися — контакт відмовився від розсилки;
  • Переходили — контакт натиснув на посилання в повідомленні;
  • Спам — повідомлення відзначене як спам;
  • Змінено підписку — контакт змінив категорію підписки на розсилку.
📘

Примітка

Перед налаштуванням вебхуків необхідно сконфігурувати на своєму сервері URL, на який ви бажаєте отримувати повідомлення — POST-запити у форматі JSON, а також забезпечити їх обробку.

Створення експорту даних

Перейдіть у налаштування акаунта на вкладку Експорт даних, натисніть кнопку Новий експорт даних і виберіть Вебхук.

Перехід до вкладки Експорт даних і вибір типу Вебхук

Підключення

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

Поля назви вебхука та URL-адреси сервера

Аутентифікація (опційно)

Якщо на вашому сервері увімкнено аутентифікацію, вкажіть логін і пароль, що їх використовує ваш сервер для приймання запитів. Для цього активуйте перемикач Authentication і заповніть відповідні поля.

Перемикач Authentication та поля для логіна і пароля

Заголовки

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

  1. Натисніть + Додати заголовок.
📘

Максимальна кількість заголовків — 5.

Кнопка Додати заголовок для вебхука
  1. Введіть Ключ та Значення.
Поля Ключ і Значення для заголовка вебхука

Усі вказані заголовки будуть автоматично додаватися до запитів вебхука.

Експорт статусів активності

За замовчуванням обрані всі статуси. За потреби ви можете змінити перелік — зніміть прапорці біля непотрібних.

Список статусів активності з прапорцями для вибору

Після налаштування експорту натисніть кнопку Зберегти.

Кнопка Зберегти для завершення налаштування експорту

Вебхук стане активним, і дані надходитимуть у реальному часі на зазначену URL-адресу.

Активний статус вебхука у списку експортів даних

Тестування інтеграції вебхука

Після налаштування вебхука ви можете перевірити його роботу без запуску реальної події.

  1. На вкладці Експорт даних через вебхук натисніть кнопку Відправити тест.
Кнопка Відправити тест на вкладці Експорт даних через вебхук
  1. У вікні Тестування інтеграції відкриється тестовий запит, який містить демонстраційний масив із кількох об'єктів — приклад того, як система формує вебхуки для різних каналів.
Вікно Тестування інтеграції з демонстраційним тестовим запитом

Ви можете змінити вміст запиту вручну, щоб перевірити роботу свого обробника з іншим форматом даних. Наприклад, змінити значення полів, видалити або додати елементи масиву тощо.

Усі задані заголовки будуть включені в тестовий запит, якщо вони були вказані.

  1. Натисніть Готово.
Кнопка Готово після редагування тестового запиту
  1. Система миттєво надішле тестовий POST-запит на вказаний URL і відобразить результат перевірки:
  • якщо сервер приймає запит успішно — з'явиться зелена плашка зі згорнутою секцією деталей;
Зелена плашка успішного тестового запиту зі згорнутими деталями
  • якщо сервер повертає помилку (наприклад, 403) — відобразиться червона плашка з кодом відповіді та розгорнутими деталями для аналізу.

Деталі запиту та відповіді можна скопіювати до буфера обміну.

Червона плашка помилки тестового запиту з кодом відповіді та деталями

Після тестування:

  • натисніть Зберегти та закрити, якщо тестування пройшло успішно й вебхук працює коректно;
  • якщо сталася помилка — натисніть Повторити спробу або натисніть Закрити, внесіть зміни до налаштувань і відправте тестовий запит ще раз.

Деактивація / Видалення вебхука

Щоб деактивувати або видалити вебхук, натисніть значок із трьома крапками, виберіть потрібний варіант і підтвердьте дію.

Меню з трьома крапками для деактивації або видалення вебхука
📘

Примітка

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

Неактивний статус вебхука у списку експортів даних

Редагування експорту даних

Щоб змінити налаштування, натисніть назву вебхука, відредагуйте параметри та збережіть їх.

Редагування параметрів вебхука за назвою в списку

Можливі параметри

ПараметрТипОпис
activityDateTimestringДата й час, коли відбулася активність.
activityStatusstring
  • SENT – повідомлення відправлено (тільки для каналу Mobile Push).
  • DELIVERED – повідомлення доставлене.
  • UNDELIVERED – повідомлення не доставлене (причина описана в параметрі statusDescription).
  • READ – повідомлення прочитане.
  • UNSUBSCRIBED - контакт відписався.
  • CLICKED – контакт натиснув на посилання. Генерується для кожного кліку по кожному посиланню в повідомленні.
  • SPAM – повідомлення позначене як спам.
  • SUBSCRIPTION_CHANGED – контакт змінив категорію підписки.
broadcastIdintІдентифікатор розсилки.
bundleIdstringІдентифікатор мобільного застосунку (iOS — Bundle Identifier, Android — Application ID).
clickEventLinkstringПосилання, за яким перейшов контакт (для CLICKED).
contactIdintІдентифікатор контакту.
emailstringEmail контакту.
externalCustomerIdstringУнікальний ідентифікатор контакту у системі клієнта.
fromstringІм'я відправника (Email та SMS повідомленнях).
hardBounceboolПовертається тільки для статусу UNDELIVERED і лише для каналу Email. Вказує тип помилки:
  • true – помилка типу hard bounce (постійна, наприклад, скриньки не існує).
  • false – помилка типу soft bounce (тимчасова, наприклад, переповнена скринька).
iidstringУнікальний ідентифікатор відправки повідомлення.
imIdintІдентифікатор окремого повідомлення. Використовуйте його, щоб пов’язувати активності контакту з конкретним повідомленням.
mediaTypestringМедіатип повідомлення (SMS, Email, Web Push, Viber, Mobile Push, AppInbox, Widget, In-App, Telegram).
messageIdintІдентифікатор повідомлення.
messageInstanceIdintІдентифікатор екземпляра повідомлення.
messageLanguageCodestringКод мови повідомлення.
messageNamestringНазва повідомлення (відсутнє значення для тестових повідомлень).
messageTagstringМітка повідомлення.
mobilepushstringТокен підписника мобільного застосунку.
osNamestringОпераційна система пристрою.
osTypestringТип пристрою (Desktop/Mobile).
smsstringНомер телефону контакту.
sourceEventIdintІдентифікатор події.
sourceEventKeystringКлюч типу події.
sourceEventTypeIdintІдентифікатор типу події.
sourceEventTypeKeystringЗначення ключа події.
statusDescriptionstringПовертається тільки для статусу UNDELIVERED. Містить причину, з якої повідомлення не було доставлене. Наприклад, відповідь сервера одержувача, відмова у відправленні повідомлення тощо.
subscriptionsarray of stringКлючі категорій підписок.
viewMessageLinkstringПосилання на веб-версію повідомлення (лише для Email).
webpushstringТокен підписника веб-повідомлень.
workflowBlockIdstringІдентифікатор блоку сценарію, що відправив повідомлення.
workflowIdintІдентифікатор сценарію.
workflowInstanceIdintІдентифікатор запуску сценарію (для групування розсилок у межах одного запуску).
📘

Зверніть увагу

Теги для листів, надісланих через API, підтримуються (наприклад, через масив tags у методі v1/messages/email) — якщо їх немає у даних вебхука активності, перевірте, чи ваша інтеграція коректно передає поле tags. Тему листа можна отримати методом contactmessages, але лише для листів, складених у системі, а не для сирого HTML, надісланого напряму через API.

Нижче наведено тестові приклади вебхуків у вигляді масиву JSON з усіма можливими варіантами статусів. 

Для масових розсилок:

[
  {
    "broadcastId": 3459207,
    "messageName": "test",
    "iid": "99d591ab-e7a5-49ed-8e16-b3023378fc18",
    "contactId": 1967597908,
    "externalCustomerId": "789456512",
    "email": "[email protected]",
    "mediaType": "email",
    "activityStatus": "DELIVERED",
    "messageId": 2489300,
    "messageInstanceId": 4702518,
    "activityDateTime": "2023-09-14T08:30:03",
    "viewMessageLink": "https://u51739.esclick.me/J9o6EvyAKGmB"
  },
  {
    "broadcastId": 3459207,
    "messageName": "test",
    "iid": "4af20897-de88-4ad0-ada3-dc4bcf14e8d8",
    "contactId": 889891911,
    "externalCustomerId": "262ac297-6ae1-11ec-a2ec-0050569bdf92",
    "email": "[email protected]",
    "mediaType": "email",
    "activityStatus": "DELIVERED",
    "messageId": 2489300,
    "messageInstanceId": 4702518,
    "activityDateTime": "2023-09-14T08:30:03",
    "viewMessageLink": "https://u51739.esclick.me/J9o6Dl1wrDeB"
  },
  {
    "broadcastId": 3459207,
    "messageName": "test",
    "iid": "b14dec37-806e-4bc4-ba71-a5911a7d7ce4",
    "contactId": 1026901517,
    "email": "[email protected]",
    "mediaType": "email",
    "activityStatus": "DELIVERED",
    "messageId": 2489300,
    "messageInstanceId": 4702518,
    "activityDateTime": "2023-09-14T08:30:03",
    "viewMessageLink": "https://u51739.esclick.me/J9o6Dttf6fOB"
  },
  {
    "broadcastId": 3459207,
    "messageName": "test",
    "hardBounce": false,
    "iid": "99d591ab-e7a5-49ed-8e16-b3023378fc18",
    "contactId": 1967597908,
    "externalCustomerId": "789456512",
    "email": "[email protected]",
    "mediaType": "email",
    "activityStatus": "UNDELIVERED",
    "messageId": 2489300,
    "messageInstanceId": 4702518,
    "activityDateTime": "2023-09-14T08:30:07",
    "statusDescription": "5.1.2 (bad destination system: no such domain)",
    "viewMessageLink": "https://u51739.esclick.me/J9o6EvyAKGmB"
  }
]

Для тригерних розсилок:

[
  {
    "messageName": "test",
    "workflowId": 340484,
    "workflowBlockId": "_05cae26d9ae85e1eb40ed34765f9c7be",
    "sourceEventKey": "9d0c163d-cc3b-4f9e-bb03-2f5d1111ef91",
    "sourceEventTypeKey": "productViewed",
    "workflowInstanceId": "da33697d-52d8-11ee-9d24-7ec2059b5114",
    "iid": "019b7450-52d9-11ee-85c4-959256ea468c",
    "contactId": 889891911,
    "externalCustomerId": "262ac297-6ae1-11ec-a2ec-0050569bdf92",
    "email": "[email protected]",
    "mediaType": "email",
    "activityStatus": "DELIVERED",
    "messageId": 2489300,
    "messageInstanceId": 4702524,
    "activityDateTime": "2023-09-14T08:30:50",
    "viewMessageLink": "https://u51739.esclick.me/1RocjPwr0MwONsdn2P"
  },
  {
    "messageName": "test",
    "workflowId": 340484,
    "workflowBlockId": "_527e1f819b41bd379d75ebbe3392b879",
    "sourceEventKey": "9d0c163d-cc3b-4f9e-bb03-2f5d1111ef91",
    "sourceEventTypeKey": "productViewed",
    "workflowInstanceId": "da33697d-52d8-11ee-9d24-7ec2059b5114",
    "iid": "01777190-52d9-11ee-917a-ef6e91bfc7c3",
    "contactId": 889891911,
    "externalCustomerId": "262ac297-6ae1-11ec-a2ec-0050569bdf92",
    "email": "[email protected]",
    "mediaType": "email",
    "activityStatus": "DELIVERED",
    "messageId": 2489300,
    "messageInstanceId": 4702524,
    "activityDateTime": "2023-09-14T08:30:51",
    "viewMessageLink": "https://u51739.esclick.me/1RocjPwr0MwONsd3gP"
  },
  {
    "messageName": "test",
    "workflowId": 340484,
    "workflowBlockId": "_be178ec8aacbf249d8bb736e9df9fd0d",
    "sourceEventKey": "9d0c163d-cc3b-4f9e-bb03-2f5d1111ef91",
    "sourceEventTypeKey": "productViewed",
    "workflowInstanceId": "da33697d-52d8-11ee-9d24-7ec2059b5114",
    "hardBounce": false,
    "iid": "01a86ca0-52d9-11ee-85c4-959256ea468c",
    "contactId": 706515632,
    "sms": "380956490955",
    "mediaType": "viber",
    "activityStatus": "UNDELIVERED",
    "messageId": 3213684,
    "messageInstanceId": 4696769,
    "messageTag": "tag2,tag,test",
    "activityDateTime": "2023-09-14T08:30:51",
    "statusDescription": "401: null"
  }
]

Усунення проблем

Дедублікація однакових оновлень

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

Дублікати подій від WooCommerce

Плагін WooCommerce може двічі надіслати одну й ту саму подію PurchasedItems для одного замовлення — один раз при оформленні замовлення, і ще раз, якщо клієнт перезавантажить сторінку успішної оплати. eSputnik усуває дублікати замовлень за ключовими полями замовлення (наприклад, externalOrderId) — якщо надходить дублікат з тим самим значенням, він не записується повторно. Якщо ви створюєте власний обробник вебхуків для подій замовлень, застосуйте таку саму логіку усунення дублікатів на своєму боці, використовуючи externalOrderId (або аналогічний ідентифікатор ідемпотентності), щоб уникнути подвійного підрахунку.

Деталі налаштування — у статті Встановлення плагіна WooCommerce.

Альтернативні методи отримання статусів активності

eSputnik пропонує три способи отримання даних про активність у ваші власні системи — оберіть залежно від того, як плануєте використовувати ці дані:

МетодЯк це працюєГлибина данихНайкраще підходить для
Вебхуки (ця стаття)Push POST-запиту на ваш сервер у реальному часі при кожній подіїБез історії — надсилаються лише події, що відбулися після налаштуванняReal-time інтеграцій, які миттєво реагують на активність
API (Get contacts activity)Ви самі надсилаєте GET-запити за потреби, з фільтрами (email, статус, інтервал часу)До ~3 місяців назадРазових перевірок, наприклад історії конкретного контакту
Експорт у BigQueryЩоденний пакетний експорт у ваш набір даних BigQueryПовна історія з дати активації експортуПобудови дашбордів та аналітики на великих обсягах даних
📘

Примітка

Інтерфейс акаунту (картка контакту) зберігає лише останню дату відкриття й переходу для кожного контакту, а не повну історію. Якщо потрібна перша дата відкриття/переходу або повна хронологія, використовуйте вебхуки (щоб будувати повний журнал активності по мірі надходження подій) або методи API/BigQuery вище.

API Get contacts activity активується за запитом — зверніться в підтримку, щоб увімкнути його для вашого акаунту. Після активації він підтримує фільтрацію за контактом, наприклад за параметром email, на додачу до статусу й інтервалу часу.


Did this page help you?