Динамические очереди вызовов в Asterisk 11
Sep 21, 2015 16:26 · 427 words · 3 minute read
Очереди вызовов в Asterisk определяются в конфигурационном файле queues.conf
или с помощью механизма RealTime Queue
(динамические очереди).
При использовании последнего варианта появляется возможность хранить настройки во внешней базе данных (например, MySQL), что дает возможность моментально применять изменения без перезагрузки Asterisk. Давайте разберемся с динамическими очередями!
Настройкой статических очередей вызовов в Asterisk с помощью конфига queues.conf мы уже занимались, в этой статье рассмотрим как настроить динамические очереди вызовов в Asterisk (RealTime Queue
).
Открываем на редактирование конфигурационный файл /etc/asterisk/extconfig.conf
:
nano /etc/asterisk/extconfig.conf
- добавляем в конец файла следующие строки:
...
queues => mysql,general,queue_table
queue_members => mysql,general,queue_member_table
Примечание. В данном примере используется MySQL, но можно использовать и другие драйверы realtime
(например, ODBC). general
— настройки базы данных (описаны ниже), queue_table
и queue_member_table
соответственно таблицы для очередей вызовов и для агентов, их обрабатывающих.
- открываем на редактирование конфигурационный файл
/etc/asterisk/res_config_mysql.conf
:
nano /etc/asterisk/res_config_mysql.conf
- приведем секцию
[general]
к следующему виду:
[general]
dbhost=localhost
dbname=asterisk
dbuser=asterisk
dbpass=<очень_сложный_пароль>
dbport = 3306
dbsock = /var/run/mysqld/mysqld.sock
Примечание. Возможно, в вашем случае вместо конфигурационного файла res_config_mysql.conf
будет конфиг res_mysql.conf
.
Для применения изменений выполняем:
asterisk -rx 'core reload'
Проверяем текущее состояние:
asterisk -rx 'realtime mysql status'
general connected to asterisk@localhost, port 3306 with username asterisk for 3 minutes.
Теперь необходимо создать таблицы queue_table
и queue_member_table
в нашей базе MySQL. Для этого подключаемся к MySQL-серверу и выполняем следующие запросы:
CREATE TABLE queue_table (
name VARCHAR(128) PRIMARY KEY,
musiconhold VARCHAR(128),
timeout INT(11),
strategy VARCHAR(128)
);
CREATE TABLE queue_member_table (
uniqueid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
queue_name varchar(128),
interface varchar(128),
);
Для проверки работы добавим очередь в таблицу queue_table
:
INSERT INTO queue_table (name, musiconhold, timeout, strategy)
VALUES ("test", "default", "15", "ringall");
Проверим, появилась ли новая очередь:
asterisk -rx 'queue show test'
test has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
No Members
No Callers
Добавим нескольких агентов (операторов) для обработки очереди вызовов test:
INSERT INTO queue_member_table (uniqueid, queue_name, interface)
VALUES (NULL, "test", "SIP/113");
INSERT INTO queue_member_table (uniqueid, queue_name, interface)
VALUES (NULL, "test", "SIP/121");
INSERT INTO queue_member_table (uniqueid, queue_name, interface)
VALUES (NULL, "test", "SIP/123");
Проверим новую очередь на наличие агентов:
asterisk -rx 'queue show test'
test has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
Members:
SIP/121 (ringinuse enabled) (realtime) (Unavailable) has taken no calls yet
SIP/113 (ringinuse enabled) (realtime) (Unavailable) has taken no calls yet
SIP/123 (ringinuse enabled) (realtime) (Unavailable) has taken no calls yet
No Callers
Созданная очередь уже доступна для обработки входящих вызовов с помощью Queue()
в плане набора. На этом настройка динамических очередей вызовов в Asterisk 11 завершена, все работает как и было задумано.