[[span(style=color: #FF0000, Статья находится в стадии создания! Представленная информация может быть неполной и/или неточной.)]]
[[PageOutline(2-5,Содержание:)]]
= Канальное окончание DS (диспетчерская конференция) =
Канальное окончание DS предназначено для подключения абонентов (операторов), использующих телефонные аппараты с сигнализацией SIP, к диспетчерской конференции, используя при этом для передачи речи групповой канал TDM вместо сети IP. Данная схема подключения может применяться в случаях, когда пропускной способности сети IP достаточно для подключения к конференции одного абонента (оператора), но недостаточно для пропуска медиапотоков нескольких абонентов (операторов) к серверу диспетчерской связи.
[[DiaVisView(diagram.dia)]]
В данной схеме подключения вместо того чтобы непосредственно регистрировать на сервере телефонные аппараты операторов, на сервере регистрируются канальные окончания DS. Аппарат же оператора регистрируется на местной плате VE-01.
== Описание работы канального окончания ==
Одно канальное окончание DS обслуживает подключение одного абонента (оператора) к групповому каналу диспетчерской связи. При подключении абонента к групповому каналу TDM канальное окончание DS также создает подключение абонента к диспетчерской конференции по протоколу SIP, при этом медиапоток между канальным окончанием и конференцией отсутствует (неактивен благодаря указанию в сообщениях SDP атрибута a=inactive и адреса IP 0.0.0.0). Таким образом, сервер диспетчерской конференции уведомляется о подключении абонента к конференции, но медиапоток RTP этого абонента отсутствует. Аналогично, при отключении абонента от группового канала сессия SIP завершается. Групповой канал в данной схеме подключается к диспетчерской конференции в одной точке.
=== Вызов диспетчером всех абонентов группового канала ===
Вызов всех абонентом группового канала в конференцию выполняется путем подключения к конференции "диспетчерского" канального окончания DS. Получив INVITE, канальное окончание DS передает в групповой канал TDM тональный сигнал "Подключение", после чего передает в сторону конференции ответ "200 OK".
Канальное окончание DS оператора, приняв из группового канала сигнал "Подключение", передает INVITE телефонному аппарату оператора. При ответе оператора канальному окончанию DS приходит ответ "200 OK", при получении которого активируется медиапоток между аппаратом оператора и групповым каналом. После этого канальное окончание DS передает INVITE диспетчерской конференции (с неактивным медиапотоком), в результате чего диспетчер может видеть факт подключения оператора к конференции.
Аналогичным образом устанавливают соединения все остальные канальные окончания DS операторов, подключенные к тому же групповому каналу TDM.
{{{#!PlantUml
@startuml
title Вызов диспетчером всех абонентов группового канала
skinparam ParticipantPadding 40
skinparam sequenceMessageAlign center
participant "Сервер\nконференции\n'0'" as A
participant "Окончание DS\nдиспетчера\n'ds'" as B
participant "Окончание DS\nоператора\n'201'" as C
participant "Абонент\n(оператор)\n'op1'" as D
A --> B: INVITE '0' --> 'ds'
B --> A: 100 Trying
B -> C: сигнал "Подключение"
B --> A: 200 OK
A <-[#0000ff]-> B: медиапоток
A --> B: ACK
C --> D: INVITE '0' --> 'op1'
D --> C: 100 Trying
D --> C: 180 Ringing
note right of D: оператор слышит звонок
...
note right of D: оператор ответил на вызов
D --> C: 200 OK
D <-[#0000ff]-> C: медиапоток
C --> D: ACK
C --> A: INVITE '0' <-- '201' (inactive)
A --> C: 100 Trying
A --> C: 200 OK
C --> A: ACK
note over A, D: оператор ведет разговор с диспетчером
@enduml
}}}
=== Вызов абонентом (оператором) конференции ===
Когда оператор хочет подключиться к диспетчерской конференции, он набирает на телефонном аппарате номер конференции (в нашем примере - '0'). Так как в местной плате VE-01/VE-02 нет абонента с таким URI, на первом проходе поиска данный вызов канальными окончаниями не принимается. Во время второго прохода поиска вызов принимает канальное окончание DS при совпадении двух условий:
- вызываемый номер совпадает с номером диспетчерской конференции, заданным в настройках окончания;
- URI вызывающего совпадает с URI оператора, заданным в настройках канального окончания.
Приняв вызов от оператора, канальное окончание DS передает в групповой канал тональный сигнал "Подключение", после чего дает оператору ответ "200 OK" и активирует медиапоток между абонентом и групповым каналом. Затем канальное окончание DS устанавливает соединение с конференцией без медиапотока, как и при вызове диспетчером всех операторов (см. выше).
Приняв из группового канала сигнал "Подключение", канальное окончание DS диспетчера выполняет вызов конференции диспетчера.
Пример сценария вызова оператором диспетчерской конференции:
{{{#!PlantUml
@startuml
title Вызов оператором диспетчерской конференции
skinparam ParticipantPadding 40
skinparam sequenceMessageAlign center
participant "Сервер\nконференции\n'0'" as A
participant "Окончание DS\nдиспетчера\n'ds'" as B
participant "Окончание DS\nоператора\n'201'" as C
participant "Абонент\n(оператор)\n'op1'" as D
D --> C: INVITE '0' <-- 'op1'
C --> D: 100 Trying
C -> B: сигнал "Подключение"
C --> D: 200 OK
D <-[#0000ff]-> C: медиапоток
D --> C: ACK
B --> A: INVITE '0' <-- 'ds'
A --> B: 100 Trying
A --> B: 200 OK
A <-[#0000ff]-> B: медиапоток
B --> A: ACK
C --> A: INVITE '0' <-- '201' (inactive)
A --> C: 100 Trying
A --> C: 200 OK
C --> A: ACK
note over A, D: оператор ведет разговор с диспетчером
@enduml
}}}
=== Индивидуальный вызов диспетчером абонента (оператора) ===
При получении канальным окончанием DS оператора прямого вызова от диспетчерской конференции канальное окончание выполняет переадресацию вызова (call forward) на URI телефонного аппарата оператора, передавая ответ "302 Moved Temporarily". Получив ответ 302, сервер конференции выполняет новый вызов указанного в ответе URI и устанавливает соединение с аппаратом оператора:
{{{#!PlantUml
@startuml
title Вызов диспетчером одного оператора
skinparam ParticipantPadding 80
skinparam sequenceMessageAlign center
participant "Сервер\nконференции\n'0'" as A
participant "Окончание DS\nоператора\n'201'" as C
participant "Абонент\n(оператор)\n'op1'" as D
A --> C: INVITE '0' --> '201'
C --> A: 100 Trying
C --> A: 302 Moved Temporarily (op1)
A --> C: ACK
A --> D: INVITE '0' --> 'op1'
D --> A: 100 Trying
D --> A: 180 Ringing
note right of D: оператор слышит звонок
...
note right of D: оператор ответил на вызов
D --> A: 200 OK
D <-[#0000ff]-> A: медиапоток
A --> D: ACK
note over A, D: оператор ведет разговор с диспетчером
@enduml
}}}
=== Отбой диспетчером группового канала ===
При отбое диспетчером всех абонентов группового канала сервер конференции направляет сообщение BYE канальному окончанию DS диспетчера. Получив BYE, канальное окончание деактивирует медиапоток между конференцией и групповым каналом TDM и передает в групповой канал тональный сигнал "Отбой" (для этого в настройках канального окончания DS диспетчера отмечен конфигурационный параметр "Передавать "отбой" при отключении конференции").
Приняв из группового канала TDM тональный сигнал "Отбой", канальное окончание оператора, подключенного к групповому каналу деактивирует медиапоток между телефонным аппаратом оператора и групповым каналом и отправляет два сообщения BYE: телефонному аппарату оператора и конференции. В результате диспетчер с помощью диспетчерского пульта может наблюдать, что оператор исчез из списка участников конференции (отключился от конференции). Аналогичным образом от конференции отключаются все операторы, подключенные к этому групповому каналу.
Пример сценария отбоя диспетчером группового канала:
{{{#!PlantUml
@startuml
title Отбой диспетчером группового канала
skinparam ParticipantPadding 40
skinparam sequenceMessageAlign center
participant "Сервер\nконференции\n'0'" as A
participant "Окончание DS\nдиспетчера\n'ds'" as B
participant "Окончание DS\nоператора\n'201'" as C
participant "Абонент\n(оператор)\n'op1'" as D
A --> B: BYE
B --> A: 200 OK
B -> C: сигнал "Отбой"
C --> D: BYE
C --> A: BYE
D --> C: 200 OK
A --> C: 200 OK
@enduml
}}}
=== Отбой оператора от группового канала ===
При отбое по инициативе оператора (когда оператор, подключенный к групповому каналу, кладет трубку) телефонный аппарат оператора передает канальному окончанию DS сообщение BYE. Получив это сообщение, канальное окончание DS деактивирует медиапоток между аппаратом оператора и групповым каналом TDM и передает сообщение BYE серверу конференции. Таким образом, диспетчер может видеть, что оператор отключился от конференции. Так как тональный сигнал "Отбой" в данном случае в групповой канал не передается (конфигурационный параметр "Передавать "отбой" при отключении конференции" канальных окончаний операторов не отмечен), остальные подключенные к конференции операторы продолжают разговор.
Пример сценария отбоя по инициативе оператора:
{{{#!PlantUml
@startuml
title Отбой по инициативе оператора
skinparam ParticipantPadding 60
skinparam sequenceMessageAlign center
participant "Сервер\nконференции\n'0'" as A
participant "Окончание DS\nоператора\n'201'" as C
participant "Абонент\n(оператор)\n'op1'" as D
D --> C: BYE
C --> D: 200 OK
C --> A: BYE
A --> C: 200 OK
@enduml
}}}
=== Отбой диспетчером конкретного оператора ===
При отключении от конференции одного конкретного оператора по инициативе диспетчера сервер конференции передает сообщение BYE канальному окончанию DS оператора. Получив сообщение BYE, канальное окончание DS оператора передает серверу конференции ответ "200 OK", после чего передает сообщение BYE телефонному аппарату оператора и деактивирует медиапоток между аппаратом оператора и групповым каналом.
Пример сценария отбоя оператора по инициативе диспетчера:
{{{#!PlantUml
@startuml
title Отбой оператора по инициативе диспетчера
skinparam ParticipantPadding 60
skinparam sequenceMessageAlign center
participant "Сервер\nконференции\n'0'" as A
participant "Окончание DS\nоператора\n'201'" as C
participant "Абонент\n(оператор)\n'op1'" as D
A --> C: BYE
C --> A: 200 OK
C --> D: BYE
D --> C: 200 OK
@enduml
}}}
== Параметры конфигурации канального окончания ==
== Состояния канального окончания ==
== См. также ==
[EndpointParameters сводная таблица параметров], [wiki:EndpointFXS окончание FXS], [wiki:EndpointFXO окончание FXO]