背景
在智能呼叫系统中,转人工是一个重要的功能,有几个功能点需要注意:
- 一般的场景是
转一次人工, 后续的呼叫都由人工客服处理。 但是也会有转多次人工的场景,比如:当前的客服处理不了,需要转到级别高的客服处理。 - 转人工后的通话是否能录音? 一般的处理方式是转人工成功之后,就认为智能呼叫系统处理结束,
后续客户和客服的通话不录音,他们之间的通话只会在
freeswitch中转发。
接下来我们会对转人工的方式进行详细的说明。
转人工方式
-
使用
esl方式通过freeswitch转人工 -
通过
REFER信令转人工
bridge
bridge的用法为:
|
|
其中<target_endpoint>是要转人工的客服的SIP地址, 可以为:
|
|
bridge会主动发送INVITE给客服,然后再把两通电话桥接起来。
bridge user/1002, user/1003:这个会同时拨打两个坐席号1002,1003,哪个先接通哪个就先桥接哪个.
另外一个坐席会挂断。
bridge user/1002|user/1003: 会先拨打1002,如果1002不接通, 才会拨打1003。
bridge user/1002:_:user/1003 和上面的,功能一样,不过此方法是多线程方式。
uuid_bridge
uuid_bridge的用法为:
|
|
其中<uuid>是要桥接的通话的UUID, <other_uuid>是转人工的UUID。
uuid_bridge需要你先发送INVITE给客服,然后再用uuid_bridge桥接。
deflect
使用方法:
|
|
deflect会在一个接通的会话中,会挂断当前的channel,
然后发送Refer信令和INVITE信令给转人工方。
sip_refer_continue_after_reply如果为true,
就不会挂断当前的会话,然后发送REFER信令。Refer的详细协议
交互流程
sequenceDiagram
microSIP(A)->>fs(172.16.4.111): INVITE
Note over microSIP(A),fs(172.16.4.111): Session-Expires: 1800
fs(172.16.4.111)->>microSIP(A): 200OK
microSIP(A)->>fs(172.16.4.111): ACK
Note over fs(172.16.4.111),microSIP(A): 接通电话
fs(172.16.4.111)->> microSIP(A): REFER
Note over fs(172.16.4.111), microSIP(A): Refer-To:<sip:B@172.16.4.114:5060><br/>Referred-By:<sip:172.16.4.111>
microSIP(A)->>fs(172.16.4.111): 202 Accepted
microSIP(A)->>fs(172.16.4.114): INVITE
fs(172.16.4.114)-->>microSIP(A): 100 Trying
fs(172.16.4.114)->>microSIP(B): INVITE
microSIP(B)-->>fs(172.16.4.114): 100 Trying
microSIP(A)->>fs(172.16.4.111): NOTIFY
Note over microSIP(A),fs(172.16.4.111): Event: refer<br>SIP/2.0 100 Trying
fs(172.16.4.111)->> microSIP(A): 200OK
microSIP(A)->>fs(172.16.4.111): INVITE(SDP)
Note over microSIP(A),fs(172.16.4.111): Session-Expires: 1800;refresher=uac
microSIP(B)->>fs(172.16.4.114): 180 Ringing
fs(172.16.4.114)->>microSIP(A): 183 Ringing
microSIP(A)->>fs(172.16.4.111): NOTIFY
Note over microSIP(A),fs(172.16.4.111): Event: refer<br>SIP/2.0 183 Ringing
fs(172.16.4.111)->> microSIP(A): 200OK
fs(172.16.4.111)-->> microSIP(A): 100 Trying
fs(172.16.4.111)->> microSIP(A): 200OK(SDP)
microSIP(A)->>fs(172.16.4.111): ACK
microSIP(B)->>fs(172.16.4.114): 200OK
fs(172.16.4.114)->>microSIP(A): 200OK
microSIP(A)->>fs(172.16.4.111): NOTIFY
Note over microSIP(A),fs(172.16.4.111): Event: refer<br>SIP/2.0 200 OK
fs(172.16.4.111)->> microSIP(A): 200OK
fs(172.16.4.111)->>microSIP(A): BYE
microSIP(A)->>fs(172.16.4.111): 200OK
microSIP(A)->>fs(172.16.4.114): ACK
fs(172.16.4.114)->>microSIP(B): ACK
Note over fs(172.16.4.114),microSIP(B): 通话接通
microSIP(B)->>fs(172.16.4.114): BYE
Note over microSIP(B),fs(172.16.4.114): 通话结束
fs(172.16.4.114)->>microSIP(A): BYE
microSIP(A)->>fs(172.16.4.114): 200OK
fs(172.16.4.114)->>microSIP(B): 200OK
refer的流程是:
fs(172.16.4.111)发送REFER信令给UAC,并带上Refer-To头域,UAC如果接受REFER信令,那么会给一个202 Accepted信令,UAC后面就会拨打REFER信令中的Refer-To头域中转人工的地址。UAC和转人工的信令过程都会通过NOTIFY通知fs(172.16.4.111)。- 当
UAC和转人工的通话接通后,fs(172.16.4.111)会挂断和UAC的通话。
小结:
- 转人工成功之后,转人工的语音流不会再经过
fs(172.16.4.111),所以也就无法录音了。 - 转人工时,
microSIP(A)也有往fs(172.16.4.111)发送INVITE,这个INVITE其实相当于UPDATE, 通知fs(172.16.4.111)媒体信息更新。 sip_refer_continue_after_reply我设置成了true,但是还是会挂断当前的会话,和描述的功能不一样。我的freeswitch版本就是1.10.7
uuid_deflect
使用方法:
|
|
功能和deflect 一样, 只是uuid_deflect是通过UUID来转人工的。
redirect
使用方法:
|
|
未接通时,想转人工,可以使用此功能。
交互流程
sequenceDiagram
microSIP(A)->>fs(172.16.4.111): INVITE
Note over microSIP(A),fs(172.16.4.111): Session-Expires: 1800
fs(172.16.4.111)-->>microSIP(A): 100 Trying
fs(172.16.4.111)->> microSIP(A): 302 Moved Temporarily
Note over fs(172.16.4.111), microSIP(A): Contact: "unknown" <sip:1009@172.16.4.114:5060><br/>Remote-Party-ID:"88990" <sip:88990@172.16.4.111>;party=calling
microSIP(A)->>fs(172.16.4.111): ACK
microSIP(A)->>fs(172.16.4.114): INVITE
Note over microSIP(A),fs(172.16.4.114): To: "unknown" <sip:1009@172.16.4.114>
fs(172.16.4.114)-->>microSIP(A): 100 Trying
fs(172.16.4.114)->>microSIP(B): INVITE
microSIP(B)-->>fs(172.16.4.114): 100 Trying
microSIP(B)->>fs(172.16.4.114): 180 Ringing
fs(172.16.4.114)->> microSIP(A): 183 Ringing
microSIP(B)-->>fs(172.16.4.114): 200OK(SDP)
Note over microSIP(B),fs(172.16.4.114): 通话接通
fs(172.16.4.114)->> microSIP(A): 200OK(SDP)
microSIP(A)->>fs(172.16.4.114): ACK
fs(172.16.4.114)->>microSIP(B): ACK
使用redirect时, fs(172.16.4.111)返回302 Moved Temporarily, 然后UAC会根据Contact头域, 重新发送INVITE信令。
后续的交互就和fs(172.16.4.111)没有任何关系了。
transfer
用法:
|
|
因为是转到线路上,所以使用的方式为:
|
|
交互流程
sequenceDiagram
microSIP(A)->> fs(172.16.4.111:5060): INVITE
Note over microSIP(A),fs(172.16.4.111:5060): 拨打电话
fs(172.16.4.111:5060) -->> microSIP(A): 100 Trying
fs(172.16.4.111:5080) ->> fs(172.16.4.114:5060): INVITE
Note over fs(172.16.4.111:5080), fs(172.16.4.114:5060): To: <sip:1009@172.16.4.114:5060>
fs(172.16.4.114:5060)-->> fs(172.16.4.111:5080): 100 Trying
fs(172.16.4.114:5060)->> microSIP(B): INVITE
microSIP(B)-->>fs(172.16.4.114:5060): 100 Trying
microSIP(B)->>fs(172.16.4.114:5060): 180 Ringing
fs(172.16.4.114:5060)->>fs(172.16.4.111:5080): 183 Ringing
fs(172.16.4.111:5060)->>microSIP(A): 183 Ringing
microSIP(B)->>fs(172.16.4.114:5060): 200OK
Note over microSIP(B),fs(172.16.4.114:5060): 通话接通
fs(172.16.4.114:5060)->>fs(172.16.4.111:5080): 200OK
fs(172.16.4.111:5060)->> microSIP(A): 200OK
microSIP(A)->>fs(172.16.4.111:5060): ACK
fs(172.16.4.111:5080)->> fs(172.16.4.114:5060): ACK
fs(172.16.4.114:5060)->> microSIP(B): ACK
microSIP(B)->>fs(172.16.4.114:5060): BYE
Note over microSIP(B),fs(172.16.4.114:5060): 通话结束
fs(172.16.4.114:5060)->> fs(172.16.4.111:5080): BYE
fs(172.16.4.111:5060)->> microSIP(A): BYE
microSIP(A)->>fs(172.16.4.111:5060): ACK
fs(172.16.4.111:5080)->> fs(172.16.4.114:5060): ACK
fs(172.16.4.114:5060)->> microSIP(B): ACK
可以看到,transfer转人工时,不会挂断原来的通话。fs(172.16.4.111)上也能记录转人工录音。
总结
- 未接通时, 可以使用
redirect,transfer功能, 转人工。 - 接通时, 可以使用
deflect,bridge,transfer功能, 转人工。 - 转人工可以录音的有:
bridge,transfer,不能录音的有:deflect,redirect。