Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
handbook:prefix [2016/12/01 09:38] tpor создано |
handbook:prefix [2016/12/05 14:43] (текущий) tpor |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Обработка входящих и исходящих вызовов. Файл extensions.conf ====== | + | ====== Обработка входящих вызовов. Файл extensions.conf ====== |
- | Часто возникает необходимость переопределения формата входящих/исходящих номеров, например, заменить префикс входящего звонка от некоторого провайдера с "7" на "8".// | + | Часто возникает необходимость переопределения формата входящих номеров, например, заменить префикс входящего звонка от некоторого провайдера с "7" на "8".\\ |
- | Предположим, у нас есть две объединенные АТС Askozia, условно обозначим их АТС N и АТС Z (статьи по объединению двух АТС: [[https://www.askozia.ru/blogs/askozia/askozia-to-combine-the-two-offices/|Объединение двух станций Askozia]], [[http://blog.telefon1c.ru/soiediniaiem-mypbx-u100-s-askozia/|Соединяем MyPBX U100 c Askozia]]). Необходимо, чтобы АТС Z принимала входящие звонки от АТС N с префиксом "7". Для этого выполним следующие действия:\\ | + | Предположим, у нас есть две объединенные АТС Askozia, условно обозначим их АТС Москва и АТС Питер (статьи по объединению двух АТС: [[https://www.askozia.ru/blogs/askozia/askozia-to-combine-the-two-offices/|Объединение двух станций Askozia]] и [[http://blog.telefon1c.ru/soiediniaiem-mypbx-u100-s-askozia/|Соединяем MyPBX U100 c Askozia]]).\\ Необходимо, чтобы АТС Питер принимала входящие звонки от АТС Москва с префиксом "8". Для этого выполним следующие действия:\\ |
- | 1. Вводим IP адрес АТС Z в браузере, переходим в **Учетные записи** -> **Провайдеры** и открываем для редактирования провайдер для АТС N.\\ | + | 1. Вводим IP адрес АТС Питер в браузере, переходим в **Учетные записи** -> **Провайдеры** и открываем для редактирования провайдер для АТС Москва.\\ |
2. Переходим в **Дополнительно**, находим текстовое поле **Manual Dialplan Incoming** и вставляем в него следующую строчку:\\ | 2. Переходим в **Дополнительно**, находим текстовое поле **Manual Dialplan Incoming** и вставляем в него следующую строчку:\\ | ||
- | ExecIf($[${CALLERID(num):0:1}=7]?Set(CALLERID(num)=8${CALLERID(num):1}))\\ | + | <code>ExecIf($[${CALLERID(num):0:1}=7]?Set(CALLERID(num)=8${CALLERID(num):1}))</code>\\ |
- | {{ :handbook:2016-12-01_114017.png?direct |}}\\ \\ | + | {{ :handbook:2016-12-01_114017.png?direct |}}\\ |
+ | Собственно и все, сохраняем настройки для провайдера и проверяем примененные настройки!\\ \\ | ||
+ | Давайте же теперь разберемся, что мы все-таки сделали!\\ \\ | ||
+ | Вы наверное заметили комментарий под полем **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 описано [[http://asterisk.ru/knowledgebase/Asterisk+variables|здесь]].\\ \\ | ||
+ | **Список предопределенных функций и команд**(устанавливаемых самим Asterisk), которые мы использовали для изменения контекста конфигурационного файла:\\ | ||
+ | **${CALLERID(num)}** - получение текущего значения номера из CallerID [[http://asterisk.ru/knowledgebase/Asterisk+func+callerid|Описание команды CALLERID()]];\\ | ||
+ | **SET()** - используется для установки значения какой-то конкретной переменной в рамках сложного выражения ([[http://asterisk.ru/knowledgebase/Asterisk+func+set|Синтаксис функции SET()]]);\\ | ||
+ | **ExecIf** - выполнение внешней программы по заданному условию;\\ | ||
+ | **${foo:offset:length}** - возвращает подстроку строки foo, начиная со смещения offset и ограничивая возвращаемую строку размером в length символов [[http://asterisk.ru/knowledgebase/Asterisk+variables|Функции для работы со строками]];\\ | ||
+ | **${foo}${bar}** - соединение двух строк.\\ \\ | ||
+ | Таким образом, наши изменения в контексте конфигурационного файла можно интерпретировать следующим образом:\\ | ||
+ | <code>ExecIf($[${CALLERID(num):0:1}=7]?Set(CALLERID(num)=8${CALLERID(num):1}))</code>\\ | ||
+ | 1. Получаем текущее значение входящего номера в виде строки с помощью функции CALLERID().\\ | ||
+ | 2. Получаем первый символ данной строки (с помощью функции получения подстроки из строки).\\ | ||
+ | 3. Если первый символ входящего номера равен "7", то устанавливаем текущему значению входящего номера новый номер, начинающийся с "8". Новый номер формируется соединением двух строк: "8" и номером текущего входящего номера без "7" (//8${CALLERID(num):1}//). | ||
+ | |||
- | Собственно и все, сохраняем настройки для провайдера и проверяем примененные настройки.\\ | ||
- | Давайте же теперь разберемся, что мы все-таки сделали.\\ | ||
- | Вы наверное заметили комментарий под полем **Manual Dialplan Incoming**: "//Изменения будут добавлены в текущий контекст файла extensions.conf//". Это один из самых важных конфигурационных файлов. В нем определяется обработка и маршрутизация входящих и исходящих вызовов. Этот файл управляет поведением всех соединений проходящих через Вашу АТС.// | ||
- | Содержание файла "extensions.conf" разбито на секции, в которых могут быть определены статические настройки и определения или выполняемые команды плана набора, в этом случае они называются контекстами. Секции, предназначенные для статических настроек, называются general и **globals**, для этого служит поле **Manual Dialplan Global**. Каждая секция в файле extensions.conf начинается со строки с именем секции, заключенного в квадратные скобки. Это делает файл extensions.conf, по формату, похожим на традиционные .ini файлы в системе Windows.\\ | ||
- | Соответственно поле **Manual Dialplan Incoming** отвечает за секцию, предназначенную для входящих звонков, а **Manual Dialplan Outgoing** - для исходящих звонков. | ||