5.6 事件相关问题解答
1. 为什么收到的呼叫状态事件(如,RING/ALERT等)没有 visitor/outer id和callid等信息?
问题原因:
因为外线的API没有开启,导致分机不能获取外线信息。
解决方法:
开启外线的API功能开关;
注:监控和控制模式都可以,根据具体情况选择。
2. 外呼的时候,没有接通就挂断了,为什么会收到ANSERED事件,而且CDR的通话时长大于0?
问题原因:
因为模拟外线没有开启反极性信号导致。
通过模拟外线外呼时,模拟外线并不能检测到对方是否接通,且默认为一旦呼叫被送出就立马接通了。所以,会收到ANSERED事件,且不管对方接通不接通,本次通话结束后,CDR的通话时长都将大于0。
注:此问题仅仅在通过模拟外线外呼时才会出现。
解决方法:
如果你使用的模拟外线已通过电信运营商开通了反极性信号的业务,则可以通过OM的web页面开启对应线路的反极性检测开关,即可判断对方是否接通。
重要说明:如果未通过电信运营商开启反极性信号,请勿开启设备的反极性检测开关,否则,会造成即使对方摘机了也没有ANSERED事件,CDR的通话时长将一直为0。
3. Event中的callid为什么和CDR中的不一致?callid为什么不唯一?我如何判断通话的唯一性?
问题原因:
对于用户而言,A和B的通话虽然表示是一路,但对于OM而言,实际上是由很多段通话组合起来的,目的是方便OM 对通话的任意节点进行拆分和转接(如将来电和分机A的通话转给分机B等);
具体细节,你可以不去考虑,知道不要用callid作为通话的唯一标识写入数据库即可。
解决方法:
visitor id和outer id从通话开始到结束的时间内是唯一的,但会被回收循环利用,可作为临时唯一标识。
在第一次收到visitor/outer id时,将当前的时间戳与visitor/outer id建立一对一的映射关系,用时间戳保证唯一性(常见应用有:通话过程中的便签记录,需要和其通话记录一一绑定);
当通话结束后,cdr id是唯一的,可以写入数据库作为通话的唯一标识。另外,cdr中同样会包含visitor/outer id,再次通过和时间戳的映射关系,找到cdr和时间戳的映射关系。(对应通话便签记录的应用方式:最终实现通话便签记录内容和通话记录的绑定)。
4. 什么时候判断通话被接通?
解答:
对于来电,当收到分机的Answer事件时,说明通话接通;
对于去电,当收到OM推送的Answered事件时,说明通话接通;
补充说明:若有Alert事件说明成功呼叫,对方回铃,若无Alert事件,说明对方号码为空号或其他原因导致呼叫失败。