Twilio 传道者在这里。
这听起来可能是一个好地方使用一些<Conference>s.
让我们定义场景中的参与者:Agent1、Agent2、Field。
假设 Field 调用 Agent1。而不是直接将两者连接起来<Dial>
你可以<Dial>
场变成<Conference>
(我们将其称为 ConferenceA),然后使用 REST API 发起对 Agent1 的出站呼叫。当他们回答时<Dial>
他们进入同一个<Conference>
。系统需要获取 Agent1 和 Field 的 CallSid,以及 Agent1 的 Sid<Conference>
,将它们持久保存在某种类型的存储中以供以后使用。
Using <Conference>
在这种情况下,与使用时相比,您可以更灵活地独立操作呼叫的每个分支<Dial>
连接 Field 和 Agent1。
现在 Agent2 调用 Field。 Agent2 将经历相同的过程,只是相反。 Agent2 将被拨入<Conference>
(我们称之为 ConferenceB),您的系统将使用 REST API 来调用 Field。当菲尔德回答时,他们得到<Dial>
与 Agent2 加入同一会议。同样,系统需要获取 Agent2 和 Field 的 CallSid,以及 Agent2 的 Sid<Conference>
,将它们持久保存在某种类型的存储中以供以后使用。
现在,Field 需要一种方法来告诉系统将 Agent2 与 Agent1 连接。为此,您可以利用<Dial>
当您将 Field 拨入 ConferenceB 时,您向 Twilio 提供的 TwiML 中的hangupOnStar 属性。这<Dial>
动词看起来像:
<Dial hangupOnStar="true" action="[process_hangup_url]">
<Conference>ConferenceB</Conference>
</Dial>
hangupOnStar 告诉 Twilio 将呼叫者 (Field) 与任何人断开连接<Dial>
ed(会议),但仍然向 中定义的 URL 发出请求<Dial>
动词动作属性。这很重要,因为当 Field 需要告诉系统将 Agent2 重定向到与 Agent1 一起的 ConferenceA 时,并且对 s action 属性中的 URL 的请求使系统有机会提示 Field 看看这是否是他想要做的。因此,您可能让 Twilio 执行一些 TwiML,如下所示:
<Response>
<Gather action=[gather_handler]>
<Say>Press 1 to connect this caller to another<Say>
</Gather>
</Response>
如果 Field 按 1,则系统(知道此处涉及的所有各方的所有 CallSid 以及会议 sid)可以使用 REST API 将 Agent2 从 ConferenceB 重定向到 ConferenceA。
它使系统变得有点复杂,但它应该适合您。
希望有帮助