Call Storage (callstore)

Описание

Хранилище активных звонков и их контекстов.

Накапливает и агрегирует события жизненного цикла звонка.
Отслеживает диалоги и дополняет поток событий в случае падения процесса или сервера, обслуживающего диалог.
Формирует и сохраняет комплексную CDR в коллекцию модели данных `cdr/COPM3_dialogs` мастер-домена.
Путем доработки может быть дополнена сохранением данных, например, об инициированных звонках (invites), вызовах (forks), удержаниях (holds) и расширенных диалогах и связях между ними.

Исполняет сервис восстановления разговоров при обнаружении потери серверов SIP-сигнализации.

Разделена на микросервисы по доменам. Данные автоматически синхронизируются между сайтами, обслуживающими домен.
Резервируется в режиме Active-Passive. Масштабируется разделением доменного дерева.

Table 1. Системные характеристики

Код

callstore

Режим работы

Хранилище

Режим резервирования

Active-Passive

Типы сайтов

Любые

Слой

Бизнес-логика

Размещение

Внутренний

Сохранение и восстановление состояния при перезагрузке

Да

Приложение

era_callstore

Собственное хранилище

ODB Mnesia

Параметры

Table 2. Параметры
Имя Тип Умолчание Описание

name

str

required

Имя. Может состоять из латинских букв и цифр, должно начинаться с буквы.

roletype

str

required

Тип роли. Возможные значения: "callstore".

ext

json

empty

Дополнительные опции роли. Содержит json объект или список.

enabled

bool

empty

Флаг активности роли. При установке в false роль не участвует в валидации и не запускается.

group

int

required

Номер группы.
В рамках горизонтального масштабирования роль может быть разделена на несколько групп на сайте, в каждой из которых активен только один экземпляр, остальные зарезервированы.
Ответственность между группами разделяется по доменным множествам. Вместе все группы обслуживают полное доменное множество. Все роли одной группы должны иметь одинаковую ответственность.
Целое число от 1 до 9999999.

В настоящее время в рамках роли callstore работают мастер-сервисы cdr и sip-restore. Это накладывает ограничение на возможности горизонтального разделения (роадмап).

order

int

required

Порядок экземпляра роли в рамках группы.
Определяет в каком порядке будет происходить перетекание в режиме Active-Passive.

include_domains

array<str>

empty

Список имен доменов, которые обслуживает данная группа.
Может быть указан любой домен любого уровня. Указание домена приводит к тому, что дерево его поддоменов будет обслуживаться на этой группе и не будет обслуживаться на других группах роли, исключая только те ветви, которые упомянуты в других группах.
В совокупности все группы роли на сайте обслуживают полное дерево доменов.

cdr_enabled

bool

true

Выключатель режима отслеживания CDR всех вызовов.
Режим позволяет:

  • мониторить доступность диалогов всех звонков, а в случае их сбоев генерировать события о падении, следить за активностью RTP и своевременно отправлять команду на микширование записи ставшего недоступным диалога.

  • готовить комплексную информацию по вызовам - одну для каждого вызова - для дальнейшего размещения в коллекции 'cdr/COPM3/dialogs'.

sorm3_enabled

bool

false

Выключатель операции создания и размещения в коллекции 'cdr/COPM3/dialogs' агрегированной информации по каждому вызову.
Имеет значимость только при включенном режиме 'cdr_enabled'.

sip_restore_enabled

bool

false

Выключатель режима восстановления SIP-диалогов при обнаружении недоступности внутренних SIP-серверов.

ЭКСПЕРИМЕНТАЛЬНЫЙ РЕЖИМ

Режим работает через функции callmanager, организовывая вызов обоих абонентов с подменой (INVITE+Replaces) или опционально с интеркомом.
В результате восстановления формируется новый диалог.

Необходима включенная опция 'cdr_enabled'.
Необходимо наличие в конфигурации альтернативных активных экземпляров недоступных микросервисов.
Необходима настроенная конфигурация с переподключением SIP-устройств к альтернативным активным экземплярам SG.
Необходимо включение опции 'reregister' для экземпляров SG.
Необходима настроенная конфигурация, одновременно поддержанная устройством аплинка (SBC), с перетеканием обслуживания учетной записи провайдера на резервный экземпляр ESG.
Преимуществом будет наличие резервных экземпляров всех микросервисов с распределением по разным серверам (как минимум двум).
Если медиашлюзы располагаются на тех же нодах, где и сервисы обслуживания SIP-сигнализации, то при падении сервера восстановление разговора происходит на общих основаниях данного режима.

