Весм привет, есть задача: звонит человек, попадает в очередь, нужно делать запись в БД mysql при входящем звонке о том что такой человек звонит(это не проблема), затем если звонящий отключился сам(надоело ждать) то нужно записывать в БД состояние не дозвонился, как это реализовать в очереди? я чето пока не пойму, подскажите люди добрые.
Если нужно реалтайм, то для очереди отличное решение AMI. Если поставить в конфигах очереди eventwhencalled=yes то на каждое событие очереди: присоединение к очереди, попытка дозвона до оператора, разъединения и прочее генерится событие. Если не реалтайм то парсинг логов
можно написать скрипт который евент_лог парсит. выглядит вот так
#!/usr/bin/perl
$| = 1;
open(DAT, 'last.time') || die("Could not open file!");
$last=<DAT>;
close(DAT);
while ($line = <>) {
# process $line here
$line=~s/Local\///;
$line=~s/\@from-queue\/n//;
#print $line;
@input = split(/\|/, $line);
$call_time=$input[0];
if($call_time>=$last){
open(DAT, '>last.time') || die("Could not open file!");
print DAT $call_time;
close(DAT);
print "select $call_time;\n";
$uniq=$input[1];
$queue=$input[2];
$agent=$input[3];
$ACTION=$input[4];
#create table mon_queue(id serial, queue varchar(10) not null,description varchar(100), ok bigint default 0, not_ok bigint default 0, waiting bigint default 0,avg_wait double);
#create table mon_agent(id serial, agent varchar(10) not null,description varchar(100),ok bigint default 0);
#create table mon_calls(id serial, queue varchar(10),uniq varchar(20));
if($ACTION eq "RINGNOANSWER"){
}elsif($ACTION eq "ENTERQUEUE"){
print "insert into mon_calls(queue,uniq) values('$queue','$uniq');";
print "update mon_queue set waiting=waiting+1 where queue='$queue';\n";
}elsif($ACTION eq "CONNECT"){
$wait_time=$input[5];
print "update mon_queue set waiting=waiting-1,ok=ok+1,
avg_wait=case when ( (ok+not_ok)= 0) then $wait_time
else (avg_wait*(ok+not_ok)+$wait_time)/(ok+not_ok+1) end where queue='$queue';\n";
print "delete from mon_calls where uniq='$uniq' and queue='$queue';";
}elsif(($ACTION eq "COMPLETECALLER")||($ACTION eq "COMPLETEAGENT")){
$time=$input[6];
if($time eq "0"){# not ok call
print "update mon_queue set ok=ok-1,not_ok=not_ok+1 where queue='$queue';\n";
}else{
print "update mon_agent set ok=ok+1 where agent=$agent ;\n";
}
}elsif($ACTION eq "ABANDON"){
$wait_time=$input[7];
print "update mon_queue set waiting=waiting-1,not_ok=not_ok+1,
avg_wait=case when ((ok+not_ok) = 0) then $wait_time
else (avg_wait*(ok+not_ok)+$wait_time)/(ok+not_ok+1) end where queue='$queue';\n";
print "delete from mon_calls where uniq='$uniq' and queue='$queue';\n";
}
}}
ну поставил яэтот параметр, что-то никаких изменения в логах не вижу, как мне определить кто именно отсоединился?
Задан: Feb 17 '11
Просмотрен: 1,026 раз
Обновлен: Feb 20 '11
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.