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 — нужно создать новую сделку.

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

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

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

Метод 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_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 Отправитель сообщения в групповом чате WhatsApp, Telegram или MAX
sender.chat_type* string

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

  • whatsapp — чат WhatsApp,
  • telegram — чат Telegram,
  • max — чат MAX.
sender.chat_id* string

ID отправителя в мессенджере

sender.name string

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

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

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

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

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

recipient.chat_type* string

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

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

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

Если сообщение появилось в диалоге с контактом, то фактически это ID аккаунта в мессенджере, с которым переписывается пользователь:

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

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

recipient.profile_id* string

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

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

recipient.advert* object

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

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

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 кнопки
referral object Только для WABA. Маркетинговые данные из рекламы. Передаются, если клиент перешел в WhatsApp по кнопке в объявлении. Помогают понять, откуда о вас узнал клиент
referral.source_url string URL на рекламу, пост, по которому перешел клиент
referral.source_type string Тип объявления. Возможные значения: ad, post
referral.source_id string ID, который Meta присвоила объявлению
referral.headline string Заголовок объявления
referral.body string Основной текст объявления
referral.media_type string Тип медиа в объявлении. Возможные значения: image, video
referral.image_url string Ссылка на изображение из рекламы, если в media_type передано image
referral.video_url string Ссылка на видео из рекламы, если в media_type передано video
referral.thumbnail_url string Ссылка на превью видео из рекламы, если в media_type передано video
referral.ctwa_clid string ID, сгенерированное Meta для рекламы с редиректом в WhatsApp

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"

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

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

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

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

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