Чаты (API v2)
Чаты в API Radist.Online: источники чатов, создание диалога по номеру, username или id чата в WhatsApp, Telegram, MAX и VK, привязка чатов к контактам и inbox.
Общее
Swagger: https://api.radist.online/v2/docs#/Messaging
Необходимые права доступа (scopes) для работы с API: messaging
Источники чатов
Список доступных источников чатов можно получить здесь (GET /companies/{company_id}/messaging/chats/sources/): MessagingGetChatsSources
У каждого источника указан connection_id, который нужно будет использовать далее, и объект create_chat — три флага, показывающие, каким идентификатором в этом источнике можно создать чат: with_phone (номер телефона), with_username (имя пользователя) и with_chat_id (идентификатор чата на стороне мессенджера).
Создание чата
MessagingCreateChat (POST /companies/{company_id}/messaging/chats/)
Чат создаётся по одному из трёх идентификаторов — в запросе нужно передать хотя бы один из них:
phone— номер телефона клиента в формате E.164 (WhatsApp, WABA, Telegram, MAX, VK Мессенджер);user_name— имя пользователя (Telegram, VK Мессенджер);chat_id— идентификатор чата на стороне мессенджера (Telegram, MAX).
Какие идентификаторы принимает конкретное подключение, видно в объекте create_chat в списке источников. У Telegram Bot, MAX Bot, VK Сообществ и Авито все три флага false: создать чат через них нельзя, диалог начинает клиент.
Если чат уже существует, вернётся существующий чат. В ответе приходят chat_id, contact_id и два флага — created_chat и created_contact: они показывают, были ли чат и контакт созданы этим запросом или уже существовали.
При создании чата сразу происходит его привязка к контакту. Она работает следующим образом:
- При создании чата с использованием номера телефона, если в компании уже существует контакт с этим номером, чат будет привязан к нему
- При создании чата в Telegram/Telegram Bot по возможности чат будет привязан к контакту, у которого уже есть чаты с этим пользователем. Пример: есть чат через бота с пользователем @example привязанный к контакту с
id=456. Создаём новый чат через личный номер telegram с тем же пользователем @example. Будет создан новый чат, но привязан он будет к контакту сid=456. В мессенджере MAX также возможна привязка по id пользователя, если номер телефона контакта неизвестен. - При создании чата можно явно указать
contact_id, тогда чат будет привязан к указанному контакту, если чат ещё не существует. Если существует, будет возвращёт существующий чат с существующим контактом. - Если 1-3 не сработали, будет создан новый контакт
Саму карточку контакта — имя, телефоны, теги, заметки — можно вести отдельно, см. Контакты.
Пример создания чата по номеру телефона
| |
Получение чата
Если id чата уже известен, чат можно получить методом MessagingGetChatById (GET /companies/{company_id}/messaging/chats/{chat_id}).
Если у вас есть идентификатор чата на стороне мессенджера (тот, что приходит в вебхуках в поле message.chat_id), используйте MessagingGetChatBySource (GET /companies/{company_id}/messaging/chats/by_source/) — метод принимает connection_id и source_chat_id и возвращает наш чат.
Получение списка чатов с контактами (inbox)
MessagingGetChatsWithContacts (GET /companies/{company_id}/messaging/chats/with_contacts/)
Чаты привязаны к контактам. Этот метод позволяет получить список чатов, сгруппированных по контактам. У одного контакта может быть несколько чатов.
Для итерации используйте параметр cursor, который возвращается в запросе.
Важно: если у вас есть номер телефона и вы хотите узнать id чата для отправки сообщения, воспользуйтесь методом создания чата, вместо поиска.
Порядок выдачи задаётся параметром sort_order:
new_first— контакты отсортированы по времени последнего сообщения, более свежие выше. Только с этим значением работают фильтрыconnection_ids(показывать контакты только по этим подключениям) иunanswered_only(только контакты с неотвеченными сообщениями).unanswered_first— сначала контакты, у которых есть чаты с неотвеченными сообщениями, затем все остальные по времени последнего сообщения. Значение по умолчанию.
sort_order=unanswered_first устарел и будет удалён 2026-10-01, вместе с ним пропадёт и текущее значение по умолчанию. Переходите на sort_order=new_first: передавайте его явно, а если вам нужны были неотвеченные сверху — получайте их отдельным запросом с unanswered_only=true.Отметка чата отвеченным
MessagingMarkChatAnsweredById (POST /companies/{company_id}/messaging/chats/{chat_id}/actions/mark_answered)
Обнуляет счётчик неотвеченных сообщений чата (unanswered_count) — тот самый, по которому чаты попадают наверх при sort_order=unanswered_first и в фильтр unanswered_only. Пригодится, если вы отвечаете клиентам не через нас и хотите, чтобы это было видно в личном кабинете. В ответ приходит 204 No Content.
Просмотр сообщений в чате
MessagingGetMessages (GET /companies/{company_id}/messaging/messages/)
Сообщения отсортированы от новых к старым. Для итерации используйте параметр until.
Если вам нужно получать все сообщения в реальном времени, не загружайте их этим методом, подпишитесь на вебхуки.
Отправка сообщения
MessagingSendMessage (POST /companies/{company_id}/messaging/messages/)
Для отправки сообщения необходимо знать id чата, в который сообщение отправляется. Узнать его можно, получив вебхук, или создав чат.
Нужно указать тип сообщения и заполнить поле, имя которого совпадает с типом сообщения. Например, для сообщения с типом text нужно заполнить структуру text.
Пример отправки текстового сообщения
| |
Отправка сообщения с файлом
Для отправки файла его необходимо загрузить к нам. Если отправляете один и тот же файл много раз, рекомендуем загрузить его один раз и переиспользовать полученную ссылку, а не загружать его каждый раз заново.
После того, как загрузили файл, полученную ссылку можно использовать при отправке сообщения.
Максимальный размер файла для загрузки: 100 МБ. Но в разных мессенджерах могут быть дополнительные ограничения на размеры или форматы файлов. Уточняйте их в документации конкретных мессенджеров.
На примере WABA: максимальный размер изображения* - 5 МБ. Это значит, что вы можете попытаться отправить через нас изображение размером 100 МБ, но WABA на своей стороне его не пропустит, и оно не будет доставлено.
Пример отправки сообщения с файлом
| |
Шаблонные сообщения WhatsApp Business API
Подробное описание возможностей:
- https://developers.facebook.com/docs/whatsapp/api/messages/message-templates
- https://developers.facebook.com/docs/whatsapp/on-premises/reference/messages#template-object
Тип сообщения у нас: waba_template
Шаблоны - единственный тип сообщений, который можно отправить в чаты, у которых закрыто диалоговое окно. Про диалоговые окна ниже.
Шаблоны в общем случае состоят из 4 компонентов:
- Заголовка/header (текст с переменными или файл)
- Тела/body (текст с переменными)
- Подписи/footer (текст)
- Кнопок/buttons (текстовая, ссылка, номер телефона)
Обязательно только тело шаблона.
Для отправки шаблона необходимо знать его название, язык и передать список переменных, если требуется. Шаблоны можно создать в хабе 360Dialog, в нашем личном кабинете, либо через API. Получить список доступных шаблонов можно тут:
Пример отправки шаблона с файлом и переменной в теле
| |
Интерактивные сообщения WhatsApp Business API
Подробное описание:
Тип сообщения у нас: waba_interactive
Эти сообщения позволяют:
- Отправить сообщение с 3 кнопками
- Отправить сообщение с меню, в котором можно выбрать один из вариантов (можно использовать как замену кнопок, если нужно отправить более 3 штук)
- * Отправить товар
- * Отправить группу товаров
- * Отправить сообщение, запрашивающее у пользователя локацию
* Сообщения с товарами и локацией у нас пока не поддерживаются. Если они вам нужны, запросите, это может ускорить их появление.
Доступность чата (WABA)
MessagingGetChatAvailabilityById (GET /companies/{company_id}/messaging/chats/{chat_id}/availability)
У WABA есть ограниченные по времени платные диалоговые сессии (описание). Если у чата нет открытой сессии, в чат нельзя будет отправить нешаблонное сообщение. Если же баланс диалогов достиг 0 или отрицательный, нельзя будет отправить никакое сообщение.
Используйте этот метод, чтобы проверить возможность отправки сообщений. В ответе видно срок, до которого сессия ещё считается открытой, а также достаточно ли диалогов на балансе.
Этот метод так же учитывает, включена ли опция “Писать первым не с шаблонного сообщения” на номере. Если включена, то для отправки сообщения не обязательно дожидаться сообщения от клиента, можно сразу отправлять обычное текстовое сообщение.
Замечания
- Не загружайте переписку методом опроса API, подпишитесь на вебхуки
- Кешируйте и переиспользуйте ссылки на загруженные файлы. Особенно, если делаете рассылки с файлами.
- Максимальный размер файла: 100МБ, но могут быть дополнительные ограничения на размер или формат файлов со стороны мессенджеров.