Перейти к содержанию

Маршрутизатор чатов

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

Маршрутизатор появился в сервисе Webim начиная с версии 9.1.

В версиях, начиная с 9.1 и далее, в базовой комплектации Webim осуществляется поддержка только одного маршрутизатора внутри Chat Backend с использованием библиотеки suds. Поддержка большего количества маршрутизаторов возможна в рамках дополнительных работ, за более подробной информацией Вы можете обратиться в службу технической поддержки.

Составляющие маршрутизатора

Функционал маршрутизатора образован совокупностью следующих составляющих:

  • Параметр custom_router_schema_url в настройках account config содержит URL внешнего маршрутизатора, к которому будет обращаться Webim Server.

  • Если маршрутизатор задан в аккаунте, то в процессе инициализации сервера Chat Backend инициализируется и объект связи аккаунта и маршрутизатора.

  • Особое состояние чата: ROUTING. Оно говорит о том, что чат находится на маршрутизации и ожидается решение от, собственно, внешнего маршрутизатора. Наглядно состояние чата отображено на Схеме жизненного цикла чата.

  • У отдела есть особый параметр routing, который может принимать значения True или False. Отправка чата на маршрутизатор осуществляется только если у отдела данной сессии он принимает значение True.

  • Передача чата на внешний маршрутизатор происходит после создания чата и выполнения ряда условий: например, в аккаунте должен быть прописан и инициирован маршрутизатор, в отделе разрешена маршрутизация, чат не забрал бот и т. д.

  • Информация на маршрутизатор отправляется в формате SOAP (XML) по WSDL-спецификации. В передаваемый пакет входят ID чата, тип канала, ID пользователя (для Telegram и WhatsApp это канальный ID, в других случаях это либо provided visitor ID, либо канальный ID, либо он вовсе отсутствует), первое сообщение от посетителя и стартовая страница чата. В отдельных случаях ID пользователя и стартовая страница чата могут отсутствовать, в таком случае будут переданы параметры по умолчанию.

  • В ответ маршрутизатор передает Webim пакет данных с указанием, что надо сделать с чатом. Варианты: skill = маршрутизация на отдел (вызывает событие sys.routing_to_department), employee = маршрутизация на оператора (вызывает sys.routing_to_operator). Пакет также содержит siebelId (ID посетителя в CRM Siebel) и taskId, которыми обогащается объект посетителя.

  • Если при маршрутизации произошел сбой, происходит событие sys.routing_failed.

  • Если в Telegram-канале посетитель прислал свои контактные данные с номером телефона, то этот телефон отдельно отправляется на маршрутизатор, но уже не с целью маршрутизации, а с целью обогащения сессии (объекта посетителя) с помощью siebelId, соответствующим этому номеру телефона.

  • Если чат снимается с бота, он снова отправляется на маршрутизатор.

  • Есть возможность сделать так, чтобы чат снимался с маршрутизатора и отправлялся в общую очередь, если он маршрутизируется более 30 секунд.

Взаимодействие с частями системы

  1. Взаимодействие с сервером чата:

    • Используются настройки аккаунта custom_router_schema_url и custom_router_timeout;

    • Берётся ключ отдела переданного чата, по ключу выбирается отдел, у него проверяются настройки routing;

    • Используются события чата sys.routing_to_operator, sys.routing_to_department, sys.routing_failure;

    • От маршрутизатора ожидается передача ключа отдела или ID оператора через параметры skill и employee соответственно. Если обнаружен skill, то ищется отдел с таким ключом (department_key). В случае обнаружения такого отдела чат маршрутизируется в него, в противном случае вызывается событие sys.routing_failed. Если skill не обнаружен, но обнаружен employee, то ищется оператор с таким ID. В случае обнаружения такого оператора чат маршрутизируется на него, в противном случае вызывается событие sys.routing_failed.

    • Система обогощает объект посетителя полями siebelId и taskId при их наличии в переданном маршрутизатором ответе;

    • При формировании запроса в клиентский маршрутизатор используются следующие данные: ID чата, размещение обращения, настройка размещения chat.channel, канал клиента, поле phone клиента, provided id клиента, платформа сессии, URL обращения, имя клиента в канале, provided phone клиента, ID клиента в канале.

    • ID чата используется в логировании.

  2. Взаимодействие с базой: прямых запросов в базу нет, используются переданные аргументы и данные из памяти.

  3. Взаимодействие с маршрутизаторами компании: связь осуществляется посредством веб-сервиса (клиент создается с помощью библиотеки suds), адрес WSDL-документа для каждого маршрутизатора прописывается в настройках аккаунта custom_router_schema_url. В настройках custom_router_timeout хранятся значения тайм-аутов запросов.

Скачать WSDL-спецификацию