Базовая функциональность работы с чатами находится в предустановленном пакете OmnichannelMessaging.
Описание настройки интеграции с мессенджерами содержится в блоке статей Настройка чатов.
Интеграция с мессенджером
Библиотеки, в которых находится основная часть функциональности интеграции с мессенджером:
- OmnichannelMessaging.dll.
- OmnichannelProviders.dll.
Возможности интеграции с мессенджером предоставляет класс MessageManager.
Основные методы класса MessageManager:
- Receive — принимает входящие сообщения. Для сообщения используется универсальный формат (UnifiedMessage — унифицированный класс сообщения) или строка, которая в дальнейшем будет конвертирована в универсальный формат. При необходимости использования конвертации метод использует класс, который реализует интерфейс IIncomeMessageWorker. Для каждого мессенджера используется собственная реализация данного интерфейса. Также выполняется сохранение сообщения в системе.
- Send — отправляет исходящие сообщения. Система подбирает подходящий класс-отправитель сообщения. Класс должен реализовывать интерфейс IOutcomeMessageWorker. Также выполняется сохранение сообщения в системе.
- Register — добавляет канал при настройке интеграции с Facebook Messenger. Метод использует класс, который реализует интерфейс IMessengerRegistrationWorker. Используется для мессенджеров, которые требуют выполнения дополнительных действий при регистрации, например, получение токена.
- GetMessagesByChatId — получает сообщения, которые относятся к чату. Для сообщения используется формат IEnumerable<UnifiedMessage>. Чат передается в параметрах метода.
Прием сообщений
Специфичные для мессенджеров сервисы приема сообщений:
- FacebookOmnichannelMessagingService — сервис приема сообщений от Facebook Messenger.
- TelegramOmnichannelMessagingService — сервис приема сообщений от Telegram.
Для обоих сервисов базовым является сервис OmnichannelMessagingService, который содержит набор общих для мессенджеров методов.
InternalReceive — основной метод сервиса OmnichannelMessagingService. Принимает сообщения.
Сервисы для работы с чатами в Creatio
Сервисы для работы с чатами в Creatio:
- OmnichannelChatService — сервис для работы с чатами, который позволяет получить историю, чаты оператора и т. д.
- OmnichannelOperatorService — сервис операторов, который позволяет получить и изменить статус.
Основные методы сервиса OmnichannelChatService:
- AcceptChat — закрепляет чат за текущим пользователем.
- GetUnreadChatsCount — получает количество непрочитанных чатов.
- MarkChatAsRead — помечает все сообщения в указанном чате как прочитанные.
- GetConversation — получает сообщения чата для отображения в коммуникационной панели.
- CloseActiveChat — закрывает указанный чат.
- GetChats — получает все чаты для указанного оператора.
- GetChatActions — получает список действий, доступных для очереди указанного чата.
- GetUnreadMessagesCount — получает количество непрочитанных сообщений во всех чатах оператора.
Добавить новый провайдер канала
- Добавьте новый провайдер в справочник Провайдер канала (Channel provider).
- Реализуйте хранение данных нового канала в базе данных.
- Зарегистрируйте новый канал в базе данных.
- Создайте веб-сервис для приема сообщений.
- Реализуйте конвертацию входящего сообщения в универсальный формат Creatio.
- Реализуйте получение данных профиля пользователя в классе, который реализует интерфейс IProfileDataProvider.
- Реализуйте загрузку вложений.
- Реализуйте отправку сообщений в классе, который реализует интерфейс IOutcomeMessageWorker.
- Выполните связывание интерфейсов.
1. Добавить пользовательский провайдер канала в Creatio
- Перейдите в дизайнер системы по кнопке .
- В блоке Настройка системы (System setup) перейдите по ссылке Справочники (Lookups).
- Откройте справочник Провайдер канала (Channel provider) и добавьте в него значение "Test".
2. Настроить хранение данных пользовательского канала
-
Cоздайте таблицу базы данных и определите ее структуру. Структура таблицы зависит от провайдера и содержит данные для отправки и приема сообщений. Как правило, для отправки сообщений провайдеры используют авторизационный токен.Для этого выполните SQL-скрипт, который приведен ниже.
SQL-скрипт, который создает таблицу [TestMsgSettings]MSSQLPostgreSQL[TestMsgSettings] — таблица для хранения данных пользовательского канала. Для названия таблицы используйте шаблон [SomeChannelProviderNameMsgSettings], где SomeChannelProviderName — имя провайдера канала.
-
Зарегистрировать пользовательский канал в базе данных. Для этого добавьте запись в таблицу [Channel]. Поля, которые необходимо заполнить, приведены в таблице ниже.
Поле Описание [Name] Название канала. [ProviderId] Идентификатор пользовательского провайдера. [MsgSettingsId] Идентификатор записи в таблице [TestMsgSettings]. [Source] Идентификатор канала внутри мессенджера, например, идентификатор страницы на Facebook или идентификатор клиента в Telegram. Позволяет определить получателя по сообщению от мессенджера.
3. Создать веб-сервис для приема сообщений
-
Создайте схему Исходный код (Source code).
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере исходного кода заполните свойства схемы:
- Код (Code) — "UsrTestOmnichannelMessagingService".
- Заголовок (Title) — "TestOmnichannelMessagingService".
Для применения заданных свойств нажмите Применить (Apply).
-
Создайте класс веб-сервиса.
- В дизайнере схем добавьте пространство имен Terrasoft.Configuration.Omnichannel.Messaging.
- C помощью директивы using добавьте пространства имен, типы данных которых задействованы в классе.
- Добавьте название класса, которое соответствует названию схемы (свойство Код (Code)).
- В качестве родительского класса укажите класс OmnichannelMessagingService, который содержит базовые методы.
- Для класса добавьте атрибуты [ServiceContract] и [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)].
-
Реализуйте метод класса (т. е., конечную точку) веб-сервиса. Для этого в дизайнере исходного кода добавьте в класс метод public void ReceiveMessage(TestIncomingMessage message). Мессенджер присылает сообщение на конечную точку receive.
Исходный код пользовательского веб-сервиса TestOmnichannelMessagingService представлен ниже.
- На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.
4. Реализовать конвертацию входящего сообщения
Для обработки входящего сообщения реализуйте класс TestIncomingMessageConverter, который конвертирует сообщение с типом TestIncomingMessage (сообщение в формате мессенджера) в универсальный формат Creatio (класс MessagingMessage).
Чтобы создать класс-конвертер:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestIncomingMessageConverter".
- Заголовок (Title) — "TestIncomingMessageConverter".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код. Исходный код класса-конвертера TestIncomingMessageConverter представлен ниже.
- На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.
5. Реализовать получение данных профиля пользователя
Мессенджеры предоставляют API для получения данных клиентов, которые отправляют сообщения. Чтобы получить данные профиля пользователя, создайте класс, который реализует интерфейс IProfileDataProvider.
Чтобы создать класс для получения данных профиля пользователя:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestProfileDataProvider".
- Заголовок (Title) — "TestProfileDataProvider".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
- Класс отправляет запрос на адрес https://graph.test.com/, чтобы получить данные в формате TestProfileData (предполагаемый формат мессенджера).
- Класс конвертирует полученный ответ во внутренний формат ProfileData.
- При создании контакта класс добавляет полученные данные (например, имя, фамилия, фото) ко внутреннему формату. Если запрос неуспешный или данные некорректны, то класс создает контакт с именем [Новый контакт][Имя канала]-[Идентификатор клиента в мессенджере].
Исходный код класса TestProfileDataProvider представлен ниже.
- На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.
6. Реализовать загрузку вложений
Для загрузки вложений создайте класс, который реализует интерфейс IAttachmentsLoadWorker:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestAttachmentLoadWorker".
- Заголовок (Title) — "TestAttachmentLoadWorker".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код. Внутренний класс AttachmentsDownloader загружает вложение по ссылке и сохраняет его в таблицу [OmnichannelMessageFile] базы данных.
Исходный код класса TestAttachmentLoadWorker представлен ниже.
- На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.
7. Реализовать отправку сообщений
Для отправки сообщений создайте класс, который реализует интерфейс IOutcomeMessageWorker:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestOutcomeMessageWorker".
- Заголовок (Title) — "TestOutcomeMessageWorker".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код. Класс TestOutcomeMessageWorker переводит сообщение в формат мессенджера и отправляет его, используя API мессенджера. Для выполнения отправки может использоваться токен, который необходимо хранить в таблице [TestMsgSettings]. Доступ к таблице предоставляет переданный в конструкторе UserConnection. Класс отправляет сообщение на адрес https://graph.test.com/, используя внутренний класс HttpRequestSender.
Исходный код класса TestOutcomeMessageWorker представлен ниже.
- На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.
8. Связать интерфейсы
Чтобы связать интерфейсы, создайте класс.
Чтобы создать класс:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestAppEventListener".
- Заголовок (Title) — "TestAppEventListener".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код. В качестве родительского класса укажите класс AppEventListenerBase. Созданные классы связываются по тегу Test. Укажите тег в поле ChannelName на шаге 4. Приложение использует тег, чтобы определить файлы, которые необходимо использовать для получения данных профиля, загрузки вложений и отправки сообщений.
Исходный код класса TestAppEventListener представлен ниже.
- На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.
Для настройки маршрутизации чатов необходимо в выпадающем списке настройки очереди выбрать правило маршрутизации. Таким образом определяется механизм распределения чатов на операторов.
Рассмотрим пример добавления пользовательского механизма распределения.
1. Добавить новое правило маршрутизации чатов
- Перейдите в дизайнер системы по кнопке .
- В блоке Настройка системы (System setup) перейдите по ссылке Справочники (Lookups).
- Используя фильтр в верхней части страницы, найдите справочник "Правила маршрутизации чатов в очереди" ("Rules for routing chat queue operators").
- Откройте наполнение справочника и добавьте новое правило:
- Название (Name) — "Test rule".
- Код (Code) — "TestRule".
2. Создать класс, который реализует интерфейс IOperatorRoutingRule
На этом шаге можно создать класс-наследник класса BaseOperatorRoutingRule или новый класс, реализующий интерфейс IOperatorRoutingRule.
Класс BaseOperatorRoutingRule содержит в себе абстрактные методы PickUpFreeQueueOperators и GetChatOperator, которые необходимо реализовать.
При этом в класс BaseOperatorRoutingRule уже заложена реализация интерфейса IOperatorRoutingRule, с использованием логики, приведенной ниже.
Если чату уже назначен оператор (в колонке [OperatorId] указан идентификатор пользователя), то необходимо выбрать этого оператора. Если чату не назначен оператор, то необходимо, используя метод PickUpFreeQueueOperators получить оператора или операторов в виде List<Guid>. В данном случае Guid это идентификаторы операторов из таблицы [SysAdminUnit], которые в итоге и получат уведомления о новом чате, а также доступ к чату через коммуникационную панель.
Создадим класс TestOperatorRoutingRule реализующий простейшую логику маршрутизации чата на системного пользователя (Supervisor).
Чтобы создать класс:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestOperatorRoutingRule".
- Заголовок (Title) — "TestOperatorRoutingRule".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
3. Связать интерфейс и код правила из справочника
Чтобы выполнить связывание реализации интерфейса и буквенного кода правила, указанного в справочнике на шаге 1, создайте класс TestAppEventListener (наследник класса AppEventListenerBase), в котором выполните связывание интерфейсов.
Чтобы создать класс:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestAppEventListener".
- Заголовок (Title) — "TestAppEventListener".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
4. Перезапустите приложение в IIS
Для применения изменений перезапустите приложение в IIS. После перезапуска приложения и выбора в настройках очереди правила "Test rule", чаты будут распределяться по заданным условиям.