DialPlanConfiguration

advertisement
DialPlanConfiguration
Extension Names and Patterns
Extension Names (Имена Расширения)
Расширения Dialplan могут быть простые числа такие как "412" или "0". Они могут
быть символьными именами, например "litnimax" или "A93*". Хотя обычный телефон не
может набрать расширение вывающее "litnimax" (некоторые все-же могут), часто ваша
логика Dialplan будет включать переход от одного расширения до другого, и для
тех переходов Вы можете определить exension имена с любым именем, которое Вам
нравиться, потому-что Вы не хотите, чтобы они были набранны напрямую.
Конечно кнопочные телефоны не просто имеют цифры от 0 до 9.они также имеют *
(звездочку) и # ("фунт"). И некоторые кнопочные телефоны (DTMF) имеют
дополнительные четыре "цифры", A, B, C и D и более. Если у вас есть такие телефонытрубки в вашей организации, ничто не остановит Вас от использования тех
дополнительных кнопок для ваших нужд.
Примечание:
чтобы иметь расширение, которое инициировано вызовом #, Вы должны использовать extension pattern (образец расширения )(см ниже).
Asterisk не признает # как обычную 'цифру', даже если это является во всех телефонах сигналом DTMF.
Extension Patterns (Образцы Расширения)
Имена Расширения не ограниченны единственным специфическим расширением "чисел".
Единственное расширение может также соответствовать образцам. В extensions.conf
файле, имя расширения является образцом если оно начинает с символа подчеркивания
(_). В образце расширения, следующие символы имеют специальные значения
Специальные Символы для Сопоставления Образца
X
Z
N
[1237-9]
.
соответствует любой цифре от 0 до 9
соответствует любой цифре от 1 до 9
соответствует любой цифре с 2 до 9
соответствует любой цифре или букве, указанной в скобках (в этом примере,
1,2,3,7,8,9)
соответствует одному или нескольким символам
Например:
Рассмотрим следующий контекст
Context "routing":
Extension
Description
_61XX
Dallas Office
_63XX
Dallas Office
_62XX
Huntsville Office
_7[1-3]XX
San Jose Office
_7[04-9]XX
Los Angeles Office
Этот контекст, с именем "routing", посылает вызовы в различные серверы согласно их
расширению. Эта организация решила, что все их телефонные расширения будут 4-х
значными. Если пользователь набирает расширение, начинаемое с 61 или 63, он должен
попасть в офис Dallas; 62 должны попадать в офис Huntsville; что-нибудь начиная с 71, 72,
или 73 должны попадать в San Jose, и что-нибудь начиная с 70, 74, 75, 76, 77, 78 или 79
должны попадать в офис Los Angeles.
Другие примеры образцов (Patterns)
_NXXXXXX
_1NXXNXXXXXX
_9011.
_#
сответствует нормальным 7 значным телефонным номерам.
соответствует коду области и телефонному номеру начинающемуся
на 1
соответствует строке более 5 символов начинающейся на 9011, но
не соответствует 5-и символьной строке 9011 как таковой.
Соответствует одиночному нажатию #
Предупреждение
Не используйте образец _., так как он соответствует всему, включая специальные
расширения Asterisk таким как i, t, h, и т.п.. Ввесто этого используйте _X. или _X,
который не будет соответствовать специальному расширению (extensions)..
Если вызываемому номеру соответствует более одного образца, то образцы
просматриваются в порядке сортировки (см. Порядок Сортировки Образцов Расширений)
SortOrder
Порядок Сортировки Образцов Расширения
Каждый контекст определенный в Dialplan сообщает Asterisk как обрабатывать номера
телефонов набранные в этом контексте.
Поскольку Вы можете использовать образцы, чтобы определять расширения, более чем
один образец расширения мог бы соответствовать одному телефонному номеру.
Asterisk не дает совпадения extension patterns (образцов расширения) в порядке в котором
Вы их определяете; образцы расширения сначала сортируются. Следовательно Asterisk
может обработать телефонный номер не так как вы хотели.
Этот документ описывает как Asterisk сортирует образцы расширения и как управляет
порядком сортировки что-бы выбрать раширение которое Вы хотите, когда два или более
образца соответствуют данному вызываемому номеру.
Пример проблемы
Рассмотрим это для контекста "example"
Вы хотите что-бы номера начинающиеся с 918 выходили через аналоговую телефонную
линиию связанную с Zap/1. Все другие номера должны выходить через Zap/2.
Вы пишите приблизительно следующее:
example
exten => _918.,1,Dial(Zap/1/${EXTEN})
exten => _.,1,Dial(Zap/2/${EXTEN})
exten => h,1,Hangup
Но это не работает! Вы обнаруживаете это независимо от того какой номер Вы набираете,
все номера уходят через Zap/2.
Дело в том, что Asterisk сортирует расширения и берет первое найденное совпадение. Для
того, чтобы видеть порядок в котором Asterisk сортирует расширения, наберите в консоли
Asterisk команду show dialplan. Вы увидите, что порядок сортировки такой:
1. _.
2. _918.
3. h
Заметим, что это не тот порядок который вы определили в вашем extensions.conf файле.
Вход _. теперь первое попадание для любого набранного номера включая номер 918.
Заметим так-же что расширение h (hangup) не может быть достигнуто, оно так-же
соответствует расширению _.
Управление порядком сортировки
Как нам заставить Asterisk выстроить образцы расширения в порядке в котором мы
хотим? Мы должны использовать ключевое слово include чтобы включить другие
контекстные образцы расширения в пределах текущего контекста. Например:
example
include => example-sub
exten => h,1,Hangup
exten => _918.,1,Dial(Zap/1/${EXTEN})
[example-sub]?
exten => _.,1,Dial(Zap/2/${EXTEN})
Asterisk (в контексте "example") теперь обработает наранные номера в этом порядке
сортировки.
1. _918.
2. h
3. _.
Вот собственно что и требовалось получить.
Dialplan Extension Matching
"Совпадение по мере набора номера" происходит в двух случаях:
1. IVR - Интерактивное голосовое меню. Это название любой ситуации где Asterisk
ответила на вызов, проиграла или записала сообщение и ждет от пользователя набора
цифр на клавиатуре, для выбора опций.
2. Стандартный телефон подключенный к интерфейсу FXS. Вы поднимаете трубку,
слышите гудок, и начинаете набирать цифры.
Что такое "Совпадение по мере набора"
Рассмотрим обычный телефон подключенный к вашей локальной станции, когда вы
поднимаете трубку и начинаете набирать номер каждая цифра посылается на станцию
немедленно и сразу там обрабатывается (Совпадение по мере набора).
Напротив, рассмотрим сотовый телефон, Вы набираете номер, но только после того как
Вы нажмете кнопку телефон пошлет на станцию сразу весь набранный номер.
Как только один вызов связан с другим по конкретному маршруту, можно набрать другой
дополнительный номер. Например: Если вы набиратете телефон компании и слышите
приветствие голосовой почты, то последующий набор цифр, будь то стационарный или
мобильный телефон будет происходить по схеме "Совпадение по мере набора", т.е.
каждая набранная цифра будет обрабатываться по мере набора номера.
Для Astrisk стиль набора номера "все в одном" достаточно прост: Asterisk будет проверять
на совпадение с любым из бразцов внутренних номеров определенных в текущем
контексте Dialplan. Напротив, набор номера по схеме "Совпадение по мере набора"
более трудная задача, поскольку не ясно когда Вы закончили набор номера. С одной
стороны Вы не хотите чтобы Asterisk ожидала больше необходимого, с другой стороны,
Asterisk должна ожидать набор цифр, потому-что это может повлиять на конечную
обработку Вашего вызова.
Понимание того как будет обработан набор номера по схеме "Совпадение по мере
набора" может быть полезным для Вас в решающем распределении внутренних номеров,
и в том как Вы определите образцы для внутренних номеров что-бы обрабатывать
набранные номера.
Как Asterisk обрабатывает набор
"Совпадение по мере набора"
Когда Asterisk имеет набранную цифру, первые вещи которые рассматриваются : Если Вы
(вызывающая сторона) набираете другую цифру, может быть формируется номер,
который по шаблону сообветствует внутреннему номеру? Asterisk рассматривает число
которое Вы набрали, пока видно, что образцы (шаблоны) внутренних номеров
определяются для контекста. Если ответ на вопрос - да, тогда Asterisk ожидает, что нужно
для набора другой цифры, даже если набранный номер уже "полный", который совпадает
с вашим набором.
Например Вы имеете:
exten => 123,1,Dosomething(...)
exten => _XXX.,1,Dosomethingelse(...)
Если вы набираете "123", Asterisk должна ожидать что бы увидеть что Вы наберете
другую цифру, поскольку не ясно, хотите ли вы набрать "123" или например "123999",
которое должно соответствовать определенному второму образцу.
Asterisk проверит все образцы номеров определенных для текущего контекста - оба
образца определенных непосредственно в текущем контексте а также любые образцы
определенные в любых контекстах использущих ключевое слово include. Если есть по
крайней мере один образец номера, который может подойти при наборе еще одной цифры,
тогда Asterisk будет ожидать набора.
Как долго Asterisk ожидает
Как долго Asterisk ждет перед началом обработки и обрабатывает цифру как набрано
зависит от двух факторов. Прежде всего это зависит от того, новое ли это соединение или
уже установленное.
* Новые входящие соединения - это те, в которых Asterisk не начала пока обрабатывать
любые команды Dialplan для вызова. Для Zap канала это означант что кто-нибудь поднял
трубку и начал набирать номер телефона, и Asterisk обрабатывает каждую цифру
пользователя чтобы определить какой номер Dialplan выбрать сначала.
* Для новых поступающих вызовов, второй показатель, влияющий на то как долго Asterisk
ждет больше цифр, является тип канала для входящего вызова. Каждый тип канала
определяет свой собственный период тайм-аута. Канал Zap имеет фиксированный период
тайм-аута 3 секунды, и не может быть изменен без модификации исходного кода и
перекомпиляции модуля Zap.
* Установленные соединения - те где Asterisk установила начальную связь, перешла
на номер (даже если это s номер), и начала обрабатывать команды там где "нечего
обрабатывать", что-бы теперь ожидать вызывающего аонента для набора чего-либо.
Обычно, одна из Asterisk команд просто выполнит, фоновую команду чтобы проиграть
записанное сообщение, представляющее меню IVR, и Asterisk теперь ждет вызывающего
абонента, чтобы принять их выбор меню.
* Для установленных соединений, второй показатель, влияющий на период таймаута является величиной DigitTimeout. По умолчанию тайм-аут цифры - 5 секунд, но
этовремя может быть изменено используя команду DigitTimeout.
Что Asterisk делает далее
Если:


