Архив метки: dialplan

Cisco 7940: Файл диалплана dialplan.xml

Поскольку логику обработки вызовов проще организовать на ip-pbx, файл dialplan.xml является необязательным, но может внести некоторые полезные дополнительные функции, такие как автоматический набор и вторичный тоновый сигнал.

Файл dialplan.xml имеет следующую стркутуру:

где:

pattern может содержать: . (точка) для замены любого символа, * (звездочка) для замены одного или более символов, , (запятая) для генерации вторичного сигнала.
sec – время в секундах, после которого начинается набор.
type – может быть IP или Phone. Тэг, добавляемый к номеру, регистронезависим.
xxx – номер, который будет набираться вместо введенного пользователем при совпадении с pattern.
route – адрес прокси-сервера SIP, на который перенаправляется звонок, значение может быть default, emergency или имя прокси-сервера.
tone – если не задан, используется вторичный гудок по умолчанию, если стоит запятая и затем имя гудка, то проигрывает этот звук; без запятой гудок игнорируется.

Также можно указать решетку (#) и звездочку (*) как набираемые символы. По умолчанию # означает «набрать сейчас», не дожидаясь совпадения с шаблоном из номерного плана. * по умолчанию означает * или . в шаблоне (wildcard-символ).

В качестве вторичного гудка можно использовать следующие значения (после запятой): Bellcore-Alerting, Bellcore-dr5, Bellcore-Reorder, Bellcore-Busy, Bellcore-dr6, Bellcore-Stutter, Bellcore-BusyVerify, Bellcore-Hold, CallWaiting-2, Bellcore-CallWaiting, Bellcore-Inside, CallWaiting-3, Bellcore-Confirmation, Bellcore-None, CallWaiting-4, Bellcore-dr1, Bellcore-Outside (default), Cisco-BeepBonk, Bellcore-dr2, Bellcore-Permanent, Cisco-Zip, Bellcore-dr3, Bellcore-Reminder, Cisco-ZipZip, Bellcore-dr4.

К каждому правилу можно добавить <!— комментарий —> в конце каждой строки.

TIMEOUT=»0″ при совпадении паттерна, указывает сразу же отправить вызов на обработку — так реализуется вышеупомянутый автоматический набор.

<TEMPLATE MATCH=»1..» TIMEOUT=»0″ /> <!— Local Extensions —>

Например, набираем номер 110, подпадаем под первое правило и сразу идет вызов без дополнительных действий с нашей стороны, не нужно нажимать Dial или #.

Для звонков в другие страны будем использовать правило с паттерном 9,00* — пользователь поднимает трубку, слышит длинный гудок, набирает 9 — слышыт другой длинный  гудок (вторичный тоновый сигнал, это нам дает запятая в паттерне), затем номер, начинающийся с двух нулей (в Украине это код выхода на международную линию). Таймаут здесь уже не ставим 0, поскольку не указано точное колличество цифер, которые будут набраны.

<TEMPLATE MATCH=»9,00*» TIMEOUT=»10″ />

Номер в канал передается польностью — вместе в первой цифрой 9 — учитывайте это в диалплане на ip-pbx.

Телефонный план нумерации Украины

Международный телефонный код Украины — 380.
Чтобы позвонить извне в Украину, набираем 380-yy-xxx-xx-xx

xxx-xx-xx — 7 цифр — звонки по фиксированной связи в пределах города
0-yy-xxx-xx-xx — 10 цифр — звонки в пределах Украины
00-код страны-код города-абонентский номер — звонки с Украины зарубеж

00 — выход на международные линии
0 — выход на междугородние линии или на мобильного оператора
yy — код мобильного оператора, или города, или области
xxx-xx-xx — 7-значный номер абонента

  • 010 — коды альтернативного выбора междугородней/международной фиксированной телефонной связи
  • 0100 — dial-up
  • 031, 032, 033, 034, 035, 036, 037, 038, 041, 043, 044, 045, 046, 047, 048, 051, 052, 053, 054, 055, 056, 057, 061, 062, 064, 065, 069 — список телефонных кодов областей Украины
  • 050, 063, 066, 067, 068, 073, 091, 092, 093, 094, 095, 096, 097, 098, 099 — список кодов мобильных операторов Украины
  • 0700 — код услуги персонального номера
  • 0800 — «бесплатные» горячие линии — платит получатель вызова
  • 089 — SIP-телефония Украины
  • 0900 — платные линии

 

Телефонные коды областей Украины
КодОбласть
31-xxx-xx-xxЗакарпатская область
32-xxx-xx-xxЛьвовская область
33-xxx-xx-xxВолынская область
34-xxx-xx-xxИвано-Франковская область
35-xxx-xx-xxТернопольская область
36-xxx-xx-xxРовенская область
37-xxx-xx-xxЧерновицкая область
38-xxx-xx-xxХмельницкая область
41-xxx-xx-xxЖитомирская область
43-xxx-xx-xxВинницкая область
44-xxx-xx-xxКиев город
45-xxx-xx-xxКиевская область
46-xxx-xx-xxЧерниговская область
47-xxx-xx-xxЧеркасская область
48-xxx-xx-xxОдесская область
51-xxx-xx-xxНиколаевская область
52-xxx-xx-xxКировоградская область
53-xxx-xx-xxПолтавская область
54-xxx-xx-xxСумская область
55-xxx-xx-xxХерсонская область
56-xxx-xx-xxДнепропетровская область
57-xxx-xx-xxХарьковская область
61-xxx-xx-xxЗапорожская область
62-xxx-xx-xxДонецкая область
64-xxx-xx-xxЛуганская область
65-xxx-xx-xxКрым АР - отключено 2015 г.
69-xxx-xx-xxСевастополь город - отключено 2015 г.

 

Телефонные коды мобильных операторов Украины
КодМобильный оператор
39-xxx-xx-xxGolden Telecom
50-xxx-xx-xxМТС Украина
63-xxx-xx-xxАстелит (он же Life:))
66-xxx-xx-xxМТС Украина
67-xxx-xx-xxКиевстар
68-xxx-xx-xxКиевстар (бывший Beeline)
73-xxx-xx-xxАстелит (он же Life:))
91-xxx-xx-xxТримоб (ТМ от Укртелеком)
92-xxx-xx-xxТЕЛЕСИСТЕМЫ УКРАИНЫ (они же PEOPLEnet)
93-xxx-xx-xxАстелит (он же Life:))
94-xxx-xx-xxИнтернациональные телекоммуникации (он же Интертелеком)
95-xxx-xx-xxМТС Украина
96-xxx-xx-xxКиевстар
97-xxx-xx-xxКиевстар
98-xxx-xx-xxКиевстар
99-xxx-xx-xxМТС Украина

 

SIP телефонные коды Украины
Код услугиНомерОператор
89SIP
89089-0xx-xx-xx--- не распределено
89189-1xx-xx-xxДатагруп
89289-2xx-xx-xxУкртелеком
89389-3xx-xx-xxТ.Р.Комьюникейшн
89489-4xx-xx-xxАтлантис Телеком
89589-5xx-xx-xxЛинком 3000
89689-6xx-xx-xx--- не распределено
89789-7xx-xx-xxКиевстар
89889-8xx-xx-xx--- не распределено
89989-9xx-xx-xxВелтон.Телеком

 

Другие телефонные коды Украины
Код услугиНомерОператор
10Коды альтернативного выбора сети междугородней фиксированной телефонной связи
10-23x-xx-xxДатагруп
10-93x-xx-xxАстелит (он же Life:))
10Коды альтернативного выбора сети международной фиксированной телефонной связи
10-23x-xx-xxДатагруп
10-33x-xx-xxФарлеп-Инвест
10-50x-xx-xxУкртелеком
10-93x-xx-xxАстелит (он же Life:))
100Код услуги выхода с сети ТФОП в сеть Интернет (dial-up)
100-50-xx-xxУкртелеком (dial-up)
700Код услуги персональных номеров
700-90-xx-xxИнтернациональные Телекоммуникации
800Бесплатные горячие линии.
Коды глобальной услуги "Вызов за счет абонента, который вызывают"
800-10-xx-xxВелтон.Телеком
800-20-xx-xxАстелит (он же Life:))
800-21-xx-xxДатагруп
800-30-xx-xxКиевстар
800-40-xx-xxМТС Украина
800-50-xx-xxУкртелеком
800-60-xx-xxФарлеп-Инвест
800-75-xx-xxИнтернациональные Телекоммуникации
800-80-xx-xxТ.Р.Комьюникейшн
900Платные линии. Коды глобальной услуги "С распределением прибыли"
900-23-xx-xxАудиотекс
900-25-xx-xxТ.Р. Комьюникейшн
900-26-xx-xxЕвроинформ
900-30-xx-xxУкртелеком
900-31-xx-xxДатагруп
900-32-xx-xxЕвро-Информ
900-33-xx-xxФарлеп-Инвест
900-90-xx-xxМикроком

 

