и что мешает каждому агенту выдать по своему сочетанию клавиш
он каким-то макаром находит нужный файл и активирует его для проигрывания потом просто тычит своё сочетание клавиш
по крайней мере это скорей всего работать будет, а извраты с конференциями и прочие ХЗ
В Asterisk Recording Interface так сделано прослушивание своей голосовой почты - в веб-интерфейсе тыкаешь мышью в сообщение, тебе на телефон приходит звонок, поднимаешь трубку и слушаешь.
Нужен хелп в этом же направлении (Астериск 1.6): Есть очередь агентов, которые принимают вызовы, вызов приходит по каналам Dahdi например Dahdi/1-1 звонок уходит в очередь на агентов. Задача дать возможность агенту включать для звонящего мелодии для прослушивания через веб-интерфейс.
Пробую делать так. Приходит звонок кидается в очередь. В очереди выполняется макрос (agentmeetme), узнаю номер агента, делаю глобальную переменную (звонков аналогичных могут приходить сразу много). Далее агент просить звонящего набрать на клаве телефона 1. Выполняется макрос (muzicbg1) где канал с агентом перенаправляю для входа в конференцию, и в этуже конференцию кидаю звонящего. Теперь они в конференции. Через скрипты добавляю мелодию и проигрываю. Также останавливаю.
Проблема: Как сделать чтобы от звонящего ничего не зависило и ему неприходилось нажимать клавишу 1.
При этом ChannelRedirect - для канала агента работает, а для канала Dahdi/1-1 ошибку не выдает а ложит трубку.
также при включенной опции p агент не может выйти из конференции при нажатии # на X-lite, при этом звонящий, выходит нормально. Проблема еще в том что не получается выйти агентом из конференции, как только кикнуть его (meetme kick 10001 2) но при этом сам агент разлогинивается. Как можно обойти?
queues.conf
member => Agent/10001
member => Agent/10002
[macro-agentmeetme]
exten => s,1,Set(GLOBAL(MYAGENT${CALLERID(num)})=${CHANNEL:-5:5})
; беру номер агента который принял в очереди звонок
[muzfon1]
switch => Realtime/muzfon1@ext_switch
; обращается в базу данных где через веб интерфейс подставляется путь к музыкальному файлу который будет проигрываться
[muzmeet]
exten => _XXXXX,1,MeetMe(${EXTEN},1dqx)
; добавление динамическую в конференцию согласно номеру агента 10001 например.
[muzmeet1]
exten => _XXXXX,1,Playback(beep)
exten => _XXXXX,n,MeetMe(${EXTEN},1dqAx)
; добавление в конференцию агента с проигрыванием ему бип перед входом.
Скрипт для добавления на воспроизведение мелодии
на перле кусок скрипта в качестве $parametr - передается номер агента
open G, "> /tmp/muzfon$parametr.call";
print G "Channel: local/play$parametr\@muzfon1\n";
print G "WaitTime: 45\n";
print G "CallerID:9999\n";
print G "Context: muzmeet\n";
print G "Extension: $parametr\n";
print G "Priority: 1\n";
close G;
system("mv -f /tmp/muzfon$parametr.call /var/spool/asterisk/outgoing/muzfon$paramert.call");
скрипт создает файл и ложит его в астериск для воспроизведения. через реалтайм. обращается в бд где уже лежит нужный путь к файлу.
второй скрипт который останавливает воспроизведение мелодии в конференции
#!/usr/bin/perl -w
use CGI;
use POSIX qw(strftime);
use Asterisk::AMI;
use strict;
use warnings;
print "Content-type: text/html\n\n";
my $my_cgi = new CGI;
my $parametr = $my_cgi->param('par');
sleep(2);
my $astman = Asterisk::AMI->new(PeerAddr => '10.10.10.10'
PeerPort => '1111',
Username => '123',
Secret => '123'
);
die "Unable to connect to asterisk" unless ($astman);
my $action = $astman->send_action({ Action => 'Command', Command => 'meetme kick '.$parametr.' 3'}); # удаляю через команды cli> последнего вошедшего это мелодия которая воспроизводится.
my $response = $astman->get_response($action);
1;
мелодий в базе 9 тыс. Перезванивать звонящему экономически не выгодно. и теряется смысл сервиса. + нужно вести статистику времени агента в системе. Веб интерфейс у агента, доступа к нему у звонящего нету. При этом агент в разговоре слушает пожелания звоняшего и включает ему мелодии.