Как сделать открытую линию в битрикс 24
Классические онлайн-консультации в чате на сайте – еще один канал коммуникаций, поскольку клиент находится на сайте компании в данный момент, ему удобно задавать вопросы именно здесь. Битрикс24 предлагает возможность размещения комплексного виджета на сайте, чтобы клиенты сами могли выбрать удобный им в данный момент способ связаться с вами: через онлайн-чат, обратный звонок или форму обратной связи. Если обращение клиента осталось без ответа, то CRM запрашивает и автоматически фиксирует у клиента контактные данные – телефон, e-mail и имя, чтобы менеджер смог связаться с ним позже, а клиентская база компании пополняется даже без участия сотрудников.
Достоинства онлайн-чата в Открытых линиях Битрикс24:
Пообщавшись с представителями вашей компании, клиенты могут оценить диалог в Открытой линии посредством фидбэка и он автоматически зафиксируется в CRM и отразится в статистике сотрудника, общающегося с клиентом. Это позволит повысить уровень сервиса и настроить систему KPI и рейтингов для контакт-центров.
Интеграция с CRM
Особенности работы
Итак, Открытые линии раскрывают следующие возможности:
- Консультирование потенциальных покупателей через цифровые каналы;
- Поддержка онлайн с помощью чата;
- Привлечение клиентов на всех действующих ресурсах;
- Мгновенные ответы на вопросы пользователей в социальных сетях.
Грамотное перенаправление
Чат-трекер
Модуль Чат-трекер распознает клиентов, и делает это автоматически, неважно, через какие каналы идут обращения. Диалоги объединяются и прикрепляются к профилю. Если система узнала заказчика (карточка уже имеется в базе), появляется сводка о нем; обратился в первый раз – создается лид.
Обратите внимание, что одновременно можно работать с двенадцатью каналами коммуникации.
Использование онлайн-чата на сайте
Один из способов поддерживать связь с посетителями сайта – онлайн-чат. В Открытых линиях он настраивается, имеет адаптивный дизайн. Предоставляется абсолютно бесплатно, встраивается в web-ресурсы любой сложности (основа - HTML-код), прост в отладке, связан с CRM (в карточке клиента сохраняется переписка).
Создание анкет и заявок
В Битрикс24 предусмотрено создание разных вариантов CRM-форм: анкеты, записи на прием, заявки, предложения, замечания и многие другие. Они взаимодействуют с системами веб-аналитики (Яндекс.Метрика, Google Analytics), отдельно подстраиваются для мобильных устройств, интегрированы с Открытыми линиями.
Интеграция с CRM, подключение
Для интеграции с Битрикс24 необходимо каналы ChatApp подключить к открытым линиям в Контакт центре Битрикс24. Перейдите в меню Контакт центр на левой панели портала Битрикс24.
В зависимости от подключаемого мессенджера, выберите подходящий коннектор, например, если подключаете WhatsApp, тогда выбирайте ChatApp WABA - это официальный провайдер WhatsApp. При нажатии на коннектор откроется меню, выберем существующую открытую линию или создадим новую.
В открывшемся виджете нажимайте подключить.
На виджете открытой линии выберите канал ChatApp. Каналы приобретаются в личном кабинете.
Обратите внимание, вам будет легче если будите задавать наименование канала в личном кабинете.
В данном посте я расскажу о том, как мы реализовали кастомный коннектор для интеграции WhatsApp в открытые линии Битрикс24, используя API сервиса Chat2desk.
Существует официальный курс
по разработке кастомных коннекторов для Битрикс24. Однако не все технические моменты освещены в нем подробно.
Начинаем писать код с создания нового модуля под Битрикс Маркетплейс.
Рис 1. Модуль в списке Доступных решений.
Создаем библиотеку модуля, в котором будет храниться логика его работы. Данный класс будет подключаться каждый раз при вызове модуля. Для отображения коннектора в списке доступных конекторов открытых линий – необходимо подписаться на событие OnImConnectorBuildList модуля imconnector, и по нему вернуть информацию о нашем новом коннекторе.
В библиотеке модуля реализовываем обработчик события OnImConnectorBuildList. Привязку обработчика к событию производим при установке модуля. Соответственно при удалении модуля – привязку снимаем.
Рис 2. Коннектор с списке подключенных каналов открытой линии
В массиве информации о коннекторе, мы должны указать компонент, который будет отображаться в качестве формы настроек коннектора. Этот компонент создаем на основе стандартного компонента imconnector.baseconnector и помещаем в состав нашего модуля.
Рис 3. Форма настроек коннектора
В нашем случае нам необходимо хранить токен для доступа к агрегатору. Здесь сталкиваемся с первой проблемой. Стандартный механизм не предлагает нам способа хранения настроек. Вернее, компонент imconnector.baseconnector нам предлагает хранить настройки в именованном кэше. У нас этот кэш очищался раз в сутки, соответственно настройки сбрасывались. Поэтому мы таким способом не воспользовались и сохранили настройки, воспользовавшись COption::SetOptionString().
Таким образом мы получили коннектор для открытых линий, теперь перейдем к реализации логики его работы.
Здесь всплывает следующий подводный камень. Как видно – в массиве message_data в поле user можно задать name (имя, с которым пользователь мессенджера будет добавлен в чат). При его задании – Битрикс будет проводить поиск по базе CRM и пытаться привязать диалог к сущностям CRM. Вроде бы все ничего, но делает он это по имени, которое может быть совсем не уникально. Соответственно диалог может прикрепиться не туда, куда вы можете ожидать. В тоже время он не ищет по номерам телефонов, email и значениям полей мессенджеров, что странно. Обычно внешняя система может прислать вам номер телефона, или id мессенджера, который зачастую является email. Намного больше смысла искать по ним.
Собственно сама привязка заключается в том, что Битрикс добавляет открытую линию в контакты сущности, и создает дела у этой сущности.
В нашем случае, было необходимо привязывать диалог к сделкe в CRM по номеру телефона. Для этого мы написали функцию, которая ищет номера телефонов в CRM сущностях (контактах, лидах, компаниях) и возвращает список сделок связанных с найденными сущностями, к которым нужно осуществить привязку. Тут важно учитывать то, что телефоны могут храниться в разных форматах, поэтому поиск нужно вести с помощью Bitrix\Crm\Integrity\DuplicateCommunicationCriterion
Однако дело не привязывается напрямую к чату, а привязывается к его сессии. То есть у одного диалога (чата) может быть несколько сессий.
Получить идентификатор сессии можно таким образом:
Рис 4. Диалог в карточке CRM
Для добавления ссылки на чат в контакт или лид можно воспользоваться таким кодом:
Рис 5. Ссылка на чат в карточке CRM
Далее, выясняется, что \Bitrix\ImConnector\CustomConnectors::sendMessages не запускает триггеры автоматизации. Запустить их принудительно можно с помощью Bitrix\ImOpenLines\Crm ->executeAutomationTrigger();
Пример данных, приходящих в обработчик:
Как видно, Битрикс отдает ссылку. Но это не ссылка на файл, а ссылка на html страницу, с которой файл можно скачать. Естественно, внешняя система не может этого сделать. Поэтому нам нужна прямая ссылка на файл. Чтобы ее получить – нужно знать ид файла. Но этой информации у нас нет. Поэтому будем в очередной раз изобретать велосипед:
Имея короткую ссылку, можно найти информацию о полной ссылке на файл:
Полная ссылка на файл содержит в себе хэш, по которому можно найти файл:
То есть, помимо ид файла, нам еще нужен и токен загрузки. Формируется он следующим образом:
Так мы получим прямую ссылку на файл. Однако как видно – токен хранится в сессии
И доступ к файлу по этой ссылке, скорее всего, будет только у пользователя, отправившего файл. Такое решение нам не подходит , нам нужно иметь возможность отдавать файл всегда, вне зависимости от сессии. Для этого можно создать собственный скрипт, который по короткой ссылке будет вычислять id файла, и отдавать его содержимое с помощью:
Теперь мы можем отдавать файл без проверки токена (со всеми вытекающими предосторожностями) . Это уже что-то, но все таки, хочется иметь возможность не только отправлять прямую ссылку на файл (всегда доступную), но и отправлять сам файл. И здесь мы сталкиваемся с неожиданной проблемой: Дело в том, что во время отработки события OnSendMessageCustom пересылаемый файл еще не занял своего положения на Битрикс.Диске, а до окончания выполнения обработчика функции OnSendMessageCustom существует как запись в бд вида:
Как видите размер у него равен нулю, content-type равен application/octet-stream. При попытке в обработчике найти файл /upload/disk/a8a/a8a71448e3092e5af419e9fb853d5ea5 с помощью Bitrix\Main\IO\File — сообщает что файл не существует. На самом деле — сразу после выполнения обработчика события OnSendMessageCustom — файл перемещается на Диск в другое хранилище (что-то вроде хранилища файлов открытых линий). И тогда становится нормальным, доступным. Но, это все происходит уже после окончания работы обработчика OnSendMessageCustom. Соответственно, внешняя система не сможет скачать файл пока мы находимся в обработчике.
Для решения этой проблемы нужно не отправлять информацию о пересылаемом файле внешней системе в обработчике OnSendMessageCustom, а делать это позже, когда файл уже будет перемещен.
Вот такие интересные особенности разработки кастомного коннектора мы открыли для себя, когда писали интеграцию коробочной версии Битрикс24 с WhatsApp.
Читайте также: