Arrow
Начало работы с Wazzup
Arrow
Как подключить мессенджер
Arrow
Как пользоваться чатами Wazzup
Arrow
Как оплатить
Arrow
Битрикс24
Arrow
Как подключить Wazzup
Arrow
Как переписываться
Arrow
Как настроить автоматизацию
Arrow
Сквозная аналитика
Arrow
Решение проблем
Arrow
amoCRM
Arrow
Как подключить Wazzup
Arrow
Как переписываться
Arrow
Как настроить автоматизацию
Arrow
Сквозная аналитика
Arrow
Решение проблем
Arrow
Другие CRM
Arrow
1С: УНФ
Arrow
HubSpot
Arrow
Zoho
Arrow
Pipedrive
Arrow
ПланФикс
Arrow
Еще CRM
Arrow
Как продавать еще удобнее
Arrow
Всё о WABA
Arrow
Для партнеров
Arrow
Публичное API
Для партнеров
Arrow

Вебхуки

Вебхуки позволяют узнавать о событиях, которые происходят на стороне Wazzup. Например, что у сообщения изменился статус на «Доставлено» или канал «Не авторизован», а значит, канал надо переподключить.

Wazzup отправляет вебхуки на ваш HTTP‑endpoint. Нужно подписываться на вебхуки по конкретному дочернему аккаунту с использованием client_access_token в заголовке: Authorization: Bearer <client_access_token>

Минимальные требования при приёме вебхуков: отвечайте HTTP 200 как можно быстрее. Логи и бизнес‑логику можно выполнять асинхронно.

Поддерживаемые события

  • message.add — получено входящее сообщение от клиента;
  • message.status_update — обновился статус исходящего сообщения. Например, с «Доставлено» на «Прочитано»;
  • message.delete — сообщение удалено;
  • message.edit — сообщение отредактировано. Приходит только по сообщениям на каналах, которые поддерживают редактирование;
  • waba_template.status_update — изменился статус модерации шаблона WABA. Статус модерации показывает, можно ли использовать шаблон;
  • channel.status_update — изменился статус канала;
  • channel.create — канал создан;
  • channel.delete — канал удалён;
  • channel.qr_update — обновился QR, код подключения → необходимо отобразить новый код клиенту. Приходит для WhatsApp, Telegram Personal, Viber;
  • channel.waba_tier_update — изменился уровень (tier) WABA. Уровень показывает, сколько переписок можно начинать первым в течение 24 часов;
  • group_chat.memberships_update — изменился состав группового чата WhatsApp или участник чата переименован;
  • group_chat.update — изменилась информация о групповом чате.

Подписывайтесь только на события, которые обрабатывает ваша система.

Управление подписками

Подписаться на вебхуки

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

Метод POST /v2/webhooks

Body-параметр Обяз. параметр Тип параметра Описание параметра
data да object Список вебхуков, на которые подписываетесь
data.url да string Адрес, на который хотите получать вебхуки
data.event да string Вебхук

Пример запроса:

curl -L 'https://tech.wazzup24.com/v2/webhooks'
-H 'Content-Type: application/json'
-H 'Authorization: Bearer <client_access_token>'
-d '{
"data": [
{
"url": "https://webhook.site/73796fab-2e6d-492a-b68e-061d825b7db5",
"event": "message.add"
},
{
"url": "https://webhook.site/73796fab-2e6d-492a-b68e-061d825b7db5",
"event": "message.status_update"
}
]
}'

Пример ответа:

{
"data": [
{
"id": "d6c04-7623-43ae-a024-7b36c4004c13",
"url": "https://webhook.site/73796fab-2e6d-492a-b68e-061d825b7db5",
"event": "message.add"
},
{
"id": "b0a26-10d9-4d47-8cda-892c9b471a05",
"url": "https://webhook.site/73796fab-2e6d-492a-b68e-061d825b7db5",
"event": "message.status_update"
}
],
"meta": {
"timestamp": 1759494767
}
}

