Отримання активності контактів через API
Ресурс Get contacts activity повертає записи активності за повідомленнями, надісланими вашим контактам, за вказаний період. Кожен запис у відповіді містить статус — DELIVERED, UNDELIVERED, READ, CLICKED, UNSUBSCRIBED, SUBSCRIPTION_CHANGED або SPAM, — час події, а також повідомлення й контакт, яких вона стосується. Для UNDELIVERED повертається ще й причина.
Використовуйте ресурс, щоб передавати до своєї системи статуси повідомлень, дії контактів і причини недоставлення, а також зіставляти їх із запитами вашої інтеграції на надсилання.
Get contacts activity повертає окремі події активності за період і охоплює багатьох контактів одразу.
Get contact's message history повертає історію повідомлень одного контакту, ідентифікатор якого потрібно передати в запиті. Повне порівняння методів отримання активності контактів, разом із вебхуками та експортом, — у розділі 6.
Get contact's message history не повертає повідомлення Telegram. Щоб отримати активність у Telegram, використовуйте Get contacts activity і виберіть із відповіді записи з mediaType: telegrambot.
Get contacts activity вмикається за запитомЗверніться до служби підтримки, щоб активувати ресурс для вашої організації. Активація може зайняти кілька годин.
Дані накопичуються лише після активації та зберігаються 90 діб. Попередня активність не додається, тому підключіть ресурс заздалегідь.
1. Запит
GET https://esputnik.com/api/v2/contacts/activity
Запити авторизуються через Basic HTTP Authentication, де паролем є API-ключ. API-ключі >
Обовʼязкові лише dateFrom і dateTo. Усі інші параметри — фільтри, які звужують вибірку.
| Параметр | Опис |
|---|---|
dateFrom (обовʼязковий) | Початок періоду. |
dateTo (обовʼязковий) | Кінець періоду. |
email | Email-адреса контакту. |
sms | Номер телефону контакту. |
webPushToken | Токен Web Push. |
mobPushToken | Токен Mobile Push. |
telegramToken | Токен Telegram. |
messageTag | Мітка повідомлення. |
activityStatus | Одне зі значень DELIVERED, UNDELIVERED, READ, UNSUBSCRIBED, CLICKED, SPAM. Фільтр за статусом звужує відповідь до цього результату: DELIVERED не покаже повідомлень, які ще не мають статусу або завершилися як UNDELIVERED. |
offset | Зсув із попередньої відповіді, щоб продовжити читання. Посторінкове читання > |
maxrows | Максимальна кількість записів у відповіді. За замовчуванням — 25000. |
Приклад запиту за одним контактом за два тижні:
curl --request GET \
--url 'https://esputnik.com/api/v2/contacts/activity?dateFrom=2026-08-01T00:00:00&dateTo=2026-08-14T23:59:59&[email protected]&maxrows=25000' \
--user 'YOUR_LOGIN:YOUR_API_KEY'2. Період
- Значення без часу означає північ цієї дати за UTC. Щоб отримати активність за поточний день, вказуйте час у форматі ISO 8601 — наприклад,
dateTo=2026-08-14T10:59:59. - Активність зберігається 90 діб. Якщо
dateFromвказує на ранішу дату, записи за межами цього періоду не потраплять до відповіді. Для довготривалого зберігання отримуйте нові події вебхуками або експортуйте їх до BigQuery.
3. Посторінкове читання
За один запит повертається не більше maxrows записів. Для наступної сторінки надішліть той самий запит, передавши значення offset останнього отриманого запису. Продовжуйте, доки кількість отриманих записів не стане меншою за maxrows.
GET .../activity?dateFrom=...&dateTo=...&maxrows=25000
GET .../activity?dateFrom=...&dateTo=...&maxrows=25000&offset={last_offset}
Не змінюйте фільтри між сторінками: значення offset діє лише в межах початкової вибірки.
4. Відповідь
Відповідь — масив, у якому кожен запис описує одну подію активності за одним повідомленням. Кожен запис також містить значення offset для продовження читання.
Повідомлення
| Поле | Опис |
|---|---|
iid | Ідентифікатор надісланого повідомлення. |
imid | Ідентифікатор миттєвого повідомлення. |
externalRequestId | Ідентифікатор, який ви передали у запиті на надсилання. Повертається лише для повідомлень, надісланих із цим полем. |
messageId | Ідентифікатор повідомлення. |
messageInstanceId | Ідентифікатор екземпляра повідомлення. |
messageName | Назва повідомлення. |
messageTag | Мітка повідомлення. |
messageLanguageCode | Мовна версія, яку отримав контакт. |
from | Відправник. |
Контакт
| Поле | Опис |
|---|---|
contactId | Ідентифікатор контакту. |
externalCustomerId | Ваш власний ідентифікатор контакту. |
email | Email-адреса контакту. |
sms | Номер телефону контакту. |
webPushToken, mobPushToken, telegramToken | Токени каналів. |
Активність
| Поле | Опис |
|---|---|
mediaType | email, sms, viber, mobilepush, webpush, appinbox, widget, inapp, telegrambot. |
activityStatus | DELIVERED, UNDELIVERED, READ, UNSUBSCRIBED, SUBSCRIPTION_CHANGED, CLICKED, SPAM. |
activityDateTime | Дата й час активності. |
statusDescription | Повертається лише для UNDELIVERED. Містить причину — відповідь сервера одержувача, системне повідомлення про неможливість надіслати лист тощо. |
viewMessageLink | Посилання на вебверсію повідомлення. Лише для email. |
clickEventLink | Посилання, за яким перейшов контакт. |
subscriptions | Ключі категорій підписок. |
osType | Тип пристрою: Desktop або Mobile. |
osName | Назва операційної системи — наприклад, Windows NT, iOS, Mac OS. |
Джерело повідомлення
| Поле | Опис |
|---|---|
workflowId, workflowInstanceId, workflowBlockId | Сценарій, конкретний запуск і блок, який надіслав повідомлення. |
broadcastId | Ідентифікатор масової розсилки. |
sourceEventKey, sourceEventTypeKey | Подія, яка запустила сценарій, — значення її ключа та тип події. |
ПриміткаЗначення
SUBSCRIPTION_CHANGEDтрапляється у відповідях, але не входить до переліку значень, які приймає фільтрactivityStatus.
Приклад запису:
[
{
"iid": "3f9a1c20-7624-11f1-a0dc-000000000000",
"externalRequestId": "zamovlennya-48219",
"contactId": 451677871,
"externalCustomerId": "48219",
"email": "[email protected]",
"mediaType": "email",
"activityStatus": "DELIVERED",
"messageId": 3045908,
"messageInstanceId": 6694763,
"messageName": "Pidtverdzhennya zamovlennya",
"messageLanguageCode": "uk",
"activityDateTime": "2026-08-14T14:41:54",
"imid": 29055000426,
"offset": "MjAyNi0wOC0xNFQxNDo0MTo1NA"
}
]5. Типові задачі
5.1 Зіставити активність із власним запитом на надсилання
Це працює лише для повідомлень, надісланих ресурсом, який приймає externalRequestId: Send prepared message — окреме значення для кожного одержувача, а також Send email message, Send SMS message і Send Viber message — одне значення на весь запит. Повідомлення, надіслані сценарієм, масовою розсилкою або подією, цього поля не мають.
Передайте власний externalRequestId під час надсилання, а потім знайдіть його у відповіді про активність — він звʼязує активність із вашим запитом на надсилання. Один запит може містити кількох одержувачів з однаковим externalRequestId, тому для визначення окремого повідомлення додатково зіставляйте contactId, адресу або iid. Використання API-ресурсу Send prepared message >
externalRequestId не є параметром фільтра цього ресурсу — його потрібно шукати у вже отриманій відповіді.
5.2 Отримати дані про недоставлені повідомлення
Запитайте записи з activityStatus=UNDELIVERED і згрупуйте значення statusDescription, щоб виявити некоректні адреси, блокування на стороні серверів-одержувачів або системні проблеми з доставленням. Процес контролю доставлення >
6. Що обрати: активність, історію повідомлень, вебхуки чи експорт
| Get contacts activity | Get contact's message history | Вебхуки | Експорт у BigQuery | |
|---|---|---|---|---|
| Один запис — це | Одна подія активності | Одне повідомлення з поточним статусом, темою або текстом і мітками | Одна подія активності | Одна подія активності |
| Ідентифікатор контакту в запиті | Не обовʼязковий — один запит може охопити багатьох контактів | Обовʼязковий: contactId, externalCustomerId, email або phone | Не застосовується | Не застосовується |
| Як отримуєте дані | Запитуєте самі | Запитуєте самі | Надходять на ваш endpoint у момент активності | За розкладом експорту, який ви налаштували |
| Типове застосування | Забрати активність за період на вимогу | Переглянути історію повідомлень одного контакту | Реагувати на активність у момент її появи | Аналітика й довготривале зберігання |
| Глибина даних | 90 діб | dateFrom не старіше за рік — старіше значення повертає помилку dateFrom mustn't be older than a year | Лише з моменту налаштування | Скільки зберігаєте самі |
| Посторінкове читання | maxrows за замовчуванням 25000; продовження за offset останнього запису | maxrows за замовчуванням 10, максимум 100; offset — числовий зсув від початку списку | Не застосовується | Не застосовується |
externalRequestId | Повертається, якщо його передали під час надсилання | Не повертається | Повертається, якщо його передали під час надсилання | Перевірте схему налаштованого експорту |
Ресурсу для агрегованої аналітики немає: показники, які ви бачите у звітах, можна лише експортувати з інтерфейсу. Щоб передавати їх у власну BI-систему, збирайте набір даних самостійно — з вебхуків, із цього ресурсу або з експорту до BigQuery, який відбувається раз на добу.
Зверніть увагуЦі ресурси повертають повідомлення в тому вигляді, в якому воно збережене, а не копію, яку отримав контакт. У тригерному повідомленні динамічний контент приходить самим Velocity-виразом — наприклад
$!data.get('abandoned_view').get(0).get('imageUrl')замість посилання. Це стосується і теми чи тексту з Get contact's message history, і полів ресурсу Get mobile push message, який застосунки часто запитують за кожнимmessageId, щоб узяти заголовок, текст, посилання та зображення. Щоб побудувати центр сповіщень у застосунку, зберігайте push, який фактично прийшов на пристрій, а не збирайте його заново з цих ресурсів.
Повʼязані статті
- Get contacts activity — повний перелік параметрів і полів
- Get contact's message history — історія повідомлень окремого контакту
- Використання API-ресурсу Send prepared message — відправка з власним
externalRequestId - Вебхуки — отримання активності в момент її появи
- Інтеграція eSputnik і Google BigQuery — експорт активності для аналітики
Updated 14 days ago