• Главная
  • Контакты
Подписаться:
  • Twitter
  • Facebook
  • RSS
  • VK
  • PushAll
logo

logo

  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • За год
    • Положительные
    • Отрицательные
  • Сортировка
    • По дате (возр)
    • По дате (убыв)
    • По рейтингу (возр)
    • По рейтингу (убыв)
    • По комментам (возр)
    • По комментам (убыв)
    • По просмотрам (возр)
    • По просмотрам (убыв)
Главная
  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • Главная
  • Зачем нужны чат-боты, или история о Битрикс24

Зачем нужны чат-боты, или история о Битрикс24 +18

24.04.2017 14:57
Schvepsss 1 4900 Источник
Системы обмена сообщениями*, Блог компании Microsoft
Нас очень часто спрашивают, для чего можно использовать Microsoft Bot Framework, кроме как по фану создать ботов и поболтать с ними, и существуют ли в природе реальные кейсы применения чат-ботов в проектах. Так вот, существуют. Мы попросили одного из наших партнёров — «Битрикс24» — поделиться своим опытом и техническими деталями интеграции ботов в проект. Передаю слово Сергею Покоеву, разработчику системы, который расскажет про её архитектуру и использование Bot Framework для подключения к Skype.



Предыстория


Общение компании с клиентами давно трансформировалось: на смену электронным письмам и звонкам по телефону, пришли сначала социальные сети, а потом и мессенджеры. Согласитесь, сейчас намного удобней, и, самое важное, быстрее задать вопрос в поддержку в Facebook, ВКонтакте, What’s App или Telegram.

Обилие каналов не только даёт широкие возможности, но и создает некоторые проблемы:

  • Данные по продажам сложно учитывать и анализировать.
  • Ошибки персонала приводят к недовольству клиентов.

Поэтому многие компании задумываются об агрегации данных в одном месте, которое легко поддаётся контролю и управлению. Для них в сервисе «Битрикс24»* как раз и существует инструмент «Открытые линии», о котором мы поговорим ниже.

Кстати, сразу ответим на вопрос, который волнует многих: «Зачем нужны чат-боты?» В нашем случае их применение зависит от задач, которые нужно решить: начиная с простых — чат-боты, способные направить запрос в один из отделов компании, до сложных — позволяющие автоматизировать поддержку клиентов.

* Справка: Сервис «Битрикс24» — это набор интернет-инструментов для организации работы компании. В него входит управление задачами и проектами, омниканальная CRM, внутренний мессенджер компании, рабочая социальная сеть, управление рабочим временем, управление документами и другая функциональность.

Как это работает: взгляд пользователя


Клиент пишет в официальный аккаунт компании в социальных сетях или в мессенджерах. Это сообщение поступает в общую для всех каналов очередь на обработку. Из неё сообщения распределяются между сотрудниками, которые отвечают на них внутри мессенджера «Битрикс24». Как вы могли понять, это автоматизированный процесс и для отвечающего нет разницы, в какой из каналов написал клиент.



Как это работает: взгляд разработчика


Интеграция с Microsoft Bot Framework


Microsoft Bot Framework — это среда, позволяющая создать интеллектуального чат-бота в облаке, с которым затем можно будет общаться по различным каналам коммуникации: от Skype и Telegram до Slack и SMS. Также его можно использовать как прокси. Это удобно, так как не нужно реализовывать интеграцию отдельно для каждого из этих каналов.

Для интеграции с Microsoft Bot Framework была использована существующая схема работы «Открытых линий» с некоторыми доработками.

Мы создали специальный сервер коннекторов. Он является связующим звеном между внешними каналами коммуникаций — соцсети, мессенджеры, онлайн-чаты, формы на сайте и так далее — и клиентскими «Битрикс24». Основные преимущества сервера:

  • обеспечивает гарантированную доставку сообщений из соцсетей и мессенджеров в «Битрикс24»;
  • работает как с облачными «Битрикс24», так и с коробочными;
  • позволяет быстро подключить официальный аккаунт компании в соцсети или мессенджере к «Битрикс24».




