Busy Lamp Field (BLF) – Что это и как это работает (Subscribe, Notify)
Busy Lamp Field (BLF) это подсветка в виде лампочек на кнопках телефона, которые показывают «сведения о присутствии» абонентов одной АТС. Чаще всего эта функция настраивается через веб-интерфейс телефона. После настройке, телефон подписывается на информацию о нужных абонентах, которую рассылает АТС. BLF работает через протокол SIP, используя запросы SUBSCRIBE и NOTIFY. В нормальном сценарии телефон запрашивает информацию (запрос SUBSCRIBE), а АТС отвечает (ответ NOTIFY).
Как это работает?
Когда телефон настроен на мониторинг внутренних номеров, он отправляет запрос SUBSCRIBE в сторону АТС. Если подписка на состояние внутренних номеров одобрена АТС, то в сторону телефона придет ответ 200 OK. Сообщение NOTIFY, содержащее данные в формате XML передаться подписчику (в нашем примере телефону). Как только статус одного из подписанных номеров изменится (занято, ожидание вызова, свободен), АТС отправит в сторону телефона сообщение NOTIFY.
На сообщение NOTIFY подписчик, должен ответить сообщением 200 OK. Подписчик может отписаться от рассылки, если отправит в сторону АТС сообщение SUBSCRIBE, в котором, в поле Expires будет установлено значение 0. Далее рассмотрим подробнее данный механизм.
Запрос Subscribe
В этом примере, телефон зарегистрирован на АТС, с внутренним номером 106. Ниже представлен запрос SUBSCRIBE. Телефон подписан на получение информации о внутреннем номере 136.
В этом примере мы можем увидеть:
- SUBSCRIBE sip: 136@10.130.130.4;user=phone SIP/2.0 – сообщение SUBSCRIBE направлено на получение информации по номеру 136, зарегистрированного на АТС c IP адресом 10.130.130.4
- From: ; – это поле содержит информацию о подписчике, номер 106, зарегистрированный на АТС с IP адресом 10.130.130.4
- Accept: application/dialog-info+xml – поле указывает, что разрешен прием информации dialog-info в XML формате
- Expires: 3600 – время истечения подписки. По истечении этого времени, подписчик должен послать еще одно сообщение SUBSCRIBE в сторону АТС, чтобы продолжить получать интересующую его информацию
- Content-Length: 0 – в поле указывается, что в этом SIP сообщении нету информации в XML формате
Когда сообщение SUBSCRIBE получено и обработано АТС, АТС посылает в сторону подписчика сообщение 200 OK.
Запрос Notify
В этом примере показано, как номер 136 меняет свой статус. Сообщение NOTFIY содержит информацию в формате XML и отправляется АТС, в сторону подписчика.
В этом примере мы можем увидеть:
- NOTIFY sip:
- 106@10.130.130.58:2051;line=1ofdyu7v SIP/2.0 – в этом поле мы видим, что сообщение NOTIFY предназначается внутреннему номеру 106, имеющему IP адрес 10.130.130.58
- Subscription-State: active;expires=3521 – в этом поле мы видим, сколько времени осталось до конца подписки
- Content-Length: 507 – в этом поле мы видим размер XML файла в байтах
- entity=”sip:136@10.130.130.4;user=phone” – в этом поле представлена, информация о абоненте, на которого телефон подписался
- direction=”initiator” – в этом поле показано, что наблюдаемый внутренний номер, стал инициатором звонка. Если бы наблюдаемый внутренний номер принял входящий вызов, то в значении поля было бы указано “recipient”
- confirmed – в этом поле указан статус вызова, в этом примере вызов установлен, т.е. принят другой стороной. Если вызов еще не обработан (принят), удаленным абонентом, то в поле было бы указано “early”, а если бы вызов был закончен, то в поле было бы указано “void”
- in , – в этом поле показано, что внутренний номер 136 вызывает номер 117
Когда сообщение NOTIFY получено и обработано подписчиком, подписчик посылает в сторону АТС сообщение 200 OK.
Отказ от подписки
В этом примере показано, как подписчик отказывается от подписки на стороне АТС. Разница между запросами SUBSCRIBE и UNSUBSCRIBE, только в том, что в поле Expire указан параметр 0.
В этом примере мы можем увидеть:
- SUBSCRIBE sip:
- 136@10.130.130.4;user=phone SIP/2.0 - сообщение SUBSCRIBE направлено на получение информации по номеру 136, зарегистрированного на АТС c IP адресом 10.130.130.4
- From: 106@10.130.130.4>;;tag=4fog9tlb9d – это поле содержит информацию о подписчике, номер 106, зарегистрированный на АТС с IP адресом 10.130.130.4
- Expires: 0 – это поле указывает, что подписчик отказывается от дальнейшего получения информации о внутреннем номере 136. Т.е. указывается, что время подписки равно 0
Когда сообщение SUBSCRIBE получено и обработано АТС, АТС посылает в сторону подписчика сообщение 200 OK.
Часто встречающиеся ошибки
- 403 – Forbidden. Сервер не зарегистрировал запрос
- 423 – Interval to small. Время жизни Expires, указанное в SIP сообщение, очень мало
- 481 – Подписки не существует
- 489 – Bad event. Данное событие не поддерживается