Базовая функциональность работы с чатами находится в предустановленном пакете 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. Реализовать хранение данных нового канала
В базе данных приложения создайте таблицу [TestMsgSettings] (имя таблицы следует формировать по правилу [<ИмяПровайдера>MsgSettings]).
Структура таблицы зависит от конкретного мессенджера и должна содержать данные, необходимые системе для выполнения отправки и приема сообщений. Как правило мессенджеры для отправки используют авторизационный токен.
3. Зарегистрировать новый канал в базе данных
Для регистрации нового канала добавьте запись в таблицу [Channel].
[Name] | Название канала. |
---|---|
[ProviderId] | Идентификатор добавленного провайдера. |
[MsgSettingsId] | Идентификатор записи в таблице [TestMsgSettings]. |
[Source] | Идентификатор канала внутри мессенджера, например идентификатор страницы на Facebook или идентификатор клиента в Telegram. Позволяет по сообщению от мессенджера определить получателя. |
4. Создать веб-сервис для приема сообщений
В примере реализуем вариант, при котором мессенджер присылает входящие сообщения на указанный endpoint. Созданный веб-сервис должен быть анонимным и доступным извне. Наследовать веб-сервис следует от базового веб-сервиса OmnichannelMessagingService, поскольку он содержит набор методов, позволяющих сохранить сообщение, создать чат, контакт и т. д.
Чтобы создать веб-сервис:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestOmnichannelMessagingService".
- Заголовок (Title) — "TestOmnichannelMessagingService".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
TestOmnichannelMessagingServiceВ примере мессенджер присылает входящее сообщение на endpoint receive.
В методе ReceiveMessage выполняется:
- Конвертация сообщения (метод Convert класса TestIncomingMessageConverter, который будет создан на следующем шаге).
- Идентификация канала по полю Source (метод GetChannelAndQueueBySource).
-
Вызов метода InternalReceive, который выполнит следующие действия:
- Создаст новый чат, если открытый чат с этим клиентом не будет найден, или добавит сообщение к существующему.
- Создаст контакт, если это первое общение с клиентом, и выполнит заполнение его контактных данных, или привяжет чат к существующему контакту.
-
Сохраните и опубликуйте схему.
5. Реализовать конвертацию входящего сообщения в универсальный формат Creatio
После приема сообщения от мессенджера необходимо выполнить конвертацию входящего сообщения в универсальный формат Creatio (класс MessagingMessage). В примере эта задача выполняется классом TestIncomingMessageConverter, который конвертирует входящее сообщение с типом TestIncomingMessage (сообщение в формате мессенджера) в формат Creatio.
Чтобы создать класс-конвертер:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestIncomingMessageConverter".
- Заголовок (Title) — "TestIncomingMessageConverter".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
TestIncomingMessageConverterБлок Attachments заполняется в зависимости от формата доступа к файлам, который предоставляет мессенджер. В примере это ссылка для загрузки. Возможен вариант с передачей в сообщении FileId для последующего скачивания файла.
-
Сохраните и опубликуйте схему.
6. Реализовать получение данных профиля пользователя
Мессенджеры предоставляют API для получения данных клиентов, которые отправляют сообщения. Чтобы получить эти данные необходимо создать класс, реализующий интерфейс IProfileDataProvider.
Чтобы создать класс для получения данных профиля пользователя:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestProfileDataProvider".
- Заголовок (Title) — "TestProfileDataProvider".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
TestProfileDataProviderВ примере класс отправляет запрос на URL https://graph.test.com/ для получения данных в формате TestProfileData (предполагаемый формат мессенджера) и конвертирует полученный ответ во внутренний формат ProfileData. При создании контакта к нему будут добавлены полученные данные (например, имя, фамилия, фото). Если запрос не будет успешным или данные будут некорректными, то контакт будет создан с именем <Новый контакт><Имя канала>-<идентификатор клиента в мессенджере>.
- Сохраните и опубликуйте схему.
7. Реализовать загрузку вложений
Для загрузки вложений создайте класс, реализующий интерфейс IAttachmentsLoadWorker:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestAttachmentLoadWorker".
- Заголовок (Title) — "TestAttachmentLoadWorker".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
TestAttachmentLoadWorkerДля загрузки вложений используется внутренний класс AttachmentsDownloader, который выполняет загрузку и сохранение файла по ссылке. Сохранение файла происходит в таблицу [OmnichannelMessageFile].
- Сохраните и опубликуйте схему.
8. Реализовать отправку сообщений
Для отправки сообщений создайте класс, реализующий интерфейс IOutcomeMessageWorker:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestOutcomeMessageWorker".
- Заголовок (Title) — "TestOutcomeMessageWorker".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
TestOutcomeMessageWorkerКласс TestOutcomeMessageWorker переводит сообщение в формат мессенджера и выполняет его отправку, используя API мессенджера. Для выполнения отправки может понадобится токен, который следует хранить в таблице [TestMsgSettings]. Доступ к таблице можно получить через переданный в конструкторе UserConnection. В примере выполняется отправка сообщения на URL https://graph.test.com/, используя внутренний класс HttpRequestSender.
- Сохраните и опубликуйте схему.
9. Выполнить связывание интерфейсов
Чтобы выполнить связывание интерфейсов создайте класс наследник AppEventListenerBase:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
- На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrTestAppEventListener".
- Заголовок (Title) — "TestAppEventListener".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
TestAppEventListenerСозданные классы связываются по тегу "Test". Этот же тег должен быть указан при конвертации сообщения (шаг 4) в поле ChannelName. Таким образом система определяет какие файлы необходимо использовать для получения данных профиля, загрузки вложений и отправки сообщений.
- Сохраните и опубликуйте схему.
Для настройки маршрутизации чатов необходимо в выпадающем списке настройки очереди выбрать правило маршрутизации. Таким образом определяется механизм распределения чатов на операторов.

Рассмотрим пример добавления пользовательского механизма распределения.
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", чаты будут распределяться по заданным условиям.