Обмен данными между клиентским «Битрикс24» и сервером коннекторов выполняется посредством собственного протокола. При этом сервер выполняет роль маршрутизатора, с предварительной обработкой поступающих и исходящих данных.

У него несколько иные требования к серверному окружению, чем у «Битрикс24»: PHP начиная с 5.4, MySql 5.5.3, InnoDB.

Для минимизации накладных расходов при обмене данными между клиентскими «Битрикс24» и сервером коннекторов было решено:

  • не передавать прикреплённые к сообщениям файлы из внешних каналов и с сервера. Сервер пересылает в «Битрикс24» только ссылки на файлы из внешних источников. А «Битрикс24» клиента скачивает их самостоятельно;
  • при отправке файлов из «Битрикс24» передавать только ссылки на их скачивание. Сами файлы хранятся на «Битрикс24.Диск»;
  • для часто используемых действий (получение, отправка сообщения, передача статусов доставки, прочтения сообщения и тому подобного) после отправки сообщения не ожидать ответа и закрывать соединение.

Очередь сообщений сервера коннекторов


Очередь отправки сообщений на сервере реализована на базе MySQL. На данный момент нет необходимости в более сложных, но гибких инструментах, вроде Redis. Очередь на основе базы данных позволяет избежать дополнительных накладных расходов, более проста в поддержке и легко выдерживает текущие нагрузки.

Очередь гарантирует доставку сообщений, даже если портал был какое-то время недоступен. Пришедшее сообщение обрабатывается и помещается в базу данных. Отдельный процесс непрерывно выбирает в базе сообщения для отправки. При этом он формирует пакеты из нескольких сообщений и отправляет на порталы.

Если подтверждение доставки не приходит на сервер, то следующая отправка на данный портал в данную «Открытую линию» произойдёт только по завершении периода блокировки. После каждой попытки длительность блокировки увеличивается. Если и последняя попытка будет неудачной, то отправка сообщений будет заблокирована на 12 часов. В совокупности получается 24 часа с момента первой попытки отправки сообщений на портал. После последней попытки все сообщения для данного портала данной «Открытой линии» удаляются, а блокировка снимается.

Если сервер получает подтверждение, то доставленные сообщения удаляется из очереди, а блокировка данной «Открытой линии» снимается. То есть новые сообщения будут немедленно отправляться на портал.

Механизм работы сервера коннекторов


Мы применили паттерн «фабричный метод» для организации кода, отвечающего за каждый канал коммуникации. Определили стандартный набор методов, которые должен поддерживать каждый коннектор. К тому же каждый канал может иметь свои уникальные методы.

Для работы канала нужно выполнить на портале первоначальную настройку. Её делают пользователи, а портал управляет подключением с помощью специальных методов. Настройки разных типов коннекторов существенно различаются по наборам методов. Для Microsoft Bot Framework используется простой вариант настройки. С портала вызывается удалённый метод saveSettings, в котором передаются необходимые параметры. Они сохраняются в базу и используются в работе канала в дальнейшем.

Затем портал вызывает удалённый метод коннектора testConnect, который проверяет возможность соединения с указанными данными, а также проверяет доступность подключаемого портала.

Webhook указывается при создании бота на сайте Bot Framework. Необходимый адрес мы даём при настройке пользователем.

Интерфейс настройки на стороне портала выглядит так.



Новички могут использовать пошаговый мастер, который поможет быстро зарегистрировать нового бота.

После успешного подключения мы получаем записи в трёх структурах данных.



Запись с информацией о сайте. Важным параметром является домен портала. Сервер будет обращаться к нему в тех или иных случаях.

Запись об открытой линии/коннекторе. Она однозначно определяет:

  • тип коннектора;
  • id открытой линии на клиенте;
  • связь с сайтом;
  • специальный хэш для определения, к какой «Открытой линии» относится запрос при обращении по WebHook;
  • информацию для очереди сообщений: номер попытки отправки сообщений клиенту и время блокировки отправки.

