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
Публичное API
Arrow

Webhooks

Вебхуки отправляем методом POST на указанный URI. Он может включать в себя query string.

Если у нас есть ваш crmKey, мы добавляем заголовок Authorization: Bearer ${crmKey}. Если нет — не добавляем заголовок Authorization вообще.

Вебхуки содержат в теле JSON и соответствующий заголовок Content-Type: application/json; charset-utf-8. В JSON закодирован объект со свойствами, которые соответствуют типам вебхуков.

Вебхуки о новых сообщениях и изменении их статуса могут содержать объекты messages и statuses одновременно. Вебхук о необходимости создать контакт или сделку содержит только один объект: createContact или createDeal.

В ответ ожидаем код 200 OK. В некоторых случаях ждем определенную информацию в теле ответа. Таймаут — 30 с.

Как подключить вебхуки

Чтобы подписаться на вебхуки, вызовите:

Метод PATCH https://api.wazzup24.com/v3/webhooks
PATCH /v3/webhooks
├── webhooksUri
└── subscriptions
    ├── messagesAndStatuses
    ├── contactsAndDealsCreation
    ├── channelsUpdates
    └── templateStatus

В теле должен быть JSON с параметрами:

Параметр Тип Описание
webhooksUri String Адрес для получения вебхуков. Не более 200 символов
subscriptions object subscriptions Настройки вебхуков

subscriptions (объект)

Параметр Тип Описание
messagesAndStatuses Boolean Вебхук о новых сообщениях и вебхук об изменении статуса исходящих.

Если вебхук нужен, укажите true. Если нет — false.

contactsAndDealsCreation Boolean Вебхук о том, что нужно создать новый контакт или сделку.

Если вебхук нужен, укажите true. Если нет — false.

channelsUpdates Boolean Вебхук об изменении статуса канала.

Если вебхук нужен, укажите true. Если нет — false.

templateStatus Boolean Вебхук об изменении статуса модерации шаблона WABA.

Если вебхук нужен, укажите true. Если нет — false.

При подключении на указанный url будет отправлен тестовый POST запрос с телом {test: true }. В ответ сервер должен вернуть 200 при успешном подключении вебхуков. Иначе вернется ошибка: Webhooks request not valid. Response status must be 200.

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

curl --location --request PATCH 'https://api.wazzup24.com/v3/webhooks' \
--header 'Authorization: Bearer w11cf3444405648267f900520d454368d27' \
--header 'Content-Type: application/json' \
--data-raw '{
"webhooksUri": "https://example.com/webhooks",
"subscriptions": {
"messagesAndStatuses": true,
"contactsAndDealsCreation": true
}
}'

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

{
ok
}

Ошибки

Помимо общих ошибок для всех роутов могут быть:

Ошибка Описание
400 Bad Request { error: 'uriNotValid', description: 'Provided URI is not valid URI' } — при неверном по формальным признакам URI
400 Bad Request { error: 'testPostNotPassed', description: 'URI does not return 200 OK on test request', data: { '${код ответа}' } } — если получена ошибка при отправке тестового запроса

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

Чтобы проверить установленный адрес для получения вебхуков, вызовите:

Метод GET https://api.wazzup24.com/v3/webhooks

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

HTTP/1.1 200 OK
{
"webhooksUri": "https://example.com/webhooks",
"subscriptions": {
"messagesAndStatuses": "true",
"contactsAndDealsCreation": "true"
}
}

Вебхук о новых сообщениях, изменении и удалении сообщения

{
  "messages": [
    {
      "messageId": "String (uuid4)",
      "channelId": "String (uuid4)",
      "chatType": "String",
      "chatId": "String",
      "avitoProfileId": "String",
      "dateTime": "String",
      "type": "String",
      "isEcho": "Boolean",
      "contact": {
        "name": "String",
        "avatarUri": "String",
        "username": "String",
        "phone": "String"
      },
      "text": "String",
      "contentUri": "String",
      "status": "String",
      "error": {
        "error": "String",
        "description": "String"
      },
      "authorName": "String",
      "authorId": "String",
      "instPost": { ... },
      "interactive": [ ... ],
      "quotedMessage": { ... },
      "sentFromApp": "Boolean",
      "isEdited": "Boolean",
      "isDeleted": "Boolean",
      "oldInfo": {
        "oldText": "String",
        "oldAuthorId": "String",
        "oldAuthorName": "String"
      }
    }
  ]
}

