Twilio 布道者在这里。
这听起来可能是使用 some <Conference>
s的好地方。
让我们在您的场景中定义参与者:Agent1、Agent2、Field。
假设 Field 调用 Agent1。<Dial>
您可以将这两者直接与 a 连接起来,而不是直接将其连接<Dial>
到 a <Conference>
(我们称之为 ConferenceA),然后使用 REST API 发起对 Agent1 的出站调用。当他们回答<Dial>
他们时,他们变成了相同的<Conference>
。系统将需要获取 Agent1 和 Field 的 CallSid 以及 的 Sid,将<Conference>
它们保存在某种类型的存储中以供以后使用。
<Conference>
在这种情况下,您可以更灵活地独立操作呼叫的每个分支,而不是使用连接<Dial>
Field 和 Agent1。
所以现在 Agent2 调用 Field。Agent2 将经历相同的过程,只是相反。Agent2 将被拨入<Conference>
(我们称之为 ConferenceB),您的系统将使用 REST API 来调用 Field。当 Field 回答时,他们会被<Dial>
编入与 Agent2 相同的会议。同样,系统将需要同时获取 Agent2 和 Field 的 CallSid,以及 的 Sid,将<Conference>
它们保存在某种类型的存储中以供以后使用。
现在,Field 需要一种方法来告诉系统将 Agent2 与 Agent1 连接起来。为此,您可以<Dial>
在将 Field 拨入 ConferenceB 时使用 TwiML 中的 s hangupOnStar 属性。<Dial>
动词看起来像:
<Dial hangupOnStar="true" action="[process_hangup_url]">
<Conference>ConferenceB</Conference>
</Dial>
hangupOnStar 告诉 Twilio 断开呼叫者(字段)与他们编辑的任何人(会议)的连接,但仍向动词操作属性<Dial>
中定义的 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 将代理 2 从 ConferenceB 重定向到 ConferenceA。
它使系统变得更加复杂,但它应该适合您。
希望有帮助