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
Как продавать еще удобнее
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 — изменилась информация о групповом чате;
  • crm_entities.contact_add — нужно создать новый контакт;
  • crm_entities.deal_add — нужно создать новую сделку;
  • messages_dump.status_update — получить выгрузку сообщений.

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

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

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

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

У вебхуков о необходимости создать контакт, сделку есть особенности:

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

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

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" }
]
}
}
{
  "event": "message.add",
  "data": [
    {
      "message_id": "a5e8ba61-bc6c-41fe-9598-db7a9cbfbcbd",
      "chat_id": "221601332",
      "channel_id": "5f3f029a-8e76-4203-9434-fd490f8db848",
      "direction": "inbound",
      "quoted_message_id": null,
      "timestamp": 1776953557938,
      "crm_user_id": null,
      "text": "Hello",
      "status": "accepted",
     "sender": {         "chat_type": "telegram",
"chat_id": "221601332",         "name": "Test Testovich",         "username": "testaccount", "phone": 79111234567
}        "recipient": { "chat_id": "221601332", "chat_type": "telegroup", "avatar": null, "username": null, "phone": null, "name": "Групповой чат", "profile_id": null, "advert": null } } ], "meta": { "idempotency_key": "9ef07b18-e95f-4ba1-9981-63d95d8ed468", "timestamp": 1776953558 } }
{
  "event": "message.add",
  "data": [
    {
      "message_id": "a5e8ba61-bc6c-41fe-9598-db7a9cbfbcbd",
      "chat_id": "221601332",
      "channel_id": "5f3f029a-8e76-4203-9434-fd490f8db848",
      "direction": "outbound",
      "quoted_message_id": null,
      "timestamp": 1776953557938,
      "crm_user_id": "1",
      "text": "111111111112",
      "status": "accepted",
      "recipient": {
        "chat_id": "221601332",
        "chat_type": "cian",
        "avatar": "https://store.dev-wazzup24.com/f0099ac6204c37af8cf80136d910f87520887d3b",
        "username": "139032710",
        "phone": null,
        "name": "Контакт номер 1",
        "profile_id": "139032710",
        "advert": {
          "id": 326650834,
          "url": "https://cian.ru/sale/flat/326650834/",
          "sha1": "e920b6e6b46756d4761d1bcc1e281fcf3279dea7",
          "type": "offer",
          "price": "7 350 000 ₽",
          "title": "1-комн. кв., 45,3 м², 7/7 этаж",
          "userId": 133889346,
          "externalId": "2299893155",
          "locationTitle": "Магаданская область, Магадан, улица Берзина, 12"
        }
      }
    }
  ],
  "meta": {
    "idempotency_key": "9ef07b18-e95f-4ba1-9981-63d95d8ed468",
    "timestamp": 1776953558
  }
}
message.add
│
├── message_id *
├── channel_id *
├── direction *
├── quoted_message_id
├── timestamp *
├── status *
├── crm_user_id
├── sender
│ ├── chat_type *
│ ├── chat_id *
│ ├── name
│ ├── username
│ └── phone
├── recipient *
│ ├── chat_type *
│ ├── chat_id
│ ├── username
│ ├── phone
│ ├── profile_id *
│ └── advert *
├── text
├── attachment
│ ├── url *
│ ├── name
│ ├── mimetype
│ ├── size
│ └── sha1
├── template
│ ├── id *
│ ├── values[]
│ └── buttons[]
│ ├── text *
│ └── payload *
└── referral
├── source_url
├── source_type
├── source_id
├── headline
├── body
├── media_type
├── image_url
├── video_url
├── thumbnail_url
└── ctwa_clid
Параметр. Обязательные отмечены * Тип Описание
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"
sender object sender Отправитель сообщения в групповом чате WhatsApp, Telegram или MAX
recipient* object recipient

Чат, в котором появилось новое исходящее или входящее сообщение. 

Если вебхук о новом сообщении в диалоге, то в этом объекте содержится информация о контакте, с которым переписывается пользователь.

Если вебхук о новом сообщении в групповом чате, то в этом объекте содержится общая информация о группе без указания участников.

text string Текст сообщения. Должен быть либо text, либо attachment, либо template
attachment object attachment Объект вложения
template object template Объект WABA-шаблона
referral object referral Только для WABA. Маркетинговые данные из рекламы. Передаются, если клиент перешел в WhatsApp по кнопке в объявлении. Помогают понять, откуда о вас узнал клиент

sender (объект)

Параметр. Обязательные отмечены * Тип Описание
chat_type* string

Тип сущности в мессенджере, соцсети. Доступные значения:

  • whatsapp — аккаунт в WhatsApp,
  • telegram — аккаунт в Telegram,
  • max — аккаунт в MAX.
chat_id* string

Идентификатор сущности в мессенджере, соцсети.

name string

Имя отправителя

username string Только для Telegram. Имя пользователя в Telegram, без @ в начале
phone string Телефон отправителя в международном формате, если известен. Без + и иных символов 

recipient (объект)

Параметр. Обязательные отмечены * Тип Описание
chat_type* string

 

Тип сущности в мессенджере, соцсети. Доступные значения:

  • whatsapp — аккаунт WhatsApp,
  • whatsgroup — групповой чат в WhatsApp,
  • viber — аккаунт Viber,
  • instagram — аккаунт Instagram*,
  • telegram — аккаунт Telegram,
  • telegroup — групповой чат в Telegram,
  • vk — аккаунт ВКонтакте,
  • avito — аккаунт Авито,
  • max — аккаунт MAX,
  • maxgroup — групповой чат в MAX,
  • cian— аккаунт Циан.
chat_id string