Вебхук пришлет JSON-объект с ключом messages, в значении которого лежит массив объектов со следующими параметрами:

Параметр Тип Описание
messageId String (uuid4) guid сообщения в Wazzup
channelId String (uuid4) ID канала
chatType String Тип чата. Доступные значения: whatsapp, whatsgroup, viber, instagram*, telegram, telegroup, vk, avito, max, maxgroup.
chatId String ID чата (аккаунт контакта в мессенджере).
avitoProfileId String Id профиля Авито. Не то же, что chatId.
dateTime String Время отправки сообщения в формате yyyy-mm-ddThh:mm:ss.ms
type String Тип сообщения: text, image, audio, video, document, vcard, geo, wapi_template, unsupported, missing_call, unknown.
isEcho Boolean Если сообщение входящее — false. Если исходящее — true
contact object contact Информация о контакте
text String Текст сообщения. Может отсутствовать, если сообщение с контентом
contentUri String Ссылка на контент сообщения. Может отсутствовать, если сообщение не содержит контента
status String Содержит только значение из ENUM из вебхука statuses: sent, delivered, read, error, inbound.
error object error Приходит, если status: error
authorName String Имя пользователя, отправившего сообщение. Может быть только при isEcho == true
authorId String Идентификатор пользователя CRM
instPost object instPost Информация о посте из Instagram*. Прикладывается к комментарию в Instagram*
interactive Interactive Массив объектов с кнопками Salesbot amoCRM
quotedMessage Object Объект с параметрами цитируемого сообщения
sentFromApp Boolean true, если отправлено из нативного чата Wazzup
isEdited Boolean Показывает, что сообщение отредактировано.
isDeleted Boolean Показывает, что сообщение удалено.
oldInfo object oldInfo Содержит информацию об измененном или удаленном сообщении

contact (объект)

Параметр Тип Описание
name String Имя контакта
avatarUri String URI аватарки контакта.
username String Только для Telegram. username (имя пользователя) без @
phone String Только для Telegram, MAX. Телефон в международном формате

error (объект)

Параметр Тип Описание
error String Код ошибки (BAD_CONTACT, CHATID_IGSID_MISMATCH, TOO_LONG_TEXT, SPAM и др.)
description String Описание ошибки

instPost (объект)

Параметр Тип Описание
id String ID поста
src String Ссылка на пост
author String Автор поста
description String Описание поста

oldInfo (объект)

Параметр Тип Описание
oldText String Текст сообщения до редактирования или удаления
oldAuthorId String id автора исходного сообщения
oldAuthorName String Имя автора исходного сообщения
Вид объекта с информацией о посте Instagram*
{
id: '2430659146657243411_41370968890',
src: 'https://www.instagram.com/p/CG7b52ejyET',
sha1: 'dc8c036b4a0122bb238fc38dcb0391c125e916f2',
likes: 0,
author: 'wztestdlv',
comments: 22,
timestamp: 1603977171000,
updatedAt: 1608905897958,
authorName: '',
authorId: '78596324',
description: 'Красота',
previewSha1: '3a55c2920912de4b6a66d24568470dd4ad367c34',
imageSrc: 'https://store.dev-wazzup24.com/dc8c036b4a0122bb238fc38dcb0391c125e916f2',
previewSrc: 'https://store.dev-wazzup24.com/3a55c2920912de4b6a66d24568470dd4ad367c34'
}
Стикеры, полученные с канала WhatsApp, отправляем в вебхуке "type": "image" и ссылку с файлом в формате .was:
{
  "messages": [
    {
      "messageId": "6a2087e8-e0f4-9999-b968-9d9999933c81",
      "dateTime": "2025-05-06T14:16:00.002Z",
      "channelId": "b96a353b-9999-4cac-8413-ba99999f981",
      "chatType": "whatsapp",
      "chatId": "79999999999",
      "type": "image",
      "isEcho": false,
      "contact": {
        "name": "79999999999",
        "avatarUri": "https://store.wazzup24.com/0e999997ae07d2083c687253b8baed9999a26fa";
      },
      "contentUri": "https://store.wazzup24.com/e51159999e0046d628b3924161d411e5812d2546/?filename=f9ebe1b1-3ed5-4ec2-97fb-03f0c25e413f.was";,
      "status": "inbound"
    }
  ]
}
Опрос, полученный с канала WhatsApp, отправляем в вебхуке "type": "text" и присылаем опрос в формате текстового сообщения:
{
  "messages": [
    {
      "messageId": "caa9999-cce3-424c-86cd-05f99995073",
      "dateTime": "2025-05-06T14:18:00.001Z",
      "channelId": "b96a999e-06f5-4cac-8413-ba999993f981",
      "chatType": "whatsapp",
      "chatId": "79999999999",
      "type": "text",
      "isEcho": false,
      "contact": {
        "name": "79999999999",
        "avatarUri": "https://store.wazzup24.com/0e82ead97ae07d9999c687253b8baed2365a26fa";
      },
      "text": "Тестовый\n• Вариант1\n• Вариант2",
      "status": "inbound"
    }
  ]
}

