Шаг 18. Функция BLF (Busy Lamp Field)

Кейс: Алиса (A) снимает трубку на своем SIP-телефоне и начинает вызов Бориса (B). Варвара © видит на панели BLF своего SIP-телефона, что индикатор Алисы сменился на красный цвет, а индикатор Бориса замигал красным цветом.

Для этого предварительно администратор настраивает функцию BLF на SIP-телефоне Варвары. Для этого при настройке первой кнопки с индикатором вводит номер Алисы, а второй кнопки с индикатором вводит номер Бориса.

Функция BLF работает посредством SIP-запросов SUBSCRIBE и NOTIFY с особым содержимым, реализуя известный шаблон Publisher-Subscriber. Устройство совершает подписку на события, в результате чего система уведомляет устройство всякий раз, когда происходят интересующие его события. Для функции BLF в качестве событий выступает смена состояния какого-то конкретного пользователя, точнее учетной записи его SIP-устройства (sipuser).

В течение этого шага под пользователем будет пониматься именно учетная запись его SIP-устройства sipuser.

Состояние зависит от наличия и состояния звонков, где одним из абонентов выступает учетная запись. Всего существует 4 состояния: terminated, idle, early, busy.

  • Звонки обслуживаются ролью B2BUA.

  • Все SIP-запросы от устройств обрабатываются ролью B2BUA.

  • В конфигурации экземпляров ролей B2BUA может быть много даже на одном сайте, тем более во всей системе.

  • Пользователь может быть занят в нескольких одновременных звонках.

  • Звонки обслуживаются на произвольных серверах (экземплярах роли B2BUA), в общем случае на разных серверах.

  • Пользователь считается занятым, если участвует хотя бы в одном активном звонке.

  • Пользователь считается свободным, только если он не участвует ни в одном звонке.

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

Для решения этого и подобных вопросов используется роль StateStore. Она собирает и сохраняет все отдельные состояния, которые могут связывать с пользователем различные сервисы системы, в том числе и экземпляры роли B2BUA. Она содержит "машину состояний" по вычислению интегрированного состояния. А также механизм подписки и уведомления. Резервируется в режиме Active-Passive, может разделяться на группы по доменным зонам (микросервисные доменные фасады, шаг 7), синхронизирует данные между сайтами, обслуживающими домен.

  1. Подписка

blf_statestore
  1. Уведомление

blf_statestore_02

Таким образом, запрос подписки SUBSCRIBE, обрабатываясь на одном из B2BUA, временно размещает в хранилище подписок роли StateStore в домене sipuser-адресата информацию о подписчике. Экземпляры B2BUA в ходе обслуживания звонков определяют для пользователей-абонентов те или иные состояния (early, busy) – временно размещают информацию о состоянии пользователя-абонента в хранилище состояний роли StateStore в соответствующем домене и регулярно продлевает. StateStore всякий раз, обрабатывая запрос, пересчитывает интегральное состояние связанного sipuser и при его смене уведомляет всех подписчиков. Для этого на обслуживающий экземпляр B2BUA каждого подписчика отправляется соответствующий запрос, Команда трансформируется в запрос NOTIFY и уходит на устройство-подписчика.

При этом не важно

  • в каком домене находятся пользователи A, B и C,

  • на каких сайтах обслуживаются их домены,

  • через какие сайты их устройства подключены к системе,

  • какой сайт обслуживает звонок,

  • обслуживает ли этот сайт домен пользователя A.

Любой звонок, в котором участвует пользователь A, приведет к синхронизированному изменению состояния A на всех сайтах, обслуживающих его домен. Любое изменение состояния пользователя A приведет к уведомлению устройства пользователя C.

blf_statestore_cross

Тем не менее, кросс-доменная подписка возможна только в том случае, если С может вызвать A согласно правилам маршрутизации обоих доменов.

Table 1. Используемые термины
Термин Определение

BLF

!

Состояние sipuser

!

StateStore

!