Динамические очереди вызовов в Asterisk 11

Sep 21, 2015 16:26 · 427 words · 3 minute read asterisk mysql

Очереди вызовов в 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 завершена, все работает как и было задумано.

tweet Share