= Канальное окончание FXO = Канальное окончание FXO предназначено для работы с аналоговыми телефонными линиями, приходящими от портов FXS АТС или другого аналогичного оборудования. Основные возможности канального окончания FXO: * прием сигнала вызова, определение номера вызывающего, передача INVITE на заранее заданный URI; * исходящее занятие линии, определение сигнала "Готовность", передача номера; * отбой по сигналу "Занято". == Описание работы канального окончания == Канальное окончание FXO использует для линейной сигнализации СУВ A. Принимаемый из канала TDM СУВ A интерпретируется как состояние сигнала вызова: 0 - есть сигнал вызова, 1 - нет сигнала вызова. Передаваемый окончанием в канал TDM СУВ A управляет состоянием абонентского шлейфа: 0 - шлейф замкнут, 1 - шлейф разомкнут. === Входящий вызов (вызов со стороны TDM) === При появлении сигнала вызова в телефонной линии канальное окончание переходит из исходного состояния (`Idle`) в состояние `Ringing`. В состоянии `Ringing` окончание FXO производит подсчет посылок вызова. Как только число полученных посылок вызова достигает значения, установленного конфигурационным параметром "Число звонков", выполняется вызов URI, заданного конфигурационным параметром "Вызывать URI", и канальное окончание переходит в состояние `Calling`. Окончание FXO принимает сообщения Caller ID, которые могут приходить из канала TDM как перед первой посылкой вызова, так и между посылками вызова. Поддерживается модуляция V.23. Поддерживается формат сообщений SDMF и MDMF. Если посылка Caller ID была принята, то при отправке INVITE в поле `From:` Display Name и username будут установлены в значения имени и номера вызывающего абонента соответственно. Если имя и/или номер вызывающего абонента определены не были, будут использованы имя из конфигурационного параметра "Реальное имя" и username из конфигурационного параметра "SIP URI". В канальном окончании FXO имеется возможность замены номера, полученного в посылке Caller ID, с помощью регулярного выражения. Данная функция позволяет исправить ситуацию, когда от удаленной стороны приходит номер вызывающего абонента не в том формате, в каком номер требуется передать в сеть IP. Например, номер вызывающего в посылке Caller ID не содержит кода страны. Значение параметра задается в виде строки формата //, где - регулярное выражение, на совпадение с которым проверяется полученный номер, - строка, которой заменяется номер в случае совпадения с регулярным выражением. В замене могут использоваться группы из регулярного выражения, которые подставляются с помощью комбинаций \1, \2 и т.д. Для приведенного выше случая приема посылки АОН можно установить параметру "Преобразование АОН" значение /^(.*)$/7342\1, в результате канальное окончание будет добавлять к принятому семизначному номеру префикс "7342". В состояниях `Ringing` и `Calling` окончание FXO контролирует паузы между посылками вызова: в момент окончания каждой посылки вызова канальное окончание запускает таймер. Если в течение времени, заданного конфигурационным параметром "Таймаут звонка", не начинается новая посылка вызова, канальное окончание переходит в исходное состояние. Если к этому времени уже был послан вызов (INVITE) в сторону сети IP (канальное окончание в состоянии `Calling`), вызов снимается (передается сообщение CANCEL). ''Примечание: если значением конфигурационного параметра "Вызывать URI" является пустая строка, вызов в направлении сети IP не передается, и конфигурационный параметр "Число звонков" игнорируется. В этом случае канальное окончание будет оставаться в состоянии `Ringing` до тех пор, пока не прекратятся посылки вызова (пока не будет обнаружен "Таймаут звонка").'' При получении успешного ответа на вызов ("200 OK") со стороны сети IP канальное окончание FXO замыкает абонентский шлейф и переходит в состояние `Connected`. Если отправленный в направлении сети IP вызов отклонен (на INVITE получен ответ с кодом 4xx, 5xx или 6xx), канальное окончание FXO выполняет сброс вызова путем кратковременного (500 мс) замыкания абонентского шлейфа, после чего окончание FXO переходит в исходное состояние (`Idle`). === Исходящий вызов (вызов со стороны IP) === Возможны два сценария исходящего занятия абонентской линии канальным окончанием FXO - занятие без набора номера и занятие с набором номера. Если канальное окончание FXO, находящееся в исходном состоянии (`Idle`), принимает вызов (INVITE), и вызываемый URI совпадает с URI канального окончания, выполняется занятие линии без набора номера: канальное окончание замыкает абонентский шлейф, передает ответ "200 OK" и переходит в состояние `Connected`. Если вызываемый URI не совпадает с URI канального окончания (вызов принят на втором проходе поиска совпадением имени с регулярным выражением, установленным конфигурационным параметром "Рег. выражение вызова"), канальное окончание замыкает абонентский шлейф, запускает таймер ожидания сигнала "Готовность" на время, заданное конфигурационный параметром "Таймаут гудка" и переходит в состояние `Connected`. Если конфигурационный параметр "Игнорировать наличие гудка" включен (установлена отметка чекбокса), то после окончания времени запущенного таймера канальное окончание переходит в состояние `Dialing` и начинает передачу номера. Если конфигурационный параметр "Игнорировать наличие гудка" выключен (отметка чекбокса не установлена), канальное окончание ожидает сигнала "Готовность" (непрерывный гудок). Если до истечения таймера сигнал "Готовность" в абонентской линии детектирован, канальное окончание переходит в состояние `Dialing` и начинает передачу номера вызываемого абонента. Если в течение времени, установленного конфигурационным параметром "Таймаут гудка", сигнал "Готовность" не обнаружен, канальное окончание размыкает абонентский шлейф, передает вызывающему ответ "603 Decline" и переходит в состояние `NoDialtone` (см. раздел "Автоматическая блокировка при неисправности линии" ниже). Передаваемый в абонентскую линию номер вызываемого абонента формируется из имени пользователя (username) вызываемого URI по следующим правилам: * передача номера выполняется в порядке следования символов слева направо; * если конфигурационный параметр "Импульсный набор" не включен, символы '0'-'9', '*', '#', 'a'-'d', 'A'-'D' передаются в канал TDM соответствующими посылками DTMF; * если конфигурационный параметр "Импульсный набор" включен, символы '0'-'9' передаются импульсным способом (серией импульсов размыкания абонентского шлейфа), после чего формируется межсерийная пауза; * если конфигурационный параметр "Префикс межгорода" не пуст, и начало вызываемого username совпадает с его значением, после передачи фрагмента номера, совпадающего с префиксом межгорода, формируется пауза, длительность которой устанавливается конфигурационным параметром "Пауза межгорода"; * символ 'p' формирует дополнительную паузу, длительность которой устанавливается конфигурационным параметром "Пауза межгорода"; * остальные символы username игнорируются. После окончания набора номера вызывающему передается ответ "200 OK". === Отбой === Установленное соединение может быть разорвано как со стороны сети IP, так и со стороны канала TDM. В случае отбоя со стороны сети IP (BYE) канальное окончание FXO размыкает абонентской шлейф и переходит в исходное состояние (`Idle`). В процессе разговора канальное окончание FXO анализирует канал TDM на наличие в нем сигнала "Занято". Если значение конфигурационного параметра "Отбой после X циклов "Занято" больше нуля, то при обнаружении в канале сигнала "Занято" выполняется подсчет числа циклов (гудков) сигнала. При достижении числа циклов, установленного конфигурационным параметром, и если интервалы между циклами не превышают 1200 мс, выполняется отбой (в сторону сети IP посылается BYE, размыкается абонентский шлейф), и канальное окончание переходит в исходное состояние (`Idle`). === Автоматическая блокировка при неисправности линии === В случаях, когда имеется несколько канальных окончаний FXO, транслирующих вызовы со стороны сети IP в телефонную сеть, в силу того, что поиск свободного канального окончания выполняется в порядке возрастания номера канала, канальное окончание FXO, расположенное выше (с меньшим номером канала) всегда занимается первым. Если абонентская линия, обслуживаемая этим канальным окончанием, становится неисправной (например из-за обрыва линии), при поступлении вызова со стороны сети IP канальное окончание не обнаружит сигнала готовности, в результате чего вызов будет завершен ответом "603 Decline". Если далее канальное окончание перейдет в исходное состояние, при поступлении нового вызова ситуация повторится. Возникнет проблема: при наличии канальных окончаний FXO с исправными линиями все вызовы завершаются неуспешно из-за неисправности одной абонентской линии. Для решения этой проблемы при отсутствии сигнала готовности в абонентской линии канальное окончание FXO считает абонентскую линию неисправной и переходит в состояние `NoDialtone`. В этом состоянии канальное окончание не принимает вызовы со стороны сети IP, тем самым давая возможность обслужить вызов другим канальным окончаниям. Для контроля состояния линии периодически (раз в минуту) канальное окончание FXO, находящееся в состоянии `NoDialtone`, замыкает абонентскую линию и переходит в состояние `TestLine`. В состоянии `TestLine` канальное окончание FXO в течение времени, определяемого конфигурационным параметром "Таймаут гудка", ожидает сигнал готовности в абонентской линии. Если сигнал готовности обнаружен, канальное окончание считает линию исправной и переходит в исходное состояние (`Idle`), возобновляя обслуживание вызовов. Если сигнал готовности не обнаружен, канальное окончание возвращается в состояние `NoDialtone`. Если канальное окончание FXO, находящееся в состоянии `NoDialtone`, обнаруживает в абонентской линии сигнал вызова (СУВ A переходит в значение 0), канальное окончание также считает линию исправной, переходит в состояние `Ringing` и обслуживает вызов обычным образом (см. раздел "Входящий вызов" выше). ''Примечание: при установке конфигурационного параметра "Игнорировать наличие гудка" канальное окончание FXO всегда считает абонентскую линию исправной и никогда не переходит в состояние `NoDialtone`. == Параметры конфигурации канального окончания == Пример конфигурации канального окончания FXO: [[Image(ss1.jpg)]] Далее описаны параметры, специфичные для канального окончания FXO. Не указанные здесь конфигурационные параметры работают так же, как и во всех прочих существующих канальных окончаниях. См. EndpointParameters. Таймаут звонка:: Параметр определяет максимальную длительность пауз между посылками вызова в абонентской линии в миллисекундах. Если при нахождении канального окончания в состояниях `Ringing` или `Calling` сигнал вызова отсутствует дольше заданного параметром времени, канальное окончание принимает решение о прекращении вызова (переходит в исходное состояние). Допустимые значения - от 1000 до 60000 мс. Значение по умолчанию - 5000 мс. Таймаут гудка:: Если параметр "Игнорировать наличие гудка" не включен, "Таймаут гудка" определяет время, в течение которого ожидается сигнал "Готовность" после исходящего занятия линии. Если параметр "Игнорировать наличие гудка" включен, "Таймаут гудка" устанавливает время между замыканием абонентского шлейфа и началом набора номера. Допустимые значения - от 1 до 60000 мс. Значение по умолчанию - 8000 мс. Игнорировать наличие гудка:: Параметр определяет, будет ли ожидаться сигнал "Готовность" при исходящем занятии абонентской линии. Если чекбокс не отмечен, после занятия линии ожидается сигнал "Готовность", и при его отсутствии в течение времени, установленного параметром "Таймаут гудка", вызывающему возвращается ответ "603 Decline", а канальное окончание переходит в состояние `NoDialtone`. Если чекбокс отмечен, после замыкания абонентского шлейфа независимо от наличия или отсутствия сигнала "Готовность" выдерживается пауза, определяемая параметром "Таймаут гудка", после которой начинается набор номера. Значение по умолчанию - чекбокс не отмечен. Импульсный набор:: Параметр определяет способ передачи номера вызываемого абонента в абонентскую линию. Если чекбокс не отмечен, номер передается тональными сигналами (DTMF). Если чекбокс отмечен, номер передается декадными импульсами. Значение по умолчанию - чекбокс не отмечен (номер передается посылками DTMF). Префикс межгорода:: Параметр определяет префикс, на совпадение с которым проверяется начало вызываемого номера при вызове в сторону канала TDM. Если вызываемый номер совпадает с комбинацией, установленной данным параметром, то в процессе передачи номера в канал после набора префикса будет сделана дополнительная пауза, длительность которой устанавливается параметром "Пауза межгорода". Если значением параметра является пустая строка, дополнительная пауза не выполняется. Обратите внимание, что если в конфигурационном параметре "Регулярное выражение вызова" используется регулярное выражение с заменой, канальное окончание FXO сначала выполняет замену, заданную регулярным выражением вызова, а затем результат замены проверяется на наличие префикса межгорода. Значение по умолчанию - "8". Пауза межгорода:: Параметр устанавливает длительность дополнительной паузы в мс, добавляемой при наборе номера после префикса межгорода (см. параметр "Префикс межгорода"). Допустимые значения - от 1 до 9999 мс. Значение по умолчанию - 2000 мс. Число звонков:: Параметр определяет, сколько посылок вызова должно получить из абонентской лин6ии канальное окончание FXO прежде чем будет отправлен вызов в сеть IP. Допустимые значения - от 1 до 100. Обратите внимание, что посылка Caller-ID, как правило, передается между первой и второй посылками вызова, поэтому установка данному параметру значения 1 может привести к тому, что номер вызывающего абонента не будет определяться. Значение по умолчанию - 2. Преобразование Caller-ID:: Параметр определяет замену номера вызывающего абонента, полученного в посылке Callet-ID. Значение параметра задается в виде строки формата `//`, где - регулярное выражение, на совпадение с которым проверяется полученный номер, - строка, которой заменяется номер в случае совпадения с регулярным выражением. В замене могут использоваться группы из регулярного выражения, которые подставляются с помощью комбинаций \1, \2 и т.д. Например при установке значения параметра `/^(2.*)$/7342\1` к номерам вызывающих абонентов, начинающимся с цифры 2, будет добавляться префикс "7342". Если значением параметра является пустая строка, функция преобразования Celler-ID отключена. Значение по умолчанию - пустая строка. Отбой после "X" циклов "Занято":: Параметр устанавливает длительность сигнала "занято", выраженная в циклах "гудок-пауза", после принятия которого канальное окончание разрывает текущее соединение. Допустимые значения - от 0 до 9. Значение 0 отключает отбой соединения по приему сигнала "Занято". Обратите внимание, что при уменьшении значения параметра увеличивается вероятность ложных положительных решений, когда сигнал разговора ошибочно принимается за сигнал "Занято", что приводит к обрыву соединения. С другой стороны, слишком большие значения могут приводить к ложным отрицательным результатам, когда сигнал "Занято" не детектируется (или детектируется очень долго) из-за спорадических помех и/или искажений сигнала в канале, что приводит к непроизводительному занятию линии. Значение по умолчанию - 3. Вызывать URI:: Параметр определяет URI, которому направляется INVITE при получении входящего вызова из канала TDM. Значение параметра может быть задано с указанием либо имени пользователя и домена (например `john@192.168.5.24`), либо только имени пользователя (например `john`). В последнем случае в качестве домена при формировании вызываемого URI будет использован домен из конфигурационного параметра "SIP URI" канального окончания. Если значением параметра является пустая строка, при входящем вызове со стороны канала TDM вызов в направлении сети IP не передается, канальное окончание остается в состоянии `Ringing` до прекращения посылок вызова в абонентской линии. Значение по умолчанию - пустая строка. == Состояния канального окончания == Далее описаны состояния, в которых может находиться канальное окончание FXO, и их описание. Idle:: Исходное состояние канального окончания. Канальное окончание свободно: способно принимать вызовы со стороны сети IP и ожидает сигнал вызова со стороны канала TDM. Ringing:: Принят сигнал вызова со стороны канала TDM, но вызов в направлении сети IP еще не отправлен. Dialing:: Выполняется передача номера вызываемого абонента в абонентскую линию. Calling:: Отправлен вызов (INVITE) в сторону сети IP, ожидается ответ. Connected:: Соединение установлено. Drop Line:: Производится сброс входящего со стороны канала TDM вызова кратковременным замыканием абонентского шлейфа. Pause:: Выполняется пауза в процессе передачи номера в канал TDM (в результате обнаружения префикса межгорода или символа 'p' в набираемом номере). !NoDialtone:: Неисправность абонентской линии (отсутствует сигнал готовности). Канальное окончание не принимает вызовы со стороны сети IP. Периодически (раз в минуту) выполняется проверка линии (см. состояние `TestLine`). !TestLine:: Выполняется замыкание шлейфа для проверки готовности линии. Если в линии детектируется сигнал готовности, канальное окончание переходит в исходное состояние (`Idle`). Если сигнала готовности в линии нет, канальное окончание возвращается в состояние `NoDialtone`. {{{#!plantuml @startuml title Упрощенная диаграмма состояний канального окончания FXO sprite $aService jar:archimate/application-service skinparam stateBackgroundColor<> #ddffdd skinparam legendBackgroundColor #666666 skinparam legendFontColor #ffffff state Idle: исходное состояние state Ringing: подсчет числа\nпосылок вызова state Dialing <>: передача номера\nвызываемого абонента state Calling: отправлен INVITE,\nожидается ответ state Connected <>: ожидание ответа, разговор state "Drop Line" as Drop_Line <>: сброс вызова state Pause <>: пауза в наборе номера state NoDialtone: неисправность линии state TestLine <>: проверка линии Idle --> Ringing: принят сигнал\nвызова Ringing --> Calling: принято заданное\nчисло посылок вызова Ringing --> Idle: прекратились\nпосылки вызова Calling --> Connected: принято "200 OK" Calling --> Drop_Line: принят сигнал\n"Занято" Drop_Line --> Idle: 500 мс Connected --> Idle: принят BYE Idle --> Dialing: принят INVITE Dialing --> Pause: передан префикс межгорода\nили символ 'p' в номере Pause --> Dialing: 2 сек. Dialing --> Connected: номер передан Dialing --> Idle: принят BYE Connected --> NoDialtone: нет сигнала\nготовности NoDialtone --> TestLine: 60 сек. TestLine --> NoDialtone: нет сигнала\nготовности TestLine --> Idle: есть сигнал\nготовности legend bottom right шлейф разомкнут шлейф замкнут endlegend @enduml }}} == См. также == [EndpointParameters сводная таблица параметров], [wiki:EndpointFXS окончание FXS], [wiki:EndpointАДАСЭ окончание АДАСЭ].