Внимание! Документация к новой MikoPBX доступна по ссылке

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

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


handbook:prefix

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
handbook:prefix [2016/12/01 11:41]
tpor
handbook:prefix [2016/12/05 14:43] (текущий)
tpor
Строка 1: Строка 1:
-====== Обработка входящих и исходящих вызовов. Файл extensions.conf ======+====== Обработка входящих вызовов. Файл extensions.conf ======
  
-Часто возникает необходимость переопределения формата входящих/​исходящих номеров,​ например,​ заменить префикс входящего звонка от некоторого провайдера с "​7"​ на "​8"​.\\  +Часто возникает необходимость переопределения формата входящих номеров,​ например,​ заменить префикс входящего звонка от некоторого провайдера с "​7"​ на "​8"​.\\  
-Предположим,​ у нас есть две объединенные АТС 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]]).\\ Необходимо,​ чтобы АТС ​принимала входящие звонки от АТС ​с префиксом "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 адрес АТС ​в браузере,​ переходим в **Учетные записи** -> **Провайдеры** и открываем для редактирования провайдер для АТС ​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//"​. ​Это один из самых важных конфигурационных файлов. В нем определяется обработка и маршрутизация входящих и исходящих вызовов. Этот файл управляет поведением всех соединений проходящих через Вашу АТС.//  +Вы наверное заметили комментарий под полем **Manual Dialplan Incoming**: "//​Изменения будут добавлены в текущий контекст файла extensions.conf//"​.\\  
-Содержание файла "​extensions.conf"​ разбито на секции,​ в которых могут быть определены статические настройки ​и определения ​или выполняемые команды плана набора, в этом случае они называются ​контекстами. Секции,​ предназначенные для статических настроек,​ называются ​general и **globals**,​ для этого служит поле **Manual Dialplan Global**. Каждая секция в файле extensions.conf начинается со строки с именем секции,​ заключенного в квадратные скобки. Это делает файл extensions.conf,​ по формату,​ похожим на традиционные .ini файлы в системе Windows. Соответственно поле **Manual Dialplan Incoming** отвечает за секцию,​ предназначенную для входящих звонков,​ а **Manual Dialplan Outgoing** - для исходящих звонков.\\  +**Extensions.conf** - это один из самых важных конфигурационных файлов. В нем определяется обработка и маршрутизация входящих и исходящих вызовов. Этот файл управляет поведением всех соединений проходящих через Вашу АТС.\\ \\  ​ 
-С полем Manual Dialplan Incoming разобрались,​ теперь перейдем непосредственно к строке,​ которую мы добавили,​ а точнее разберемся какие //​изменения//​ мы добавили в контекст файла extensions.conf.\\  +Содержание файла "​extensions.conf"​ разбито на секции,​ в которых могут быть определены статические настройки ​ или выполняемые команды плана набора ​(//контексты//). Секции,​ предназначенные для статических настроек,​ называются **globals**,​ для этого служит поле **Manual Dialplan Global**. Соответственно поле **Manual Dialplan Incoming** отвечает за секцию,​ предназначенную для входящих звонков,​ а **Manual Dialplan Outgoing** - для исходящих звонков.\\ \\  
-В плане набора (extensions.conf) возможно использование переменных,​ для которых используется следующий синтаксис:​\\ ​  +С полем Manual Dialplan Incoming разобрались,​ теперь перейдем непосредственно к строке,​ которую мы добавили ​в это поле, а точнее разберемся какие ​**//​изменения//​** мы внесли в контекст файла extensions.conf. ​Для начала изучим немного теории о встроенном языке Asterisk.\\ ​\\  
-**${foo}**\\  +В плане набора (extensions.conf) возможно использование ​**переменных**, для которых используется следующий синтаксис:​\\ ​  
-где //foo// - имя переменной.\\  +**${foo}**где //foo// - имя переменной.\\  
-Именем переменной может быть цифробуквенная строка,​ которая должна начинаться с буквы. ​Переменные,​ определенные пользователями,​ не являются регистрозависимыми — ${FOO} и ${Foo} ссылаются на одну и ту же переменную. Но переменные,​ которые определяются самим Asterisk, являются регистрозависимыми — переменная ${EXTEN} будет работать,​ но ${exten} — не будет. Подробнее об использовании переменных в плане набора Asterisk описано [[http://​asterisk.ru/​knowledgebase/​Asterisk+variables|здесь]].\\  +Переменные,​ определенные пользователями,​ не являются регистрозависимыми — ${FOO} и ${Foo} ссылаются на одну и ту же переменную. Но переменные,​ которые определяются самим Asterisk, являются регистрозависимыми — переменная ${EXTEN} будет работать,​ но ${exten} — не будет. Подробнее об использовании переменных в плане набора Asterisk описано [[http://​asterisk.ru/​knowledgebase/​Asterisk+variables|здесь]].\\ \\  
-Ниже описаны ​предопределенные функции (устанавливаемые самим Asterisk), которые мы использовали для изменения контекста конфигурационного файла:​\\ ​+**Список предопределенных функций и команд**(устанавливаемых самим Asterisk), которые мы использовали для изменения контекста конфигурационного файла:​\\ ​
 **${CALLERID(num)}** - получение текущего значения номера из CallerID [[http://​asterisk.ru/​knowledgebase/​Asterisk+func+callerid|Описание команды CALLERID()]];​\\ ​ **${CALLERID(num)}** - получение текущего значения номера из CallerID [[http://​asterisk.ru/​knowledgebase/​Asterisk+func+callerid|Описание команды CALLERID()]];​\\ ​
-**SET()** - используется для установки значения какой то конкретной переменной в рамках сложного выражения, в котором это значение используется в качестве промежуточного для дальнейшего вычисления конечного результата,​ и когда может потребоваться использование этого промежуточного результата в других выражениях ​([[http://​asterisk.ru/​knowledgebase/​Asterisk+func+set|Синтаксис функции SET()]]);​\\ ​+**SET()** - используется для установки значения какой-то конкретной переменной в рамках сложного выражения ​ ([[http://​asterisk.ru/​knowledgebase/​Asterisk+func+set|Синтаксис функции SET()]]);​\\ ​
 **ExecIf** - выполнение внешней программы по заданному условию;​\\ ​ **ExecIf** - выполнение внешней программы по заданному условию;​\\ ​
 **${foo:​offset:​length}** - возвращает подстроку строки foo, начиная со смещения offset и ограничивая возвращаемую строку размером в length символов [[http://​asterisk.ru/​knowledgebase/​Asterisk+variables|Функции для работы со строками]];​\\ ​ **${foo:​offset:​length}** - возвращает подстроку строки foo, начиная со смещения offset и ограничивая возвращаемую строку размером в length символов [[http://​asterisk.ru/​knowledgebase/​Asterisk+variables|Функции для работы со строками]];​\\ ​
 **${foo}${bar}** - соединение двух строк.\\ \\  **${foo}${bar}** - соединение двух строк.\\ \\ 
 Таким образом,​ наши изменения в контексте конфигурационного файла можно интерпретировать следующим образом:​\\ Таким образом,​ наши изменения в контексте конфигурационного файла можно интерпретировать следующим образом:​\\
-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>​\\ ​ 
-1. Получаем текущее значение входящего номера в виде строки с помощью функции CALLERID(). +1. Получаем текущее значение входящего номера в виде строки с помощью функции CALLERID().\\  
-2. Получаем первый символ данной строки (с помощью функции получения подстроки из строки).+2. Получаем первый символ данной строки (с помощью функции получения подстроки из строки).\\ 
 3. Если первый символ входящего номера равен "​7",​ то устанавливаем текущему значению входящего номера новый номер, начинающийся с "​8"​. Новый номер формируется соединением двух строк: "​8"​ и номером текущего входящего номера без "​7"​ (//​8${CALLERID(num):​1}//​). 3. Если первый символ входящего номера равен "​7",​ то устанавливаем текущему значению входящего номера новый номер, начинающийся с "​8"​. Новый номер формируется соединением двух строк: "​8"​ и номером текущего входящего номера без "​7"​ (//​8${CALLERID(num):​1}//​).
  
handbook/prefix.1480592513.txt.gz · Последние изменения: 2016/12/01 11:41 — tpor