【问题标题】:How to end a twilio call prematurely如何过早结束 twilio 通话
【发布时间】:2018-03-31 05:20:55
【问题描述】:

我想使用 twilio 测试我们的内部电话系统,并确保呼叫按应有的方式路由,因为众所周知,我们的供应商不善于通知我们出现问题。

我可以从 twilio 发起呼叫,使用“收集”动词来记录语音(以确保我们进入正确的队列)然后挂断。一切正常。除了收集最终需要 2 多分钟来收听来自我们电话系统的整个消息,向我们收取 8 15 秒收集块的费用。我只需要前 15 秒,但不知道如何尽快挂断。有没有一种简单的方法可以将呼叫限制在特定时间?

timeLimit 和 timeout 都不适用于此处,因为 timeLimit 仅适用于拨号动词内部,而 timeout 仅适用于集合期间的语音暂停。

【问题讨论】:

  • 为了更清楚一点,我使用其余 API 使用 URL 参数启动调用,当访问该 URL 参数时,该参数仅返回 TwiML 中的通用“收集”响应。我必须等待那个聚会来收集所有 2 分钟的演讲。相反,我希望它收集 15 秒,将结果发送给我,然后挂断。

标签: twilio


【解决方案1】:

也许只需在您的代码中设置一个计时器 15 秒左右,然后使用 /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid} 处的 POST endpoint 取消呼叫(使用 Status=Completed 参数以取消呼叫,即使呼叫正在进行中) .

【讨论】:

  • 我试过这个,但是我没有得到收集的结果。让我再试一次,也许是侥幸。
  • 也许您可以尝试使用partialResultCallback URL,它会在翻译完成后向您发送更新。如果您提前结束通话,action URL 将永远不会被调用。
【解决方案2】:

如果您使用他们的 Ruby SDK,并且您进行正常通话(不是电话会议),那么您可以使用 update 方法:

client = Twilio::REST::Client.new(account_sid, auth_token)
# fetch all in-progress calls between the two numbers
client.calls.list(from:   '+11231231234',
                  to:     '+12312311234',
                  status: 'in-progress').each do |c| #it's supposed to be just one record, but you can play it safe
  c.update(status: 'completed')
end
  • 将状态更新为completed 应该会挂断正在进行的通话。
  • 将状态更新为canceled 应该会在响铃/排队时挂断电话。

如果您确定呼叫正在进行中并且您知道呼叫 sid,那么您可以使用:

client = Twilio::REST::Client.new(account_sid, auth_token)
in_progress_call = client.calls(call_sid).fetch
in_progress_call.update(status: 'completed') if in_progress_call.present?

the official docs 中有一些一般信息。其他 SDK 也可以使用 sn-ps。

您可以找到source code of the update method here了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多