Диалплан asterisk что это

Диалплан asterisk что это. Смотреть фото Диалплан asterisk что это. Смотреть картинку Диалплан asterisk что это. Картинка про Диалплан asterisk что это. Фото Диалплан asterisk что этоНаиболее важным для понимания 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. Таким образом, мы можем предпринять различные действия, на основании статуса канала.

Источник

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.
Диалплан asterisk что это. Смотреть фото Диалплан asterisk что это. Смотреть картинку Диалплан asterisk что это. Картинка про Диалплан asterisk что это. Фото Диалплан asterisk что это

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

Источник

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

Полезно

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

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

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

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

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

Навигация

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

Телефония

FreePBX и Asterisk

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

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

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

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

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

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

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

Диалплан asterisk что это. Смотреть фото Диалплан asterisk что это. Смотреть картинку Диалплан asterisk что это. Картинка про Диалплан asterisk что это. Фото Диалплан asterisk что это

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

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

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

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

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

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

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

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

Приоритеты

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

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

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

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

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

Диалплан asterisk что это. Смотреть фото Диалплан asterisk что это. Смотреть картинку Диалплан asterisk что это. Картинка про Диалплан asterisk что это. Фото Диалплан asterisk что это

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

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

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

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

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

Источник

База знаний

Совет: с помощью 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:Диалплан asterisk что это@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 для «чайников»

Общее понятие диалплана

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

Время от времени возникает необходимость, чтобы один и тот же номер для разных абонентов (или в разное время) выполнял разные функции.

Например, когда на Кубу звонит директор, набирая номер 1234, АТС должна соединить через оператора телефонии с кубинским номером. Если же на этот номер попытается позвонить (к примеру) грузчик или уборщица [со своих местных телефонов], то должна включиться другая функция АТС, воспроизводящая голосовое сообщение типа «звонок на этот номер запрещен».

Другой пример: в рабочее время со своего телефона директор может звонить куда угодно, в том числе и на Кубу. В ночное же время и в выходные дни (например, если охранник ночью захочет воспользоваться телефоном директора) при звонках на Кубу АТС включит функцию, запрашивающую пароль для разрешения звонка.

Для того, чтобы обеспечить подобный функционал, asterisk использует понятие контекстов. В рамках одного контекста номера телефонов должны быть уникальными и (если упрощенно) для каждого набираемого номера (или группы номеров) можно включить только одну функцию, например: при наборе номера 1234 можно сделать любое (но только одно) из действий:

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

А как быть, если хочется, чтобы в разное время для одного и того же телефона срабатывали разные функции? Да и не хочется для разных контекстов (контекст1, контекст2, контекст3) повторно описывать одно и то же действие (разрешить звонки на местные номера).

И напоследок обратите внимание: в диалплане указываются номера, на которые выполняются звонки, а не номера тех, кто совершает звонки.

Источник

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

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