Кастомная маршрутизация из IVR в зависимости от региона звонящего
В прошлой статье была подготовлена таблица reg_routes в базе asterisrcdrdb, по которой будет происходить маршрутизация вызовов. В этой же статье рассмотрим, как произвести настройки для входящей маршрутизации вызовов. Производить настройку логики будем в диалплане. Однако перед этим необходимо создать запрос в базу, по которому будем получать регион звонящего из таблицы tel_codes. Это нужно сделать для […]
В прошлой статье была подготовлена таблица reg_routes в базе asterisrcdrdb, по которой будет происходить маршрутизация вызовов. В этой же статье рассмотрим, как произвести настройки для входящей маршрутизации вызовов.
Производить настройку логики будем в диалплане. Однако перед этим необходимо создать запрос в базу, по которому будем получать регион звонящего из таблицы tel_codes. Это нужно сделать для того, чтобы в диалплан в последствии вернулся регион звонящего, но уже из таблицы reg_routes. Для того чтобы создать такой запрос, необходимо настроить подключение к базе из Asterisk с помощью драйвера ODBC.
Произвести необходимые настройки можно с помощью статьи «Подключение Asterisk к Microsoft SQL Server с помощью ODBC Driver for SQL Server»
После настройки подключения перейдём в конфигурационный файл func_odbc.conf (находится в директории /etc/asterisk) и пропишем:
[REG]
dsn=asteriskcdrdb
readsql=SELECT region FROM tel_codes WHERE prefix='${ARG1}' AND ${ARG2} >= num_from AND ${ARG2} <= num_to LIMIT 1
Здесь происходит подключение к базе данных asteriskcdrdb и выполняется запрос в базу, который выдаёт регион по переданному из диалплану коду города (${ARG1}) и сравнению номера телефона звонящего с пулом номеров регионов.
Для применения настроек сохраним файл и перезагрузим модуль func_odbc.so в консоли Asterisk командой:
module reload func_odbc.conf
После этого REG будет доступен из диалплана.
Далее откроем файл extensions_custom.conf. Его можно найти в директории /etc/asterisk. В диалплане создаём новый контекст и прописываем следующие строки:
[from-region-IVR-1]
exten => 1,1,Set(PREF=${CALLERID(num):1:3})
same => n,Set(NUM=${CALLERID(num):4:7})
same => n,Set(REGION=${ODBC_REG("${PREF}","${NUM}")})
same => n,NoOp(${REGION})
same => n,Set(RESULT=${POP(REGION,|)})
same => n,NoOp(${RESULT})
Рассмотрим подробнее то, что прописали в диалплане.
Присваиваем переменной PREF код города, отрезая его от всего CallerID. Затем переменной NUM присваиваем номер телефона без кода города. Значение переменной REGION будет возвращено после обработки запроса к БД. Это значение будет браться из таблицы tel_codes. Далее с помощью функции POP обрезаем регион звонящего с конца до разделителя “|” и присваиваем это значение в переменную RESULT.
Сохраняем и применяем текущую конфигурацию диалплана с помощью команды в консоли Asterisk:
dialplan reload
Для проверки перейдём во FreePBX и создадим Custom Destinations с направлением на этот контекст. Подробнее о модуле Custom Destinations написано в статье «Использование Custom Destinations (Специальное назначение FreePBX)»
Подставим его в заранее созданной IVR в качестве назначения при нажатии «1». Подробнее о работе с IVR можно прочитать в статье «Обзор и базовая настройка IVR в FreePBX 13»
При входящем звонке на IVR и нажатию «1» в логе должны увидеть регион звонящего. В нашем примере вызов осуществляется с московского номера, поэтому в RESULT будет присвоено значение: «г. Москва».
Далее произведём проверку дня на чётность. Для этого в диалплане нужно будет прописать:
same => n,Set(data=${STRFTIME(${EPOCH},,%d)})
same => n,GotoIf($[${data}%2=0]?m1:m2)
Здесь в переменную data присваивается текущее число, затем это число делится на 2. Если остаток от деления на 2 равен 0, то перейдёт на метку m1. Иначе – m2.
Пока что сохраним диалплан, но не будем его применять. Для дальнейших действий снова перейдём в конфигурационный файл func_odbc.conf и пропишем ещё один запрос, но уже к таблице reg_routes.
[DST]
dsn=asteriskcdrdb
readsql=SELECT ${ARG2} FROM reg_routes WHERE region='${ARG1}' LIMIT 1
В этом запросе будем искать назначение вызова (ARG2) по региону, переданному при звонке (ARG1).
Сохраним файл и применим изменения его настроек. Теперь можно дописать контекст from—region—IVR-1. Для этого снова перейдём в extensions_custom.conf и пропишем саму маршрутизацию:
same => n(m1),Set(KEY=key1_1)
same => n,Set(DEST=${ODBC_DST("${RESULT}","${KEY}")})
same => n,Goto(from-internal,${DEST},1)
same => n(m2),Set(KEY=key1)
same => n,NoOp(${KEY})
same => n,Set(DEST=${ODBC_DST(${RESULT},"${KEY}")})
same => n,Goto(from-internal,${DEST},1)
Теперь более подробно рассмотрим то, что прописали в диалплане.
После того, как определили, чётный день или нет, переходим на соответствующие метки. В m1 присваиваем переменной KEY имя поля таблицы reg_routes. В нашем примере по чётным дням маршрутизация должна идти по полю key1_1, а по нечётным, соответственно, на key1. Так как в метке m1 происходит маршрутизация вызова по чётному дню, передаём в базу поле key1_1. Затем выполняем запрос к базе, прописанный до этого в func_odbc.conf. Полученное значение присваиваем переменной DEST и маршрутизируем на неё вызов. Аналогично прописываем диалплан для нечётного дня.
По изначальной задаче, описанной в статье «Подготовка таблицы для кастомной маршрутизации из IVR в зависимости от региона звонящего», проверка на чётность выполняется для донабора в IVR клавиш «1» и «3». По «2» вызов идёт на общую группу. Исходя из этого создаём ещё два контекста (например, from-region-IVR-2 и from-region-IVR-3). Выглядеть они будут следующим образом:
Сохраняем и применяем текущую конфигурацию диалплана.
Теперь полностью настроим логику вызовов из IVR. Для этого создадим ещё 2 Custom Destinations на оставшиеся 2 контекста. Затем перейдём в редактирование нужной IVR и добавим новые Custom Destinations в соответствующие поля. По неправильному нажатию или таймауту пустим вызов на очередь секретарей.
Для проверки несколько раз позвоним на IVR и проверим все нажатия. Если всё настроено правильно, маршрутизация отработает корректно. На скриншоте ниже пример вызова с донабором 3. Исходя из лога, вызов был смаршрутизирован на очередь 3926, как и было прописано в таблице reg_routes.
На этом статья по настройке кастомной маршрутизации из IVR по региону звонящего завершена.
Остались вопросы?
Я - Кондрашин Игорь, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.