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,$)

Источник

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

Полезно

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

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

— Руководство администратора 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

Мы собрали концентрат всех must have знаний в одном месте, которые позволят тебе сделать шаг вперед на пути к экспертному владению 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) и перенаправление в случае отказа внешней линии.

Читайте также:  что делать если renpy не запускается

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

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

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

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

Синтаксис Gosub

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

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

Asterisk Dialstatus

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

Источник

Asterisk. Начало

На написание этой статьи меня побудило практически полное отсутствие how-to по настройке Астериска, с понятными новичку примерами. В сети можно найти кучу информации по настройке IVR, по настройке авторизации SIP-пользователей через LDAP, мануалов по созданию HA-кластеров с Астерисками внутри, etc., но нет ни одной статьи о том, как завести его с нуля, да и еще с примерами. Практически везде предлагается сразу же использовать все возможности, которые предлагает Астериск, а если убрать часть функционала, предлагаемого в мануале, то в большинстве случаев это приведет к получению неработоспособной конструкции. Эта статья — результат хождения по граблям… чтения мануалов. Если вы находитесь в такой же ситуации, что и я пару лет назад — добро пожаловать под кат.

И так, ситуация: вы только что узнали про Астериск и его возможности, и захотели использовать его у себя дома, или ваше руководство захотело IP-телефонию в офис.

Первое что нам необходимо — сервер с установленной операционкой. По ряду причин я выбрал для своих серверов CentOS 6. Все примеры будут с привязкой к этой ОС, так как именно на ней получаются наиболее стабильные сервера. Тем не менее, я ни коим образом не пытаюсь ограничить вас выборе. Астер нормально заведется и под Debian-ом, и под Arch-ем, и даже на FreeBSD. Замечу: желательно не пользоваться гипервизорами на начальном этапе, так как вы можете получить «металлический» голос, либо его полное отсутствие. Про таймеры и прерывания расскажу в следующей статье, так как их описание и настройка выходит за рамки этой статьи. В том случае, если свободного сервера у вас нет и без виртуальной машины не обойтись, обязательно ставьте x86-го гостя.

После того, как вы установили операционку на сервер, можно приступить к установке Астериска. Добавляем репозитории Didgium:

Важное замечание: цифра в конце строки указывает на мажорную версию Астериска. В примере будет установлена наиболее свежая версия из 12-й ветки, доступная в репозиториях.

После установки перезагружаем сервер и заходим в шелл Астериска:

Обратите внимание на ключи, c которыми запускается шелл. Количество ключей «v» влияет на количество выводимой информации при звонке, их количество варьируется от 1 до 14.

Если установка прошла успешно и Астериск запустился, вы увидите вот такое приглашение:

Поздравляю, Астериск установился и готов к работе. Но пока что шелл нам не нужен, поэтому пишем exit.

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

Первое что вам требуется сделать — создать пиров в файле /etc/asterisk/sip.conf. Открываем его:

И сразу переходим в конец файла. Вставляем следующий текст:

Мы завели двух внутренних пиров с номерами 100 и 101. Разберем эти настройки, так как их понимание — ключ к успешному внедрению Астериска.

[internal], это имя шаблона, а (!) указатель шаблона.
Почему сразу начинаем использовать шаблоны? Потому что они сокращают время настройки и уменьшают количество текста с конфигурационном файле, а для понимания они очень просты.

Доступные параметры: «peer», «user» и «friend». Очень часто встречается ошибочное мнение относительно того, чем они отличаются. Многие считают, что параметр «user» разрешает только исходящие, «peer» — только входящие звонки, а «friend» разрешает звонки в обе стороны. Это не так. Использование ключа «peer» отключает проверку соответствия имени пользователя и пароля при звонке. При использовании параметра «peer», Астериском проверяется только соответствие IP-адреса и номера порта источника вызова, при использовании «user» — проверяется поле username, а проверка адреса источника не производится. Параметр «friend» заставляет проверять поле username и IP-адрес источника.

insecure=invite,port
invite — отключается аутентификация при входящем звонке.
port — отключается проверка порта источника.

При первоначальной настройке пропишите оба ключа.

Контекст, в котором будут обрабатывается исходящие звонки от этого устройства. Подробности чуть ниже.

Имя SIP-домена. Для первоначальной настройки укажите IP адрес сервера с Астериском.

IP-адрес пира. В случае использования авторизации по логину и паролю — ставьте dynamic. Конкретный IP указывается только в том случае, если настройки пира используются для транка без регистрации.

Указываем разрешенные кодеки.

В нашем примере первая строка запрещает использование всех кодеков, а вторая — разрешает g711-a. Настройки кодеков индивидуальны для каждого случая, однако, большинство Российских и Украинских провайдеров используют g711a и g729. Последний — пропиетарный, и Астериском поддерживается лишь в Passthrough-режиме (то есть, невозможен транскодинг).

Эта строка заставляет Астериск опрашивать устройство или софтфон пакетами OPTIONS. Необходим для мониторинга и траблшутинга.

Запрещает пересылать медиа напрямую между устройствами. Рекомендую ставить «no», для упрощения настройки.

Говорим Астериску, что пир не за натом. Описание ключей и вариантов их использования, если сервер за ним, выходит за рамки статьи. Про варианты обхода расскажу в следующей статье.

[100](internal)
secret=XXX
[101](internal)
secret=XXX

Тут мы задаем имя пира и берем настройки из шаблона. Единственные уникальные параметры в нашем примере — имя пира и пароль.
На этом мы закончили настраивать внутренних пиров, перейдем к настройке стыка с операторами. Добавим 2 записи в конец sip.conf:

Читайте также:  при каком кашле пьют аскорил сироп

Не буду расписывать значения каждой строки, т.к. все настройки идентичны настройкам внутренних пиров, за исключением поля host. В том случае, если Астериск выступает в роли клиента (а для сервера оператора наш астериск является клиентом), нам нужно указать адрес сервера оператора или его dns-имя.

Добавим второго оператора:

Отличий тоже никаких, за исключением отсутствия строк username и secret, так как, напомню, второй оператор не использует регистрацию.

Осталось настроить регистрацию на сервере оператора №1. Для этого в файле sip.conf, перед секцией описывающей настройки оператора вставим следующую строку:

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

Наверняка вы редактировали файлы конфигурации под пользователем с ограниченными правами. Если это так, то Астериск не сможет получить доступ к файлу конфигурации, поэтому пишем:

На этом настройка пиров закончена, ее достаточно для работы в минимальной конфигурации, сохраняем и закрываем файл и возвращаемся в шелл Астериска командой:

В шелле Астериска пишем команду:

Теперь вы можете зарегистрировать на своем Астериске пользователей с логинами 100 и 101. Проверяется состояние регистрации следующей командой:

Если вы все настроили правильно, то увидите примерно вот такой вывод:

Если вы это видите, то, поздравляю, ваши устройства или софтфоны успешно зарегистрировались и Астериск увидел сервера операторов.

Состояние регистрации проверяется командой:

Если регистрация прошла успешно, то вы должны увидеть вот такой вывод:

На этом настройка пиров закончена, перейдем к настройке диалплана. Диалплан — это сердце Астериска, с помощью него обрабатываются абсолютно все звонки. Астериск понимает несколько языков, но в нашем примере мы будем использовать стандартный, появившийся в самых первых релизах Астериска. Файл конфигурации хранится в файле /etc/asterisk/extensions.conf.

Откроем его командой:

В стандартных файлах конфигурации хранится много дефолтных правил. Они нам не нужны, поэтому очистим содержимое и пропишем следующее:
Это параметры необходимые для нормального чтения диалплана, поэтому менять их не следует.

Начнем с простого. Нам нужно позвонить с номера 100, на номер 101. Для этого нужно прописать правило, сразу после секции globals:

Разберем эту строку.
[office] — имя контекста, в котором обрабатываются звонки от пира.
exten => — указатель начала шага.
_1XX — маска. На маске остановимся чуть подробнее. С помощью нее сортируются все звонки, попадающие в контекст диалплана.

Маска использует набор паттернов для сортировки звонков по caller-id:

Маска начинается с символа «_», который означает что это шаблон. В случае, если вы забудете указать его, Астериск примет 1XX за вызываемый номер и передаст Dial-у паттерны вместо номера телефона, и звонок не состоится.
1 — номер действия.

Dial — это приложение. В диалплане можно использовать более 200 различных приложений, которые используются для манипуляций со звонками. Сейчас, в самом начале, мы будем использовать только одно приложение — Dial. Из названия понятно, что оно используется для совершения звонков.

/ — разделитель для передаваемых аргументов.

Каждый из параметров разделяется запятыми. В нашем примере используются трехзначные номера, поэтому в маске должно быть 3 паттерна. В случае, если вы захотите использовать иную длину нумерации, то пишите в маске нужное количество паттернов. Теперь сохраняем файл, открываем шелл астериска и пишем команду:

Если возникли проблемы с доступом к файлу, то пишем:

И снова перезагружаем диалплан через шелл Астериска.

Теперь пробуем звонить. Если вы все правильно настроили, то пир с номером 100 дозвонится до пира с номером 101. Сейчас мы можем звонить внутри офиса, между пирами, которые работают в контексте office. Для того что бы позвонить в город, нам нужно написать правило для исходящих звонков через первого оператора. Прописываем его в контекст office, выглядит оно так:

Перезагружаем диалплан и пробуем звонить в город.

Теперь нам надо принять входящий звонок. Сделаем новый контекст в диалплане, пишем в конец файла:

Поясню что означает «s». Это стандартная маска в Астериске, под которую попадают абсолютно все вызовы. То есть, если мы используем транк с регистрацией, входящий caller-id будет «s».

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

Сейчас нам понадобилось позвонить на сотовый телефон, с федеральным номером. Допишем еще одну строку в контекст [office]:

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

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

С такой конструкцией все звонки на телефоны с кодами из диапазонов 890982XXXXX-890999XXXXX и 8901421XXXX-8901651XXXX пойдут через первого оператора. Не совсем удобно, соглашусь с этим. В будущих статьях выложу конфигурацию диалплана для автоматического выбора оператора в зависимости от направления звонка, так как подобное опять же выходит за рамки этой статьи.
Теперь нам осталось пустить междугородние звонки через второго оператора. Добавляем строку в контекст [office]:

Как вы заметили, тут появились новые приложения, которые обрабатывают звонки. Set(CALLERID(num)=74991234567) — так как мы используем транк без регистрации, то это значит что мы должны отсылать оператору caller-id. Этот номер не обязательно должен существовать. Тут мы просто представляемся провайдеру и не более. Какой номер подставлять — зависит от оператора. Некоторые предоставляют услугу подмены caller-id на номер другого оператора, для совершения исходящих вызовов по межгороду или для зоновуй связи. За подробностями обращайтесь к оператору. same => n — указатель, который позволяет не писать каждый раз маску и номер действия. К примеру:

Во втором случае все гораздо проще, не так ли?

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

Источник

Сказочный портал