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
1С: УНФ
Arrow
HubSpot
Arrow
Zoho
Arrow
Pipedrive
Arrow
ПланФикс
Arrow
Еще CRM
Arrow
Как продавать еще удобнее
Arrow
Всё о WABA
Arrow
Для партнеров
Arrow
Публичное API
Для партнеров
Arrow

Окно чатов

В статье рассказываем, как внедрить окно чатов Wazzup в свою CRM и настроить работу раскрывающегося списка «Сделки» по событиям.

Список «Сделки» — инструмент в окне чата с контактом, который:

  • позволяет пользователю просматривать список открытых и закрытых сделок с выбранным контактом, в которых он ответственный и переходить на их страницы в CRM;
  • дает возможность пользователю быстро перейти на страницу создания сделки в CRM.

Список «Сделки» в чатах

Мы рекомендуем работать со списком «Сделки» с помощью вебхуков. А если вебхуки не подходят — по событиям.

Сейчас через окно чатов по API нельзя создать диалог MAX, Telegram по номеру телефона. Чтобы создать чат MAX, воспользуйтесь методом отправки сообщений, чтобы создать чат Telegramметодом отправки сообщений или юзернеймом. После вы получите id чата, с помощью которого сможете открывать диалоги MAX, Telegram в iframe.

Как внедрить окно чатов Wazzup в свою CRM

Метод POST /v2/iframe-links/chats

Body-параметр. Обязательные отмечены * Тип Описание
user.id* String ID пользователя в CRM, который открывает окно с чатами
author_name String Имя отправителя. Если не указано, используется имя CRM-пользователя
scope* String Контекст, в котором открывается окно: global — окно со всеми доступными пользователю чатами, card — чат, который открывают из сделки, контакта или другой карточки
chats Object (Array) Массив чатов, которые нужно показать. Обязателен для scope=card. Если scope=global, не передавайте chats
chats.contact_name String Имя контакта. Можно уточнить для нового контакта, с которым еще не было переписки
chats.chat_type* String

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

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

Вариант идентификации для всех типов чата — ID чата, то есть аккаунт контакта в мессенджере.

  • Для whatsapp и viber — только цифры, формат 79011112233.
  • Для instagram — аккаунт без @ вначале.
  • Для whatsgroup, maxgroup, avito, vk приходит в вебхуках входящих сообщений.
  • Для telegram, max тоже приходит в вебхуках входящих сообщений, не совпадает с номером телефона
chats.username* String Дополнительный вариант идентификации только для Telegram Personal. Имя пользователя в Telegram, без @ в начале. Можно использовать, если неизвестен chat_id
active_chat Object Чат, активный при открытии iframe
active_chat.channel_id String Идентификатор канала, с которым нужно открыть активный чат
active_chat.chat_type* String Тип чата. Значения те же, что у chats.chat_type
active_chat.chat_id* String ID чата (аккаунт контакта в мессенджере). Формат, как для chats.chat_id
active_chat.username* String Только для Telegram Personal. Имя пользователя в Telegram, без @ в начале. Можно использовать, если неизвестен ID чата
use_events Object Настройки по событиям в iFrame. Обязателен, если решили создавать контакты и сделки по событиям
use_events.deals Boolean Укажите true, если хотите узнавать от iframe, что нужно создать или показать пользователю сделку. Событие приходит, когда пользователь кликает на + в списке «Сделки», чтобы создать сделку, или на сущность в списке «Сделки», чтобы открыть ее
use_events.messages Boolean Укажите true, если хотите узнавать от iframe, что нужно создать новый контакт. Событие приходит, когда пользователь отвечает на входящее сообщение из iframe
client_type String Тип CRM. Можно ничего не указывать

Если контакта с указанными chat_type и chat_id нет в базе данных Wazzup — при открытии его в карточке контакта CRM-системы он будет создан. В качестве имени будет использовано значение contact_name или id, если первое отсутствует.

Пример запроса для iframe в карточке

{
"user_id": "crm-user-id-123",
"author_name": "Иван Петров",
"scope": "card",
"chats": [
{
"contact_name": "Петр Сидоров",
"chat_type": "whatsapp",
"chat_id": "79111234567"
},
{
"contact_name": "Петр Сидоров",
"chat_type": "telegram",
"username": "my_tg_user"
},
{
"contact_name": "Петр Сидоров",
"chat_type": "telegram",
"chat_id": "1670185"
}
],
"active_chat": {
"channel_id": "string",
"chat_type": "whatsapp",
"chat_id": "79111234567"
},
"use_events": {
"deals": false,
"messages": false
},
}

Пример минимального запроса для iframe со всеми чатами пользователя

{
"user_id": "crm-user-1",
"scope": "global"
}

Пример запроса для создания чата в Telegram по username

{
"user": {
"id": "crm-user-id-123",
"name": "Иван Петров"
},
"scope": "card",
"filter": [
{
"chatType": "telegram",
"username": "best_client"
}]

}

Успешный ответ

200

В ответе придет json со ссылкой для открытия окна чатов.

{
"data": {
"link": "https://app.wazzup24.com/1234-1234/chat/telegram/1670185301/123?token=token"
},
"meta": {
"timestamp": 1764849838
}
}

Если открываете ссылку в iframe, добавьте в тег атрибут allow="microphone *; clipboard-write *".

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

Передавать clipboard-write необходимо, чтобы в нашем iframe правильно работало копирование в буфер обмена. Например, пользователь мог по кнопке скопировать код ошибки из уведомления.

<iframe src="ссылка" allow="microphone *; clipboard-write *" ></iframe>

Ошибки

Параметры ответа в ошибках

