Отправка сообщений

В данной статье мы подробно рассмотрим процесс отправки, редактирования и удаления сообщений через API Wazzup.

Отправка сообщений

Для отправки сообщений необходимо вызвать

 POST https://api.wazzup24.com/v3/message

В теле запроса нужно передавать

Параметры запроса

Роут не идемпотентен! Повторные запросы с одним и тем же содержимым приведут к отправке нескольких одинаковых сообщений.

Для защиты от возможного дублирования сообщений можно добавлять уникальное для сообщения свойство crmMessageId. Если оно было отправлено, то при поступлении другого запроса с этим же crmMessageId, сообщение не отправится, вернется ошибка 400 Bad Request, { error: ‘repeatedCrmMessageId’, description: ‘You have already sent message with same crmMessageId’ }.  Проверка на crmMessageId длится 60 секунд. Если юзер отправит дубль сообщения через 61 секунду и большее, оно уйдет.

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

fetch("https://api.wazzup24.com/v3/message", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer {apiKey|sidecarApiKey}",
  },
  body: {
    channelId: "e0629e11-0f67-4567-92a9-2237e91ec1b9",
    refMessageId: "61e5a375-1760-452f-ad73-5318844ffc4f",
    crmUserId: "string-user-id",
    crmMessageId: "string-crm-message-id",
    chatId: "string-chat-id",
    chatType: "whatsapp",
    text: "message text"
  },
});

Запрос на отправку шаблона WABA с 3 кнопками. У каждой есть полезная нагрузка.

fetch("https://api.wazzup24.com/v3/message", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer {apiKey|sidecarApiKey}",
  },
  body: {
    channelId: "24197d5f-06de-421f-8576-9f6e6cb67f28",
    chatType: "whatsapp",
    chatId: "79994621848",
    templateId: "6201005a-9a6f-486f-bdd5-e6cb86c76ddb",
    templateValues: ["value"]
    buttonsObject: {
     buttons: [
         { payload: "button_payload 1" },
         { payload: "button_payload 2" },
         { payload: "button_payload 3" }
     ]
    }
  },
});

В запросе для шаблонов WABA с кнопками не нужно прописывать текст кнопок. Они проходят модерацию вместе с основным текстом шаблона, поэтому кнопки нельзя менять.

buttonsObject пригодится, только если для кнопок нужно указать полезную нагрузку в поле payload. 

В этом запросе отправляем интерактивное сообщение с 3 кнопками: «Да», «Нет» и «возможно». У кнопок нет полезной нагрузки.

fetch("https://api.wazzup24.com/v3/message", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer {apiKey|sidecarApiKey}",
  },
  body: {
    channelId: "e0629e11-0f67-4567-92a9-2237e91ec1b9",
    refMessageId: "61e5a375-1760-452f-ad73-5318844ffc4f",
    crmUserId: "string-user-id",
    crmMessageId: "string-crm-message-id",
    chatId: "string-chat-id",
    chatType: "whatsapp",
    text: "message text",
    buttonsObject: {
     buttons: [
         {text: "Да", type: "text"},
         {text: "Нет", type: "text"},
         {text: "возможно", type: "text"}
     ]
    }
  },
});

Ответ

Если отправляете через API шаблон без полезной нагрузки, в вебхуке об ответном сообщении отправим текст соответствующей кнопки. Если отправляете интерактивное сообщение без полезной нагрузки — отправим порядковый номер кнопки, начиная с 0.

Параметр
Тип Описание
messageId String Идентификатор сообщения.

Указывается только при code=OK

chatId String Идентификатор чата.

Указывается только при code=OK

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

HTTP/1.1 201 OK 
{ 
    "messageId": "f66c53a6-957a-46b2-b41b-5a2ef4844bcb", 
    "chatId": "79999999999" 
}

Ошибки при отправке сообщений

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

1. Некорректные значения параметров

Если переданное значение параметра не соответствует требованиям (например, channelId не в формате UUID, chatId не является строкой или chatType не соответствует допустимым значениям), API вернет ошибку:

{
    "status": 400,
    "requestId": "7ca68797d127735e72b066b0080e2cc0",
    "error": "INVALID_MESSAGE_DATA",
    "description": "Message data is invalid",
    "data": {
        "fields": [
            "channelId"
        ]
    }
}

Решение: Проверьте правильность значений передаваемых параметров. В data.fields будет указан параметр, в котором найдена ошибка.

2. Несоответствие типа транспорта и канала

Если в запросе указан channelId с одним транспортом, а chatType принадлежит другому транспорту, API вернет следующую ошибку:

