Динамическая маршрутизация в Asterisk через Mysql (ODBC)
Invite pending
Поставили задачу реализовать распределение клиентов в очередях согласно их статуса. А вообще статья очень доходчиво объясняет как сделать динамические переменные хранимые в БД.
Вводные данные. Есть категории клиентов:
1. VIP клиенты (с ними разговаривает исключительно старшие менеджеры);
2. Заказавшие товар либо услугу (разговаривает оператор, который принял заказ);
3. Новые клиенты (попадает в на оператора согласно вашему диалплану).
Содержание:
Настройки транка
Настройка ODBC коннектора
Функция запроса к Mysql
Конфигурация Asterisk DialPlan
Trunk для приема звонков будет выглядеть примерно так:
Все входящие звонки принимаем в контекст*
Далее необходимо настроить коннект из астериска в базу данных, я делаю это через стандартный ODBC Driver:
Тут настраиваем подключение к базе данных MySQL:
Настройка подключения в Asterisk
Перед добавлением функции необходимо создать таблицу в базе данных, либо добавить к уже существующей таблице поле по которому будем определять к какой категории относиться входящий номер. Допустим пусть поле будет priority
Добавляем функцию в которую мы будем передавать номер, а функция будет возвращать значение категории. В самом простом варианте это будет так:
В диалплане нам необходимо создать контекст где мы будем проверять принадлежность абонента к категории.
Далее отправляем в контекст from-pstn(у меня настроен данный контекст на прием Inbound маршрутов) присваивая нужный нам DID. А уже по номеру DID строим входящий маршрут.
Итог: как видите, все необходимые переменные можно загружать динамически, причем это могут быть любые комбинации для решений в которых необходимо подставлять переменные Asterisk динамически.
Всем успехов.
Вводные данные. Есть категории клиентов:
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 динамически.
Всем успехов.