Вебхук про обновление статусов исходящих сообщений

{
  "statuses": [
    {
      "messageId": "String",
      "timestamp": "String",
      "status": "String",
      "error": {
        "error": "String",
        "description": "String",
        "[data]": "String"
      }
    }
  ]
}

Вебхук отправляет JSON-объект с ключом statuses, содержащий массив объектов со следующими параметрами:

Параметр Тип Описание
messageId String guid сообщения в Wazzup
timestamp String Время получения информации об обновлении статуса
status String Обновленный статус сообщения: sent, delivered, read, error, edited.
error object error Приходит, если status: error

error (объект)

Параметр Тип Описание
error String Код ошибки
description String Описание ошибки
[data] String Дополнительная информация об ошибке
{
"statuses": [
{
"messageId": "be3dc577-60c4-4fc8-83a5-8c358e0bfe15",
"timestamp": "2025-02-05T06:01:07.499Z",
"status": "delivered"
}
]
}

Вебхуки о том, что нужно создать новый контакт, сделку

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

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

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

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

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

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

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

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

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

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

{ 
createDeal: { 
responsibleUserId: '1', 
contacts: ['1'],
source: 'auto'|'byUser'
}, 
}

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

{
createContact: {
responsibleUserId: '1',
name: 'contacts.name',
contactData: [{ chatType, chatId }],
source: 'auto'|'byUser'
},
}

После этого CRM должна создать контакт и вернуть в ответе 200 OK с JSON-объектом новой сущности, соответствующим сигнатуре CRUD-роутов контактов.

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

После чего CRM должна создать сделку и аналогично вернуть 200 OK с JSON-объектом, соответствующим сигнатуре CRUD-роутов сделок.

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

Изменение статуса канала или Tier у WABA-аккаунта

{
  "channelsUpdates": [
    {
      "channelId": "String",
      "state": "String",
      "tier": "String",
      "qr": "String",
      "qridle": "String",
      "timestamp": "Integer"
    }
  ]
}
Параметр Тип Описание
channelId String guid канала
state String Cтатус канала. См. таблицу ниже.
tier String Только для каналов WABA (TIER_0, TIER_1K, TIER_10K и т.д.)
qr String QR-код в формате base64, присутствует только при state 'qr'
qridle String канал разавторизован или QR-код протух
timestamp Integer Время установки статуса в мс

Пример

{
    "channelsUpdates": [
        {
            "channelId": "d9e5721c-ce2b-444f-9627-60a8129d7e1f",
            "state": "qr",
            "timestamp": 1603977171000,
            "qr": "data:image/png;base64,iVBORw0KGgoAAAANS"
        }
    ]
}

Значения статуса канала (state)

Значение Описание Виды транспорта
active Канал активен, все нормально Все
disabled Канал выключен (не в подписке или техработы) Все
qr Необходимо отсканировать qr-код whatsapp и tgapi
phoneUnavailable Нет связи с телефоном whatsapp
openElsewhere WhatsApp Web открыли в другом месте whatsapp
notEnoughMoney Канал не оплачен Все
unauthorized Не авторизован — надо заново авторизовать канал Все

Изменение статуса модерации шаблона WABA

{
  "templateStatus": {
    "templateGuid": "String",
    "name": "String",
    "status": "String"
  }
}
Параметр Тип Описание
templateGuid String guid шаблона
name String Имя шаблона
status String Статус модерации шаблона. См. таблицу ниже.

Пример

{
  templateStatus: {
    templateGuid:"8d255e5d-aefd-44dc-8131-c3ad6c3ab28c",      
    name: "Test",      
    status: approved    
} 
}

Значения статуса (status)

Значение Описание
APPROVED Одобрен Meta*, можно использовать
PENDING На модерации Meta*
REJECTED Отклонен Meta*
PAUSED На шаблон жаловались, Meta* его проверяет
DISABLED Шаблон заблокирован после жалоб

 

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