Записи параметров подключения конкретного коннектора конкретной «Открытой линии». Для разных типов коннекторов набор параметров может сильно различаться.

Работа на сервере непосредственно с Microsoft Bot Framework


Bot Framework содержит целый набор каналов. Поэтому мы ввели понятия «реального канала» и «виртуального канала». Botframework — реальный канал, так как здесь используется одна точка контакта. Botframework.skype — виртуальный канал, который реализует работу с ботом Skype через Microsoft Bot Framework.

Для работы коннектора нужно:

1. В настройках бота указать необходимый WebHook.
2. В настройках канала в «Битрикс24» указать верные:

  • bot handle;
  • ID приложения;
  • секрет приложения.

Благодаря WebHook сервер коннекторов определяет к какой «Открытой линии» привязан данный бот. Если привязку найти не удалось, то возвращается ошибка.

Если ошибки нет, то обрабатываем пришедшие данные:

  • формируем массив данных в формате обмена между клиентом и сервером;
  • парсим текст и преобразуем все сущности в понятный мессенджеру «Битрикс24» формат. Для разных каналов эти преобразования различны;
  • преобразуем все входящие смайлы в универсальный формат Emoji. Мы постарались охватить максимум смайлов, поддерживаемых всеми каналами.




После всех преобразований сообщение добавляется в очередь сообщений.

При отправке сообщений из «Битрикс24» во внешний мессенджер выполняется обратное преобразование из одного формата в другой. Сообщение отправляется с помощью POST-метода /v3/conversations/{conversationId}/activities. Все необходимые для отправки данные приходят вместе с сообщением.

При этом бинарные данные не передаются. Все прикреплённые файлы кладутся в «Битрикс24.Диск» и отправляются в виде ссылок. Это экономит объём трафика. А при необходимости можно в любой момент закрыть доступ к файлу.

Принцип работы «Открытых линий»


Чат начинается с сообщения от пользователя социальной сети или мессенджера. Используется единая точка входа. Это единый URL, отличающийся GET-параметром, в котором содержится хэш «Открытой линии». По хэшу система определяет, куда необходимо отправить входящее сообщение.

Единственность подключения


Бывают ситуации, когда одну и ту же сущность внешней системы (группу, бота) пытаются подключить к нескольким порталам или к разным «Открытым линиям» в рамках одного портала. Если такие случаи не обрабатывать, то могут возникать нештатные ситуации и сбои. Поэтому мы реализовали механизм проверки единственности подключения.

Попытки повторных подключений для разных каналов определяются по-разному. В Microsoft Bot Framework проверяется наличие в системе конкретного идентификатора бота. Если текущее подключение оказывается не единственным (повторным), то оно продолжает работать в штатном режиме, а данные предыдущего подключения полностью удаляются с сервера. При этом на портал отправляется запрос, помечающий этот коннектор «Открытой линии» как «аварийный», требующий внимания администратора.

Механизм работы клиентской части «Битрикс24»


Клиентский модуль коннекторов используется для:

  • настройки подключений каналов коммуникаций;
  • получения сообщений, обработки и преобразования в формат мессенджера «Битрикс24». С последующей генерации события;
  • обработки пользователей: регистрации или обновления данных пользователя «Битрикс24», который связан с внешним пользователем;
  • загрузки файлов, приходящих с сообщениями.

Модуль «Открытые Линии» отвечает за маршрутизацию сообщений, создание очереди сообщений, направление на операторов и прочие функции.

Реализация обмена данными на клиенте


В модуле «Открытые Линии» класс Output отвечает за отправку сообщений на сервер и дополнительную обработку. Метод query непосредственно формирует исходящие пакеты на удалённый сервер и подписывает сообщения.

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

Недостатки: скорость работы «магических» методов несколько ниже. Но они используются для работы с внешними системами, поэтому задержка не так заметна.

Преимущества: можно работать с внешними методами как с внутренними. То есть разработчик локально вызывает удалённые методы. Вся работа стандартизирована. Не нужно держать на клиенте список методов, не нужно синхронизировать этот список. Достаточно добавить метод на сервер, и можно его использовать на клиенте.

