Featured image of post 智能呼叫系统-转人工

智能呼叫系统-转人工

背景

在智能呼叫系统中,转人工是一个重要的功能,有几个功能点需要注意:

  1. 一般的场景是转一次人工, 后续的呼叫都由人工客服处理。 但是也会有转多次人工的场景,比如:当前的客服处理不了,需要转到级别高的客服处理。
  2. 转人工后的通话是否能录音? 一般的处理方式是转人工成功之后,就认为智能呼叫系统处理结束, 后续客户和客服的通话不录音,他们之间的通话只会在freeswitch中转发。

接下来我们会对转人工的方式进行详细的说明。

转人工方式

  1. 使用esl方式通过freeswitch转人工

  2. 通过REFER信令转人工

bridge

bridge的用法为:

1
bridge <target_endpoint>

其中<target_endpoint>是要转人工的客服的SIP地址, 可以为:

1
2
3
user/1000
lcr/18005558355
sofia/external/18005558355@sip.tollfreegateway.com

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的用法为:

1
uuid_bridge <uuid> <other_uuid>

其中<uuid>是要桥接的通话的UUID, <other_uuid>是转人工的UUID

uuid_bridge需要你先发送INVITE给客服,然后再用uuid_bridge桥接。

deflect

使用方法:

1
deflect SIPURI

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的流程是:

  1. fs(172.16.4.111) 发送REFER信令给UAC,并带上Refer-To头域,
  2. UAC如果接受REFER信令,那么会给一个202 Accepted信令,
  3. UAC后面就会拨打REFER信令中的Refer-To头域中转人工的地址。
  4. UAC和转人工的信令过程都会通过NOTIFY通知fs(172.16.4.111)
  5. UAC和转人工的通话接通后, fs(172.16.4.111)会挂断和UAC的通话。

小结:

  1. 转人工成功之后,转人工的语音流不会再经过fs(172.16.4.111),所以也就无法录音了。
  2. 转人工时,microSIP(A)也有往fs(172.16.4.111)发送INVITE,这个INVITE其实相当于UPDATE, 通知fs(172.16.4.111)媒体信息更新。
  3. sip_refer_continue_after_reply我设置成了true,但是还是会挂断当前的会话,和描述的功能不一样。我的freeswitch版本就是1.10.7

uuid_deflect

使用方法:

1
uuid_deflect <uuid> SIPURI

功能和deflect 一样, 只是uuid_deflect是通过UUID来转人工的。

redirect

使用方法:

1
redirect SIPURI,SIPURI

未接通时,想转人工,可以使用此功能。

交互流程

    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

用法:

1
transfer <destination_number> [<dialplan> [<context>]]

因为是转到线路上,所以使用的方式为:

1
2
 <action application="transfer" data="sip:1009@172.16.4.114:5060"/>
 <action application="park"/>

交互流程

    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)上也能记录转人工录音。

总结

  1. 未接通时, 可以使用redirect,transfer功能, 转人工。
  2. 接通时, 可以使用deflect,bridge, transfer功能, 转人工。
  3. 转人工可以录音的有:bridge, transfer,不能录音的有:deflect,redirect
本博客已稳定运行
发表了72篇文章 · 总计126.91k字
本站总访问量 次 · 您是本站第 位访问者
粤ICP备2025368587号-1| 使用 Hugo 构建
主题 StackJimmy 设计