Результат: Создана подписка на события message.add и message.status_update. Вебхуки будут приходить на адрес https://webhook.site/73796fab-2e6d-492a-b68e-061d825b7db5.

В ответе содержится id подписки — ID нужно для управления вебхуками в других методах.

Изменение подписки на вебхуки

Метод позволяет подписаться на другие вебхуки, отменить подписку или изменить url для получения событий.

Метод PATCH /v2/webhooks

Body-параметр Обяз. параметр Тип параметра Описание параметра
data да object Список вебхуков, на которые подписываетесь
data.id да string id подписки
data.url да string Адрес, на который хотите получать вебхуки
data.event да string Вебхук

Пример:

curl -L -X PATCH 'https://tech.wazzup24.com/v2/webhooks'
-H 'Authorization: Bearer <client_access_token>'
-H 'Content-Type: application/json' -d '{
"data": [
{
"id": "42cdd-a0a6-40fd-b55b-040e7c605d0a",
"url": "https://webhook.site/1d2c6a79-d709-4d00-ad24-856e3d8edfd5",
"event": "message.delete"
}
]
}'

Пример ответа:

{
"data": [
{
"id": "d6c04-7623-43ae-a024-7b36c4004c13",
"url": "https://webhook.site/new-webhook-url",
"event": "message.delete"
}
],
"meta": {
"timestamp": 1759483585
}
}

Результат: Для подписки с id: 411d6c04-7623-43ae-a024-7b36c4004c13 обновлен url для получения вебхуков.

Получить список подписок на вебхуки

Метод GET /v2/webhooks

Пример:

curl -L 'https://tech.wazzup24.com/v2/webhooks' -H 'Authorization: Bearer <client_access_token>'

Пример ответа:

{
"data": [
{
"id": "891cdbf4-07bd-4c24-942b-27d5c820c879",
"url": "https://webhook.site/3d76c4a6-f1ab-4090-a766-3f9a07bca714",
"event": "channel.status_update"
},
{
"id": "1e35de57-ca04-45ba-a345-67f0d8b11138",
"url": "https://webhook.site/3d76c4a6-f1ab-4090-a766-3f9a07bca714",
"event": "channel.create"
},
{
"id": "ccbe0af3-2f12-4e6e-8c35-78fe3c9d3714",
"url": "https://webhook.site/3d76c4a6-f1ab-4090-a766-3f9a07bca714",
"event": "channel.update"
}
],
"meta": {
"timestamp": 1759483435
}
}

Результат: Список всех подписок на вебхуки для дочернего аккаунта.

Удалить подписку на вебхук

Метод DELETE /v2/webhooks

Body-параметр Обяз. параметр Тип параметра Описание параметра
data да object Список вебхуков, на которые подписываетесь
data.id да string id подписки

Пример:

curl -L -X DELETE 'https://tech.wazzup24.com/v2/webhooks'
-H 'Authorization: Bearer <client_access_token>'
-H 'Content-Type: application/json'
-d '{
"data": [
{
"id": "dbf4-07bd-4c24-942b-27d5c820c879"
}
]
}'

Пример ответа:

{
"data": null,
"meta": {
"timestamp": 1759483702
}
}

Результат: Подписка с id: dbf4-07bd-4c24-942b-27d5c820c879 удалена. Вы больше не получаете вебхуки с этим событием.

Структура вебхука

{
"event": "message.add" | "message.status_update" | "message.delete" | "message.edit" | "channel.status_update" | "channel.delete" | "channel.create" | "channel.qr_update" | "channel.waba_tier_update" | "waba_template.status_update" | "group_chat.memberships_update" | "group_chat.update",
"data": [],
"meta": {
"idempotency_key": UUIDv4,
"timestamp": Unix timestamp в секундах
}
}

Внутри поля data содержится само событие. Структура событий:

message.add

{
"message_id": "a14325c0-97c0-43dd-917e-f0ad7460b6a9",
"channel_id": "a14325c0-97c0-43dd-917e-f0ad7460b6a9",
"direction": "inbound",
"quoted_message_id": "90126ace-fc10-44ed-90de-c30c3802fcf5" | null,
"timestamp": 1762340622177,
"crm_user_id": "123" | null,
"status": "sent",
"recipient": {
"chat_id": "7999999999",
"username": "my_tg_user",
"phone": "79851112233",
"chat_type": "telegram",
"name": "Tg User"
},
"text": "Привет!",
"attachment": {
"url": "https://some.url/photo.jpg",
"name": "photo.jpg",
"mimetype": "image/jpeg",
"size": 14832,
"sha1": "123456abcdf"
},
"template": {
"id": "2b1c3d4e-5f67-890a-bcde-f123456789ab",
"values": [ "Привет" ],
"buttons": [
{ "text": "Да", "payload": "yes" },
{ "text": "Нет", "payload": "no" }
]
}
}
Параметр. Обязательные отмечены * Тип Описание
message_id* string ID сообщения
channel_id* string ID канала Wazzup
direction* string Направление сообщения: inbound, outbound
quoted_message_id string ID цитируемого сообщения
timestamp* number Unix timestamp
status* string Статус сообщения (accepted)
crm_user_id string ID пользователя CRM или "null"
recipient* object Получатель сообщения
recipient.chat_type* string

Тип чата. Доступные значения:

  • whatsapp — индивидуальные чаты в WhatsApp,
  • whatsgroup — групповые чаты в WhatsApp,
  • viber — чаты Viber,
  • instagram — чаты Instagram*,
  • telegram — индивидуальные чаты в Telegram,
  • telegroup — групповые чаты в Telegram,
  • vk — чаты ВКонтакте,
  • avito — чаты Авито,
  • max — индивидуальные чаты MAX,
  • maxgroup — для групповых чатов MAX.
recipient.chat_id string

Вариант идентификации для всех типов чата — ID чата, то есть аккаунт контакта в мессенджере.

  • Для whatsapp и viber — только цифры, формат 79011112233.
  • Для instagram — аккаунт без @ вначале.
  • Для whatsgroup, maxgroup, telegram, max, avito, vk приходит в вебхуках входящих сообщений.
recipient.username string Только для Telegram. Имя пользователя в Telegram, без @ в начале. Можно использовать при отправке сообщений через Telegram, если неизвестен chatId
recipient.phone string Только для Telegram, MAX. Телефон контакта в международном формате, без + и иных символов: только цифры с корректным кодом страны. Может использоваться при отправке сообщений через Telegram, если неизвестен chatId
text string Текст сообщения. Должен быть либо text, либо attachment, либо template
attachment object Объект вложения
attachment.url* string URL файла
attachment.name string Имя файла
attachment.mimetype string MIME-тип файла
attachment.size number Размер файла в байтах
attachment.sha1 string SHA-1 хеш файла
template object Объект WABA-шаблона
template.id* string ID шаблона
template.values array[string] Значения переменных шаблона
template.buttons array[object] Кнопки шаблона
template.buttons[].text* string Текст кнопки
template.buttons[].payload* string Payload кнопки

message.status_update

{
"message_id": UUIDv4 | null,
"request_id": UUIDv4 | null,
"status": "accepted" | "sent" | "delivered" | "read" | "failed",
"reason": string | null
}

Возможные значения reason в зависимости от status.

При status: "accepted" | "sent" | "delivered" | "read" — reason всегда null

При status: "failed" — reason показывает причину ошибки.

