如何确定 TwiML Dial with Queue 是否成功?

How to determine if TwiML Dial with Queue was successful?

设置

我在 Rails 应用上的 Ruby 有一个 初始呼叫者 已成功加入队列。在 Rails 创建到 被叫方 的出站呼叫时播放音乐。 被叫方随后通过拨入队列成功连接到初始呼叫者:

response = Twilio::TwiML::VoiceResponse.new

response.dial(action: process_dial_call_status_path) do |dial|
  dial.queue()
end

render xml: response.to_s, status: :ok

Twilio 文档指出 Twilio 将使用 action 属性向我指定的端点发出请求,但仅限于“拨打的电话结束后”。我需要知道 Twilio 如何处理我的回复的结果。我担心 初始呼叫者 将永远听队列音乐,因为 被叫方 没有成功拨入队列。不过默认的队列音乐很好听!

问题

如何知道拨入队列是否成功?

我知道呼叫的状态可以是“进行中”或“已完成”(等等)。就应用可以了解的状态而言,呼叫队列是否具有类似的概念?

附录

当我故意尝试通过错误的队列名称拨号到队列时,被叫方 线路出错(“发生应用程序错误”)并挂断。我收到了文档中没有的参数。我唯一能找到参考的地方是 https://github.com/BTBurke/twiml/blob/master/callbacks.go#L33

"DequeueResult" => "queue-not-found"

我是否应该记录此回复?

这里是 Twilio 开发人员布道者。

这是一个有趣的问题,我以前没有遇到过。最初,我认为初始 <Enqueue> element might be able to help out. <Enqueue> has an action attribute 是一个 URL,它接收一个 webhook“当调用离开队列时,描述出队原因和有关在队列中花费的时间的详细信息”。但是,“在通过动词使呼叫出队的情况下,当桥接方断开连接时会触发一次操作 URL。”所以这并没有告诉我们出队的结果,直到为时已晚。

另一件事 <Enqueue> gives us is the waitUrl. While the default hold music is, ahem, great, providing your own response here can be a better idea because of the information the waitUrl receives each time Twilio comes to the end of the verbs and makes another request to the URL. The request parameters 为您提供的信息包括呼叫的当前队列位置、呼叫在队列中的时长以及总队列大小和呼叫在队列中花费的平均时间队列。不过,这并没有告诉您有关 <Dial><Queue> 成功的任何信息,这只是需要理解的有趣数据。

我认为这里最好的选择是 the url attribute on the <Queue>. This is usually used to perform a whisper 给队列中的人,让他们知道他们现在正在被移出队列(无论如何实施是一件好事!)。当具有 <Queue> 且具有 url 的呼叫从队列中出队时,属性中的 URL 将收到请求。您不需要 return TwiML 对此请求,空响应只会桥接调用,但请求会让您知道对队列的调用已成功。

虽然它不会告诉你调用是否成功。这就是您可以使用 <Dial> 元素的 action URL 的地方。即actionURL会在拨号失败时收到请求

因此,在 <Queue> 元素的 url 属性和 <Dial> 元素的 action 属性之间,您可以知道对队列的调用是成功还是失败。

关于“DequeueResult”,这不是我以前见过的,我们正在内部调查。