Pull to refresh

Динамическая маршрутизация в Asterisk через Mysql (ODBC)

Поставили задачу реализовать распределение клиентов в очередях согласно их статуса. А вообще статья очень доходчиво объясняет как сделать динамические переменные хранимые в БД.

Вводные данные. Есть категории клиентов:
1. VIP клиенты (с ними разговаривает исключительно старшие менеджеры);
2. Заказавшие товар либо услугу (разговаривает оператор, который принял заказ);
3. Новые клиенты (попадает в на оператора согласно вашему диалплану).

Содержание:
Настройки транка
Настройка ODBC коннектора
Функция запроса к Mysql
Конфигурация Asterisk DialPlan

Настройки транка


Trunk для приема звонков будет выглядеть примерно так:
host=pbx.trunk.com
insecure=port,invite
directmedia=no
disallow=all
allow=ulaw,g729
type=peer
context=from-pstn-to-priority

Все входящие звонки принимаем в контекст*
from-pstn-to-priority

Настройка ODBC коннектора


Далее необходимо настроить коннект из астериска в базу данных, я делаю это через стандартный ODBC Driver:
yum install mysql-connector-odbc.x86_64
vi /etc/odbc.ini

Функция запроса к Mysql


Тут настраиваем подключение к базе данных MySQL:
[asterisk-connector]
Description = MySQL connection to "asterisk" database
Driver = MySQL
Database = asterisk
Server = localhost
User = mysqluser
Password = mysqlpassword
Port     = 3306
Socket   = /var/lib/mysql/mysql.sock

Настройка подключения в Asterisk
vi /etc/asterisk/res_odbc.conf

[asterisk]; Это имя используем в функции
enabled=>yes
dsn=>asterisk-connector ; это значение из файла /etc/odbc.ini
pooling=>no
limit=>1
pre-connect=>yes
username=>mysqluser
password=>mysqlpassword

Перед добавлением функции необходимо создать таблицу в базе данных, либо добавить к уже существующей таблице поле по которому будем определять к какой категории относиться входящий номер. Допустим пусть поле будет priority

Добавляем функцию в которую мы будем передавать номер, а функция будет возвращать значение категории. В самом простом варианте это будет так:
vi  /etc/asterisk/func_odbc.conf

[CALL_GET_PRIORITY] ; Название функции
dsn=asterisk ; DSN имя которое мы указали в файле res_odbc.conf
readsql=SELECT priority FROM routes WHERE number='${ARG1}' ; из диалплана вызываем функцию с первым аргументом мы будем использовать один аргумент это входящий номер абонента.

Конфигурация DialPlan


В диалплане нам необходимо создать контекст где мы будем проверять принадлежность абонента к категории.
Далее отправляем в контекст from-pstn(у меня настроен данный контекст на прием Inbound маршрутов) присваивая нужный нам DID. А уже по номеру DID строим входящий маршрут.
vi /etc/asterisk/extensions.conf

[priority]
exten => _X.,1,Set(PRIOR=${ODBC_CALL_GET_PRIORITY(${CALLERID(num)})});присваиваем переменной PRIOR значение результата запроса например 1 - VIP, 2-Заказавший 
exten => _X.,n,ExecIf($["${PRIOR}" = "1"]?Goto(from-pstn,9001,1);Всех VIP отправляем на номер 9001
exten => _X.,n,ExecIf($["${PRIOR}" = "2"]?Goto(from-pstn,9002,1);Всех заказавших отправляем на номер 9002
exten => _X.,n,Goto(from-pstn,${EXTEN},1); Всех остальных отправляем в контекст from-pstn


Итог: как видите, все необходимые переменные можно загружать динамически, причем это могут быть любые комбинации для решений в которых необходимо подставлять переменные Asterisk динамически.

Всем успехов.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.