При падении сервера/ноды с микросервисом шлюза SG, после восстановления регистрации от абонента, осуществляется его вызов подменой и, возможно, интеркомом (настройка 'sip_restore_mode'). Все время, пока восстановление не произошло, звук продолжает поступать, если медиашлюз остался доступен. Если абонент использует встроенный webrtc-софтфон, то медиатрафик также продолжает обрабатываться вплоть до перерегистрации, а попытка переподключения начинается сразу.

В случае, если оказывается недоступен связанный со звонком микросервис ESG, то при наличии резервного в сторону аплинка (за учетной записью провайдера) также отпраляется INVITE+Replaces.
Учетная запись провайдера при этом может ограничивать опцией opts.sip_restore_mode режимы переподключения абонента путем отправки INVITE в сторону аплинка.

При падении сервера/ноды с микросервисом обслуживания конференции (conf), создается новая конференция и все участники переводятся в нее.

При падении сервера/ноды с микросервисом обслуживания IVR (ivr), создается новый обработчик и абонент потерянного диалога с IVR переключается в него. Если при этом в исполнявшихся сценариях IVR применялось сохранение контекста, то вызов начнет обрабатываться с последней сохраненной позиции и состояния, в том числе на любом уровене вложенности.

Если теряется несколько или все серверы сигнализации, это не мешает полному восстановлению обоих плечей.

Восстановление осуществляется активным микросервисом callstore. Хранение информации о диалогах производится в распределенной БД.

Подробное описание работы восстановления диалогов в статье.

sip_restore_mode

integer

1

Устанавливает режим восстановления разговора при обнаружении падения микросервиса SG.
Возможные варианты:

  • 1 - Восстановительный вызов внутреннего абонента производится подменой (INVITE+Replaces). В случае неудачи или отказа попытка прекращается.

  • 2 - Восстановительный вызов внутреннего абонента начинатся с подмены (INVITE+Replaces), а в случае неудачи делается новая попытка вызова с заголовками интеркома (автоматический ответ).

Применяется только при включенной опции 'sip_restore_enabled'.

sip_restore_limit_sec

integer

30

Время в секундах, как долго может инициированный процесс восстановления диалога ожидать появления возможности осуществить вызов (наличия требуемых микросервисов, регистраций, коннектов).
Это значение засекается от момента принятия решения о необходимости восстановления, которое само по себе может отстоять на несколько секунд (по меньшей мере 2 секунды) от реальной потери сервера.

На восстановление каждого разговора отводится одна попытка (параметр sip_restore_mode).
Значительное увеличение этого значения может привести к инициации фантомного подменного вызвова значительно позже того, как абоненты положат трубки. Который однако при корректной обработке абонентскими устройствами останется незаметным и прервется на первом же плече, хотя и породит обмен в каналах SIP и MEGACO.

Значение может быть увеличено и до нескольких минут, учитывая что:

  • при потере сервера с медиа-шлюзом происходит миграция, а не восстановление подменой;

  • при потере сервера с микросервисом обслуживания SIP-сигнализации обмен трафиком не прерывается вплоть до восстановления или попытки завершить или поставить на удержание разговор.

Применяется только при включенной опции 'sip_restore_enabled'.

mnesia_storage_mode

str

disc "Режим работы объектного хранилища.

Возможные варианты:

* disc - полный режим

в оперативной памяти с сохранением на диск на всех экземплярах группы.

  • ram - только в оперативной памяти (с поддержкой распределенности

транзакций). При одновременной перезагрузке/выключении всех экземпляров группы данные теряются.

* disc_only - только на диске (заметно менее производительно

но экономит RAM)."

takeover

bool

Пример конфигурации

Управление конфигурацией производится в приложении, доступном для администраторов мастер-домена. Приложение скрывает полное содержание конфигурации, однако тем не менее оно доступно через API.

Конфигурация содержит раздел для описания всех экземпляров всех ролей. Параметры определяются для каждого конкретного экземпляра роли.

Пример узла
{
  "name": "callstore1",
  "roletype": "callstore",

  "group": 11010,
  "order": 1,

  "include_domains": []
}

См. также