Часть методов внешнего сервера имеют локальные обертки. Они выполняют разные задачи до отправки запроса на удалённый сервер. Например, кешируют данные (для снижения нагрузки на удалённый сервер), делают предварительную обработку, и так далее.

Все входящие запросы обрабатывает класс Input. Он разбирает входящий пакет, проверяет подпись (что запрос действительно пришёл от сервера) и перенаправляет данные в класс Router, который маршрутизирует входящие запросы.

Виды входящих запросов:

  • Тестирование соединения. Этот метод вызывается удалённым сервером, когда он проверяет доступность клиента.
  • Входящие сообщения (всех типов). Подробнее ниже.
  • Статус доставки. Вместе со статусом доставки приходит внешнее ID сообщения, которое позволяет затем управлять внешними данными. Например, мы не можем удалить сообщение на удалённом сервере, не зная его внешнего ID.
  • Статус прочтения.
  • Деактивация коннектора. Вызывается при подключении данного коннектора на другом портале или «Открытой линии».

Получение сообщений клиентом «Битрикс24»


Класс input принимает входящее сообщение (массив сообщений) с портала и начинает обработку. Серверу отправляется уведомление о доставке сообщений. Он удаляет их из очереди и снимает блокировку дальнейшей отправки сообщений.



Полученные сообщения дополнительно обрабатываются. Shortname Emoji преобразуются в специальный тег icon, поддерживаемый мессенджером «Битрикс24». Так осуществляется поддержка всех доступных Emoji.

Обрабатываются все прикреплённые файлы. Они загружаются и регистрируются во внутренней системе. А в описывающем файлы массиве ссылки на них заменяются на внутренние ID.

Проверяется наличие на портале внутреннего пользователя, созданного под внешнего пользователя соцсети или мессенджера. Если его нет, он создаётся. Если пользователь есть, то проверяется хэш md5 от данных пользователя. Он сравнивается с полученными данными, и если хэши различаются, то данные пользователя обновляются. Затем они заменяются во входящем массиве на ID пользователя внутри портала «Битрикс24».

Такой преобразованный массив данных помещается в генерируемое событие OnReceivedMessage. Его «ловит» модуль «Открытых линий».

Исходящие запросы «Битрикс24»


Исходящие запросы практически не обрабатываются. Они маршрутизируются на удалённый сервер коннекторов. Для Bot Framework на клиенте сделан дополнительный обработчик.

Этот коннектор отличается от всех остальных тем, что в исходящих сообщениях нужно передавать информацию об отправителе. Она не передаётся нам при подключении. Но мы можем получить её во входящих данных. Поэтому создана отдельная таблица для хранения вспомогательной информации о каждом чате и каждом диалоге.

При входящих сообщениях для данного коннектора вызывается метод furtherMessageProcessing, выбирающий и сохраняющий необходимую информацию. А при отправке сообщения в канал Botframework метод sendMessageProcessing подмешивает нужные данные.

Вместо выводов


На текущий момент большинство пользователей «Битрикс24» подключают канал Bot Framework для работы со своей аудиторией через Skype. На момент публикации статьи количество подключенных ботов составляет 9 тысяч.
Поделиться с друзьями
-->

Комментарии (1)


  1. inf
    03.05.2017 20:15
    #10202103

    А как можно не только чат прогонять через бота но и звонки?

МЕТКИ

  • Хабы
  • Теги

Блог компании Microsoft

Системы обмена сообщениями

Microsoft

битрикс24

Открытые линии

Microsoft Bot Framework

чатботы для мессенджеров

чат-боты

skype

isvcloudstory

СЕРВИСЫ
  • logo

    CloudLogs.ru - Облачное логирование

    • Храните логи вашего сервиса или приложения в облаке. Удобно просматривайте и анализируйте их.
