Задача: вся переписка в карточке сделки
Клиенты писали компании в три места: в Telegram, в MAX и в чат на сайте. У менеджеров было три окна, и ни одно из них не было CRM. Сообщение пришло в мессенджер, менеджер ответил с телефона, а в карточке сделки пусто. Через неделю уже никто не помнит, что обещали клиенту и кто именно.
Обычно это закрывают коннектором – сторонним сервисом, который за абонентскую плату пересылает сообщения из мессенджера в CRM. Работает, но платить приходится за каждый канал каждый месяц, а вся переписка клиентов идёт через чужие серверы.
Задачу я сформулировал иначе: сделать интеграцию мессенджеров с amoCRM своими силами. Сообщение из любого из трёх источников попадает в карточку, менеджер отвечает прямо из неё, а заявки сразу в CRM – без пересылки руками и без посредника.
Что такое канал чатов в amoCRM?
Канал чатов – это штатный механизм amoCRM, через который внешний сервис передаёт сообщения клиентов в карточку сделки и получает обратно ответы менеджера. Ровно через него работают и платные коннекторы. Разница в том, что канал можно получить самому и подключить к нему собственный сервис. Как это устроено, описано в документации amoCRM по API чатов.
Первое, что выяснилось на практике: один канал – это один тип мессенджера. Общий «ящик для всего» завести нельзя. Поэтому под три источника понадобились три канала: для Telegram, для MAX и для чата сайта. Все три выданы на одну интеграцию.
| Что выдают | Зачем это нужно |
|---|---|
| Код канала | символьное имя, по нему канал называют в переписке с поддержкой |
| Идентификатор канала | из него и идентификатора аккаунта складывается адрес, на который сервис шлёт сообщения |
| Секретный ключ | им подписывается каждый запрос, и им же проверяется подпись ответа от amoCRM |
Свой мост между мессенджерами и CRM-системой
Между мессенджерами и amoCRM стоит мост – небольшой сервис на сервере заказчика. Он слушает три источника сразу и перекладывает сообщения в CRM-систему, а ответы менеджера возвращает туда, откуда клиент написал.
Telegram и MAX подключены как обычные аккаунты компании, а не как боты. Клиент пишет на тот же контакт, что и раньше, и не замечает перемен: ни новой кнопки «Старт», ни чужого имени в диалоге. Чат на сайте – собственное окно, которое ставится на страницу одной строкой кода.
Мост живёт на сервере заказчика, поэтому переписка не проходит через третью сторону: она есть в amoCRM и в журнале самого моста. Это и была вторая половина задачи после экономии на подписке.
Как получить канал чатов: заявка в поддержку amoCRM
Кнопки «создать канал» в интерфейсе нет. Канал выдаёт поддержка amoCRM по заявке, порядок расписан в разделе «Чаты шаг за шагом». В заявке шестнадцать пунктов, вот те, над которыми пришлось подумать заранее.
| Что спрашивают | Что я ответил |
|---|---|
| Название сервиса латиницей | своё на каждый канал |
| Адрес для вебхуков | адрес моста, в конце – место под идентификатор подключения |
| Идентификатор интеграции | интеграцию в аккаунте нужно создать до подачи заявки |
| Нужна ли функция «написать первым» | да, менеджер должен уметь начать диалог сам |
| Иконка канала | SVG 14 на 14 пикселей, до 100 КБ |
| Голосовые, цитирование, реакции, файлы | отмечается, что сервис умеет принимать |
На следующий день после заявки пришли все три канала. Партнёрский статус не понадобился. В тот же день первое сообщение дошло до карточки, а ответ менеджера вернулся клиенту в мессенджер.
Как сообщение из мессенджера попадает в карточку за секунду
Путь сообщения замкнут в кольцо: от клиента вниз в карточку и обратно наверх, к клиенту. По шагам это выглядит так.
- Клиент пишет в Telegram, MAX или в чат на сайте – туда, где ему удобно.
- Мост принимает сообщение и отправляет его в свой канал чатов. Запрос подписан секретным ключом канала: amoCRM проверяет подпись и чужой запрос не примет.
- amoCRM создаёт обращение. Новый клиент попадает в «Неразобранное» с контактом и сделкой, знакомый – в свою беседу в существующей карточке.
- Менеджер отвечает из карточки, как в обычном чате amoCRM.
- amoCRM шлёт ответ на адрес моста. Мост проверяет подпись и передаёт текст в тот мессенджер, откуда пришёл вопрос.
По журналу моста от сообщения клиента в MAX до его появления в amoCRM проходит около секунды. Менеджер видит вопрос раньше, чем успевает переключить вкладку.
Привязка чата к контакту: что нужно знать про токен
Чтобы повторное обращение попадало в ту же карточку, а не создавало дубль, мост связывает чат с контактом через API amoCRM. И вот тут есть правило, о котором лучше знать до начала работы, а не после.
Отсюда два практических вывода. Первый: интеграцию, на которую регистрируется канал, стоит сразу создавать в рабочем аккаунте. Приватная интеграция живёт только в своём аккаунте, перенести её в другой нельзя.
Второй: если канал уже выдан на интеграцию из другого аккаунта, привязку меняет поддержка. В обращении нужно назвать код канала и параметр, который надо заменить, – идентификатор интеграции. Сами возможности каналов описаны в разделе «Возможности API чатов». После замены я выпускаю долгосрочный токен новой интеграции и ставлю его в мост.
Чат на сайте: одна строка кода и проверка от спама
Третий канал – окно чата на сайте. Посетитель отмечает согласие на обработку персональных данных, отвечает на простой вопрос вроде «сколько будет 2 + 3» и пишет. Переписка сразу видна в amoCRM в своём канале, менеджер отвечает оттуда же.
Установка занимает минуту: строка кода вставляется в настройки сайта. Список сайтов, на которых чат разрешён, задаётся в настройках, на чужой странице окно не заработает. Если человек вернулся на сайт на другой день с того же устройства, он видит свою переписку.
Файлы в чат сайта не принимаются, только текст. А файлы из мессенджеров перед тем, как попасть в CRM, проходят пересборку на сервере: в карточку менеджера не должно приехать ничего исполняемого.
Результат
Менеджеры работают в одном окне: вся переписка лежит в карточке сделки, и ответ уходит оттуда же. Абонентской платы за коннектор нет, сообщения клиентов не проходят через посторонний сервис. Каналы привязаны к аккаунту заказчика, и подключить к ним ещё один источник – вопрос доработки моста, а не нового тарифа.
Когда свой канал чатов оправдан, а когда хватит коннектора?
Свой канал – не всегда лучший выбор, и продавать его каждому я не стану.
| Свой канал оправдан | Хватит коннектора |
|---|---|
| источников несколько, и подписка умножается на каждый | один мессенджер и пара менеджеров |
| переписка должна оставаться на своём сервере | требований к хранению данных нет |
| нужна своя логика: распределение, проверки, автоматизация процессов | достаточно того, что сообщение попало в карточку |
| есть кому поддерживать сервис | нужно запуститься сегодня без разработки |
Отдельная оговорка про мессенджеры с правилом «окна переписки»: если клиент молчит дольше суток, свободный текст ему отправить нельзя, только согласованный шаблон. Это ограничение самого мессенджера, свой канал его не снимает.
Стек
Это заказная разработка под конкретный набор источников: мост знает ровно те мессенджеры, которые нужны компании, и ничего лишнего.
Грабли, на которые уже наступил
Подпись вебхука не сходится из-за одного символа. amoCRM присылает тело запроса с переводом строки в конце, а подпись считает без него. Сверяешь как пришло – подпись «неверная», хотя ключ правильный. Лечится одной строкой: хвостовой перевод строки перед проверкой убирается.
События «прочитано» нет. Когда менеджер открыл чат в карточке, мост об этом не узнаёт: признак прочтения в API на открытие чата не реагирует. Отметку клиенту ставлю по факту ответа.
Шрифты сайта ломают окно чата. Сайт может объявить под знакомым именем шрифта совсем другой файл, и окно чата, которое просит шрифт по имени, получает чужое начертание, вплоть до пропавших цифр. Окно чата теперь рисуется системными шрифтами и от сайта не зависит.
Два сервиса на один источник дают две сделки. Пока старый коннектор не выключен, каждое сообщение приходит в CRM дважды. Старые подключения отключаются до включения своего канала, а не после.
Один канал под всё не выдадут. Разобрано выше: канал привязан к типу мессенджера. Сколько источников, столько и заявок.
Вопросы и ответы
Нужен ли партнёрский статус amoCRM, чтобы получить канал чатов?
Нет. Каналы выдали по обычной заявке в поддержку, без партнёрского статуса. Нужна только интеграция в аккаунте: её идентификатор указывается в заявке.
Сколько времени занимает подключение мессенджеров к amoCRM?
Каналы пришли на следующий день после заявки. В тот же день первое сообщение дошло до карточки сделки, а ответ менеджера вернулся клиенту. Дальше время уходит на доводку под конкретные источники.
Можно ли подключить один канал к нескольким аккаунтам amoCRM?
Да, я подключал одни и те же каналы к двум аккаунтам. У каждой пары «канал и аккаунт» свой идентификатор подключения. Но привязка канала к интеграции одна, поэтому рабочий аккаунт лучше выбрать заранее.
Где хранится переписка с клиентами?
В amoCRM, в карточке сделки, и в журнале моста на сервере заказчика. Через сторонний сервис сообщения не проходят.
Можно ли оставить коннектор и добавить свой канал?
На разные источники – да. На один и тот же источник – не стоит: оба сервиса создадут по сделке на каждое сообщение.
Работает ли такая схема в Битрикс24?
Механизм там другой: открытые линии и свои коннекторы. Задача решается так же – своим сервисом между мессенджером и CRM, меняется только сторона, к которой он подключается.