Значение reason Описание
network_error Ошибка сети
bad_contact Контакт не существует
text_length_is_too_much Максимальная длина сообщения для WhatsApp и Telegram, Max — 4096 знаков, для Instagram* — 1000 знаков
can_not_get_content  
is_spam Мессенджер не пропускает сообщение из-за подозрения на спам. Измените сообщение и попробуйте написать позже — если у вас Instagram* или WhatsApp. Если у вас Telegram — напишите в @SpamBot.
to_many_requests Слишком много запросов
bad_content Файл слишком большой или его тип не поддерживается мессенджером
canceled Отправка отменена
over_24_hour_limit Для WABA. Превышен суточный лимит Meta* на диалоговые сессии. Писать первым пока что нельзя. Подождите, пока завершится одна из активных 24-часовых сессий, и заново отправьте сообщение
wapi_not_enough_money Для WABA. Пополните баланс подписки WABA, чтобы писать первым и отправлять шаблоны WABA.
target_user_is_blocked  
no_user_permissions  
waba_rejected_by_experiment Для WABA. С этим клиентом нельзя начать 24-часовую переписку с шаблона «Маркетинг» — так решили в Meta*. Отправьте шаблон из другой категории
tgapi_megagroups_not_enabled В этот чат нельзя написать из Wazzup. Сейчас мы не поддерживаем некоторые групповые чаты Telegram
waba_message_undeliverable  
viber_is_blocked  
waba_limit_marketing_template_sending Сейчас этому клиенту нельзя отправить шаблон «Маркетинг» из-за лимитов на маркетинговые сообщения. Попробуйте позже или отправьте шаблон из другой категории
waba_business_account_locked Сообщение не отправлено: Meta* заблокировала ваш аккаунт WhatsApp. Узнайте в инструкции, как выяснить точную причину блокировки и что делать
message_limit_exceeded Сообщение не отправлено: Meta* ограничила количество сообщений, которые можно отправлять с этого номера WABA. Возможно, получатели помечали предыдущие сообщения как спам.
bad_required_parameter Запрос содержит один или несколько неподдерживаемых или некорректно написанных параметров.
stop_receiving_marketing_messages Для WABA. Контакт решил прекратить получать маркетинговые сообщения в WhatsApp от вашей компании. Отправьте шаблон из другой категории или напишите в другой мессенджер
voice_messages_forbidden Для Telegram. Этот пользователь запретил получение голосовых сообщений.
input_user_deactivated Для Telegram. Этот контакт удалил аккаунт в Telegram или заблокировал вас.
privacy_premium_required Для Telegram. Этот контакт принимает сообщения только от аккаунтов с активной подпиской Telegram Premium. Такие подписки оформляют в приложении Telegram.
allow_payment_required Для Telegram. Этот контакт принимает входящие сообщения только за платные звёзды Telegram.
message_empty Для Telegram. Добавьте текст или вложение: Telegram не дает отправить сообщение без контента.
session_revoked Для Telegram. Сообщение не отправлено: Telegram завершил активный сеанс Wazzup.
file_part_missing Для Telegram. Не получилось загрузить файл. Попробуйте снова.
channel_private Для Telegram. Вы не состоите в этой группе или группа удалена.
contact_can_not_create Для MAX и Telegram. Не получилось найти пользователя по username или phone
channel_blocked Канал заблокирован
message_channel_unavailable Канал временно недоступен
messages_invalid_contact_type chat_type несовместим с chat_id
chat_is_blocked Контакт заблокирован
messages_not_text_first_from_telegram_bot Для Telegram Bot. Нельзя писать первым
bad_contact Для WhatsApp. Номер пользователя не зарегистрирован
messages_not_text_first Для Instagram*. Нельзя писать первым
unknown_error Неизвестная ошибка

message.delete

{
"message_id": UUIDv4,
"crm_user_id": string | null,
"timestamp": Unix timestamp в миллисекундах
}

message.edit

{
"message_id": UUIDv4,
"crm_user_id": string | null,
"timestamp": Unix timestamp в миллисекундах
"text": string, // опционально
"old_text": string, // опционально
"attachment": {},
"old_attachment": {}
}

waba_template.status_update