{
    "status": 400,
    "requestId": "21a9be7692d378b0270e7fc1d993381a",
    "error": "WRONG_TRANSPORT",
    "description": "You can't send message to vk chat from whatsapp transport",
    "data": {
        "channelId": "dffa1c7b-6db8-4b8f-b559-91166aba879e",
        "transport": "whatsapp",
        "chatType": "vk"
    }
}

Решение: Убедитесь, что chatType соответствует транспорту, указанному в channelId.

3. Повторное использование crmMessageId

Если в запросе указан crmMessageId, который уже использовался в течение последних 60 секунд, API вернет следующую ошибку:

{
    "status": 400,
    "requestId": "c1005276e8a2b5aa23fcc94407d39f49",
    "error": "REPEATED_CRM_MESSAGE_ID",
    "description": "You have already sent message with same crmMessageId",
    "data": {
        "crmMessageId": "1"
    }
}

Решение: Используйте уникальные crmMessageId для каждого сообщения. Проверка на повтор длится 60 секунд.

Управление отправленными сообщениями

После отправки сообщения его можно изменить или удалить, если это поддерживает канал.

Редактирование сообщений

Wazzup поддерживает редактирование отправленных сообщений. Можно изменить текст или вложение, но не одновременно.

PATCH https://api.wazzup24.com/v3/message/:messageId

В заголовке запроса необходимо передавать API-ключ:

"Authorization": "Bearer {apiKey|sidecarApiKey}"

Как редактировать сообщение:

  • В поле text укажите новый текст сообщения.
  • Если нужно заменить вложение, используйте contentUri.
  • Одновременно изменять текст и вложение нельзя.
Параметр Тип Описание
messageId String Параметр строки для идентификации сообщения
crmUserId String ID пользователя CRM, указанный с помощью CRUD users
text String Текст сообщения. Обязателен, если не указан contentUri. Одновременно передавать text и contentUri нельзя
contentUri String Ссылка на файл для отправки. Обязателен, если не указан text

Пример использования для сообщений с текстом:

curl 
--location 
--request PATCH 'https://api.wazzup24.com/v3/message/6f1b3c67-3008-488b-9abc-12fcac6de134' \
--header 'Authorization: Bearer {apiKey|sidecarApiKey}' \
--header 'Content-Type: application/json' \
--data '{
"text": "Обновленный текст сообщения",
"crmUserId": "2e0df379-0e3c-470f-9b36-06b9e34c3bdb"
}'

Пример использования для сообщений с вложением:

curl
--location 
--request PATCH 'https://api.wazzup24.com/v3/message/6f1b3c67-3008-488b-9abc-12fcac6de134' \
--header 'Authorization: Bearer {apiKey|sidecarApiKey}' \
--header 'Content-Type: application/json' \
--data '{
"contentUri": "https://example.com/image.png",
"crmUserId": "2e0df379-0e3c-470f-9b36-06b9e34c3bdb"
}'
Удаление сообщений

Чтобы удалить сообщение, используйте метод:

DELETE https://api.wazzup24.com/v3/message/:messageId

В заголовке запроса необходимо передавать API-ключ:

"Authorization": "Bearer {apiKey|sidecarApiKey}"

Пример удаления сообщения:

curl 
--location
--request DELETE 'https://api.wazzup24.com/v3/message/6f1b3c67-3008-488b-9abc-12fcac6de134' \
--header 'Authorization: Bearer {apiKey|sidecarApiKey}'

Код ошибки Описание
BALANCE_IS_EMPTY Закончились деньги на балансе подписки WABA
MESSAGE_WRONG_CONTENT_TYPE Неверный тип контента. Возникает, если не удалось определить тип контента или он не поддерживается
MESSAGE_ONLY_TEXT_OR_CONTENT В сообщении может быть текст или вложение. Отправлять одновременно текст и вложение нельзя
MESSAGE_NOTHING_TO_SEND Текст сообщения не найден
MESSAGE_TEXT_TOO_LONG Текст сообщения WhatsApp превышает 10 000 символов
MESSAGES_TOO_LONG_INSTAGRAM Текст сообщения Instagram превышает 10 000 символов
MESSAGES_TOO_LONG_TELEGRAM Текст сообщения Telegram превышает 4096 символов 
MESSAGES_TOO_LONG_WABA Текст сообщения WABA слишком длинный. Максимум 1024 для заголовка и 4096 символов для основного текста
MESSAGES_TOO_LONG_VK Текст сообщения Вконтакте превышает 4096 символов
MESSAGES_TOO_LONG_AVITO Текст слишком длинный. Максимум 1000 для подписи и 1000 для текстового сообщения
MESSAGES_UNSUPPORTED_CONTENT_TYPE_INSTAPI Поддерживаемые типы контента для Instagram: jpg, gif, png, ico, bmp
MESSAGES_CONTENT_CAN_NOT_BE_BLANK Файл с контентом не может быть пустым.

Возникает при отправке нетекстового сообщения, к которому не приложили медиа.

MESSAGES_CONTENT_SIZE_EXCEEDED Контент превышает допустимый размер 10 MB
MESSAGES_TEXT_CAN_NOT_BE_BLANK Текстовое сообщение не может быть пустым
CHANNEL_NOT_FOUND Канал, через который отправляется сообщение, не найден в интеграции
CHANNEL_BLOCKED Канал, через который отправляется сообщение, выключен
CHANNEL_WAPI_REJECTED Канал WABA заблокирован
MESSAGE_DOWNLOAD_CONTENT_ERROR Не удалось скачать контент по указанной ссылке
MESSAGES_NOT_TEXT_FIRST На тарифе «Inbox» нельзя написать первым
MESSAGES_IS_SPAM WhatsApp оценил это сообщение, как спам
VALIDATION_ERROR Валидационная ошибка параметра, переданного в запрос
CHANNEL_NO_MONEY Канал не оплачен: не в подписке и не на тестовом периоде
MESSAGE_CHANNEL_UNAVAILABLE Канал, с которого отправляется сообщение, недоступен.

У канала статус «Телефон недоступен» или «Подождите минутку»

MESSAGES_ABNORMAL_SEND Тип чата не соответствует источнику контакта.

Например, такая ошибка может возникнуть, если вы пытаетесь отправить сообщение с канала WhatsApp на канал Instagram

MESSAGES_INVALID_CONTACT_TYPE Тип чата не соответствует источнику контакта Instagram.

Например, такая ошибка может возникнуть, если вы пытаетесь отправить сообщение с канала Instagram на канал WhatsApp

MESSAGES_CAN_NOT_ADD Сообщение не отправлено. Непредвиденная серверная ошибка
MESSAGES_CONTENT_SIZE_EXCEEDED_WABA Контент превышает допустимый размер. Для Telegram максимальный размер фото — 5 МБ, для другого контента — 16 МБ
MESSAGES_CONTENT_SIZE_EXCEEDED_TELEGRAM Контент превышает допустимый размер. Для Telegram — 5 МБ для фото и  20 МБ для прочего контента
MESSAGES_TOO_LONG_VIBER Текст сообщения Viber превышает 6999 символов
MESSAGES_TOO_LONG_WABA_HEADER Текст заголовка шаблона WABA превышает 60 символов
MESSAGES_TOO_LONG_WABA_TEMPLATE Текс шаблона WABA превышает 1024 символов
REFERENCE_MESSAGE_NOT_FOUND Ошибка возникает при цитировании, если не удалось найти сообщение, к которому прикрепляется цитата.

Проверьте, что в качестве refId передан идентификатор сообщения, полученный от Wazzup

UNKNOWN_ERROR Неизвестная ошибка.

Обратитесь в поддержку

UNKNOWN_ERROR_WITH_TRACE_ID Неизвестная ошибка. Свяжитесь с нами для получения помощи с идентификатором трассировки ошибки
MESSAGES_EDITING_TIME_EXPIRED Истекло время редактирования сообщения. Сообщение можно редактировать только в течение установленного времени после отправки.
MESSAGES_CONTAIN_BUTTONS Сообщение содержит кнопки и не может быть отредактировано.
MESSAGES_ONLY_TEXT_OR_CONTENT В сообщении может быть только текст или вложение. Одновременно передавать оба нельзя.
CHANNEL_INVALID_TRANSPORT_FOR_EDITING Канал не поддерживает редактирование сообщений.
CHANNEL_INVALID_TRANSPORT_FOR_CONTENT_EDITING Канал не поддерживает редактирование содержимого сообщений (например, вложений).
CHAT_NO_ACCESS Нет доступа к указанному чату. Проверьте настройки доступа.
MESSAGES_NOT_FOUND Сообщение не найдено или не содержит контента.
CHANNEL_LIMIT_EXCEEDED Превышен лимит активных диалогов для канала.
MESSAGES_DELETION_TIME_EXPIRED Истекло время удаления сообщения. Сообщение можно удалить только в течение установленного времени после отправки.
CHANNEL_INVALID_TRANSPORT_FOR_DELETION Канал не поддерживает удаление сообщений.
TEMPLATE_REJECTED Meta ограничила этот шаблон. Попробуйте другой или дождитесь входящего сообщения.
BAD_CONTACT Не удалось отправить. Номера нет в WhatsApp или версия устарела. Попробуйте позже.