[[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 тональный сигнал "Подключение", представляющий собой сигнал DTMF A, после чего передает в сторону конференции ответ "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 передает в групповой канал тональный сигнал "Подключение", установленный конфигурационным параметром "Сигнал подключения Tx", после чего дает оператору ответ "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 диспетчера отмечен конфигурационный параметр "Передавать "отбой" при отключении конференции"), представляющий собой символ DTMF D. Приняв из группового канала 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 }}} == Параметры конфигурации канального окончания == Пример конфигурации канального окончания DS: [[Image(ss1.jpg)]] Далее описаны параметры, специфичные для канального окончания DS. Не указанные здесь конфигурационные параметры работают так же, как и во всех прочих существующих канальных окончаниях. См. EndpointParameters. Передавать "отбой" при отключении конференции:: Параметр определяет, будет ли канальное окончание передавать в групповой канал TDM тональный сигнал "Отбой" при отключении конференции от канального окончания. Если чекбокс отмечен, при отключении конференции от канального окончания в канал TDM передается сигнал "Отбой". Этот жерим используется диспетчерским канальным окончанием для отбоя всех абонентов группового канала при отключении канала от конференции диспетчера. Значение по умолчанию - чекбокс не отмечен. Имя конференции:: Параметр устанавливает имя диспетчерской конференции, к которой подключается оператор. URI оператора:: URI телефонного аппарата абонента (оператора), работающего с данным канальным окончанием. Для диспетчерского окончания - URI диспетчерской конференции. Заданный параметром URI вызывается при получении тонального сигнала "Подключение". Сигнал включения Tx:: Параметр устанавливает сигнал "Подключение", передаваемый в канал TDM при подключении оператора к канальному окончанию DS. Парамеитру может быть назначен любой символ DTMF кроме символа D, являющегося сигналом "Отбой". == Состояния канального окончания == Idle:: Исходное состояние канального окончания. Канальное окончание свободно: способно принимать вызовы со стороны сети IP и ожидает сигнал "Подключение" со стороны канала TDM. Calling:: Абоненту (оператору) отправлен INVITE, ожидается ответ оператора. Connected:: Абонент (оператор) подключен к групповому каналу. {{{#!plantuml @startuml title Упрощенная диаграмма состояний канального окончания DS state Idle: исходное состояние state Calling: отправлен INVITE,\nожидается ответ state Connected: оператор подключен Idle --> Calling: принят сигнал\n"Подключение" Calling --> Connected: принят ответ\n(200 OK) Idle --> Connected: принят\nINVITE Calling --> Idle: принят сигнал\n"Отбой" Connected --> Idle: принят сигнал\n"Отбой" Connected --> Idle: принят\nBYE @enduml }}} == См. также == [EndpointParameters сводная таблица параметров], [wiki:EndpointFXS окончание FXS], [wiki:EndpointFXO окончание FXO]