🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
1.1.具备的条件 1.1.1.客户在排队的时候,由于等待时间比较久而选择取消排队,或者呼叫坐席的时候呼叫超时了,这种情况下,客户程序会选择登出 AnyChat服务器(考虑到可节约licences)。 1.1.2.坐席给客户发透明通道消息,由客户来呼叫坐席。(如果是坐席给客户发送呼叫请求,则不会出现坐席假死现象) 1.2.解决办法 对于条件1中的两种情况进行说明如下: 1.2.1.取消排队退出服务器 这种情况一般发生在客户排队比较多,而且坐席人员也比较多的情况下。由于在客户取消排队的瞬间,核心服务器碰巧给该客户路由了一个坐席。那么当坐席给客户发起透明通道消息的时候,客户由于已经logout了,所以就收不到透明通道回调而无法对坐席进行呼叫请求,这个时候坐席就会处于一种假设状态(坐席状态为0,对外关闭服务),既不能服务被分配的客户,又不能被重新路由。 解决办法:需要坐席端程序进行判断,如果从发起透明通道消息算起,10s后没有收到客户发送过来的呼叫请求,就调用结束服务接口,并且修改状态为等待中。 1.2.2.呼叫坐席超时 由于客户收到坐席发送的透明通道消息并且成功向坐席发起了呼叫请求,而坐席此时未对此呼叫请求做出任何回复,那么过了超时时间后,客户端程序会收到一个回复事件,错误码为呼叫超时,在该事件里会选择logout Anychat服务器。而核心服务器的原理是会继续给该客户路由一个坐席,那么被路由的这个坐席会给该客户发透明通道消息,而此时客户端程序已经logout了所以收不到透明通道消息回调,就不能给坐席发起呼叫请求。所以被路由的这个新的坐席会处于假设状态 解决办法 客户在收到呼叫超时的回调事件之后,可以判断一下当前是否有空闲坐席,如果有可以继续等待10s。坐席端程序可以在发出透明通道消息接口之后等待10s,如果没有收到回复请求则结束服务并修改状态为等待中。