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

Описание

Содержит базовые настройки описания канала
Используется ролью im при создании аккаунтов для обмена быстрыми сообщениями с мессенджерами. Устанавливает стратегии для обслуживания отдельно отправки конкретного сообщения и отдельно получения накопленных сообщений и раскладки по коллекциям модели данных (/model/im/RemoteParties, /model/im/Messages).

Ограничения

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

  • По умолчанию система автоматически создает канал '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.

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

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

Поле: 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 секунды.

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

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

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

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

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

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

См. также

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

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