Twilio福音传教士在这里。
这听起来像它可能是use some <Conference>
s的好地方。
让我们来定义场景中的参与者:Agent1,Agent2,Field。
可以说现场调用Agent1。您可以将<Dial>
字段直接连接到<Conference>
(我们称之为ConferenceA),然后使用REST API启动对Agent1的出站呼叫,而不是直接与<Dial>
连接。当他们回答<Dial>
他们到相同的<Conference>
。系统需要获取Agent1和Field的CallSid以及<Conference>
的Sid,并将它们保留在稍后使用的某种类型的存储中。
在这种情况下使用<Conference>
可让您更灵活地操纵呼叫的每一个独立于其他呼叫的路径,而不是使用<Dial>
连接Field和Agent1。
所以现在Agent2调用Field。 Agent2会经历相同的过程,恰恰相反。 Agent2将被拨入<Conference>
(让我们称它为ConferenceB),你的系统将使用REST API调用Field。当Field应答时,他们将<Dial>
编入与Agent2相同的会议中。同样,系统需要获取Agent2和Field的CallSid以及<Conference>
的Sid,然后将它们保留在稍后使用的某种类型的存储中。
现在,Field需要一种方法来告诉系统将Agent2与Agent1连接起来。要做到这一点,您可以在Twiio中使用TwiML中的<Dial>
的hangupOnStar属性,当您将Field拨入ConferenceB时。该<Dial>
动词看起来是这样的:
<Dial hangupOnStar="true" action="[process_hangup_url]">
<Conference>ConferenceB</Conference>
</Dial>
hangupOnStar告诉Twilio,断开谁,他们<Dial>
ED(会议),但仍使在<Dial>
动词动作属性定义的URL请求调用者(现场) 。这很重要,因为当Field需要告诉系统使用Agent1将Agent2重定向到ConferenceA时,并且对s action属性中的URL的请求使系统有机会提示Field以查看他是否想要执行此操作。所以,你可能有Twilio执行一些TwiML这样的:
<Response>
<Gather action=[gather_handler]>
<Say>Press 1 to connect this caller to another<Say>
</Gather>
</Response>
如果现场按下一个,系统(谁知道所有的CallSids所有这里涉及各方的,以及会议SIDS),可以使用REST API将Agent2从ConferenceB重定向到ConferenceA。
它使一个系统更复杂一点,但它应该为你工作。
希望帮助
你能解释一下为什么这个代码工作,以帮助未来的读者? – WhatsThePoint