Все публикации автора
  • Машинное обучение для страховой компании: Улучшение модели через оптимизацию алгоритмов +14

    • 31.07.2017 14:29

    Если нет разницы между двумя вариантами кода, выбирай тот, который проще отладить +11

    • 27.07.2017 13:37

    С/С++ на Linux в Visual Studio Code для начинающих +13

    • 19.07.2017 06:37

    7 лучших ферм устройств для тестирования мобильных приложений +17

    • 18.07.2017 12:30

    Кроссплатформенный IoT: Использование Azure CLI и Azure IoT Hub +13

    • 17.07.2017 14:57

    Авторизация OAuth для Xamarin-приложений +17

    • 13.07.2017 14:57

    Заметки маркетолога: Как поставить Ubuntu на RPI и подключить к Azure IoT Hub +9

    • 12.07.2017 15:47

    DPM: Почему он такой? +12

    • 07.07.2017 11:57

    Переход в двоичную систему +15

    • 29.06.2017 14:57

    Машинное обучение для страховой компании: Исследуем алгоритмы +20

    • 23.06.2017 08:16

Подписка


ЛУЧШЕЕ

  • Сегодня
  • Вчера
  • Позавчера
09:01

Программирование как разработка теорий: почему senior-разработчики стали ценны как никогда? +39

11:30

Я 10 лет искал причину головной боли, оказалось — чипсы +21

08:12

Плотнее, быстрее, дешевле: керамические накопители Cerabyte бросают вызов LTO +18

09:16

Тебе не поступить на программиста. Всё кончено +14

06:15

Внедрение зависимостей в PHP: от основ до фреймворков +13

11:15

Мы — не семья +10

06:48

EngEasy.ru — моё приложение английского. Идея, процесс, технологии +10

04:15

Собираем комплекс для качественного офлайн-перевода текстов, работающий на самом обычном игровом компьютере +6

11:13

Docker + Neovim: поднимаем конфиг на любом сервере и не засоряем систему +4

08:00

От дефицита к ажиотажу: почему DDR4 снова в центре внимания… по тройной цене +4

13:04

Изобретатель механического светофора: история Гаррета Моргана +3

13:01

Жизнь и смерть Карла Коха: первый хакер на службе КГБ в поисках всемирного заговора и тайны числа 23. Часть 9 — финал +3

12:08

Деревья умеют выделять «дождеобразующие» вещества +3

10:40

Как мы подняли современный портал документации из россыпи .md файлов: пошаговое руководство по MkDocs + Material +3

07:56

Системное мышление: когда разработчик становится архитектором +3

07:52

Почему ваш ИИ превращается в ваше эхо: Гипотеза архитектурного слияния и как с этим бороться +3

13:56

Стартап за 100 дней. Неделя первая. Аналитика +2

11:06

Реактивные системы: возможно ли отслеживать зависимости в асинхронном коде? +2

00:36

Магия чисел: как проектировать системы, зная их будущую нагрузку и стоимость +2

11:23

Человек, который изобрёл XX век: некоторые патенты Николы Теслы +1

09:01

Первые анекдоты о программистах: как выглядел юмор айтишников в 1996-1998 годах? +101

12:55

Лучшие игры легендарной машины: 45 лет назад на свет появилась линейка компьютеров ZX +47

09:56

Датчик утечки воды и не только, просто и почти даром +45

14:05

Пишем 3D-игру для ретро-устройств весом в 600Кб… +35

13:01

GPS в городских джунглях: почему навигатор «прыгает» между небоскрёбами +32

09:44

Как я почти продал ник за $9500 в Telegram +28

08:04

Deepin 25: китайский дистрибутив Linux с ИИ и обновленным DDE +23

10:16

Как сделать любую поверхность сенсорной +16

07:34

Продаешь крипту через P2P? Налоговая может потребовать 6% со всего оборота +16

00:00

Оптимизация индексов базы данных: проблемы, решения, практические рекомендации +16

08:05

О мягких и жёстких ссылках в Linux +11

08:02

Лучшие нейросети для создания игр +11

12:00

История создания процессора ARM: от амбициозного проекта до сердца цифровой революции +10

09:16

