Типы перехвата, реализованные в версии
В телефоне реализовано два сценария перехвата в зависимости от того, на что именно подписан BLF (тип подписки определяется телефоном автоматически).
Перехват через BLF, настроенный на пользователя
Условие: На телефоне настроен BLF на пользователя (например, sip:104@host).
Исходные данные примера:
На телефоне настроен аккаунт 100
На сервере настроена группа пользователей 1, в которую входят абоненты 104 и 100
На абонента 104 поступает вызов
С сервера приходит NOTIFY (по подписке на пользователя) на абонента 100
Поведение: Работает по классической схеме в зависимости от настройки режима перехвата.
Режим Replaces
Конфигурация в телефоне:
config.VoIP.Accounts.AccountX.SupplementaryServices.Pickup Mode Replaces
Действие при перехвате:
Отправляет INVITE с заголовком Replaces: …
Пример (режим Replaces)
Конфигурация в телефоне:
config.VoIP.Accounts.AccountX.SupplementaryServices.Pickup Mode Replaces
Настроен BLF на абонента 104:
"F7": {
"Function": "BLF",
"Params": "Label=104,Number=104,Account=1"
}
Пришедший NOTIFY:
NOTIFY sip:100@192.168.88.128:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 192.168.88.4:5060;branch=z9hG4bK374b08af;rport
Max-Forwards: 70
From: <sip:104@192.168.88.128:5060;>;tag=as18814d12
To: <sip:100@192.168.88.128:5060;>;tag=mpBcUgFyD3cUH
...
<dialog-info entity="sip:104@192.168.88.4:5060">
...
<dialog id="199-198-118863" direction="recipient" call-id="06f44a0b5243060d" local-tag="InternalLink" remote-tag="ecssO1780303285152010075820">
<local>
<identity>sip:104@192.168.88.4</identity>
</local>
<state>early</state>
</dialog-info>
Результат перехвата:
Телефон отправит INVITE с заголовком Replaces: ...
Режим FeatureCode
Конфигурация в телефоне:
config.VoIP.Accounts.AccountX.SupplementaryServices.Pickup Mode FeatureCode
config.VoIP.Accounts.AccountX.SupplementaryServices.Pickup Code *8
Действие при перехвате:
Телефон отправляет INVITE на «Код захвата» + «номер_BLF» (например, *87104).
Пример (режим FeatureCode)
Конфигурация в телефоне:
config.VoIP.Accounts.AccountX.SupplementaryServices.Pickup Mode FeatureCode
config.VoIP.Accounts.AccountX.SupplementaryServices.Pickup Code *8
Настроен BLF на абонента 104:
"F7": {
"Function": "BLF",
"Params": "Label=104,Number=104,Account=1"
}
Пришедший NOTIFY:
NOTIFY sip:100@192.168.88.128:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 192.168.88.4:5060;branch=z9hG4bK374b08af;rport
Max-Forwards: 70
From: <sip:104@192.168.88.128:5060;>;tag=as18814d12
To: <sip:100@192.168.88.128:5060;>;tag=mpBcUgFyD3cUH
...
<dialog-info entity="sip:104@192.168.88.4:5060">
...
<dialog id="199-198-118863" direction="recipient" call-id="06f44a0b5243060d" local-tag="InternalLink" remote-tag="ecssO1780303285152010075820">
<local>
<identity>sip:104@192.168.88.4</identity>
</local>
<state>early</state>
</dialog-info>
Результат перехвата:
Телефон отправит INVITE на *8 + 104 = sip:*8104@host
Перехват через групповой BLF (Подписка на группу перехвата)
Условие: BLF настроен на сервисный код группы (например, *8).
Исходные данные примера:
На телефоне настроен аккаунт 100
На сервере настроена группа пользователей 1, в которую входят абоненты 104 и 100
На сервере настроен сервисный код для группы пользователей 1
На абонента 104 поступает вызов
С сервера приходит NOTIFY (по групповой подписке) на абонента 100
Как телефон определяет, что это группа?
При получении NOTIFY телефон сравнивает:
Хост (entity) в NOTIFY (например, sip:104@192.168.88.4)
Номер, на который оформлена подписка (например, sip:*8@host)
Если значения не совпадают, телефон считает подписку групповой.
Логика перехвата
При нажатии BLF (или кнопки «Захват» на экране со списком звонков) телефон формирует INVITE по правилу:
INVITE sip: <номер_на_который_оформлена_подписка><номер_из поля <local>/<identity>>
Пример
Подписка на группу. Настроен BLF на группу *8:
"F7": {
"Function": "BLF",
"Params": "Label=*8,Number=*8,Account=1"
}
Пришедший NOTIFY:
NOTIFY sip:100@192.168.88.128:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 192.168.88.4:5060;branch=z9hG4bK374b08af;rport
Max-Forwards: 70
From: <sip:*8@192.168.88.128:5060;>;tag=as341fc300
To: <sip:100@192.168.88.128:5060;>;tag=1aBNSeFU4S5QN
...
<?xml version="1.0"?>
...
<dialog-info entity="sip:104@192.168.88.4:5060">
...
<local>
<identity>sip:104@192.168.88.4</identity>
</local>
<state>early</state>
</dialog-info>
Перехват:
Телефон отправит INVITE на *8 + 104 = sip:*8104@host