Что такое диалплан в астериск

ИТ База знаний

Полезно

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Теория: Диалплан в Asterisk

План набора в Asterisk

Базовый курс по Asterisk

Мы собрали концентрат всех must have знаний в одном месте, которые позволят тебе сделать шаг вперед на пути к экспертному владению Asterisk

Что такое диалплан в астериск. Смотреть фото Что такое диалплан в астериск. Смотреть картинку Что такое диалплан в астериск. Картинка про Что такое диалплан в астериск. Фото Что такое диалплан в астериск

Формат диалплана

Диалплан в файле extensions.conf структурирован в секции, называемые контекстами. Контекстом называется сущность внутри диалплана, которая позволяет функционировать его различным частям совершенно независимо. Контексты используются для разделения функций, улучшения безопасности между различными частями диалплана, настройкой классов обслуживания для разных пользователей и так далее.

Контексты в диалплане

Экстеншены в диалплане

Внутри каждого контекста необходимо обозначит один или более экстеншенов. Экстеншен по сути это определенный список действий с определенным названием. После набора номера экстеншена, Астериск последовательно выполняет каждое действие.

Синтаксис у экстешена следующий:

exten => 101,1,Dial(PJSIP/celecom, 20)

В данном случае, номер экстеншена – 101, номер приоритета – 1, используемое приложение – Dial(), с параметрами PJSIP/celecom и 20.

Приоритеты

Внутри каждого экстеншена должен быть один или более номеров приоритетов. Приоритет это просто число, от 1 до N. Команда с первым приоритетом будет соответственно исполнена первой, после её завершения будет исполняться команда с приоритетом 2 и так далее.

Обязательно нужно использовать последовательные числа, иначе выполнение сценария будет прервано.

В примере выше выполнение сценария прервется после строчки с приоритетом 2, по причине того, что отсутствует приоритет с номером 3.

Кроме того, вместо номера приоритета можно указывать литеру n (next). То есть возможен такой сценарий:

Если не хочется постоянно писать номер экстеншена, можно использовать функцию same.

Что такое диалплан в астериск. Смотреть фото Что такое диалплан в астериск. Смотреть картинку Что такое диалплан в астериск. Картинка про Что такое диалплан в астериск. Фото Что такое диалплан в астериск

Порядок обработки диалплана

Порядок считывания экстеншенов внутри контекста идёт сверху вниз, причем вложенные контексты обрабатываются первыми. То есть к примеру у вас есть три контекста – X, Y и Z. Если вы хотите чтобы контекст Z обрабатывался первым, просто сделайте его вложенным контекстом для контекста X.

Порядок поиска таков:

Продвинутый курс по Asterisk

Концентрат редких знаний, для внедрения Asterisk в крупных предприятиях. Все это мы собрали в одном курсе для тебя.

Источник

Диалплан на LUA для Asterisk

Приветствую всех. Когда-то тема использования языка программирования lua при написании диалплана в Астериске для меня стояла довольно жёстко. Дело в том, что мне сильно не нравится работать с различными GUI (типа FreePBX) при настройке Астериска.

Когда я всё настраивал в первый раз, работал с обычным линейным extensions.conf. Время шло, потребности в функционале телефонии росли. Язык lua постепенно немного изучил. И вот пришёл я работать админом в одну крупную компанию в нашем городе (одно крупное агентство недвижимости) — около 45 филиалов на тот момент было, примерно 650 — 700 пользователей, включая межгород и т.д. Там уже стоял Asterisk, но всё настроено было с использованием FreePBX.

Почти сразу руководство начало меня заваливать различными вопросами по наворотам Астериска. Например, хотели, чтобы при входящем звонке в какой-то филиал, звонки внутри филиала были распределены случайным образом. Хотели иметь запись разговоров в mp3, хотели сделать общую группу, куда можно было бы включить вообще все филиалы и при наборе какого-то номера, чтобы случайно попасть на один из филиалов и т.д. Задачи вроде простые, однако сидеть решать даже такие вопросы средствами графического интерфейса лично мне было не очень интересно.

Был ещё один важный момент — качество работы телефонии в целом на тот момент было просто ужасным. Голос постоянно булькал, звонки разрывались, абонента не слышно, сам астер часто крашился и т.д. Смотрю на файлик диалплана, а он размером в 16 мб. Открыл редактором текста — и что тут делать? Там строк в несколько миллионов.

Решил переделать, перекинув всё на lua. Примерно через пару дней после начала разработки я уже смог представить первый прототип диалплана на lua, вполне рабочий, но без существующих «фишечек» и «рюшечек». Заменил им весь старый конфиг и далее ещё в течение недели накидал основные навороты, которые хотело видеть руководство. Так же обновил самого астера до 11-й версии (на тот момент 11.3.0, кажется). Далее в процессе работы иногда поглядывал в файл диалплана и подпиливал то, что сам хотел или хотело руководство. В итоге астер с диалпланом на lua работал значительно быстрее и более стабильно, чем прошлый.

Условия в которых работала «станция»:

cpu: intel xeon e5520 (если не ошибаюсь)
ram: 24gb
и другие «железные» параметры, включая два гигабитных сетевых интерфейса и рэйд1
количество вн.абонентов: около 700
количество транков: около 10 (из которых 2 это провайдеры, остальные это gsm шлюзы addpack).
количество «городских» номеров: около 200 (150 номеров от одного провайдера и примерно50 или чуть больше от второго).

Городские номера тут были закреплены за каждым филиалом. За некоторыми филиалами даже по два или три номера. Поскольку все звонки из города прилетали в контекст, далее я делал разбор по did и передавал звонок на нужный филиал.

Средствами lua реализовал ring groups, сделал два варианта вызова абонента — случайное и по порядку перечисления в группе (за исключением занятых абонентов). Прикрутил lua-sql для записи собственной базы звонков (дополнение к cdr). Это было сделано вот для чего: сотрудник звонит клиенту на сотовый, клиент сейчас не захотел разговаривать (занят или ещё что); через некоторое время он перезванивает на определённый ранее номер и должен попасть к тому же сотруднику, который ему до этого звонил. Я сделал запись события «звонок на мобильный» в отдельную базу. Когда клиент с сотового перезванивает, я по событию «звонок с сотового» поднимаю прошлый звонок и отдаю клиента на нужного сотрудника. Запоминался только один такой сотрудник. Т.е. если этому клиенту позвонит ещё один сотрудник. то соответственно, звонок вернётся к нему.

Сейчас я уже не работаю в той компании, а там где сейчас — меняю старую АТС на Астериска и, конечно, использую старую свою наработку. Вспомнил, что тема интересна была не только мне. Ну а поскольку по этой теме информации крайне мало, решил накидать вот эту статью, вдруг кому-то пригодится.

Теперь перейду к самой сути темы — кодинг на lua. Описывать стадию включения модуля pbx_lua не буду — информации тут много. Например, сейчас у меня стоит Centos 6.6, там в стоке уже есть lua. Я докинул только пакет lua-devel и включил модуль pbx_lua в menuselect.

Дополнительно, если кто собирается использовать ручное подключение к mysql (или к другой базе), то лучше докинуть пакет lua-sql, предварительно установив luarocks и оттуда закачав это дополнение.

Далее в самом диалплане можно описать пользователей и правила набора, что-то типа того:

тут [«_XXномер»] — шаблон. Т.е. всё тоже самое, что и в обычном extensions.conf.
call_local — функция на которую ссылается данное описание. Т.е. при наборе номера, скажем, 14555, будет вызываться функция call_local. Так же эта функция может вызываться при входящем внешнем звонке.

Тут есть несколько проверок на некоторые группы и статусы. Например, 4550 — это группа технической поддержки. Для неё есть отдельная функция, в которой есть обработка занятости сотрудников, информирование «вн.клиента», запись журнала и сброс предупреждения о пропущенном звонке в тех.поддержку через jabber.

