Инструменты пользователя

Инструменты сайта


handbook:prefix

Обработка входящих вызовов. Файл extensions.conf

Часто возникает необходимость переопределения формата входящих номеров, например, заменить префикс входящего звонка от некоторого провайдера с «7» на «8».
Предположим, у нас есть две объединенные АТС Askozia, условно обозначим их АТС Москва и АТС Питер (статьи по объединению двух АТС: Объединение двух станций Askozia и Соединяем MyPBX U100 c Askozia).
Необходимо, чтобы АТС Питер принимала входящие звонки от АТС Москва с префиксом «8». Для этого выполним следующие действия:
1. Вводим IP адрес АТС Питер в браузере, переходим в Учетные записиПровайдеры и открываем для редактирования провайдер для АТС Москва.
2. Переходим в Дополнительно, находим текстовое поле Manual Dialplan Incoming и вставляем в него следующую строчку:

ExecIf($[${CALLERID(num):0:1}=7]?Set(CALLERID(num)=8${CALLERID(num):1}))



Собственно и все, сохраняем настройки для провайдера и проверяем примененные настройки!

Давайте же теперь разберемся, что мы все-таки сделали!

Вы наверное заметили комментарий под полем Manual Dialplan Incoming: «Изменения будут добавлены в текущий контекст файла extensions.conf».
Extensions.conf - это один из самых важных конфигурационных файлов. В нем определяется обработка и маршрутизация входящих и исходящих вызовов. Этот файл управляет поведением всех соединений проходящих через Вашу АТС.

Содержание файла «extensions.conf» разбито на секции, в которых могут быть определены статические настройки или выполняемые команды плана набора (контексты). Секции, предназначенные для статических настроек, называются globals, для этого служит поле Manual Dialplan Global. Соответственно поле Manual Dialplan Incoming отвечает за секцию, предназначенную для входящих звонков, а Manual Dialplan Outgoing - для исходящих звонков.

С полем Manual Dialplan Incoming разобрались, теперь перейдем непосредственно к строке, которую мы добавили в это поле, а точнее разберемся какие изменения мы внесли в контекст файла extensions.conf. Для начала изучим немного теории о встроенном языке Asterisk.

В плане набора (extensions.conf) возможно использование переменных, для которых используется следующий синтаксис:
${foo}, где foo - имя переменной.
Переменные, определенные пользователями, не являются регистрозависимыми — ${FOO} и ${Foo} ссылаются на одну и ту же переменную. Но переменные, которые определяются самим Asterisk, являются регистрозависимыми — переменная ${EXTEN} будет работать, но ${exten} — не будет. Подробнее об использовании переменных в плане набора Asterisk описано здесь.

Список предопределенных функций и команд(устанавливаемых самим Asterisk), которые мы использовали для изменения контекста конфигурационного файла:
${CALLERID(num)} - получение текущего значения номера из CallerID Описание команды CALLERID();
SET() - используется для установки значения какой-то конкретной переменной в рамках сложного выражения (Синтаксис функции SET());
ExecIf - выполнение внешней программы по заданному условию;
${foo:offset:length} - возвращает подстроку строки foo, начиная со смещения offset и ограничивая возвращаемую строку размером в length символов Функции для работы со строками;
${foo}${bar} - соединение двух строк.

Таким образом, наши изменения в контексте конфигурационного файла можно интерпретировать следующим образом:

ExecIf($[${CALLERID(num):0:1}=7]?Set(CALLERID(num)=8${CALLERID(num):1}))


1. Получаем текущее значение входящего номера в виде строки с помощью функции CALLERID().
2. Получаем первый символ данной строки (с помощью функции получения подстроки из строки).
3. Если первый символ входящего номера равен «7», то устанавливаем текущему значению входящего номера новый номер, начинающийся с «8». Новый номер формируется соединением двух строк: «8» и номером текущего входящего номера без «7» (8${CALLERID(num):1}).

handbook/prefix.txt · Последние изменения: 2016/12/05 14:43 — tpor