Asterisk dialplan
Введення в розширення (extensions) і контексти (context)
Каналах призначаються контексти. Контексти визначають правила набору для каналів
План набору складається з одного або декількох контекстів. Кожен контекст це просто набір розширень (екстеншенов). Кожен екстеншен в контексті має унікальне ім'я.
Контексти використовуються для виконання основних функцій АТС.
Безпека. Можна дозволити міжміські / міжнародні дзвінки лише конкретним абонентам.
Маршрутизація викликів. Маршрутизація викликів в залежності від номера абонента.
Автосекретар. Програвання вітання та запрошення ввести додатковий номер.
Багаторівневі голосові меню. Голосові меню для служби підтримки, відділу продажів і т.д.
Як передзвонити. Дозволяє зменшити витрати на міжміські / міжнародні виклики.
Списки доступу. Занесення в чорні списки докучливих абонентів, не даючи їм можливості зв'язатися з Вами.
Віртуальні АТС. Ви можете створити «віртуальну АТС» в межах Вашої основної АТС.
Денний / Нічний режим роботи. Ви можете змінювати поведінку Вашої АТС в залежності від часу доби.
Макроси. Можна створювати скрипти для вирішення завдань, що повторюються в плані набору.
Що таке екстеншен?
У традиційних АТС екстеншен пов'язаний з інтерфейсом (портом). В Asterisk екстеншен визначається як перелік додатків (applications) та їх аргументів, які виконуються в певному порядку, Порядок виконання визначається пріоритетами (priority). Коли екстеншен набраний пріоритети виконуються до роз'єднання виклику, або перенаправлення на інший екстеншен. Кожен крок записується в такий спосіб:
Приклад простого екстеншена
Цей екстеншен складається з 4-х дій.
Першим виконується додаток Wait c пріоритетом 1 - чекати 5 секунд (час задається аргументом (5).
Другим додаток Answer - підняти трубку.
Потім Playback - програти звуковий файл; аргумент задає ім'я файлу (demo-congrats) в директорії за замовчуванням.
Останнім виконується додаток Hangup - повісити трубку. пріоритет # 'N #' означає next (наступний) і може використовуватися замість будь-якого пріоритету крім 1-го.
Використання пріоритету # 'N #' дозволяє легко редагувати окремі рядки не переписуючи все пріоритети.
Набір номера
Найчастіше викликається інший інтерфейс. Виклик здійснюється командою Команда Asterisk Dial.
Маршрутизація по CallerID
Приклад маршрутизації за номером абонента.
Якщо викликається екстеншен 100 виклик направляється на інтерфейс DAHDI / 1, крім випадку якщо виклик здійснює абонент 1234567. У цьому випадку виклик відхиляється. На прикладі видно, що ідентифікатор абонента задається формою # '/ 1234567 #'.
Ще один приклад маршрутизації, тепер по відсутності CallerID.
В даному прикладі якщо надходить дзвінок без CallerID, виклик блокується за допомогою програми Zapateller ()
Для обробки і розподілу безлічі викликів існує спеціальний механізм - черга. яка викликається командою Queue ().
Asterisk IVR
Голосове меню як правило задається у власному контексті.
Використання змінних
В Asterisk існують глобальні і специфічні для каналів змінні, використовувані в якості аргументів для команд. Змінні записуються в діалплане у вигляді $. де # 'Foo #' це ім'я змінної. Імена повинні починатися з літери і можуть складатися з будь-яких цифр і букв, але існують зумовлені імена, ось деякі з них:
Глобальні змінні призначаються в секції [globals] діалплана. Розглянемо наступний приклад:
Організовуючи діалплан таким чином, можна швидко і легко перепризначувати фізичні інтерфейси для конкретних користувачів, часто використовуваних в контекстах.
вкладені контексти
Один контекст може включати інші контексти, оброблювані в порядку перерахування. Дивись також Порядок вибору потрібного екстеншена при використанні шаблонів.
де
опціонально:
У цьому прикладі контекст # 'Local_long #' # 'включає два інших контексту для міського та міжміського зв'язку, а контекст # 'Local_only #' тільки для міської.
Денний / Нічний режими. Маршрутизація за часом
Вкладені контексти можна використовувати для реалізації денного, нічного та Святковий режимів. Розглянемо наступний приклад:
У цьому прикладі задані денний, нічний і святковий режими приходу дзвінків.
Вихідні дзвінки
Напрямок вихідного зв'язку можна реалізувати визначенням короткого коду доступу (наприклад # '9 #'), або визначити повністю шаблон списку номерів.
конструкція # 'Ignorepat ⇒ 9 # 'Каже Астеріск не відключати тон готовності після набору заданої цифри.
Контекст [international] дозволяє набрати міжнародний номер з будь-якою кількістю цифр.
Контекст [longdistance] - міжміський номер до 11-ти цифр.
Контекст [local] - міський номер довгою до 7-ми цифр.
Змінна $ видаляє префікс:
шаблони Patterns
Екстеншени можуть зіставлятися шаблоном, замість однозначно даних цифр. Шаблон повинен починатися з символу підкреслення (_) і може використовувати будь-який з наступних символів:
X - будь-яка цифра від 0-9
Z - будь-яка цифра від 1-9
N - будь-яка цифра від 2-9
. - будь-які можливі символи.
Резервні транки і LCR (вибір напрямку з найменшою вартістю)
Дуже корисно налаштувати LCR (Least Coast Routing) і перенаправлення в разі відмови зовнішньої лінії.
У цьому прикладі міжміські виклики направляються на DAHDI інтерфейс, але дзвінки в Москву направляються через більш вигідного провайдера на IAX транк. У разі ж відсутності IAX транка, виклики перенаправляються через DAHDI.
Використання макросів
Вам може знадобитися створити безліч екстеншенов (розширень) дуже схожих один на одного. Щоб спростити роботу з діалпланом використовуються Макроси. Для створення макросу використовується контекст ім'я якого починається з «macro-» і далі унікальне ім'я макросу. Виконання макросу починається з ектеншена # 'S #'. У макросах використовуються локальні змінні:
$ - Екстеншен викликається макросом $ - Контекст викликається макросом $ - активний пріоритет викликається макросом $ - якщо встановлено викликає зміщення n + $ $ - аргумент # 'N #' в макросі.
Коли макроси [macro-oneline] і [macro-twoline] створені, в контексті [default] треба написати тільки одну терміну для виконання декількох стандартних дій.
Додаток Macro оголошено застарілим, замість нього рекомендується використовувати GoSub.
синтаксис Gosub
Запис розмов Asterisk
В даному прикладі виклик з префіксом # '9 #', повинен бути скоммутірован через SIP транк ITSP. Розмова буде записаний в форматі # 'Wav #' і збережений в директорію за замовчуванням «/ var / lib / asterisk / monitor / ГодМесяцДень-ЧасиМінутиСекунди-НомерВизивающего Абонента.wav
Структура same ⇒ дозволяє скоротити код, уникнувши численних повторень «exten ⇒ s," в даному випадку.
Хороша думка поекспериментувати і з іншими змінними в імені файлу, наприклад $.
Asterisk Dialstatus
Визначимо стан лінії і виберемо дію на цій підставі. Припустимо, у вас є кілька філій (наприклад branch1 - внутрішні номери 41ХХ і branch2 - номери 42ХХ), в яких використовуються шлюзи Cisco SPA8800. Використовуючи один шаблонний GoSub виберемо вільний FXO порт для вихідного дзвінка. Вибір потрібного шлюзу зробимо на підставі CALLERID (num) абонента.
У першому блоці ми бачимо три контексту from-internal - загальний контекст для всіх внутрішніх абонентів, from-branch1 - контекст першої філії, from-branch2 - контекст другого філії ітд. (Філій, як ви розумієте може бути скільки завгодно)
Перший рядок контекстів from-branchN задає змінну: технологія (SIP) і назва транка, специфічного для даної філії: SIP / branch_fxo
Рядок з командою GoSub передає назва транка як аргумент, додаючи цифру від 1 до 4.
Таким чином в контекст sub-spa8800 з контексту [from-branch1], наприклад, надходять аргументи SIP / branch1_fxo1, SIP / branch1_fxo2, SIP / branch1_fxo3, SIP / branch1_fxo4
П'ятим аргументом передається набирається номер - $
і останній, шостий аргумент - назва філії.
Разом в контекст sub-spa8800 передається 6 аргументів: