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