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