Идентификатор сущности в мессенджере, соцсети.

  • Для whatsapp и viber — только цифры, формат 79011112233.
  • Для instagram — аккаунт без @ вначале.
  • Для whatsgroup, maxgroup, telegroup, telegram, max, avito, vk, cian приходит в вебхуках входящих сообщений.
username string Только для Telegram. Имя пользователя в Telegram, без @ в начале. Можно использовать при отправке сообщений, если неизвестен chat_id
phone string

Телефон контакта в международном формате, если известен. Без + и иных символов

profile_id* string

Только для Циан. Идентификатор профиля.

Для других типов чата в параметре будет null.

advert* object advert

Объявление Циан, по которому написал клиент. 

Для других типов чата в объекте будет null.

attachment (объект)

Параметр. Обязательные отмечены * Тип Описание
url* string URL файла
name string Имя файла
mimetype string MIME-тип файла
size number Размер файла в байтах
sha1 string SHA-1 хеш файла

template (объект)

Параметр. Обязательные отмечены * Тип Описание
id* string ID шаблона
values array[string] Значения переменных шаблона
buttons array[object] Кнопки шаблона
buttons[].text* string Текст кнопки
buttons[].payload* string Payload кнопки

referral (объект)

Параметр. Обязательные отмечены * Тип Описание
source_url string URL на рекламу, пост, по которому перешел клиент
source_type string Тип объявления. Возможные значения: ad, post
source_id string ID, который Meta присвоила объявлению
headline string Заголовок объявления
body string Основной текст объявления
media_type string Тип медиа в объявлении. Возможные значения: image, video
image_url string Ссылка на изображение из рекламы, если в media_type передано image
video_url string Ссылка на видео из рекламы, если в media_type передано video
thumbnail_url string Ссылка на превью видео из рекламы, если в media_type передано video
ctwa_clid string ID, сгенерированное Meta для рекламы с редиректом в WhatsApp
Параметр. Обязательные отмечены * Тип Описание
id* string

id объявления

url* string

Ссылка на объявление

sha1* string

Хеш от Циан

type* string Тип объявления
price* string Цена в объявлении
title* string Название объявления
userId* string id пользователя, который опубликовал объявление
locationTitle* string Локация, указанная в объявлении

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

Вебхуки о необходимости создать контакт, сделку: crm_entities.contact_add и crm_entities.deal_add 

Отправляем, когда нужно создать контакт или сделку в CRM. Это происходит в 3 случаях:

Кейс 1: в п. 3 настроек интеграции выбрано «Нового клиента получает первый ответивший менеджер».

Пишет новый клиент. Сотрудник ему отвечает. Wazzup отправляет вебхук о создании нового контакта и сделки на первое исходящее, если из CRM загружены воронки с этапами.

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

Кейс 2: в п. 3 настроек интеграции выбрано «Менеджеры получают новых клиентов по очереди».

Пишет новый клиент. Wazzup отправляет вебхук о создании нового контакта и сделки на первое входящее, если из CRM загружены воронки с этапами.

Чтобы вебхуки приходили в первом и втором кейсах, нужно в ЛК добавить сотрудников и включить кому-то из них в настройках интеграции ползунок «Получает новых клиентов».

Кейс 3: при нажатии на кнопку «+» в списке «Сделки» для создания сделки:

Мы проверяем, создан ли контакт у нас в базе.

Если контакт отсутствует, отправляем вебхук о необходимости создания контакта:

{
    "event": "crm_entities.contact_add",
    "data": [
        {
            "responsible_user_id": string,
            "name": string,
            "recipient":
                {
                    "chat_type": string,
                  "chat_id": string,
"username": "string", "phone": "string"
                }[],
          "source": "auto" |   "by_user"
//auto — при входящем или исходящем, by_user — по кнопке
        }
    ],
    "meta": {
        "idempotency_key": string
        "timestamp": number
    }
}

После этого CRM должна создать контакт и вернуть JSON-объект с данными о контакте. Пример:

{
  "id": "string",
// id контакта в CRM, обязательный параметр   "responsible_user_id": "string", "name": "string",
// имя контакта, обязательный параметр   "recipient": [ { "chat_type": "string", "chat_id": "string", "username": "string", "phone": "string" } ], "uri": "string"
// uri опционально. Ссылка на контакт в CRM, по которой переходит пользователь из списка «Сделки» в iframe чатов
}

Затем мы отправим вебхук о необходимости создания сделки.

Если контакт уже создан, мы отправляем вебхук о необходимости создания сделки:

{
    "event": "crm_entities.deal_add",
    "data": [
        {
            "responsible_user_id": string
            "pipeline_id": string,
            "stage_id": string,
            "contacts": string[],
          "source": "auto" | "by_user"
//auto — при входящем или исходящем, by_user — по кнопке
        }
    ],
    "meta": {
        "idempotency_key": string
        "timestamp": number
    }
}

После чего CRM должна создать сделку и вернуть JSON-объект с данными сделки. Пример:

{
    "id": "deal_123",
// id сделки в CRM, обязательный параметр
"responsible_user_id": "user_456", "name": "Клиент", "contacts": ["contact_789", "contact_012"], "source": "auto", "closed": false, "uri": "https://crm.example.com/deals/deal_123"
// uri опционально. Ссылка на сделку в CRM, по которой переходит пользователь из списка «Сделки» в iframe чатов
}

Если контакт, сделка уже созданы, то Wazzup не отправит повторно вебхук, даже если сделка закрыта: "close": "true"

messages_dump.status_update

В вебхуке приходит ссылка на выгрузку сообщений. Чтобы создать задачу на выгрузку, используйте метод POST /v2/messages/messages_dump

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

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

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

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

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