【问题标题】:Twilio - Transfer an Inbound CallTwilio - 转接呼入电话
【发布时间】:2019-07-01 01:32:07
【问题描述】:

我在思考如何使用 Twilio 转移呼入电话时遇到了很多麻烦。这个想法是:

  1. 来电
  2. 呼叫已连接到接待员
  3. 接待员问候和拨号分机 - 按 #。
  4. 呼叫者被转移到指定的#/sip设备。

我已经实现了这个流程的一部分。我在最初的呼叫中使用会议标签来强制呼叫者进入一个有保留音乐的房间,当那个呼叫进来时,我拨打接待员,然后让接待员加入会议。这非常有效。

我想不通的是如何从接待员的电话中获取输入然后采取行动。例如,如果接待员按#200*(或类似的东西),我想拨分机 200,会议中的呼叫者重新保持等待,直到被转移的一方回答(一旦我可以抓住所有这些都应该很容易输入并对其采取行动)。

对此的任何帮助表示赞赏。

谢谢。

【问题讨论】:

  • 您查看过这里的转账教程吗? twilio.com/docs/voice/tutorials/warm-transfer
  • 我有,但是这个例子在很多方面都有缺陷。 1 它假设用户正在使用 twilio 客户端(我们正在使用物理 SIP 电话),2 示例从 Laravel 跳转到 Node.JS 等等 - 我们只使用直接 PHP 来实现 - 所以温暖的示例转移充其量是令人困惑的。这就是我在这里发布问题的原因。
  • 好的,您的所有用户都在使用 SIP 电话,包括接待员?当您将呼叫转入他们时,您是使用 <Dial><Sip> 还是他们只是注册到 SIP 中继?
  • 是的。当前所有用户都在使用 SIP 电话。尽管我们没有在 twiml 中使用 Dial 发起呼叫。相反,当调用者在我们的应用程序中调用时,会使用 twiml 进行响应,它会创建一个会议室并将他们扔进其中。同时,我们的应用程序使用 Twilio API 向接待员发起呼叫,其端点也将连接的接待员也推送到会议中。接待员条目允许 startconferenceonenter 和 endconferenceonexit - 所以当他们断开呼叫时结束。

标签: twilio twilio-php twilio-twiml


【解决方案1】:

这里是 Twilio 开发者宣传员。

感谢 cmets 提供的额外细节。您的接待员被拨入会议以使用startConferenceOnEnter 处理来电,以停止保持音乐并建立连接。这是一个好的开始。

您说接待员也有endConferenceOnExit。我会删除它,因为为了实现这一点,我们将希望从会议中删除接待员,并在我们整理转接时将呼叫者留在会议中。

因此,您需要将 hangupOnStar 添加到接待员的 TwiML。当接待员点击* 呼叫时,请求原始<Dial>action 属性,或者,如果不存在,将继续到<Dial> 之后的下一个TwiML 动词。无论哪种方式,这都是您想要包含<Gather input="dtmf"> 的地方。这将启动 Twilio 侦听键盘音。

然后您的接待员可以拨打分机进行连接,然后按# 完成(默认finishOnKey。这将向<Gather>action 属性发送一个webhook,其中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 端点应返回 TwiML 以将新呼叫者放入会议:

<Response>
  <Dial>
    <Conference startConferenceOnEnter="true" endConferenceOnExit="true">CALLERS_CONFERENCE_ID</Conference>
  </Dial>
</Response>

您甚至可以使 /connect 端点与原来的接待员 TwiML 相同,这样通话中的下一个人也可以通过按 * 并拨打另一个分机来转出。

让我知道这是否有帮助。

【讨论】:

  • 菲尔-谢谢。该功能现在或多或少可以按需要工作。我确实有一个我似乎无法弄清楚的问题。但是,当话务员按下“*”时,呼叫者仍留在会议中,但会议音乐永远不会重新播放,表明他们处于保持状态。最初的会议室确实指定了一个 waitURL,所以我不确定为什么保留音乐没有恢复。有什么想法吗?
  • 啊,我认为waitUrl 只适用于会议开始之前,如果其他人退出,您不必再等待。如果您希望为参与者恢复音乐,您可能希望将其暂停。查看这篇介绍hold APIdocumentation 的博文。
  • 菲尔 - 再次感谢!
  • 没问题,很高兴我能帮上忙!
猜你喜欢
  • 2017-10-28
  • 2015-12-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
相关资源
最近更新 更多