Freeswitch: Dialplan. Conditions

http://pro-voip.com.ua freeswitch

Multiple Conditions (Logical AND)

Действие выполняется, когда все условия выполняются.

— здесь action выполняется только если destination_number=500 и день недели — воскресенье. Если хоть одно из условий вернет false, Freeswitch перейдет к anti-action, а если anti-action не задан, то к следующему extension.

 

Nested Conditions — вложенные условия

require-nested  важный атрибут в nested conditions. Этот атрибут определяет, должно ли вложенное условие (sub-condition) вернуть значение true, чтобы выполнился action в родительском условии (top-level condition). Принимает значения: true или false;
Default: require-nested=true.

Если require-nested=true — sub-condition тоже должно вернуть true или иметь параметр break=never, чтобы выполнился action в родительском condition. При этом выполняются action, определенные и в sub-condition, и в top-level condition — и именно в таком порядке — сначала выполняются все action во всех sub-condition, а только потом все action в top-level condition (порядок записи не играет роли — даже если сначала записан action, а потом описан sub-condition).

! Обрабатываются сначала вложенные condition

Если require-nested=false — то неважно, что вернет sub-condition, action в родительком condition в любом случае выполнится.

 

break — флаг condition —  при каком результате проверки условия остановить обработку данного extension и перейти к следующему extension. Принимает значения: on-false, on-true, never;
Default: break=on-false;

break можно указывать в цепочке из условий, например, при создании логики Logical AND.

break применяется и в nested conditions (sub-condition). В обычной работе без указания данного флага (при require-nested=true и break=on-false — это дефолтные значения), если первый sub-condition возвращает false, то следующий (sub)-condition (если он есть) уже не проверяется, и в целом работа с данным extension прекращается и парсится уже следующий extension.

Так вот, если указать в первом sub-condition break=never, то даже если он вернет false, следующий за ним sub-condition проверяться будет!

 

Пример:

в top-level condition указан require-nested=false — результат проверки вложенных условий не повлияет на выполнение action в родительском condition); в sub-condition’ах указан флаг break=never — не прерывать выполнение всего extension, разрешить проверку следующих condition.

Для чего break=never для второго sub-condition? Ведь после него больше sub-condition нет. Да, но после второго sub-condition еще есть top-level condition, ведь проверка условий будет выполняться в следующем порядке: sub-condition 1, sub-condition 2, top-level condition — сначала по порядку все вложенные, и только потом родитель.

В итоге после выполнения данного extension у нас в логах будут записи в такой очередности:

 

Multiple Conditions (Logical OR, XOR)

Логическое ИЛИ — action выполняется, если хоть одно из условий возвращет true.

Если ИЛИ нужно организовать для одного поля, т.е. смотрим только на одну переменную, то можно воспользоваться следующей конструкцией:

— action будет выполнен, если destination_number 501 ИЛИ 502.

Если ИЛИ для разных полей, используется regex.

regex может иметь следующие значения:

  • all — logical AND — все условия должны вернуть true, чтобы выполнилось action;
  • any — logical OR — хотя бы одно из условий должны возвратить true, чтобы выполнилось action;
  • xor — logical XOR — только одно условие должно возвратить true, чтобы выполнилось action;

 

Комплексный пример — маршрутизация по времени (time-based routing):

Пользователь звонит на extension 1100. Вызов перенаправляется на extension 1105 с понедельника по четверг с 8:00 до 21:59. В пятницу звонок перенаправляется на 1105 с 8:00 до 12:59. Во все остальное время вызовы перенаправляются в голосовую почту.

— в первом condition в данном примере можно было и не указывать break=on-false, ведь это значение по умолчанию, если не задано другое.

Больше примеров в wiki.freeswitch.org

Freeswitch: Dialplan

http://pro-voip.com.ua freeswitch Для начала, что такое диалплан. Диалплан — это схема маршрутизации вызовов (звонков). В диалплане мы проверяем некоторые параметры вызова (например, номер вызывающего и вызываемого абонента) и на основании значения этих параметров указываем, куда перенаправить этот вызов дальше — на локальный номер, на шлюз оператора, в голосовую почту и т.д.

Для Freeswitch дефолтным диалпланом является XML dialplan. XML dialplan подключается к главному конфигурационному файлу freeswitch.xml с помощью include:

Диалплан может быть поделен на контексты (context) для разделения правил обработки и маршрутизации между разными группами пользователей. Пользователь с одним контекстом не может воспользоваться диалпланом другого контекста. Но существует возможность перенаправления вызовов между контекстами с помощью приложений диалплана (application).

Когда поступает входящий вызов, он поступает не из-неоткуда, он поступает от какого-либо зарегистрированного на Freeswitch абонента (будь то локальный абонент, или gateway оператора, или вызов может быть сгенерирован самим Freeswitch) и попадает сперва в обработку модуля mod_sofia. В Sofia вычисляются значения канальных переменных — channel variables — на основании значений в sip-заголовках входящего вызова, согласованных параметров вызова между вызывающим абонентом и Freeswitch, параметров, выставленных вручную в directory. Затем уже Freeswitch, используя вычисленные канальные переменные, парсит диалплан в поисках подходящего направления для данного вызова.

Диалплан работает по принципу «условие-действие»; «условие» задается в виде регулярного выражения — используется синтаксис Perl Regular Expression; «действие» — это одно или несколько приложений Freeswitch, также в качестве «действия» можно подключать свои внешние скрипты.

XML dialplan состоит из таких структурных единиц, как:

  • context (контекст),
  • extension («направление»),
  • condition (условие),
  • action (действие).

context состоит из множества extension, которые с помощью condition определяют action.

 

context

— логическое разделения групп правил маршрутизации вызовов.

Когда вы создаете пользователя в directory,  в переменной «user_context» вы указываете контекст, который пользователь может использовать для совершения вызовов — тем самым вы определяете набор доступных extension (направлений) для данного пользователя или группы пользователей, или всего домена. Если вы этого не сделаете, будет применяться контекст, указанный в переменной «context» sip-профиля.

Из выше сказанного и знаний про работу sip-профиля можно сделать следующие выводы: в sip-профиле может быть сколько угодно контекстов; в домене может быть сколько угодно контекстов; можно отдельного пользователя в домене завернуть в его отдельный контекст и чисто для этого пользователя написать диалплан; можно один контекст использовать для нескольких доменов.

context имеет обязательный параметр — это «name» — он должен быть уникальным. Для значения параметра name есть зарезервированное слово any — которое означает «любой контекст».

extension

— это отдельное направления для вызова — упрощенно — отдельная пара «условие-действие».