SOLID, DRY, KISS, YAGNI и др. принципы разработки, пугающие новичка в IT +9

08:00

Алгоритм релакса: как пазлы помогают сконцентрироваться на сложных задачах и не выгореть +9

07:00

Покажи свой стартап/пет-проект (июль) +9

10:35

Часть 2: Создание пользовательского интерфейса на дисплее Guition с ESPHome и библиотекой LVGL +7

13:50

PHP и Laravel дайджест новостей за июнь 2025 года +6

09:56

Скриншот-тестирование фронтенда: руководство по применению в 2025 году +6

06:38

Система позиционирования и фиксации дрона на посадочном столе +5

13:01

Как я обнаружил древнюю пасхалку в Power Mac G3 +57

12:00

Как уплотнялись серверы линейки ChipCore +33

14:05

Артефакты с балкона: о чём говорят забытые вещи +28

13:05

Как выжить в мире сложных интерфейсов в 2025-м: 7 работающих рецептов от React и CSS до дизайн-систем +27

20:40

Трехканальный вольтамперметр на базе ESP32-S3 с записью данных в лог и передачей данных по WI-FI (YCHEV003) +26

14:03

Как я использую в разработке опыт Леонардо да Винчи +20

12:00

Llama 3.1 и «Гарри Поттер»: сколько текста действительно запоминает ИИ? +20

11:00

Domain-Driven Design: чистый подход к проектированию бизнес-логики +18

11:49

Прощайте, Excel-пароли; привет, прозрачный аудит! Внедряем в инфраструктуру PAM-инструмент +17

16:46

Еще раз об SVG-виджетах в tcl/tk +11

20:23

29% взрослых не умеют надёжно уничтожать данные на ПК, ноутбуках и смартфонах +10

13:16

Я построил Vision Transformer с нуля — и научил его обращать внимание +10

12:50

Зачем прыгать в бассейн… преджунов? +9

12:22

Обзор САПР SimPCB Lite для расчета линий передачи и переходных отверстий на печатной плате +8

11:17

ChatGPT не делает нас глупее +8

13:03

Диаграмма потоков данных (DFD) для чайников: что это такое, как сделать и какой бывает +7

15:55

Figma подает на IPO: что стоит за «обычным» графическим редактором? +6

14:15

Эффективная коммуникация в ИТ: как тестировщики могут стать связующим звеном между отделами +6

19:54

Когда 42 — это цифра: шумеро-вавилонская система счисления с глиняных табличек +5

16:04

Как провалить собеседование по System Design: ошибки, которые допускают даже опытные разработчики +5

ОБСУЖДАЕМОЕ

  • Первые анекдоты о программистах: как выглядел юмор айтишников в 1996-1998 годах? +101

    • 105   32000

    Тебе не поступить на программиста. Всё кончено +18

    • 99   21000

    Датчик утечки воды и не только, просто и почти даром +45

    • 79   16000

    От PHP к Zig: как я избавился от костылей в биллинг-системе +1

    • 70   3600

    Тебя что, в гугле забанили? Да… -15

    • 57   5900

    Лучшие игры легендарной машины: 45 лет назад на свет появилась линейка компьютеров ZX +47

    • 50   8400

    Domain-Driven Design: чистый подход к проектированию бизнес-логики +18

    • 42   6300

    Метафизика мнимой единицы -7

    • 35   1900

    29% взрослых не умеют надёжно уничтожать данные на ПК, ноутбуках и смартфонах +10

    • 34   9700

    Как я почти продал ник за $9500 в Telegram +28

    • 32   5600

    Продаешь крипту через P2P? Налоговая может потребовать 6% со всего оборота +15

    • 30   5200

    Как выжить в мире сложных интерфейсов в 2025-м: 7 работающих рецептов от React и CSS до дизайн-систем +27

    • 27   4100

    ChatGPT не делает нас глупее +8

    • 27   4700

    Я 10 лет искал причину головной боли, оказалось — чипсы +25

    • 21   3200
  • Главная
  • Контакты
© 2025. Все публикации принадлежат авторам.