Если вызываемый абонент является группой, тогда смешать список и вызвать случайного абонента.

Почему я использую случайный метод вызова абонентов из групп? Филиалы — это, по сути своей, менеджеры продаж. Если включать последовательный вызов сотрудников филиала, то всегда у первых в списке будет продаж больше, чем у других (читинг). Аналогично обстоят дела и с методом mem-primari (кажется), при котором пользователь ответивший в прошлый раз будет игнорирован. Метод случайного смешивания более честный, ставит всех «продажников» в равные условия. Можно сделать конечно call-all (звонить всем одновременно), но тогда филиалы начинают жаловаться, что в филиале все телефоны «орут» одновременно это не удобно, шумно и т.д.

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

Далее, входящие из города, описание:

Тут я все внешние входящие я заворачиваю в foo.

В данном случае определяю сотовые номера и внешние номера (did). Если звонящий звонит на местный сотовый (симка в gsm шлюзе), тогда беру последнего звонившего абонента и отправляю этого клиента к нему. Так же есть определение из списка ngs_rec. Тут номера заранее определены как «рекламные». Это был старый метод (потом переделал, но в этой версии файла из которой беру код данной доработки нет). Все рекламные номера отправляю на спец.номера в конторе и делаю отметку в базе, что был звонок на номер, указанный в рекламе.

Пока, думаю, хватит кода на данный момент. Если у кого-то появится интерес к переходу от старого диалплана к lua, думаю, смогу продолжить и разъяснить более детально некоторые вещи. Хотя, если кто-то уже знает, как программировать на Lua, проблем совершенно не будет.

В завершении хочу сказать, что, конечно, на сегодняшний день существует целая пачка разных навороченных решений, типа VoxImplant и подобных. Многим вообще не привычно работать в консоли и что-то своё кодить. Но, хочу заметить, что когда размеры компании большие (от 50 абонентов и выше), то выстраивание логики работы «станции» при помощи кнопочек и галочек в графическом интерфейсе в итоге могут приводить к проблемам. Выше в начале статья я приводил примеры про бульканье и обрывы. Диалплан на lua весит всего 24кб, 968 строк.

На нём работали почти 700 абонентов без каких-то проблем.

Источник

База знаний

Совет: с помощью vim syntax highlighting вы можете значительно облегчить работу Dialplan’а и, что более важно, сделать ее менее ошибочно фоновой (to typos).

Новое в Asterisk v1.6:

Новое в Asterisk v1.2: Появился новый параметр с именем » autofallthrough» для файла extensions.conf, который, по умолчанию, установлен в значение yes. В алгоритме работы Asterisk 1.0 (и более ранних) было заложено то, что Asteerisk ожидает набора номера екстеншена после того, как для вызываемого екстеншена нет больше команд, которые можно было бы выполнить. Параметр «autofallthrough» меняет этот режим и, если команды кончились, то вызов будет немедленно завершен с причиной BUSY, CONGESTION, или HANGUP, в зависимости от того, какая причина более подходит, по мнению сервера Asterisk. Если вы описываете екстеншен, для системы голосового меню (IVR), то вы должны использовать команду WaitExten, если у Вас параметр «autofallthrough» установлен в значение yes.

Включение одного контекста в другой

Один контекст может содержать другие контексты. Например, рассмотрим следующие контексты:

Context «default»:
Extension Description
101 Mark Spencer
102 Wil Meadows
0 Operator

Context «local»:
Extension Description
_9NXXXXXX Local calls
include => «default»

Context «longdistance»:
Extension Description
_91NXXNXXXXXX Long distance calls
include => «local»

Когда Asterisk принимает входящий вызов на канале, то он просматривает контекст, который определен для обработки вызовов этого канала, на предмет того, что с этими вызовами нужно сделать. В контексте определены разные, для каждого вызываемого пользователями екстеншена, наборы команд. Например, в контексте может быть определен один набор команд, если пользователь набрал «123», и другой набор команд, если пользователь набирает «9», и совершенно другой, если он набирает любое число, начинающееся с «555».

