在这个示例中,我们将在服务端创建接收程序cdrlog用于记录呼叫记录,主要观察这些通话事件的规律,利用其去创建,更新通话数据。我们使用php+mysql实例代码举例,提供一种思路供开发者参阅。
这段代码逐条处理系统发出的事件,当收到振铃事件时,就创建一条新的呼叫记录,收到其它事件时就更新呼叫记录。
function cdr() {
if($data ['calltype'] == ‘dialout’){
//如果是呼出事件
if($data['source'] == 'CALLEE' && $data['event'] == 'ringing'){
//坐席外呼,客户开始振铃 ,此刻代表电话的开始,创建通话记录
$src = (string)$agentphone; //电话发起方:坐席的电话
$dst = (string)$data['activenum'];//被叫号码
$starttime = $data['eventTime'];//事件时间就是通话的开始时间
$disposition = 'NOANSWER';//此刻是客户振铃,暂时等于未应答
$target = 'DialOut';//标识通话记录是呼出
$diallogid = $data['sessionid']; //此通通话的唯一标识
$agentno;//坐席工号,标识是哪个坐席打的电话
$orgidentity;//标识是哪个组织的电话记录
If(!(SELECT * FROM 呼叫记录表 WHERE diallogid=$diallogid limit 1;)){
//检查是否已经创建了这个通话的呼叫记录,如果没找到数据,说明可以创建呼叫记录,防止收到重复事件.
INSERT INTO 呼叫记录表 SET 以上变量;//将以上信息存入数据库
}
}else if($data['source'] == 'CALLEE' && $data['event'] == 'answer'){
//客户应答,更新呼叫记录
$disposition = 'ANSWER';//应答了 更新成应答标识
$answertime =$data['eventTime'];//通话应答时间
UPDATE 呼叫记录表 SET 以上变量 WHERE diallogid=$diallogid limit 1;
}else if($data['source'] == 'CALLEE' && $data['event'] == 'hangup'){
$endtime =$data['eventTime'];//双方通话结束时间
UPDATE 呼叫记录表 SET 以上变量 WHERE diallogid=$diallogid limit 1;
}
}
}
接收团队事件,须在团队高级设置中填写“事件接收地址”⇒你的程序访问地址 登录服务器执行命令 /etc/init.d/asterccd restart
接收到的事件和通话实时事件获取中提供的数据是一样的,程序中可通过这些事件进行cdr记录。