Asterisk RealTime Queues (очереди вызовов)
Приложение, обрабатывающее очереди вызовов так же поддерживает динамическую конфигурацию, использую механизм realtime. Используя данный механизм, определения очередей вызовов и список агентов, которые ее обрабатывают, будут заново загружаться из базы каждый раз, когда поступает вызов, который нужно поместить в эту очередь. Данные для очереди звонков могут быть в любое время изменены в базе данных, и эти изменения сразу же вступят в силу. При этом нет необходимости перезагрузки приложения, обрабатывающего очереди вызовов.
Так же возможно использовать статически определенные очереди в файле конфигурации и использовать динамическую конфигурацию realtime. Если очередь определена и в файле и в базе динамической конфигурации, то будет использована та очередь, что определена в файле конфигурации. Возможность авторизации агентов на данный момент работает только со статически определенными в файле конфигурации очередями вызовов. (Подобная функциональность с динамическими очередями может быть получена путем простого добавления нужной записи в нужный момент в агентскую таблицу нужной динамической очереди вызовов для каждого нового агента).
Настройки в файле extconfig.conf
Добавьте в этот файл нижеприведенную строку, заменяя название полей на те значения, которые Вам необходимы:queues => mysql,asterisk,queue_table
queue_members => mysql,asterisk,queue_member_table
Данный пример использует MySQL, но другие драйвера realtime (например. ODBC) также будут работать. asterisk - это название базы данных, которое выбрано в данном примере, queue_table и queue_member_table - соответственно, название таблицы для очередей вызовов и для агентов, которые их обрабатывают.
Таблица базы данных
Ниже приводится описание таблицы для очередей вызовов, использующих realtime , которое подходит для MySQL. В первой таблице описываются очереди вызовов, в каждой записи определяется одна очередь вызовов.
CREATE TABLE queue_table (
name VARCHAR(128) PRIMARY KEY,
musiconhold VARCHAR(128),
announce VARCHAR(128),
context VARCHAR(128),
timeout INT(11),
monitor_join BOOL,
monitor_format VARCHAR(128),
queue_youarenext VARCHAR(128),
queue_thereare VARCHAR(128),
queue_callswaiting VARCHAR(128),
queue_holdtime VARCHAR(128),
queue_minutes VARCHAR(128),
queue_seconds VARCHAR(128),
queue_lessthan VARCHAR(128),
queue_thankyou VARCHAR(128),
queue_reporthold VARCHAR(128),
announce_frequency INT(11),
announce_round_seconds INT(11),
announce_holdtime VARCHAR(128),
retry INT(11),
wrapuptime INT(11),
maxlen INT(11),
servicelevel INT(11),
strategy VARCHAR(128),
joinempty VARCHAR(128),
leavewhenempty VARCHAR(128),
eventmemberstatus BOOL,
eventwhencalled BOOL,
reportholdtime BOOL,
memberdelay INT(11),
weight INT(11),
timeoutrestart BOOL
);
name VARCHAR(128) PRIMARY KEY,
musiconhold VARCHAR(128),
announce VARCHAR(128),
context VARCHAR(128),
timeout INT(11),
monitor_join BOOL,
monitor_format VARCHAR(128),
queue_youarenext VARCHAR(128),
queue_thereare VARCHAR(128),
queue_callswaiting VARCHAR(128),
queue_holdtime VARCHAR(128),
queue_minutes VARCHAR(128),
queue_seconds VARCHAR(128),
queue_lessthan VARCHAR(128),
queue_thankyou VARCHAR(128),
queue_reporthold VARCHAR(128),
announce_frequency INT(11),
announce_round_seconds INT(11),
announce_holdtime VARCHAR(128),
retry INT(11),
wrapuptime INT(11),
maxlen INT(11),
servicelevel INT(11),
strategy VARCHAR(128),
joinempty VARCHAR(128),
leavewhenempty VARCHAR(128),
eventmemberstatus BOOL,
eventwhencalled BOOL,
reportholdtime BOOL,
memberdelay INT(11),
weight INT(11),
timeoutrestart BOOL
);
Данное описание таблицы содержит все поля для возможных параметров, с которыми может быть определена очередь вызовов. Кроме обязательного поля name, все остальные поля - не обязательные для заполнения. Заполняйте только те поля, которые Вам необходимы для определения каждой из очередей. В дальнейшем количество полей может быть расширено, если в приложении для обработки очередей появятся новые параметры. Значение поля NULL подразумевает, что для данного параметра используется значение по умолчанию.
Для удобства, разрешено (но не обязательно) использование в названиях полей таблицы символа подчеркивания "_" вместо символа "-", так как их проще использовать в базах SQL.
Таблица агентов для очередей вызовов должна содержать на каждую запись по одному агенту для очереди:
CREATE TABLE queue_member_table (
queue_name varchar(128),
interface varchar(128),
penalty INT(11),
PRIMARY KEY (queue_name, interface)
);
queue_name varchar(128),
interface varchar(128),
penalty INT(11),
PRIMARY KEY (queue_name, interface)
);
Можно добавить внешний индекс от поля queue_name в агентской таблице к полю name в таблице с определением очередей вызовов, если есть такое желание.
Использование
Определите очередь, вставив нужную строку в таблицу, где описываются очереди, потом определите агентов, вставив нужные строки в таблицу, где описываются агенты. Созданная новая очередь вызовов должны быть сразу доступна для принятия входящих вызовов с помощью команды Queue() в плане набора.
Дальнейшая разработка
The mantis bug describing the implementation of realtime queue is bug 4037. This bug includes some discussion on how to extend dynamic queues to also work with the member login feature.
Ссылки по теме:
- Asterisk Realtime
- RealTime Static" class="wiki wiki_page">Asterisk Realtime Static
- Asterisk Realtime Sip
- Asterisk Realtime IAX
- Asterisk Realtime Voicemail
- Asterisk Realtime Extensions