Для некоторых видов соединений, таких как поступающие звонки с внешней телефонной линии, присутствует только сам факт вызова, а не набор какого-либо номера. В этом случае, Asterisk ведет себя так, как будто пользователь набрал специальный екстеншен с именем «s» (Start). Тогда Asterisk будет искать «номер» екстеншена с именем s в контексте того канала, через который пришел данный вызов.

Например, у нас есть канал «Zap/1», соединененный с телефонным аппаратом в Вашем здании. И предположим, что в файле конфигурации для канала Zap (zapata.conf) Вы определили context=john для канала Zap с номером 1. Итак, когда Вы снимаете телефонную трубку, чтобы набрать номер, тогда Asterisk будет искать контекст с именем «john» в плане набора extensions.conf, чтобы найти набор команд, которые надо выполнить. Вы должны каждое определение контекста в файле extensions.conf начинать с определения его имени, помещенного в квадратные скобки, например, так:

Для каждого контекста, Вам надо определить одни или несколько екстеншенов, которые Asterisk будет сравнивать с набранным номером. В каждом екстеншене Вы указываете серверу Asterisk, что необходимо сделать с этим вызовом, указывая набор команд.

Екстеншены

Екстеншены могут быть двух типов: цифробуквенный или шаблонными.

Цифробуквенный екстеншен может быть числом, таким как 123, а так же может содержать стандартные символы * и #, которые есть у обычных телефонов, так что имя 12#89* является вполне правильным именем екстеншена. Некоторые телефоны имеют на клавиатуре дополнительные DTMF кнопки A, B, C и D, следовательно, имена екстеншенов могут быть определены и с этими символами. Фактически, название екстеншена может содержать любую латинскую букву или число, а так же некоторые знаки препинания. Стоит отметить, что многие VOIP телефоны в состоянии «вызвать номер екстеншена», который может быть обычной текстовой строкой, например, такой как «Office». Следовательно, вполне допустимо задать екстеншен с именем Office в плане набора Asterisk.

Являются ли имена екстеншенов регистрозависимыми? И да, и нет. Являются в том случае, когда Asterisk пытается сопоставить «номеру», набранному пользователем, екстеншен, определенный в контексте, они должны полностью совпадать, включая регистр. Итак, если пользователь в своем VOIP телефоне вызывает екстеншен «OFFICE», тогда Asterisk не будет выполнять команды, которые Вы могли бы определить для екстеншена с именем «Office». С другой стороны, имена екстеншенов регистронезависимые, в том плане, что в одном контексте нельзя определить наборы команд для екстеншенов, которые имеют одинаковые имена и отличаются только регистром. Итак, Вы не сможете в одном контексте определить один набор команд для екстеншена Office и другой для екстеншена OFFICE.

Предопределенные названия екстеншенов (стандартные екстеншены)

Определение екстеншенов

exten = extension, priority, Command(parameters)

можно использовать эквивалентную форму, где после символа «=» идет символ треугольной скобки: «=>». Данная форма определения используется во многих примерах.

Итак, у нас есть контекст с определенным именем, например, «vasja». И в каждом контексте Вы можете определить один или несколько «екстеншенов». Для каждого из этих екстеншенов Вы должны определить набор выполняемых команд. Итак, как же Вам определить эти екстеншены и наборы команд для них? Все просто, Вам нужно отредактировать файл extensions.conf любым текстовым редактором. Однако, существуют некоторые приложения, которые могут помочь Вам в этом занятии: GUI tool.

Каждый компонент, выполняемой команды для екстеншена, или строки команды, содержит следующие части:

Пример

exten => 123,1,Answer
exten => 123,2,Playback(tt-weasels)
exten => 123,3,Voicemail(44)
exten => 123,4,Hangup

