Asterisk Realtime Dialplan
Введение Метод Realtime. Настройка Asterisk Realtime Метод Realtime. Таблица для диалплана Метод Realtime. Добавление и редактирование диалплана Метод Static. Настройка Asterisk Realtime Метод Static. Таблица для Диалплана Метод Static. Добавление и редактирование диалплана Заключение Введение В данной статье будет рассказано, как настроить механизм астериска Realtime, далплан, записанный в mysql. Метод Realtime. Настройка Asterisk Realtime […]
- Введение
- Метод Realtime. Настройка Asterisk Realtime
- Метод Realtime. Таблица для диалплана
- Метод Realtime. Добавление и редактирование диалплана
- Метод Static. Настройка Asterisk Realtime
- Метод Static. Таблица для Диалплана
- Метод Static. Добавление и редактирование диалплана
- Заключение
Введение
В данной статье будет рассказано, как настроить механизм астериска Realtime, далплан, записанный в mysql.
Метод Realtime. Настройка Asterisk Realtime
Необходимо создать файл /etc/asterisk/extconfig.conf и добавить несколько параметров
Создадим файл
vim /etc/asterisk/extconfig.conf
Внесем изменения, предварительно нажав клавишу «i»
[settings] extensions => odbc,asteriskcdrdb,extensions
Рассмотрим подробнее данные значения:
extensions — общее имя (family) для понимания для чего используется конфигурация
odbc — коннектор, через который астериск будет связан БД
asteriskcdrdb — db конфиг в /etc/asterisk/res_odbc_additional.conf
extensions – таблица с конфигурациями
Метод Realtime. Таблица для диалплана
Теперь создадим таблицу extensions в базе данных asteriskcdrdb
CREATE TABLE IF NOT EXISTS `extensions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`context` varchar(20) NOT NULL DEFAULT '',
`exten` varchar(20) NOT NULL DEFAULT '',
`priority` tinyint(4) NOT NULL DEFAULT '0',
`app` varchar(20) NOT NULL DEFAULT '',
`appdata` varchar(128) NOT NULL DEFAULT '',
UNIQUE (context, exten, priority),
UNIQUE (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- context – контекст обработки вызова
- exten – экстеншн или шаблон, для которого будет создаваться правило
- priority – приоритет для обработки правила
- app – приложение диалплана, которое будет выполняться на данном шаге
- appdata – значения, данные которых будет принимать приложение диалплана
Также необходимо добавить в конекст вашего внетреннего номера следующее правило
[test-dial]
switch => Realtime/test-context@extensions
- test-dial – конекст в котором находит ваш extensions
- switch – команда для перенаправления обработки вызова на другой сервер / сервис
- Realtime – технология, по которой будет обрабатываться вызов
- test-context – контекст, который указан в заведенной ранее таблице extensions
- extensions – значение параметра family, который указан в файле extcongig.conf
Метод Realtime. Добавление и редактирование диалплана
Для заведения диалплана, определим что мы для примера будем рассматривать.
Предположим, что это будет контекст для обработки вызовов из вне. По стандарту в freepbx это контекст from-trunk.
Иногда бывает что на АТС подключено несколько операторов связи и каждый присылает номер в разных форматах (+7…, 8…, 495… и т.д.). Для этого в контексте обработки вызовов будем диалпланов «фиксить» приходящий номер.
Для этого в созданную ранее таблицу добавим несколько записей
insert into extensions values (1, 'test-context', '_X.', 1, 'NoOp', 'Приведение CID к виду 74959898533');
insert into extensions values (2, 'test-context', '_X.', 2, 'Set', 'CALLERID(num)=7${CALLERID(num):-10:10}');
insert into extensions values (3, 'test-context', '_X.', 3, 'Set', 'CALLERID(ANI-num)=${CALLERID(num):-10:10}')
insert into extensions values (4, 'test-context', '_X.', 4, 'Goto', 'from-trunk,${EXTEN},1');
Т.е. данный диалплан в привычном виде будет выглядеть следующим образом
[local-city-mobile-mg-mn]
exten => _X.,1,NoOp(Приведение CID к виду 74959898533)
exten => _X.,2,Set(CALLERID(num)=7${CALLERID(num):-10:10})
exten => _X.,3,Set(CALLERID(ANI-num)=${CALLERID(num):-10:10})
exten => _X.,4,Goto(from-trunk,${EXTEN},1)
Применяем все изменения конфигураций командой module reload в asterisk CLI и проверяем вызов.
По скриншоту видно, что вызов обрабатывается в контексте local-city-mobile-mg-mn, но при этом учитывается написанный нами диалплан в таблице mysql
Это видно в логе по данным пунктам
CALLERID(num)=7102
CALLERID(ANI-num)=7102
Для обновления диалплана или добавления новых пунктов нужно также оперировать с созданной таблицей mysql. Для примера «завернем» вызов не в контекст from-trunk, как в примере выше, а в кастомный контекст, где будем производить запись методом Record.
- Командой mysql обновим запись в таблице.
update extensions set appdata = 'test,s,1' where id=4;
- Добавим в таблицу новые данные для нового контекста
insert into extensions values (5, 'test-rec', 's', 1, 'NoOp', '============= Вы перешли в контекст для записи голоса =============');
insert into extensions values (6, 'test-rec', 's', 2, 'Record', 'custom/recvoice.wav');
insert into extensions values (7, 'test-rec', 's', 3, 'Hangup', '');
- Добавим контекст, который будет связывать обращения к текущей таблице
[test]
switch => Realtime/test-rec@extensions
Применяем измененные конфигурации и проверяем
Метод Static. Настройка Asterisk Realtime
В файле /etc/asterisk/modules.conf, где указаны настройки подключения модулей нужно добавить несколько строк
preload = res_odbc.so
preload = res_config_odbc.so
Необходимо создать файл /etc/asterisk/extconfig.conf и добавить несколько параметров
Создадим файл
vim /etc/asterisk/extconfig.conf
Внесем изменения, предварительно нажав клавишу «i»
[settings]
extensions.conf => odbc,asteriskcdrdb,dialplan_config
Рассмотрим подробнее данные значения
extensions.conf — общее имя (family) для понимания для чего используется конфигурация.
- odbc — коннектор, через который астериск будет связан БД
- asteriskcdrdb — db конфиг в /etc/asterisk/res_odbc_additional.conf
- dialplan_config – таблица с конфигурация
Метод Static. Таблица для диалплана.
Теперь создадим таблицу extensions в базе данных asteriskcdrdb
CREATE TABLE IF NOT EXISTS `dialplan_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cat_metric` int(11) NOT NULL DEFAULT '0',
`var_metric` int(11) NOT NULL DEFAULT '0',
`commented` int(11) NOT NULL DEFAULT '0',
`filename` varchar(128) NOT NULL DEFAULT '',
`category` varchar(128) NOT NULL DEFAULT '',
`var_name` varchar(128) NOT NULL DEFAULT '',
`var_val` varchar(128) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
- cat_metric — задается приоритет категории для всего файла конфигурации
- var_metric — указывается приоритет внутри категории
- commented -указывается является ли строка комментарием. (0 — не является комментарием)
- filename — файл кофигурации, которому относятся записи в таблице
- category — контекст диалплана
- var_name — параметр конфига
- var_val — данные в конфиге после знака =>
Метод Static. Добавление и редактирование диалплана.
Для примера, будем также рассматривать пример указанный выше
1. Добавим значения в таблицей
insert into dialplan_config values (1,0,0,0,'extensions_custom.conf', 'from-trunk-pre', 'exten', '_X.,1,NoOp(Приведение CID к виду 74959898533)');
insert into dialplan_config values (2,0,1,0,'extensions_custom.conf', 'from-trunk-pre', 'same', 'n,Set(CALLERID(num)=7${CALLERID(num):-10:10})');
insert into dialplan_config values (3,0,2,0,'extensions_custom.conf', 'from-trunk-pre', 'same', 'n,Set(CALLERID(ANI-num)=${CALLERID(num):-10:10})');
insert into dialplan_config values (4,0,1,0,'extensions_custom.conf', 'from-trunk-pre', 'same', 'n,Goto(from-trunk,${EXTEN},1)');
Т.е. данный диалплан в привычном виде будет выглядеть следующим образом
[from-trunk-pre]
exten => _X.,1,NoOp(Приведение CID к виду 74959898533)
exten => _X.,2,Set(CALLERID(num)=7${CALLERID(num):-10:10})
exten => _X.,3,Set(CALLERID(ANI-num)=${CALLERID(num):-10:10})
exten => _X.,4,Goto(from-trunk,${EXTEN},1)
;exten => 1,1,NoOp(from-trunk,${EXTEN},1)
[from-internal]
25,1,Goto(from-trunk-pre,84959898533,1)
Применяем все изменения конфигураций командой core reload в asterisk CLI и проверяем вызов.
Так же из примера на рисунке 8 видно, что наш добавленный диалплан работает
CALLERID(num)=7102
CALLERID(ANI-num)=7102
А также виден вызов на экстеншн 25 в контексте from-internal, который указан в таблице на рисунке 7.
Executing [25@from-internal:1] Goto("SIP/102-00000011", "from-trunk-pre,84959898533,1") in new stack
Для обновления диалплана, также нужно изменять / добавлять новые значения в таблицу.
Теперь рассмотрим пример изменения текущего диалплана, логика звонка будет следующей, как и в примере для метода Realtime c с небольшими изменениями:
- Делаем вызов на ext 25
- Устанавливаем CALLERID 88003337533
- Переходим в контекст from-trunk-pre
- Проходим старые пункты по приведению CALLERID к единому виду
- Перейдем в контекст rec-voice
- Установим таймаут записи разговора
- Запишем голос оператора
- По истечению таймаута завершим вызов
- Устанавливаем CALLERID 88003337533
update ast_config set var_val='25,1,Set(CALLERID(num)=88003337533)' where id=6;
- Переходим в контекст from-trunk-pre
insert into ast_config values (7,1,1,0,'extensions.conf', 'from-internal', 'same', 'n,Goto(from-trunk-pre,84959898533,1)');
- Перейдем в контекст rec-voice
update ast_config set var_val='n,Goto(rec-voice,s,1)' where id=4;
- Установим таймаут записи разговора
insert into ast_config values (8,2,0,0,'extensions.conf','rec-voice','exten','s,1,Set(TIMEOUT=3)');
- Запишем голос оператора
insert into ast_config values (9,2,1,0,'extensions.conf','rec-voice','same','n,Record(custom/test.wav,1,${TIMEOUT})');
- По истечению таймаута завершим вызов
insert into ast_config values (10,2,2,0,'extensions.conf','rec-voice','same','n,Hangup');
После внесения изменений применим настройки командой core reload и проверим нашу логику вызова.
Все работает.
Теперь наш диалплан выглядел бы в конфиге следующим образом.
[from-trunk-pre]
exten => _X.,1,NoOp(Приведение CID к виду 74959898533)
exten => _X.,2,Set(CALLERID(num)=7${CALLERID(num):-10:10})
exten => _X.,3,Set(CALLERID(ANI-num)=${CALLERID(num):-10:10})
exten => _X.,4,Goto(rec-voice,s,1)
;exten => 1,1,NoOp(from-trunk,${EXTEN},1)
[from-internal]
exten => 25,1,Set(CALLERID(num)=88003337533)
same => n,Goto(from-trunk-pre,84959898533,1)
[rec-voice]
exten => s,1,Set(TIMEOUT=3)
same => n,Record(custom/test.wav,1,${TIMEOUT})
same => n,Hangup
Заключение
Таким образом из выше описанного можно сделать несколько выводов
- Настройка и редактирование диалплана (на мой взгляд) не удобно
- Метод Realtime можно встроить в текущий диалплан, не нарушая всю структуру
- Метод Static подходит для «голого» астериска. Т.к. данный способ перекроет доступ в статичный диалплан из конфигов
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.