Алина Леонова
25.07.2019
4686

Кастомная маршрутизация из 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 
Если настройка подключения Asterisk к базе до этого не проводилась, сделать module reload нельзя. В таком случае, заменим в описанной выше команде reload на load.

После этого 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)»

Custom Destinations

Подставим его в заранее созданной IVR в качестве назначения при нажатии «1». Подробнее о работе с IVR можно прочитать в статье «Обзор и базовая настройка IVR в FreePBX 13»

При входящем звонке на IVR и нажатию «1» в логе должны увидеть регион звонящего. В нашем примере вызов осуществляется с московского номера, поэтому в RESULT будет присвоено значение: «г. Москва».

Значение переменной 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).

Сохраним файл и применим изменения его настроек. Теперь можно дописать контекст fromregionIVR-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 и маршрутизируем на неё вызов. Аналогично прописываем диалплан для нечётного дня.

Переменная DEST может хранить как внутренние номера, так и номера очереди (если перед этим прописан контекст from-internal).

По изначальной задаче, описанной в статье «Подготовка таблицы для кастомной маршрутизации из IVR в зависимости от региона звонящего», проверка на чётность выполняется для донабора в IVR клавиш «1» и «3». По «2» вызов идёт на общую группу. Исходя из этого создаём ещё два контекста (например, from-region-IVR-2 и from-region-IVR-3). Выглядеть они будут следующим образом:

Пример диалплана

Сохраняем и применяем текущую конфигурацию диалплана.

Теперь полностью настроим логику вызовов из IVR. Для этого создадим ещё 2 Custom Destinations на оставшиеся 2 контекста. Затем перейдём в редактирование нужной IVR и добавим новые Custom Destinations в соответствующие поля. По неправильному нажатию или таймауту пустим вызов на очередь секретарей.

IVR

Для проверки несколько раз позвоним на IVR и проверим все нажатия. Если всё настроено правильно, маршрутизация отработает корректно. На скриншоте ниже пример вызова с донабором 3. Исходя из лога, вызов был смаршрутизирован на очередь 3926, как и было прописано в таблице reg_routes.

Лог звонка

На этом статья по настройке кастомной маршрутизации из IVR по региону звонящего завершена.

Кейсы внедрения
Asterisk от VoxLink
Узнайте, какие крупные компании уже используют Asterisk в работе.
Скачать
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.