Это определение единственного екстеншена с именем «123». Когда приходит звонок на екстеншен 123, Asterisk сам ответит на звонок, проиграет звуковой файл с именем «tt-weasels», даст возможность оставить пользователю голосовое сообщение для голосового ящика 44, и затем повесит трубку.

Стоит отметить, что Asterisk не волнует, в каком порядке Вы размещаете команды в файле extensions.conf. Вы можете размещать команды в каком угодно порядке, как в нижеприведенном примере, и это ни как не отразится на порядке выполнения команд, т.к. Asterisk использует приоритет команд для определения порядка выполнения:

exten => 123,4,Hangup
exten => 123,1,Answer
exten => 123,3,Voicemail(44)
exten => 123,2,Playback(tt-weasels)

Другой вариант выбора екстеншена основывается на номере вызывающего абонента, «логика параноика». По этой логике мы определяем набранный екстеншен, в зависимости от того, откуда поступил вызов, основываясь на caller-ID звонящего. Например:

exten => 123/100,1,Answer()
exten => 123/100,2,Playback(tt-weasels)
exten => 123/100,3,Voicemail(123)
exten => 123/100,4,Hangup()

exten => 1234/_256NXXXXXX,1,Answer()
and so on.

Эта запись соответствует екстеншену 1234, если Caller ID у вызывающего абонента будет чем-то начинающимся с 256. Это бывает довольно полезно, если Вы хотите оградить себя от ненужных звонящих персон.

Так же можно сделать и так:

exten => s,1,Answer
exten => s/9184238080,2,SetCIDName(EVIL BASTARD)
exten => s,2,SetCIDName(Good Person)
exten => s,3,Dial(SIP/goodperson)

В контекстах плана набора можно использовать только следующие директивы: exten, include, ignorepat и switch.

Переменные и выражения

Перезагрузка плана набора

Если Вам необходимо перезагрузить план набора для того, чтобы сделанные в нем изменения вступили в силу, не перегружая все остальные конфиги Asterisk, используйте команду CLI Asterisk: extensions reload.

Что использовать один большой файл или несколько маленьких?

Перенаправление вызовов на другой Asterisk

Синтаксис:
[iaxprovider]
switch => IAX2/user:Что такое диалплан в астериск@server/context

Получение данных для extensions.conf из внешних источников

[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($,20,t)
exten => s,2,Voicemail(u$)
exten => s,3,Hangup
exten => s,102,Voicemail(b$)
exten => s,103,Hangup

[local]
exten => 6601,1,Macro(oneline,$)
exten => 6602,1,Macro(oneline,$)

Источник

Asterisk 05 Dialplan

В системе Asterisk Dialplan определяется файлом:
/etc/asterisk/extensions.conf.

Пример дилплана можно посмотреть:
/home/asteriskpbx/src/asterisk-complete/asterisk/asterisk-11.19.0/configs/extensions.conf.sample

Dialplan строится на основе 4-х основных концепций:
— contexts
— extensions
— priorities
— applications

Context

Диалплан разбивается на секции называемые Contexts.
Context позволяет изолировать составляющие части диалплана друг от друга.
Аналог Asterisk Context есть CUCM Partition.

Контекст обозначается внутри квадратных скобок например [general].
При именовании можно использовать буквы и цифры, а также «-» и «_».

Существуют системные контексты:
[general], [globals], [default]

Каждый channel всегда задаётся со своим context. Именно в этот Context прибегает набранный номер данного channel.
Что такое диалплан в астериск. Смотреть фото Что такое диалплан в астериск. Смотреть картинку Что такое диалплан в астериск. Картинка про Что такое диалплан в астериск. Фото Что такое диалплан в астериск

Extensions

В каждом Context мы можем определить Extensions. Extension может ссылаться например на физический телефон.

exten => name,priority,application()

Priorities

Каждая extension может иметь несколько шагов, т.е. при её вызове будет выполняться несколько команд. Последовательность выполнения задаётся через Priority.
Например:

Unnumbered priorities

Поскольку нумерация «в лоб» неудобна при большом количестве команд, можно использовать «n» priority, что означает «Next».

The same => operator

Чтобы каждый раз не повторять номер Extension, можно применить оператор «same», такая форма лучше воспринимается и наиболее рекомендована:

Priority labels

Priority labels позволят нам ссылаться на данный шаг.

Applications

Applications это собственно команды, через которые в диалплане запускаются конкретные действия.

При задании относительного пути, будет использоваться Asterisk sounds directory.

Simple Dialplan

Приведём несколько примеров:
При наборе 200 проигрывает «hello world»

Interactive Dialplan

В данном примере мы поместили меню в отдельный Context.
При этом extension имеет имя «start» это сделано для удобства: Самому Asterisk всё равно с чем работать в качестве extension, а номер «start» не понадобится набирать вручную.
Также здесь используются служебные extensions i и t, который позволяют обработать Invalid entry и Timeout.

Dial() application

Синтаксис Dial() более сложен и включает в себя 4 аргумента:

Argument 1 Destionation

The technology is DAHDI, and the resource (or channel identifier) is 1.

Dial нескольких channels одовременно (разделены (&)). Dial() application начнет набирать все эти channels одновременно и соединит с тем каналом, который ответит первым (остальные тут же звонить перестанут).

Сonnect to a remote VoIP endpoint not previously defined in one of the channel configuration files

Argument 2 Timeout

Таймаут задаёт время в секундах, сколько ожидать ответа.

Argument 3 option

Может включать один или несколько символов изменяющих поведение Dial() Application.
Наиболее часто используют m option. В этом случае calling party будет слышать музыку(music on hold) вместо гудков.

Argument 4 URI

Для работы с этим аргументом необходимо чтобы destination channel поддерживал его приём.
Например софтфон умеет отображать сообщение на экране.
Аргумент очень редко используется.

Blank arguments

Если нужно указать лишь 1 и 3 аргументы:

Диалплан с использованием Dial()

Использование переменных

Переменные могут быть использованы для упрощения ведения диалплана, улучшения его читаемости, логичности.

В данном примере в перво строке мы задаём переменную LEIF.
В второй запрашиваем её значение.

Существуют три типа переменных: global variables, channel variables, and environment variables.

Диалплан и использованием переменных

Pattern matching

Pattern matching позволяет создавать шаблоны, т.е. одно extension matches множество различных номеров.

Рассмотрим синтаксис Asterisk Pattern matching:

Примеры применения шаблонов

Pattern matches any three-digit extension from 200 through 999.
Т.е. при наборе любого из итих номеров мы услышим музыку.

Важное правило:
If Asterisk finds more than one pattern that matches the dialed extension, it will use the most specific one.
Например:

Здесь при наборе номера 5551223 будет выбран второй шаблон.

Примеры шаблонов

Matches any seven-digit number, as long as the first digit is 2 or higher
_NXXXXXX

Pattern matches any number that starts with 011 and has at least one more digit.
_011.

В данном примере Asterisk будет произносить набранный номер:

Часто необходимо манипулировать набранным номером, например откусывать девятку выхода в город.

Include

Источник

Что такое диалплан в астериск. Смотреть фото Что такое диалплан в астериск. Смотреть картинку Что такое диалплан в астериск. Картинка про Что такое диалплан в астериск. Фото Что такое диалплан в астерискНаиболее важным для понимания Asterisk является план набора (dialplan). Все вызовы, будь-то очередь, конференция, меню автосекретаря или вызов телефона, определяются логикой и концепцией диалплана.

Введение в расширения (extensions) и контексты (context)

Каналам назначаются контексты. Контексты определяют правила набора для каналов
План набора состоит из одного или нескольких контекстов. Каждый контекст это просто набор расширений (екстеншенов). Каждый екстеншен в контексте имеет уникальное имя.

Контексты используются для выполнения основных функций АТС :

Что такое екстеншен?

Пример простого екстеншена

Этот екстеншен состоит из 4-х действий.

Например:

Использование приоритета ‘n’ позволяет легко редактировать отдельные строки не переписывая все приоритеты.

Набор номера

Чаще всего вызывается другой интерфейс. Вызов осуществляется командой Команда Asterisk Dial.

Этот пример иллюстрирует разные варианты действий в случае, если на вызов не ответили. Сначала вызывается канал DAHDI /1, если через 20 секунд никто не ответил вызов пренаправляется на VoiceMail() с объявлением «абонент не отвечает»(u100), Если же абонент занят, вызов перейдет на приоритет N+101, в нашем случае это приоритет 102.

Маршрутизация по CallerID

Пример маршрутизации по номеру вызывающего абонента.

Ещё один пример маршрутизации, теперь по отсутствию CallerID.

В данном примере если поступает звонок без CallerID, вызов блокируется с помощью приложения Zapateller()

Вызов группы телефонов

Часто требуется чтобы вызов по не ответу перешел на другой телефон. Рассмотрим как это сделать на примере «оператор».

Asterisk IVR

Голосовое меню как правило задается в собственном контексте.

Использование переменных

$ Текущий контекст.
$ Текущий екстеншен.
$ Текущий екстеншен с удалением первых цифр(где х кол-во удаляемых цифр)
$ Текущий приоритет
$ Текущий CallerID (имя и номер)
$ Текущий номер Caller ID
$ Текущее имя Caller ID
$ перенаправление DNIS

Глобальные переменные назначаются в секции [globals] диалплана. Рассмотрим следующий пример:

Организуя диалплан таким образом, можно быстро и легко переназначать физические интерфейсы для конкретных пользователей, часто используемых в контекстах.

Вложенные контексты

Один контекст может включать другие контексты, обрабатываемые в порядке перечисления. Смотри также Порядок выбора нужного екстеншена при использовании шаблонов.

Пример:

В этом примере контекст local_long включает два других контекста для городской и междугородней связи, а контекст ‘local_only’ только для городской.

Дневной / Ночной режимы. Маршрутизация по времени

Вложенные контексты можно использовать для реализации дневного, ночного и празничного режимов. Рассмотрим следующий пример:

В этом примере заданы дневной, ночной и праздничный режимы прихода звонков.

Исходящие вызовы

Направление исходящей связи можно реализовать определением короткого кода доступа (например ‘9’), или определить полностью шаблон набираемых номеров.

Конструкция ‘ignorepat ⇒ 9 ‘ говорит Астериску не отключать тон готовности после набора заданной цифры.

Шаблоны Patterns

Екстеншены могут сопоставляться шаблону, вместо однозначно заданных цифр.

Шаблон должен начинаться с символа подчеркивания _ и может использовать любой из следующих символов:

Резервные транки и LCR (выбор направления с наименьшей стоимостью)

Весьма полезно настроить LCR (Least Coast Routing) и перенаправление в случае отказа внешней линии.

Использование Макросов

Вам может потребоваться создать множество екстеншенов (расширений) очень похожих друг на друга. Чтобы упростить работу с диалпланом используются Макросы. Для создания макроса используется контекст имя которого начинается с «macro-» и далее уникальное имя макроса. Выполнение макроса начинается с ектеншена ‘s’. В макросах используются локальные переменные:

Когда макросы [macro-oneline] и [macro-twoline] созданы, в контексте [default] надо написать только одну сроку для выполнения нескольких стандартных действий.

Приложение Macro объявлено устаревшим, вместо него рекомендуется использовать GoSub.

Синтаксис Gosub

Запись разговоров Asterisk

Структура same ⇒ позволяет сократить код, избежав многочисленных повторений «exten ⇒ s,» в данном случае.

Asterisk Dialstatus

Команда GoTo(s-$,1) направляет выполнение диалплана в расширение s-$ в данном контексте, приоритет 1. Таким образом, мы можем предпринять различные действия, на основании статуса канала.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *