Шаг 15. Удержания и переводы звонков

Для осуществления перевода звонков в протоколе SIP предусмотрен запрос REFER. При получении такого запроса абонентское устройство осуществляет вызов по указанному направлению. При этом сервер осуществляет передачу запроса REFER и связанных с ним ответов и смежных запросов от одного устройства другому.

Каждый звонок проходит через роль B2B на одном из серверов. Вспомним, что это один из B2B на том сайте, который принял входящий запрос INVITE от инициировавшего вызов абонента. Слегка забегая вперед стоит отметить, что абонентом может выступать как внутренний пользователь и, соответственно, его устройство, так и любой другой – внешний абонент или внутренний сервис. С точки зрения роли B2B в части обслуживания звонков тип абонента не имеет значения. Поэтому в рассматриваемых на текущем шаге кейсах и соответствующих им модельных диаграммах не упоминаются роли SG или какие-либо другие.

Рассматриваются три участника: Алиса (A), Борис (B), Варвара ©.

Удержание

Кейс: Алиса общается с Борисом. Со своего телефона она осуществляет постановку Бориса на удержание. Борис слышит мелодию ожидания. Затем Алиса возвращает Бориса в разговор. Для этого на своем телефоне она нажимает HOLD для постановки на удержание и повторный HOLD для снятия с удержания.

Во время удержания ожидающий абонент слышит мелодии ожидания, которые воспроизводит сервер.

1. Активный диалог

2. HOLD

3. Удержание

hold_01
hold_02
hold_03

4. HOLD (Unhold)

5. Активный диалог

hold_04
hold_05

Перевод на номер

Кейс: Алиса общается с Борисом. Алиса со своего телефона осуществляет перевод Бориса на номер Варвары. Для этого на своем телефоне она нажимает TRAN, набирает номер Варвары, и снова нажимает TRAN.

1. Активный диалог

2. TRAN, Номер, TRAN

3. Устройство Бориса совершает вызов

refer_num_01
refer_num_02
refer_num_03

4. Ответ Варвары

5. Устройство Алисы завершает диалог

6. Активный диалог Варвары с Борисом

refer_num_05
refer_num_06
refer_num_07

Консультационный звонок

Кейс: Алиса общается с Борисом. Алиса в ходе разговора производит звонок консультанту Варваре, разговаривает с ней, после завершения возвращается в разговор с Борисом. Для этого на своем телефоне она нажимает TRAN, набирает номер консультанта, нажимает CALL или дожидается автовызова. После завершения разговора с консультантом Варварой, разговор рвется одной из сторон, а Алиса с помощью HOLD возвращается к разговору с Борисом.

1. Активный диалог

2. TRAN

3. Номерб CALL

consult_01
consult_02
consult_03

4. Ответ Варвары

5. Активный диалог Алисы с Варварой

6. Варвара завершает

consult_04
consult_05
consult_06

7. Борис на удержании

8. HOLD

9. Активный диалог Алисы с Борисом

consult_07
consult_08
consult_09

Перевод с подменой

Кейс: Алиса общается с Борисом. Алиса в ходе разговора производит звонок Варваре, после чего соединяет Бориса и Варвару между собой, а сама освобождается. Для этого на своем телефоне она нажимает TRAN, набирает номер Варвары, нажимает CALL или дожидается автовызова. После ответа Варвары и, возможно, подтверждения Варварой готовности соединиться с Борисом Алиса нажимает TRAN.

1. Активный диалог

2. TRAN

3. Номер, Call

refer_replace_01
refer_replace_02
refer_replace_03

4. Ответ Варвары

5. Активный диалог Алисы с Варварой

6. TRAN

refer_replace_04
refer_replace_05
refer_replace_06

7. Устройство Бориса производит вызов

8. Устройство Варвары подменяет звонок

9. Устройство Алисы завершает диалог

refer_replace_07
refer_replace_08
refer_replace_09

10. Активный диалог Бориса с Варварой

refer_replace_10

Поскольку каждый B2B-диалог представлен двумя SIP-диалогами – плечо А и плечо Б, то важно обеспечить подстановку правильного плеча при подмене. Без этого устройство Варвары не сумеет обнаружить подменяемый диалог, и подмены не произойдет – вместо этого устройство либо откажет в вызове, либо произведет прием второго вызова. Проблема существует постольку, поскольку устройство Алисы знает о диалоге с Варварой только свое плечо А, а его идентификаторы отличаются от плеча Б, то есть от того, что знает об этом же диалоге устройство Варвары. Устройство Алисы отправляет запрос REFER с подменой, указывая в качестве подменяемого параметры своего плеча А диалога с Варварой, а устройству Варвары для успешной подмены требуются параметры плеча Б того же диалога.

Эту проблему роль B2B решает самостоятельно путем прямой коммуникации между её экземплярами (безотносительно сайтов, на которых они располагаются). Либо в момент трансляции запроса REFER+replaces, либо в момент обработки INVITE+Replaces, экземпляр роли B2B производит прямой запрос к смежному экземпляру роли B2B, где обслуживается целевой диалог, и с помощью него производит модификацию идентификаторов плеча.

Во время REFER+replaces Во время INVITE+Replaces
replaces_1
replaces_2

Целевой B2B (в примерах B2B-2) обнаруживается непосредственно. Каждый экземпляр B2B проводя через себя вызов в каждое из плеч размещает "говорящие" идентификаторы. Для плеча А генерируется To-Tag, а для всех плеч Б генерируется From-Tag и Call-ID. В каждом из сгенерированных значений содержатся данные, по которым с помощью конфигурации можно установить адрес экземпляра B2B, произведшего генерацию. Таким образом, для замены идентификационных значений одного плеча на значения другого плеча достаточно иметь оба тега: From-Tag и To-Tag, по ним выяснить обслуживающий экземпляр B2B, и с помощью него произвести замену. Так функция и работает. В запросе REFER в атрибуте Replaces содержатся Call-ID, From-Tag, To-Tag. А в запросе INVITE в заголовках Replaces, Refer-To содержится те же идентификаторы плеча, и возможно признак уже совершенной замены.

Отслеживание успешности перевода

Кейс: Алиса общается с Борисом. Алиса со своего телефона осуществляет перевод Бориса на номер Варвары. Варвара отклоняет вызов, Борис возвращается в соединение с Алисой. Для этого на своем телефоне она нажимает TRAN, набирает номер Варвары, и снова нажимает TRAN. При этом Алиса освобождается, но её телефон подписывается на события операции перевода, отправляемые телефоном Бориса. При получении события о неудаче телефон Алисы снова звенит и Алиса, отвечая на вызов, соединяется с Борисом.

Обеспечение такого поведения устройств определяется протоколом SIP и его расширениями. Устройство, с которого инициирован перевод, осуществляет подписку, а устройство, производящее этот перевод, уведомляет подписчика о состоянии перенаправленного вызова – транслирует ему полученные от третьей стороны ответы на отправленный им INVITE. Это взаимодействие происходит в рамках диалога, перевод которого осуществляется.

Таким образом, одно устройство в рамках этого диалога отправляет оппоненту запрос REFER, а тот отправляет в обратную сторону запросы NOTIFY, транслируя все получаемые ответы. Только после получения NOTIFY с транслированным ответом 200 OK, устройство инициатора перевода прекращает переводимый диалог. Соответственно, получая NOTIFY с финальным неудачным ответом, устройство инициатора снова соединяется в переводившемся диалоге. Если речь идет об устройстве (телефоне), то всё время после отправки им запроса REFER он находится в пассивном режиме. Если трубка на телефоне лежит, то телефон начинает вызов своего пользователя и только после этого соединяется в переводившемся диалоге.

Роль B2B транслирует запросы REFER и NOTIFY и ответы на них.

Перевод между сайтами

Кейс: Устройства Алисы, Бориса и Варвары подключены к разным сайтам. Алиса вызывает Бориса, Борис делает консультационный вызов Варвары и производит перевод Алисы на Варвару с подменой.

Что происходит с медиа-серверами (роли MGC, MG, BGMG)? В соответствии с разобранным на шаге 11 каждый экземпляр роли B2B подключает к каждому обслуживаемому им диалогу медиа-сервер MG посредством медиа-контроллера MGC. Выбор MGC и MG происходит в пределах того же сайта, где и экземпляр B2B.

multisite_refer

Схема показывает, что в любом B2B-диалоге вне зависимости от того, * какие типы абонентов в нем участвуют – внутренние пользователи, внешние абоненты или внутренние сервисы, * каким доменам принадлежат абоненты, * какая конфигурация сайтов настроена, * каким образом создан диалог – путем прямого вызова, перевода на номер или перевода с подменой, обслуживание диалога производится на SIP-сервере (роль B2B) и медиа-сервере (роль MG), находящимся на одном из сайтов, к которым подключены участники этого диалога.

Таким образом при условии неразличимости медиа-серверов внутри сайта, трафик всегда передается по кратчайшему возможному маршруту. SIP-сигнализация передается через 3 сервера, RTP-трафик – через 1 медиа-сервер при условии видимости сетей и через 2 или 3, если требуется трансляция медиа-трафика из одной подсети в другую на границе (шага 14). При наличии сайтов в Москве, Красноярске и Владивостоке, если абонент из Красноярска звонит в Москву – обслуживают серверы Красноярска, консультационный звонок из Москвы во Владивосток обслуживается серверами Москвы, переведенный звонок из Красноярска во Владивосток будет обслуживаться серверами Красноярска. А в случае обратного перевода абонента из Владивостока на абонента Красноярска – их диалог будет обслуживаться серверами Владивостока.

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

HOLD

!

REFER

!

Удержание

!

Перевод на номер

!

Перевод с подменой

!

Говорящий идентификатор

!