Также имеет обязательный параметр «name«, значение этого параметра может быть неуникальным; используется для описания extension — часто в name кратко описывают, что делает данный extension — это облегчает восприятие диалплана при просмотре его «глазками» без необходимости лезть внутрь самого екстеншена. При принятии решения о маршрутизации вызова Freeswitch парсит extension’ы и как только находит подходящий, на нем и останавливается, не досматривая остальные extension’ы до конца.

condition

— условие для выбора.

Здесь задаем, какую переменную проверяем, и под какое условие должно попасть значение этой переменной, чтобы применился данный extension. Можно сохранить значение всей переменной или непрерывную часть значения, для того, чтобы ее дальше можно было использовать в action. Для этого регулярное выражение или часть регулярного выражения заключаем в круглые скобки ( ). То, что окажется в пределах круглых скобок, сохранится в специальных переменных — $1, $2$9. Поскольку condition’ов может быт несколько, то и скобок в регулярных выражениях может быть несколько. Значение, попавшее в первые скобки, заносится в переменную $1, во вторые — $2 и т.д.

На примере:

здесь мы проверяем номер вызываемого абонента (destination_number) — он должен состоять из любых 4-х цифр. Если условие выполняется — то последние 2 цифры заносятся в переменную $1. Например, если destination_number=3589, то переменная $1=89.

Если после переменной $N нужно записать еще какую-то цифру, число, то используем фигурные скобки — ${N}

$1, $2$9 работают только в пределах того extension, где они были вычислены.

Переменных $10, $11, $12 и т.д. здесь не бывает. Если нужно переменных больше, чем 9, есть специальные приемы, но о них как-нибудь потом.

action

действие, которое мы выполняем, если мы попали под условие condition. Здесь мы указываем действие — это может быть направление вызова, установление каких-либо параметров, проигрывание музыки и т.д. Действие — это запуск определенного приложения (application).

В противовес action, есть еще anti-action — это действие, которое выполняется, когда результат проверки условий — false:

 

Написание тегов

Хочу обратить внимание на соблюдение порядка открывающих/закрывающих тегов.

<condition … > — открывающий тег
</condition> — закрывающий тег

<action … /> — не имеет отдельного закрывающего тега, поэтому в конце не забудьте про слеш

Если condition’ов несколько, то все, кроме последнего закрываем с помощью />, а последний condition закрываем  </condition>

<condition  … />
<condition … />
<condition … >
    <action … />
</condition>

Cisco SPA: Hotline

Hotline — это быстрый вызов определенной линии на определенном устройстве. Как это работает? Мы только снимаем трубку на своем телефоне, как тут же без дополнительных действий с нашей стороны вызывается нужный номер или линия.

Чтобы «включить» режим Hotline на cisco spa, нужно отредактировать Dial Plan (вкладка Voice -> Line n -> Dial Plan) до следующего вида:

S0<:userid@ip_address: port>

  • S0 — устанавливаем Interdigit Short Timer (интервал между набираемыми цифрами) равным нулю;
  • userid@ip_address: port — идентификатор линии, которая должна в итоге зазвонить. Ну здесь, думаю, понятно, что userid — это номер (или extention), ip_address:port — ip-адрес и sip-порт удаленного устройства.

Помимо Dial Plan’а нужно проверить/изменить еще некоторые параметры линии (вкладка Voice -> Linen ), описаны ниже.

Для вызывающей линии:

  • Proxy and Registration -> Make Call Without Reg:  yes
    — разрешить совершать вызовы без регистрации

Для принимающей линии:

  • SIP Settings -> Restrict Source IP: no
    — Restrict Source IP позволяет принимать вызовы только с ip-адреса, указаного в Proxy and Registration -> Proxy. Для Hotline’а нам этого не нужно, поэтому отключаем. В принципе, можно установить Restrict Source IP: yes и в разделе Proxy указать ip-адрес удаленного устройства, с которым строим Hotline.
  • Proxy and Registration -> Ans Call Without Reg:  yes
    — разрешить принимать вызовы без регистрации.

