Канал обмена быстрыми сообщениями (imchannel)

Описание

Каналы 'telegram', 'whatsapp', 'vk' создаются и обновляются автоматически из fixture. И связываются кодами с автоматическими стратегиями отправки и получения сообщений и событий.

Ограничения

  • Коллекция недоступна в мастер-домене.

  • По умолчанию система автоматически создает канал 'telegram'.

Поля

Структура сущности
{
  "id": uuid,
  "code": str,
  "mode": str,
  "recv_strategy": str,
  "send_strategy": str,
  "opts": {
    "title": str,
    "comment": str,
    "after_read_timeout": int,
    "max_account_mps": int,
    "max_remoteparty_mps": int
  },
  "ext": {
    "ct": date,
    "lwt": date
  }
}
Table 1. Поля
Спецификация Описание

Поле: id
Режим: inout
Тип: uuid
По умолчанию: generated

Идентификатор. Может быть задан при создании, иначе генерируется системой.

Поле: code
Режим: in
Тип: str
По умолчанию: required

Код. Используется для ассоциирования с другими сущностями. Представляет уникальное название канала, например telegram или viber.

На этот код ссылаются IM-аккаунты.

При этом коды 'telegram', 'whatsapp', 'vk' определяют встроенные стратегии обработки входящих и отправки исходящих сообщений и событий.
Другие коды предполагают создание кастомных стратегий на служебных сценариях отправки и обработки входящих сообщений.

Поле: mode
Режим: in
Тип: str
По умолчанию: request

Режим получения сообщений. Варианты:
* request – постоянный long-polling опрос мессенджера.
* webhook – информирование системы с помощью webhook (алгоритм настраивается внешним образом вплоть до размещения сообщений в коллекциях /model/im/RemoteParties и /model/im/Messages).
* disabled – канал не применяется в обработке коммуникационным слоем платформы.

Поле: recv_strategy
Режим: in
Тип: date | str_empty
По умолчанию: str_empty

Название стратегии получения сообщений.
В случае, если задана пустота, то в качестве названия стратегии применяется автоматически генерируемое значение %CODE%recv, где CODE - код канала.
В качестве стратегии ищется erlang-модуль plugin
%RECV_STRATEGY% с экспортируемым интерфейсом, а при его отсутствии - сценарий с указанным кодом.
Стратегия применяется только в режиме mode = request для осуществления long-polling запроса на получение поступивших в аккаунт сообщений.
На вход передается связанная JSON-сущность из коллекции /im/Accounts.
При получении сообщений стратегия их размещает в коллекции /im/Messages, одновременно создавая или обновляя связанные сущности коллекции /im/RemoteParties.
К задачам, решаемым стратегией получения, относится обеспечение защиты от повторов и от сбоев, опираясь на уникальные идентификаторы сообщений в мессенджере.
В случае неудачного завершения выполнения стратегии, ее вызов повторяется спустя несколько секунд.

Поле: send_strategy
Режим: in
Тип: date | str_empty
По умолчанию: str_empty

Название стратегии отправки сообщений.
В случае, если задана пустота, то в качестве названия стратегии применяется автоматически генерируемое значение %CODE%send, где CODE - код канала.
В качестве стратегии ищется erlang-модуль plugin
%SEND_STRATEGY% с экспортируемым интерфейсом, а при его отсутствии - сценарий с указанным кодом.
Стратегия применяется для отправки каждого отдельно взятого сообщения, на вход в качестве параметра передаются связанные JSON-сущности из коллекций /im/Accounts, im/RemoteParties, im/Messages.
В случае неудачного завершения выполнения стратегии, то отправляемое сообщение в коллекции получает статус error и описание причины.

Поле: opts
Режим: in
Тип: object
Составное поле

Поле: opts.title
Режим: in
Тип: str
По умолчанию: empty

Название канала

Поле: opts.comment
Режим: in
Тип: str
По умолчанию: empty

Произвольный комментарий

Поле: opts.after_read_timeout
Режим: in
Тип: int
По умолчанию: 100

Таймаут в миллисекундах, применяемый перед следующим выполнением стратегии получения после возврата управления из предыдущего вызова.

Поле: opts.max_account_mps
Режим: in
Тип: int
По умолчанию: 30

Ограничение на количество отправляемых в аккаунт сообщений в течение 1 секунды.

Поле: opts.max_remoteparty_mps
Режим: in
Тип: int
По умолчанию: 1

Ограничение на количество отправляемых конкретному абоненту сообщений в течение 1 секунды.

Поле: opts.reactions
Режим: in
Тип: str
По умолчанию: empty

Список разрешенных в канале реакций-emoji.
Применяется в АРМ пользователя как ограничение на возможные реакции, если иное не указано в опциях аккаунта.

Поле: ext
Режим: inout
Тип: object
Составное поле

Позволяет расширять состав произвольными ключами и значениями

Поле: ext.ct
Режим: out
Тип: date
По умолчанию: generated

Время создания объекта

Поле: ext.lwt
Режим: out
Тип: date
По умолчанию: generated

Время последней модификации объекта

Поле: ext.fixture_version
Режим: out
Тип: date

Версия fixture, созданной автоматически. Применяется для обновления из fixture.

Встроенные стратегии и кастомные стратегии

Аккаунты 'telegram', 'whatsapp', 'vk' обслуживаются встроенными стратегиями.

При необходимости, можно реализовать собственные стратегии на служебных сценариях, указанных в IM-канале. Сценарии раздельно для получения и отправки сообщений. Коды каналов при этом должны отличаться от стандартных названий встроенных стратегий.
Сценарий получения применяется для Long-polling запросов, а в случае поставки сообщений веб-хуками следует реализовывать обработку в сценариях соответствующего канала интеграции.

Встроенная стратегия 'telegram' поддерживает:

  • Создание записей в коллекции абонентов в момент поступления от них сообщений.

  • Создание записей в коллекции сообщений в момент поступления.

  • Получение текстовых сообщений, изображений, аудио, видео, документов, стикеров, локаций, контактов, ссылок, выбора в интерактивной клавиатуре. В том числе сообщений состоящих из файла и текста.

  • Получение событий о модификации текста ранее отправленных сообщений.

  • Получение ответов на предыдущие сообщения (со ссылками на них).

  • Получение статусов 'отправлено', 'доставлено', 'прочитано'.

  • Определение маркировки пересылаемых сообщений (флаг и информация об исходном авторе).

  • Отправку текстовых сообщений, изображений, аудио, видео, документов, стикеров, локаций, контактов, интерактивной клавиатуры. В том числе сообщений состоящих из файла и текста.

  • Отправку эмоджи-реакций на сообщения.

Встроенная стратегия 'whatsapp' (whatsapp_business) поддерживает:

  • Обработку запроса на подтверждение канала (зарегистрированного URI веб-хука).

  • Создание записей в коллекции абонентов в момент поступления от них сообщений.

  • Создание записей в коллекции сообщений в момент поступления.

  • Модификацию целевых URI на URI http-прокси-сервера.

  • Получение текстовых сообщений, изображений, аудио, видео, документов, стикеров, локаций, контактов, выбора в интерактивной клавиатуре. В том числе сообщений состоящих из файла и текста.

  • Получение ответов на предыдущие сообщения (со ссылками на них).

  • Получение статуса прочитано.

  • Определение маркировки пересылаемых сообщений (флаг).

  • Отправку текстовых сообщений, изображений, аудио, видео, документов, стикеров, локаций, контактов, интерактивной клавиатуры. В том числе сообщений состоящих из файла и текста.

  • Отправку эмоджи-реакций на сообщения.

  • Отправку статуса 'прочитано'.

Встроенная стратегия 'vk' поддерживает работу в чате сообщества:

  • Обработку запроса на подтверждение канала (зарегистрированного URI веб-хука).

  • Создание записей в коллекции абонентов в момент поступления от них сообщений.

  • Создание записей в коллекции сообщений в момент поступления.

  • Получение текстовых сообщений, фотографий, документов, стикеров, локаций. В том числе сообщений состоящих из файла и текста.

  • Размножение сообщений, содержащих несколько файлов.

  • Получение реакций на соообщения (с преобразованием идентификаторов в эмоджи-символы).

  • Получение ответов на предыдущие сообщения (со ссылками на них).

  • Получение статуса прочитано.

  • Отправку текстовых сообщений, изображений, документов, стикеров, локаций. В том числе сообщений состоящих из файла и текста.

  • Отправку эмоджи-реакций на сообщения (с преобразованием эмоджи-символов в идентификаторы).

  • Отправку статуса 'прочитано'.

Cм. также

Логические роли

  • im управляет обменом сообщениями со сторонними мессенджерами.