Параметр. Обязательные отмечены * Тип Описание
code* string Код ошибки. Возможные значения для разных HTTP-статусов описаны ниже. Пример: INTERNAL_SERVER_ERROR
title* string Название ошибки. Пример: Internal Server Error
status* number HTTP-статус. Значения: 400, 401, 403, 500
detail* string Описание ошибки. Возможные значения для разных HTTP-статусов описаны ниже. Пример: One or more fields did not pass validation.
instance* string URI вызова, приведшего к ошибке. Пример: /v2/templates/waba/123
method* string HTTP-метод. Значения: GET, POST, PATCH, PUT, DELETE
errors array Дополнительное поле, если ошибок несколько (например, несколько параметров не прошли валидацию). Пример: ["validation_error_string"]

Пример ошибки

{
"code": "VALIDATION_FAILED",
"title": "Validation Failed",
"status": 400,
"detail": "One or more fields did not pass validation.",
"instance": "/v2/iframe-links/chats",
"method": "POST",
"errors": [
"user_id should not be empty",
"scope must be a valid enum value"
]
}

400

Возможные коды ошибок для статуса 400

code Описание
VALIDATION_FAILED Одно или несколько полей в запросе не прошли валидацию

401

Возможные коды ошибок для статуса 401

code Описание
OAUTH_AUTH_HEADER_MISSING Заголовок Authorization не указан
OAUTH_UNKNOWN_SCHEME Неизвестная схема авторизации. Используйте Basic или Bearer
OAUTH_INVALID_PARTNER_TOKEN Неверный партнёрский токен
OAUTH_TOKEN_INVALID_OR_EXPIRED Токен доступа недействителен или истёк
OAUTH_TOKEN_UNKNOWN_OR_REVOKED Токен доступа неизвестен или отозван

403

Возможные коды ошибок для статуса 403

code Описание
OAUTH_SCOPE_FORBIDDEN У пользователя нет доступа к нужному scope
OAUTH_CRM_INTEGRATION_REQUIRED Для работы с методами CRM требуется активная интеграция
OAUTH_BASIC_SCHEME_FORBIDDEN Этот метод нельзя вызывать с авторизацией Basic
OAUTH_BEARER_SCHEME_FORBIDDEN Этот метод нельзя вызывать с авторизацией Bearer
OAUTH_PARTNER_NOT_FOUND Партнёр не найден
OAUTH_PARTNER_NOT_ACTIVE Партнёрский аккаунт отключён или не активен
OAUTH_CLIENT_NOT_CHILD_OF_PARTNER Клиент не относится к этому партнёру

500

Возможные коды ошибок для статуса 500

code Описание
INTERNAL_SERVER_ERROR Произошла непредвиденная ошибка

Как настроить работу со списком «Сделки» по событиям

События сигнализируют о том, что нужно:

  • создать новую сделку,
  • показать сущность, которую пользователь хочет открыть,
  • создать новый контакт.

Пользователь нажимает на + в списке «Сделки», чтобы создать сделку

Что значит: нужно создать новую сделку с теми параметрами, которые передал iframe.

Название события: WZ_CREATE_ENTITY

Что содержит:

Поле Тип Описание
type String Название события — WZ_CREATE_ENTITY
data Object Объект, который содержит данные о событии
data.chatType String Тип чата мессенджера: whatsapp, instagram, telegram, vk, avito
data.chatId String ID чата (аккаунт контакта в мессенджере)
data.channelId String Идентификатор канала
data.userId Number ID пользователя в CRM
data.integrationId String ID интеграции

Пример события:

{
type: 'WZ_CREATE_ENTITY',
data: {
chatType: whatsapp,
chatId: 79998887766,
channelId: c16tc1c-9f20-4rda-46jd-q92ty4j6s36888,
userId: test_id,
integrationId: 608df5ye-45hj-j6k7-l77k-qe5t88j4h1222
}

После создания сделки нужно передать данные о новой сделке из CRM в Wazzup.

Пользователь открывает сделку, контакт или другую сущность в списке «Сделки»

Что значит: пользователю нужно показать сделку, контакт или другую сущность, с параметрами, которые передает iframe.

Название события: WZ_OPEN_ENTITY

Что содержит:

Поле Тип Описание
type String Название события — WZ_OPEN_ENTITY
data Object Объект, который содержит данные о событии
data.chatType String Тип чата мессенджера: whatsapp, instagram, telegram, vk, avito
data.chatId String ID чата (аккаунт контакта в мессенджере)
data.channelId String Идентификатор канала
data.userId Number ID пользователя в CRM
data.integrationId String ID интеграции
data.entity Object Объект, который содержит данные о сущности
data.entity.closed Boolean Флаг: закрыта или открыта сделка
data.entity.id Number Идентификатор сущности, которую открывает пользователь
data.entity.link String Ссылка на сущность (может отсутствовать)
data.entity.name String Имя сущности
data.entity.responsibleUserName String Имя пользователя, ответственного за сущность

Пример события

{
type: 'WZ_OPEN_ENTITY',
data: {
chatType: whatsapp,
chatId: 79998887766,
channelId: c16tc1c-9f20-4rda-46jd-q92ty4j6s36888,
userId: test_id,
integrationId: 608df5ye-45hj-j6k7-l77k-qe5t88j4h1222,
entity: {
closed: false,
id: clientId3,
link: #,
name: ТестоваяСделка,
responsibleUserName: ТестовыйПользователь
}
}
}

Сделали html-страницу, которая служит примером того, как можно отлавливать события iframe. Как пользоваться:

  1. Сгенерируйте ссылку на iframe методом API.
  2. Вставить эту ссылку в поле ввода на html-странице.
  3. Отобразится интерфейс чатов. Вы сможете потыкать на нужные кнопки чтобы вызвать событие — над iframe появятся данные, которые в этом событии пришли.

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