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 в свою CRM и настроить работу раскрывающегося списка «Сделки» по событиям.

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

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

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

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

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

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

Метод POST /v2/iframe-links/chats
POST /v2/iframe-links/chats
│
├── user
│ └── id *
├── author_name
├── scope *
├── chats[]
│ ├── contact_name
│ ├── chat_type *
│ ├── chat_id *
│ ├── username *
│ └── profile_id
├── active_chat
│ ├── channel_id
│ ├── chat_type *
│ ├── chat_id *
│ └── username *
├── use_events
│ ├── deals
│ └── messages
└── client_type
Body-параметр. Обязательные отмечены * Тип Описание
user object user Данные пользователя
author_name String Имя отправителя. Если не указано, используется имя CRM-пользователя
scope* String Контекст, в котором открывается окно: global — окно со всеми доступными пользователю чатами, card — чат, который открывают из сделки, контакта или другой карточки
chats array(object) chats Массив чатов, которые нужно показать. Обязателен для scope=card. Если scope=global, не передавайте chats
active_chat object active_chat Чат, активный при открытии iframe
use_events object use_events Настройки по событиям в iFrame. Обязателен, если решили создавать контакты и сделки по событиям
client_type String Тип CRM. Можно ничего не указывать

user (объект)

Body-параметр. Обязательные отмечены * Тип Описание
id* String ID пользователя в CRM, который открывает окно с чатами

chats (объект)

Body-параметр. Обязательные отмечены * Тип Описание
contact_name String Имя контакта. Можно уточнить для нового контакта, с которым еще не было переписки
chat_type* String

Тип сущности в мессенджере, соцсети. Доступные значения:

  • whatsapp — аккаунт в WhatsApp,
  • whatsgroup — групповой чат в WhatsApp,
  • viber — аккаунт Viber,
  • instagram — аккаунт Instagram*,
  • telegram — аккаунт в Telegram,
  • telegroup — групповой чат в Telegram,
  • vk — аккаунт ВКонтакте,
  • avito — аккаунт Авито,
  • max — аккаунт MAX,
  • maxgroup — групповой чат MAX,
  • cian— аккаунт Циан.
chat_id* String

Идентификатор сущности в мессенджере, соцсети.

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

Для Циан вместо chat_id можно использовать profile_id

username* String Дополнительный вариант идентификации только для Telegram Personal. Имя пользователя в Telegram, без @ в начале. Можно использовать, если неизвестен chat_id
profile_id String Идентификатор профиля Циан, с которого вам написали по объявлению. Приходит в вебхуке о входящем сообщении. 
Можно передать вместо chat_id. Тогда откроется iframe со всеми чатами с контактом (профилем), а не конкретный чат.

active_chat (объект)

Body-параметр. Обязательные отмечены * Тип Описание
channel_id String Идентификатор канала, с которым нужно открыть активный чат
chat_type* String Тип сущности. Значения те же, что у chats.chat_type
chat_id* String Идентификатор сущности в мессенджере, соцсети. Формат, как для chats.chat_id
username* String Только для Telegram Personal. Имя пользователя в Telegram, без @ в начале. Можно использовать, если неизвестен ID чата

use_events (объект)

Body-параметр. Обязательные отмечены * Тип Описание
deals Boolean Укажите true, если хотите узнавать от iframe, что нужно создать или показать пользователю сделку. Событие приходит, когда пользователь кликает на + в списке «Сделки», чтобы создать сделку, или на сущность в списке «Сделки», чтобы открыть ее
messages Boolean Укажите true, если хотите узнавать от iframe, что нужно создать новый контакт. Событие приходит, когда пользователь отвечает на входящее сообщение из iframe

Если контакта с указанными 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

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

{body}
├── type
└── data
    ├── chatType
    ├── chatId
    ├── channelId
    ├── userId
    └── integrationId
Поле Тип Описание
type String Название события — WZ_CREATE_ENTITY
data Object data Объект, который содержит данные о событии

data (объект)

Поле Тип Описание
chatType String
Тип сущности в мессенджере, соцсети: whatsapp, instagram, telegram, vk, avito
chatId String Идентификатор сущности в мессенджере, соцсети
channelId String Идентификатор канала
userId Number ID пользователя в CRM
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

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

WZ_OPEN_ENTITY
├── type
└── data
    ├── chatType
    ├── chatId
    ├── channelId
    ├── userId
    ├── integrationId
    └── entity
        ├── closed
        ├── id
        ├── link
        ├── name
        └── responsibleUserName
Поле Тип Описание
type String Название события — WZ_OPEN_ENTITY
data Object data Объект, который содержит данные о событии

data (объект)

Поле Тип Описание
chatType String
Тип сущности в мессенджере, соцсети: whatsapp, instagram, telegram, vk, avito,cian
chatId String Идентификатор сущности в мессенджере, соцсети
channelId String Идентификатор канала
userId Number ID пользователя в CRM
integrationId String ID интеграции
entity Object entity Объект, который содержит данные о сущности

entity (объект)

Поле Тип Описание
closed Boolean Флаг: закрыта или открыта сделка
id Number Идентификатор сущности, которую открывает пользователь
link String Ссылка на сущность (может отсутствовать)
name String Имя сущности
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 появятся данные, которые в этом событии пришли.

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