Если нам нужно, чтобы Hotline работал в обе стороны (поднял line1 — зазвонила line2; поднял line2 — зазвонила line1), соответственно, на каждой из линий включаем аж все три 🙂 параметра:

  • SIP Settings -> Restrict Source IP: no
  • Proxy and Registration -> Make Call Without Reg:  yes
  • Proxy and Registration -> Ans Call Without Reg:  yes

Хочу заметить, что параметр Call Feature Settings -> Enable IP Dialing никак не влияет на работу Hotline.

Ниже парочка примеров подключений…


 

Пример 1

Cisco-SPA-Hotline-Diagram1

Описание:

  • spa 112 включен в локальную сеть, его ip-адрес — 192.168.13.26;
  • к FXS-портам подключены два обычных телефона;
  • в сети нет сервера регистрации или sip-proxy-сервера.

Задача: Поднимаем трубку на первой линии (line1), сразу звонит вторая (line2)  и наоборот.

Решение:

Настройка Line1
SIP Port: 5060
Dial Plan: S0<:@192.168.13.26:5061>

Настройка Line2
SIP Port: 5061
Dial Plan: S0<:@192.168.13.26:5060>

Здесь нужно обратить внимание, что из начального шаблона был убран userid. Это потому что никакого userid на линиях в данный момент нет. Если установить, например, на Line1 User ID: 11, а на Line2 — User ID: 22, то диалпланы должны будут выглядеть вот так:

Настройка Line1
SIP Port: 5060
Dial Plan: S0<:22@192.168.13.26:5061>

Настройка Line2
SIP Port: 5061
Dial Plan: S0<:11@192.168.13.26:5060>

 


 

Пример 2

Cisco-SPA-Hotline-Diagram2

Описание:

  • spa 112 (ip 192.168.13.26) и spa 303 (ip 192.168.13.26) включены в локальную сеть;
  • к первому FXS-порту spa 112 подключен обычный телефон;
  • cisco spa 303 — это ip-телефон с тремя независимыми линиями; для Hotline здесь я использую line3 с внутренним номером 66;
  • в сети нет сервера регистрации или sip-proxy-сервера.

Задача: Поднимаем трубку на первой линии spa 112 (extension 11), сразу звонит третья линия (extension 66) на spa 303.

Настройка spa 112 Line1
SIP Port: 5060
Dial Plan: S0<:66@192.168.13.25:5062>

Настройка spa 303 Line3
SIP Port: 5062
Dial Plan: S0<:11@192.168.13.26:5060>

 


 

Пример 3

Cisco-SPA-Hotline-Diagram3

 

Описание:

  • linksys spa 3102 (ip 175.1.1.100) и cisco spa 303 (ip 98.1.1.100) подключены к интернету;
  • к FXO-порту linksys’а подключена абонентская линия, приходящая с городской АТС;

Задача: Продление абонентской линии с помощью АТА и IP-телефона через сеть с коммутацией пакетов (в данном случае Internet)

Думаю, наиболее востребован режим Hotline именно в данных схемах подключения.

Настройка linksys spa 3102 -> PSTN Line

Необходимый минимум для работы в направлении PSTN -> VOIP:

PSTN-To-VoIP Gateway Setup
PSTN-To-VoIP Gateway Enable: yes
PSTN Caller Default DP: 1

Dial Plans
Dial Plan 1: S0<:66@98.1.1.100:5062>

FXO Timer Values (sec)
PSTN Dialing Delay: 0

Необходимый минимум для работы в направлении VOIP -> PSTN:

VoIP-To-PSTN Gateway Setup
VoIP-To-PSTN Gateway Enable: yes
VoIP Caller Default DP: 2

Dial Plans
Dial Plan 2: (xx.)

Настройка linksys spa 303 -> Ext 3

Subscriber Information
User ID: 66

Dial Plan
Dial Plan: S0<:@175.1.1.100:5061>

Proxy and Registration
Make Call Without Reg: yes
Ans Call Without Reg: yes