{
"template_id": UUIDv4,
"status": "APPROVED" | "PENDING" | "REJECTED" | "PAUSED" | "DISABLED",
"timestamp": unix epoch,
}
Параметр Тип Описание
template_id String guid шаблона
status String Статус модерации шаблона
Значение status Описание
APPROVED То же, что «Активен» в ЛК Wazzup. Шаблон одобрен Meta*, его можно использовать
PENDING То же, что «На модерации» в ЛК Wazzup. Meta* еще проверяет шаблон
REJECTED В ЛК Wazzup — «Отклонен». Шаблон не прошел модерацию Meta*
PAUSED В ЛК Wazzup — «Отклонен». На шаблон жаловались получатели, поэтому Meta* его снова проверяет
DISABLED В ЛК Wazzup — «Отклонен». Шаблон заблокировали после жалоб

channel.status_update

{
"channel_id": UUIDv4,
"status": "active" | "disabled" | "init",
"reason": string | null
}

Возможные значения reason в зависимости от status:

  • При status: "active"reason всегда null
  • При status: "init"reason: wait_for_password, wait_for_code, qr, sync или null
  • При status: "disabled"reason: blocked, not_enough_money, rejected, unauthorized, foreignphone, qridle, openelsewhere или null
status канала Описание
active Канал активен
init Канал запускается
disabled Канал выключен: убрали из подписки или удалили с сохранением сообщений
Значение reason Описание
qridle, qr Необходимо отсканировать QR-код
openelsewhere Канал авторизован в другом аккаунте Wazzup
not_enough_money Канал не оплачен
foreignphone QR отсканирован другим аккаунтом в мессенджере (другой номер телефона)
unauthorized Не авторизован
wait_for_password Нужно ввести пароль для двухфакторной аутентификации
blocked Meta* заблокировала канал WABA
rejected Канал WABA отклонен

channel.delete

{
"channel_id": UUIDv4,
"timestamp": Unix timestamp в миллисекундах,
}

channel.create

{
"channel_id": UUIDv4,
"timestamp": Unix timestamp в миллисекундах,
}

channel.qr_update

{
"channel_id": UUIDv4,
"qr_code": string,
"platform": 'whatsapp' | 'telegram_api' | 'viber'
}

channel.waba_tier_update

Meta* присваивает аккаунтам WhatsApp Business уровни tier — они показывают, сколько 24-часовых переписок можно начать сутки.

{
"channel_id": UUIDv4,
"tier": "TIER_0" | "TIER_1K" | "TIER_10K" | "TIER_100K" | "TIER_UNLIMITED",
}

Возможные значения:

  • TIER_0: 250 переписок,
  • TIER_1K: 1000 переписок,
  • TIER_10K: 10 000 переписок,
  • TIER_100K: 100 000 переписок,
  • TIER_UNLIMITED: без ограничений.

group_chat.memberships_update

{
"meta": {
"idempotency_key": "945ff8a4-bb3c-45f7-8d1a-b40f7ce2fb",
"timestamp": 1760690824
},
"data": [
{
"group_id": "3c67afca-6cbf-4517-b120-c4a83dbd41",
"members": [
{
"group_member_id": "c705786d-bba5-43f9-9b-5f6f5d4ba623",
"name": "Маша",
"avatar_url": null,
"status": "in_group" | "invited" | "unknown" | "deleted" | "not_exists" |
}
]
}
],
"event": "group_chat.memberships_update"
}

Рекомендации по надёжности

  • Отвечайте быстро 200 OK, остальную обработку делайте асинхронно.
  • Ретраи. При временных ошибках доставки мы можем повторить отправку (количество попыток и интервалы могут меняться). Делайте обработку идемпотентной.
  • Защита. Размещайте endpoint за HTTPS.
  • Лимиты. Не выполняйте тяжёлую работу синхронно в обработчике вебхука — используйте очередь/фоновую обработку.

Быстрый чек‑лист

  1. Разверните публичный POST‑endpoint (HTTPS), принимайте application/json.
  2. Храните логи: статус ответа, тело, заголовки.
  3. Подпишитесь на события message.add и message.status_update — это минимум, чтобы понимать что сообщение отправлено и доставлено.
  4. Проверьте сценарии: входящее сообщение → ваш сервис → ответ 200; исходящее сообщение → статус‑вебхуки.

*Запрещены и признаны экстремистскими на территории РФ