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

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

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

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

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

  • Параметр "custom_router_schema_url" в настройках account config содержит URL внешнего маршрутизатора, к которому будет обращаться Webim Server.
  • Если в аккаунте маршрутизатор задан, то в процессе инициализации сервера Webim.ChatBackend инициализируется и объект связи аккаунта и маршрутизатора.
  • Особое состояние чата: ROUTING. Оно говорит о том, что чат находится на маршрутизации и ожидается решение от роутера. Наглядно состояние чата отображено на Схеме жизненного цикла чата.
  • У отдела есть особый параметр 'routing', который может принимать значения True или False. Отправка чата на маршрутизатор осуществляется только если у отдела данной сессии он принимает значение True.
  • Маршрутизация на внешний роутер происходит после создания чата и выполнения ряда условий: например, в аккаунте должен быть прописан и инициирован маршрутизатор, в отделе разрешена маршрутизация, чат не забрал бот и т. д.
  • Информация на роутер отправляется в формате SOAP (XML) по WSDL-спецификации. В передаваемый пакет входят ID чата, тип канала, ID пользователя (для Telegram и WhatsApp это канальный ID, в других случаях это либо provided visitor 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 отдела или почту оператора, роутер по ним проверяет, что отдел и оператор существуют;
    • Роутер обновляет пользовательские поля клиента;
    • При формировании запроса в клиентский маршрутизатор используются следующие данные: ID чата, размещение обращения, настройка размещения chat.channel, канал клиента, поле phone клиента, provided id клиента, платформа сессии, URL обращения, имя клиента в канале, provided phone клиента, ID клиента в канале.
    • ID чата используется в логировании.
  2. Взаимодействие с базой: прямых запросов в базу нет, используются переданные аргументы и данные из памяти.
  3. Взаимодействие с маршрутизаторами компании: связь осуществляется посредством веб-сервиса (клиент создается с помощью библиотеки suds), адрес WSDL-документа для каждого маршрутизатора прописывается в настройках аккаунта custom_router_schema_url. В настройках custom_router_timeout хранятся значения тайм-аутов запросов.

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