Ожидалось больше цифр, а они не были получены в течении тайм-аута, или
Не найдены никакие образцы номеров, если вы набирали больше цифр что могло
соответствовать вашему номеру.
Asterisk будет рассматривать вопрос: Что делать с числом которое Вы набрали к
настоящему времени которое совпадает со всеми шаблонами номеров в данном контексте
или во включенных контекстах?
Да: Переходить на совпавший номер. Более, чем один образец номера может
соответствовать коммутируемому числу; Asterisk просто берет первое совпадение,
которое она находит.
Внимание!!! Asterisk не рассматривает образцы номеров в том порядке в
котором Вы их определяли, для более детальной информации смотри Sort
Order of Dialplan Extension Patterns.
Нет: Если номер который Вы набрали недействителен в текущем контексте. Тогда
действия Asterisk зависят от того в каких из 2 ситуаций было входное соединение.
1. Если это новое входящее соединение Asterisk возвратит сигнал "неправильного набора"
вызывающему абоненту. Как этот сигнал удет послан - зависит от типа канала. Если это канал Zap, Вы должны услышать сигнал перегрузки (занято?). Для каналов VoIP Asterisk
должна послать подходящему control -у сигнал вызывающего абонента, и их телефонное
оборудование укажет неправильный номер в независимо от того каким образом,они это
делают: они могут отобразить сообщение "неправильный номер" на экране или "пикнуть"
звуком. Отметьте что в этой ситуации при новом входящем соединении, никакие команды
Dialplan пока не выполнялись. У Вас нет скриптов контролирующих поведение Asterisk
при обработке неправильного номера. Asterisk не переходит на i номер в этой ситуации.
2. Если, с другой стороны - это установленное соединение, Asterisk перейдет на номер,
запустит выполнять команды (запись - воспроизведение соощений пользовтеля, IVR) и
команды "нечего обрабатывать", ожидая ввода пользователя, что-бы перейти на номер
если он существует. Если номера не существует Asterisk положит трубку.
Пример:
Некая компания хочет на все входящие телефонные звонки отвечать речевым сообщением,
приглашая вызывающего абонента выбрать, на какой внутренний номер он хочет
позвонить. Компания имеет шесть внутренних номеров - 1, 2, 21, 22, 31, 32. Итак, это контекст созданный для поступающих вызовов:
[incoming]?
exten => s,1,Background(welcome-to-USSR)
exten => 1,1,Dial(Zap/1)
exten => 2,1,Dial(Zap/2)
exten => 21,1,Dial(Zap/3)
exten => 22,1,Dial(Zap/4
exten => 31,1,Dial(Zap/5)
exten => 32,1,Dial(Zap/6)
Когда Вы вызываете компанию, Asterisk проигрывает файл welcome-to-USSR.gsm После
этого обраатывать нечего и Asterisk ждет от Вас набора.
Вот возможные варианты:
Number Asterisk's Action
Dialed
1
Немедленно вызывает абонента (Zap/1)
2
Ожидает таймаута, затем вызывает абоеннта(Zap/2)
21 Немедленно вызывает абонента (Zap/3)
22 Немедленно вызывает абонента (Zap/4)
3
Ожидает таймаута, затем кладет труку.
31 Немедленно вызывает абонента(Zap/5)
32 Немедленно вызывает абонента (Zap/6)
4
Немедленно кладет трубку.
Отметьте что когда вызывающий абонент пытается набрать номер 2 он не связывается
немедленно. Asterisk ожидает что-бы увидеть, наберет ли абонент больше цифр, что-бы
увидеть хочет-ли абонент вызвать номер 2 или 21 или 22. Так как вызывающие абоненты
хотели-бы быть соединенными как можно более быстрее, то следует по возможности
избегать неоднозначных внутренних номеров.
Если компания не хочет соединять вызывающих абонентов которые набирают
неправильный номер, тогда, им нужно определять расширение "i" для этого контекста. В
то же самое время, они должны решить тоже добавить расширение t.
Смотри так-же:








Sort Order of Dialplan Extension Patterns
Interactive Voice Response Menus
Asterisk Channels
Dialplan 's' extension
Dialplan 'i' extension
Dialplan 't' extension
Dialplan Background command
Dialplan DigitTimeout command
Asterisk security dialplan
ПОЖАЛУЙСТА ПРОЧИТАЙТЕ СЛЕДУЮЩУЮ ИНФОРМАЦИЮ СВЯЗАННУЮ С БЕЗОПАСТНОСТЬЮ. НЕПРАВЛИЛЬНАЯ
КОНФИГУРАЦИЯ ASTERISK МОЖЕТ ДОПУСТИТЬ НЕСАНКЦИОНИРОВАННОЕ ИСПОЛЬЗОВАНИЕ ВАШИХ СРЕДСТВ, ЧТО
МОЖЕТ ПРИВЕСТИ К МАТЕРИАЛЬНОМУ УЩЕРБУ.
Прежде всего помните это:
ИСПОЛЬЗУЙТЕ КОНТЕКСТЫ ДОПОЛНИТЕЛЬНЫХ НОМЕРОВ, ЧТО-БЫ
ИЗОЛИРОВАТЬ ИСХОДЯЩИЕ ИЛИ ПЛАТНЫЕ УСЛУГИ С ЛЮБЫХ
ВХОДЯЩИХ СОЕДИНЕНИЙ.
Вы должны учесть что если это любой канал, входящая линия, и.т.п. может входить в
контекст дополнительных номеров, он может иметь доступ к любому дополнительному
номеру в пределах этого контекста.
Следовательно, вам НЕ СЛЕДУЕТ разрешать доступ к исходящим или платным услугам
в контекстах, которые доступны (особенно без пароля) из входящих каналов, будь они
каналы IAX, FX или другие шины, или даже непроверенные станции в пределах
Вашей.сети. Никогда не помещайте обслуживание исходящего сервиса в контекст
"default". Что-бы сделать это проще, Вы можете включить контекст "default" в пределах
других частных контекстов используя:
include => default
В подходящей секции, хорошо спроектированная PBX могла быть похожа на это.
[longdistance]?
exten => _91NXXNXXXXXX,1,Dial,Tor/g2/BYEXTENSION
include => local
[local]?
exten => _9NXXNXXX,1,Dial,Tor/g2/BYEXTENSION
include => default
[default]?
exten => 6123,Dial,Tor/1
Неоходимо включить телефоны/клиентов в sip.conf в соответствующий контекст:
[my_hardclient]?
type=friend
username=whatsoever
secret=only_you_should_know
context=longdistance
....Этот телефон может совершать дальние вызовы. Вы можете заменить сторчку
"context=longdistance" на "context=local" или "context=default", что-бы предоставлять
доступ например только ко внутренним услугам.
НЕ ЗАБЫВАЙТЕ УБРАТЬ ДЕМОНСТРАЦИОННЫЙ КОНТЕКСТ ИЗ ВАШЕГО
ВСТРОЕННОГО КОНТЕКСТА. Он не содержит угрозу безопасности, это просто не
даст людям поиграться установками вашей Asterisk дистанционно.
ExtensionsConf


последнее редактирование 1 год назад ipse
Вольный перевод http://www.voip-info.org/wiki-Asterisk+config+extensions.conf
extensions.conf - Ваш Dialplan
Конфигурация dialplan'a определяется в файле extensions.conf. Это один из самых важных
конфигурационных файлов Asterisk. В нем определяется обработка и маршрутизация
входящих и исходящих вызовов. Этот файл управляет поведением всех соединений
проходящих через PBX.
[general]

В самом начале файла extensions.conf, задается несколько общих значений в секции
[general]. Подробнее, см.:
o Dialplan General Settings
[globals]


Далее, в секции [globals], Вы определяете глобальные переменные (или константы)
и их начальные значения. Подробнее, см.:
o Dialplan Global Variables
Using Variables in Asterisk Dialplans
Контексты и Екстеншины

После секций [general] и [globals], весь остаток файла extensions.conf посвящен
определению плана набора. План набора состоит из набора контекстов. Каждый
контекст состоит из набора екстеншинов, т.е. куда кто звонит что при этом делать.
Более подробней по этой теме, см.:
o Introducing Contexts and Extensions
Маски для екстеншинов

Когда Вы определяете екстеншины в пределах контекста, Вы можете использовать
в их определении не только имена, также можно задать маску, которая будет
соответствовать целым групам набранных номеров, используя маску для
екстеншенов. Подробнее, см.:
o Extension Names and Patterns (rus)
Включение одного контекста в другой
Один контекст может включить содержание другого. Например, рассмотрим следующие
контексты:
Context "default":
Extension
101
102
0
Description
Mark Spencer
Wil Meadows
Operator
Context "local":
Extension
_9NXXXXXX
Description
Local calls
include => "default"
Context "longdistance":
Extension
Description
_91NXXNXXXXXX
Long distance calls
include => "local"
Здесь мы определили три екстеншина:



Контекст default позволяет набрать три телефонных екстеншина: Mark, Wil, и
Operator.
Контекст local имеет одну маску екстеншина, которая позволяет набрать только 7значные ("городские" локальные) номера, и также включает контекст "default",
также разрешая пользователю набрать Mark, Wil или Operator.
Контекст longdistance имеет одну маску екстеншина, которая разрешает набирать
междугородные номера, и включает контекст "local", таким образом, разрешая
пользователю делать внутригородские звонки и набирать екстеншины Mark, Vil и
Operator.
Используя контексты екстеншинов, Вы можете точно указать, кто к каким услугам имеет
доступ.
Если больше чем один образец соответствует набранному числу, то Asterisk может
использовать совсем не тот контекст, который Вы ожидали. Подробнее, См:
Sort Order of Extension Patterns. (rus)
Когда Asterisk получает входящий вызов через канал, Asterisk перебирает контексты,
заданные для данного канала, указывая Asterisk, что с ним делать далее. Контекст
определяет различные наборы команд в зависимости от того, какой екстеншен набрал
пользователь. Например, в контексте может быть определен один набор команд, если
пользователь набрал "123", и другой набор команд, если пользователь набирает "9", и
совершенно другой, если он набирает любое число, начинающееся с "555".
Для некоторых видов соединений, таких как поступающие звонки с внешней телефонной
линии или пользователь не набрал екстеншен. В этом случае, Asterisk ведет себя так, как
будто пользователь набрал специальный екстеншен с именем "s" (Start). Asterisk будет
искать "номер" екстеншена с именем s в контексте того канала, через который пришел
данный вызов.
Например, мы имеем канал "Zap/1", который соединенен с телефонной трубкой в Вашем
здании. И предположим, что в файле конфигурации для каналов Zap (zapata.conf), Вы
определили context=john для канала Zap 1. Итак, когда Вы снимаете телефонную трубку,
чтобы набрать номер, Asterisk будет искать контекст с именем "jonh" в extensions.conf,
чтобы узнать, чтобы узнать что в данном случае нужно делать. Начинаете определение
контекста в файле extensions.conf, помещая название контекста в квадратные скобки на
новой строке, например, так:
[john]?
Для каждого контекста, Вы должны определить одни или несколько екстеншенов,
которые Asterisk будет сравнивать с набранным номером. В каждом екстеншене Вы
указываете Asterisk, что необходимо делать, задавая ряд команд.
Екстеншены
Екстеншены могут быть двух типов: "литеральными" или маской.
"литеральный" екстеншен может быть числом, таким как 123, и может содержать
стандартные символы * и #, которые есть на обычных телефонах, так что 1289 - является
правильным екстеншеном. Некоторые телефонны имеют на клавиатуре дополнительные
DTMF кнопки A,B,C и D, следовательно екстеншены могут быть определены и с этими
символами. Фактически, название екстеншена может содержать любую латинскую букву
или число и так же некоторые знаки препинания. Стоит отметить, что некоторые VOIP
телефоны в состоянии "набрать" номер екстеншена, который может быть обычной
текстовой строкой, например "Office". Следовательно, так же допустимо задать екстеншен
с именем Office в Asterisk.
Являются ли имена екстеншенов регистрозависимыми? Итак, и являются, и не являются.
Являются - в случае, когда Asterisk пытается сопоставить набранному пользователем
екстеншену, екстеншен определенный в контексте, они должны полностью совпадать,
включая регистр. Итак, если пользователь набирает екстеншен "OFFICE", используя VOIP
телефон, Asterisk не будет выполнять команды, которые Вы определили для екстеншена с
именем "Office". С другой стороны, имена екстеншенов - не регистрозависимые, в том
смысле, что Вы не можете определить различные екстеншены (в одном контексте),
которые имеют одинаковые имена и отличаются только регистром. Так что Вы не можете
определить один набор команд для екстеншена "Office" и другой набор команд для
екстеншена "OFFICE".
Предопределенные названия екстеншенов
Asterisk использует некоторые названия екстеншенов в специальных целях:






i : Invalid
s : Start
h : Hangup
t : Timeout
T : AbsoluteTimeout?
o : Operator
Подробнее, см: Asterisk standard extensions.
Определение екстеншенов
В отличие от традиционного PBX, где екстеншены связаны с телефонами, интерфейсами,
меню, и т.д., в Asterisk, екстеншен определяется как список команд для выполнения.
Команды выполняются в порядке, который определяется признаком их "приоритета", но
некоторые командами, типа "Dial" и "GotoIf?", могут изменить порядок выполнения,
переадресовав на другую команду, основываясь на некотором условии.
Когда набран екстеншен, выполняется команда с приоритетом 1, далее выполняется
команда с приоритетом 2, и так далее.
Это происходит до того как:



Вызывающий абонент повесил трубку,
Команда вернула код возврата -1 (индикатор ошибки),
Команды со следующим приоритетом не существует примечание: Asterisk не будет
"перескакивать" через недостающие приоритеты, или вызов был переброшен на
другой екстеншен.
В синтаксисе фала extensions.conf, каждая команда в екстеншене описывается в данном
формате:
exten => маска,приоритет,Команда(параметры)
Итак, "контекст" имеет имя, например "john". И в каждом контексте, Вы можете
определить один или несколько "екстеншен". Для каждого екстеншена, Вы определяете
ряд команд.
Синтаксис определения екстеншенов в Asterisk файле extensions.conf довольно тяжел. К
счастью, есть некоторые вспомогательные утилиты: GUI tools.
Определение одного екстеншена содержит одну или несколько команд. Каждая команда
задается на новой строке, в таком формате:
exten => екстеншен,приоритет,Команда(параметры)




екстеншен - имя екстеншена, это либо "литеральное" имя екстеншена или маска
екстеншена. Вы должны использовать точно такое же имя екстеншена для каждой
команды.
приоритет - целое число. Название этого поля - "приоритет" немного вводит в
заблуждение. Это - просто порядковый номер команды, чтобы пронумеровать
команды для екстеншена. Asterisk начнет выполнение с приоритета 1. Если нет
команды с приоритетом 1, то екстеншен не соответствует никакому набранному
номеру. После выполнения команды с приоритетом 1, Asterisk выполнит команду с
приоритетом 2. Если нет команды с приоритетом 2, то Asterisk закончит
обрабатывать команды для этого екстеншена, даже если существует другая
команда с приоритетом 3 или больше. Однако, некоторые команды при их
выполнении, заставляют Asterisk перейти к командам с другим приоритетом, а не к
следующему, в зависимости от логики команды.
команда - название команды (также называется "приложением"), для выполнения.
Подробнее, см. Asterisk Commands List.
параметры зависят от команды. Некоторые команды не содержат параметров, в
этом случае круглые скобки можно пропустить.
Примеры
exten
exten
exten
exten
=>
=>
=>
=>
123,1,Answer
123,2,Playback(tt-weasels)
123,3,Voicemail(44)
123,4,Hangup
Это определение единственного екстеншена с именем "123". Когда приходит звонок на
екстеншен 123, Asterisk сам ответит звонок, проиграет звуковой файл с именем "ttweasels", даст возможность оставить пользователю голосовое сообщение для почтового
ящика 44, и затем повесит трубку.
Стоит отметить, что Asterisk не заботится о порядке, в котором Вы размещаете команды в
файле extensions.conf. Вы можете размещать команды в различном порядке, как в
нижеприведенном примере, и это ни как не отразится на порядке выполнения команд, т.к.
Asterisk использует приоритет команд для определения порядка выполнения:
exten
exten
exten
exten
=>
=>
=>
=>
123,4,Hangup
123,1,Answer
123,3,Voicemail(44)
123,2,Playback(tt-weasels)
Другой вариант выбора екстеншена основывается на параметрах вызывающего, "логика
бывшей подруги". По этой логике мы определяем набранный екстеншен, в зависимости от
того поступил вызов снаружи или изнутри, основываясь на callID звонящего. К примеру:
exten
exten
exten
exten
=>
=>
=>
=>
123/100,1,Answer()
123/100,2,Playback(tt-weasels)
123/100,3,Voicemail(123)
123/100,4,Hangup()
Эта запись соответствует екстеншену 123 и описанные команды будут выполнены,
ТОЛЬКО ЕСЛИ Caller-ID звонящего пользователя - 100. Это можно также сделать при
помощи маски, как например, в этом примере:
exten => 1234/_256NXXXXXX,1,Answer()
и так далее...
Эта запись соответствует екстеншену 1234, если Caller ID вызывающего будет чем-то
начинающимся с 256. Это бывает довольно полезно, если Вы хотите оградить себя от
ненужных звонящих персон.
Так же можно сделать, например, так:
exten
exten
exten
exten
=>
=>
=>
=>
s,1,Answer
s/9184238080,2,SetCIDName(EVIL BASTARD)
s,2,SetCIDName(Good Person)
s,3,Dial(SIP/goodperson)
(тут было спасибо Brian)
Сначала получаем вызов, в 2 отсеиваем ненужные персоны, все остальные проходят
дальше, и в 3 возвращаем тех, что остались в основной поток.
Переменные и выражения
Существует возможность использовать переменные, используя конструкцию
${VARIABLENAME}. Так же можно использовать выражения в виде конструкции
$[EXPRESSION], где EXPRESSION может быть регулярным выражением, сравнением,
сложением, вычитанием и многим другим. См. Asterisk variables на предмет стандартных
переменных и Asterisk readme.variables для объяснений выражений.
За дополнительной информацией об использовании глобальных переменных и
переменных для каналов в extensions.conf, см.
 Using Variables in Asterisk Dialplans
Перезагрузка плана набора
Если Вам необходимо перезагрузить план набора для того, чтобы сделанные в нем
изменения вступили в силу, не перегружая все остальные конфиги Asterisk, используйте
команду extensions reload из Asterisk CLI.
Что использовать один большой файл или несколько
маленьких?
С помощью директивы #include <имя файла> в extensions.conf, Вы можете включать
другие файлы в файл конфигурации плана набора. Таким образом, Вы можете разбить
Ваш план набора на несколько файлов, к примеру, где extensions.conf - содержит
основную конфигурацию, в users.conf - Вы можете описать местных пользователей, файл
services.conf будет содержат различные сервисы, такие как конференц-связь и т.д., Таким
образом план набора у Вас будет логически разбит на части и его будет удобнее
редактировать.
Директива #include <имя файла> - это не то же самое, что и директива include
<контекст>. Директива #include работает во всех файлах конфигурации Asterisk.
Перенаправление на другой Asterisk
Синтаксис:
[iaxprovider]
switch => IAX2/user:[key]@server/context
Тут мы определяем перенаправление на другой сервер. user и key должны быть
определены в файле iax.conf, вызываемого сервера. context - это контекст в extensions.conf
вызываемого сервера.
Подробнее, см. Asterisk - dual servers
Удаленное управление планом набора в extensions.conf

Asterisk extensions from mysql

во всех .conf файлах Вы можете использовать директиву #include, чтобы включить
другой файл
Простой пример использования директивы #include в extensions.conf
#include "my-extra-config-file"
[globals]
ALL=Zap/1&SIP/1000&SIP/1001
[default]
exten => s,1,Answer
exten => s,2,Playback(welcome-message)
exten => s,3,Goto(context-in-include-file,s,1)
; переходим в контекст, определенный во включенном файле
Примеры
Использование макросов для создания extensions_
[globals]
PHONE1=Zap/1
PHONE2=SIP/6002
[macro-oneline]
exten => s,1,Dial(${ARG1},20,t)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,3,Hangup
exten => s,102,Voicemail(b${MACRO_EXTEN})
exten => s,103,Hangup
[local]
exten => 6601,1,Macro(oneline,${PHONE1})
exten => 6602,1,Macro(oneline,${PHONE2})


Asterisk dial plan - working example: примеры рабочих конфигураций
Расширенные примеры, демонстрирующие интеграцию с Panasonic KSU
Функции PBX, реализованные в IP АТС Asterisk
Многие функции традиционных PBX выполнены как приложения или комбинации
приложений, используемых в плане набора - extensions.conf.
Кроме того, для некоторых каналов дополнительно реализованы "внутренние" сервисные
коды.
Основные (могут быть использованы для всех каналов)








Music on Hold: Реализован в Asterisk. См. MusicOnHold и musiconhold.conf?.
Парковка вызова: Поддерживается в стандартной инсталляции
Call Pickup: Поддерживается в стандартной инсталляции (*8 - задается в
res_features.c +55, определяется параметром pickupexten в features.conf)
Call Recording: Используя приложение 'Monitor'
Conferencing: Используя приложение 'MeetMe?'
IVR: Поддерживается в extensions.conf через приложения Asterisk; применяйте AGI
или EAGI для большей функциональности
DISA: Прямой внутрисистемный доступ, позволяет при доступе к PBX снаружи,
донабором вызывать внутренних и внешних абонентов.
Voicemail: Система голосовой почты, когда абонент недоступен, занят или не
отвечает длительное время, вызов автоматически перенаправляется в систему
голосовой почты. Система голосовой почты имеет и другие дополнительные
интерактивные возможности.
Функции, поддерживаемые для SIP телефонов













Call Hold: Постановка вызова на удержание. Обычно реализовано в Вашем
телефоне,
Unattended Transfer (или "blind transfer"): Реализовано в сервере Asterisk (нажатие
'#'), дополнительно, может быть реализовано в Вашем телефоне.
Consultation Hold: Обычно реализовано в Вашем телефоне, для:
Unconditional Call Forwarding
Attended Transfer (или "consultative transfer")
No Answer Call Forwarding: Эту функцию Вы можете реализовать сами в плане
набора. Смотри: the tips & tricks page?.
Busy Call Forwarding: Эту функцию Вы можете реализовать сами в плане набора.
Смотри: the tips & tricks page?.
Single-Line Extension:
3-way Calling: Обычно эта возможность реализуется самим телефоном.
Incoming Call Screening: Эту функцию Вы можете реализовать сами в плане
набора.
Find-Me:
Call Pickup: Поддерживается, как стандартная функция.
Outgoing Call Screening: Эту функцию Вы можете реализовать сами в плане
набора.





Automatic Redial: Эту функцию Вы можете попробовать реализовать
самостоятельно в плане набора, с использованием некоторых AGI скриптов.
Manual Redial
Do-not-disturb (DND)
Message waiting (MWI): Реализовано в сервере Asterisk, но может поддерживаться
и самим телефоном.
Call waiting indication: Реализовано в сервере Asterisk, но может поддерживаться и
самим телефоном.
Функции, поддерживаемые для аналоговых телефонов,
подсоединенных через канал Zaptel.
Смотри: Asterisk vertical service activation codes? for ZAP channels

















Call Hold: Обычно эта возможность реализуется самим телефоном.
Unattended Transfer (или "blind transfer")
Consultation Hold: Обычно эта возможность реализуется самим телефоном, для
Unconditional Call Forwarding
Attended Transfer (или "consultative transfer"): Смотри: Asterisk tips zap transfer?
No Answer Call Forwarding: Эту функцию Вы можете реализовать сами в плане
набора.. Смотри: the tips & tricks page?.
Busy Call Forwarding: Эту функцию Вы можете реализовать сами в плане набора..
Смотри: the tips & tricks page?.
Single-Line Extension:
3-way Calling: Обычно эта возможность реализуется самим телефоном.
Incoming Call Screening: Эту функцию Вы можете реализовать сами в плане
набора.
Find-Me:
Call Pickup: Поддерживается, как стандартная функция.
Outgoing Call Screening: Эту функцию Вы можете реализовать сами в плане
набора.
Automatic Redial: Эту функцию Вы можете попробовать реализовать
самостоятельно в плане набора, с использованием некоторых AGI скриптов.
Manual Redial
Do-not-disturb (DND)
Message waiting (MWI): Реализовано в сервере Asterisk , также может быть
реализовано в Вашем телефоне.
Функции, поддерживаемые MGCP телефонами
Смотри: Модуль MGCP канала сервера Asterisk?









Manual Redial: Обычно эта возможность реализуется самим телефоном.
Unattended transfer (or "blind transfer"): Реализовано в сервере Asterisk (#)
Attended transfer: Реализовано в сервере Asterisk (FLASH)
Call Forwarding: Реализовано в сервере Asterisk (*72 и *73); дополнительно, может
быть реализовано в телефоне.
Call Pickup: Реализовано в сервере Asterisk (*8)
Call Waiting Indication: Реализовано в сервере Asterisk; Выключается, набором *70.
Call Number Delivery Blocking: Реализовано в сервере Asterisk (*67).
Do-not-disturb (DND): Обычно реализуется средствами Вашего телефона, но также
реализовано и в сервере Asterisk (*78 и *79).
Message waiting (MWI): Реализовано в сервере Asterisk, но может поддерживаться
некоторыми телефонами.
Функции, поддерживаемые для каналов CAPI
Смотри: Модуль CAPI канала сервера Asterisk?







Call Deflection (CD) (переназначение вызова без ответа на него): Поддерживается
модулем chan_capi.
CLIP & CLIR (display caller ID & hide my caller ID): Поддерживается модулем
chan_capi.
CID & DNID: Поддерживается модулем chan_capi.
HOLD & RETRIEVE: Постановка вызова на удержание средствами ISDN (а не
PBX): Поддерживается модулем chan_capi.
Early B3 Connects (always,success,never): Поддерживается модулем chan_capi.
DID (Для режима Point-to-Point): Поддерживается модулем chan_capi.
ECT (explicit call transfer): Preserve the orginial CID - Поддерживается модулем
chan_capi
Ссылки по теме:





Фукции PBX
CLASS? standard of vertical service codes
"внутренние" сервисные коды? для каналаов ZAP
Asterisk
Введение в Asterisk
Download