Twilio - 转接呼入电话
Twilio - Transfer an Inbound Call
我在思考如何使用 Twilio 转接呼入电话时遇到了很多麻烦。思路是:
- 有电话进来
- 呼叫连接到接待员
- 接待员问候并拨分机 - 按#。
- 来电转移到指定的#/sip设备。
我已经实现了这个流程的一部分。我在初始呼叫时使用了会议标签,以强制呼叫者进入一个有保持音乐的房间,当那个呼叫进来时,我拨通了接待员,然后让接待员加入会议。这非常有效。
我想不通的是如何获取接待员的意见 phone 然后采取行动。例如,如果接待员按#200*(或类似的东西),我想拨分机 200,会议中的来电者保持等待,直到转接方应答(一旦我可以抓住,所有这些都应该很容易输入并据此采取行动)。
如有任何帮助,我们将不胜感激。
谢谢。
这里是 Twilio 开发人员布道者。
感谢评论中的额外细节。您的接待员被拨入会议以使用 startConferenceOnEnter
停止等待音乐并建立连接来处理来电。这是一个好的开始。
你说你也有 endConferenceOnExit
接待员。我会删除它,因为为了实现这一点,我们将要从会议中删除接待员,并在我们整理转接时将呼叫者留在其中。
因此,您需要添加 hangupOnStar
to your receptionist's TwiML. When the receptionist hits *
the call with either request the action
attribute for the original <Dial>
or, if that is not present, will continue to the next TwiML verb after <Dial>
. Either way, this is where you want to include a <Gather input="dtmf">
。这将启动 Twilio 侦听键盘音。
然后您的接待员可以拨打要连接的分机并按 #
完成(默认 finishOnKey
。这将向 <Gather>
与请求正文中的 Digits
。然后您可以选择那些 Digits
并使用该分机向用户发起新呼叫。当该呼叫连接时,您可以将它们放入原来的会议。
所以,这看起来应该有点像:
接待员 TwiML:
<Response>
<Dial hangupOnStar="true">
<Conference startConferenceOnEnter="true" endConferenceOnExit="false">CALLERS_CONFERENCE_ID</Conference>
</Dial>
<Gather action="/transfer" input="dtmf" finishOnKey="#">
<Say>Please enter the extension you want to dial</Say>
</Gather>
</Response>
然后 /transfer
操作应该在伪代码中执行如下操作:
/转移
def transfer
extension = params["Digits"]
twilioClient.calls.create( to: getNumberFromExtension(extension), from: TWILIO_NUMBER, url: "https://example.com/connect" )
return "<Response><Hangup/></Response>" # this hangs up the receptionist
end
最后,上面新呼叫中引用的 /connect
端点应该 return TwiML 将新呼叫者加入会议:
<Response>
<Dial>
<Conference startConferenceOnEnter="true" endConferenceOnExit="true">CALLERS_CONFERENCE_ID</Conference>
</Dial>
</Response>
您甚至可以使 /connect
端点与原始接待员 TwiML 相同,这将允许通话中的下一个人也可以通过按 *
并拨打另一个分机号来转出。
如果这有帮助,请告诉我。
我在思考如何使用 Twilio 转接呼入电话时遇到了很多麻烦。思路是:
- 有电话进来
- 呼叫连接到接待员
- 接待员问候并拨分机 - 按#。
- 来电转移到指定的#/sip设备。
我已经实现了这个流程的一部分。我在初始呼叫时使用了会议标签,以强制呼叫者进入一个有保持音乐的房间,当那个呼叫进来时,我拨通了接待员,然后让接待员加入会议。这非常有效。
我想不通的是如何获取接待员的意见 phone 然后采取行动。例如,如果接待员按#200*(或类似的东西),我想拨分机 200,会议中的来电者保持等待,直到转接方应答(一旦我可以抓住,所有这些都应该很容易输入并据此采取行动)。
如有任何帮助,我们将不胜感激。
谢谢。
这里是 Twilio 开发人员布道者。
感谢评论中的额外细节。您的接待员被拨入会议以使用 startConferenceOnEnter
停止等待音乐并建立连接来处理来电。这是一个好的开始。
你说你也有 endConferenceOnExit
接待员。我会删除它,因为为了实现这一点,我们将要从会议中删除接待员,并在我们整理转接时将呼叫者留在其中。
因此,您需要添加 hangupOnStar
to your receptionist's TwiML. When the receptionist hits *
the call with either request the action
attribute for the original <Dial>
or, if that is not present, will continue to the next TwiML verb after <Dial>
. Either way, this is where you want to include a <Gather input="dtmf">
。这将启动 Twilio 侦听键盘音。
然后您的接待员可以拨打要连接的分机并按 #
完成(默认 finishOnKey
。这将向 <Gather>
与请求正文中的 Digits
。然后您可以选择那些 Digits
并使用该分机向用户发起新呼叫。当该呼叫连接时,您可以将它们放入原来的会议。
所以,这看起来应该有点像:
接待员 TwiML:
<Response>
<Dial hangupOnStar="true">
<Conference startConferenceOnEnter="true" endConferenceOnExit="false">CALLERS_CONFERENCE_ID</Conference>
</Dial>
<Gather action="/transfer" input="dtmf" finishOnKey="#">
<Say>Please enter the extension you want to dial</Say>
</Gather>
</Response>
然后 /transfer
操作应该在伪代码中执行如下操作:
/转移
def transfer
extension = params["Digits"]
twilioClient.calls.create( to: getNumberFromExtension(extension), from: TWILIO_NUMBER, url: "https://example.com/connect" )
return "<Response><Hangup/></Response>" # this hangs up the receptionist
end
最后,上面新呼叫中引用的 /connect
端点应该 return TwiML 将新呼叫者加入会议:
<Response>
<Dial>
<Conference startConferenceOnEnter="true" endConferenceOnExit="true">CALLERS_CONFERENCE_ID</Conference>
</Dial>
</Response>
您甚至可以使 /connect
端点与原始接待员 TwiML 相同,这将允许通话中的下一个人也可以通过按 *
并拨打另一个分机号来转出。
如果这有帮助,请告诉我。