====== 后台接收事件 ======
===== 外呼型通话记录举例 =====
在这个示例中,我们将在服务端创建接收程序cdrlog用于记录呼叫记录,主要观察这些通话事件的规律,利用其去创建,更新通话数据。我们使用php+mysql实例代码举例,提供一种思路供开发者参阅。
* 通话过程分析:
- 坐席席通过代码告诉CC我要给xxxx打电话;
- CC首先呼叫坐席的电话,此时坐席电话振铃;
- 坐席接起电话
- 当坐席接起电话时,CC才会向XXXX拨打电话,只有确认坐席可以正常通话时,客户才会被呼叫。
- (在坐席接起电话的同一时刻)客户电话振铃(通话开始,创建呼叫记录)
- 客户接听电话(通话应答,更新呼叫记录)
- 当有一方挂断电话时,整个通话就结束了(通话结束, 更新呼叫记录)
* 情景分析:外呼是坐席主动给客户打电话,那么我们已知数据信息包括(这些已知信息会在坐席登录时获得)
* 坐席工号$agentno
* 坐席绑定的电话号码$agentphone
* 团队标识$orgidentity
* 事件观察:每个完整的通话是由多个事件组成,但是每个事件的sessionid都是相同的,也就是说sessionid是一通通话的标识。
source+event描述了当前通话的实际状态
这段代码逐条处理系统发出的事件,当收到振铃事件时,就创建一条新的呼叫记录,收到其它事件时就更新呼叫记录。
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;
}
}
}
* 在cc上设置事件发送地址
接收团队事件,须在团队高级设置中填写“事件接收地址”=>你的程序访问地址
登录服务器执行命令 /etc/init.d/asterccd restart
* 处理话务事件
接收到的事件和[[zh:二次开发者指南:接口开发手册_v2.0:通话实时事件获取]]中提供的数据是一样的,程序中可通过这些事件进行cdr记录。