gpt4 book ai didi

ruby - Twilio:Ruby:并行运行的调用的回调状态 URL:哪个调用已完成?

转载 作者:数据小太阳 更新时间:2023-10-29 08:01:18 30 4
gpt4 key购买 nike

我有一个电话列表,我的 Twilio 应用必须经常调用这些电话。我有一个每分钟运行一次的 cron 作业,它列出了计划在下一分钟调用的所有电话。该列表包括计划在下一分钟运行的调用以及在过去一小时内未正确完成的调用。

对于列表中的每个电话,我都有看起来像这样的代码(在 Ruby 中)来启动将并行运行的电话列表(列表“电话”),并且此代码段每分钟运行一次。

phones.each do |phone|
callbackurl="http://myapp.com/twiliocallback?phone=#{phone.id}"
data={:from=>'16135551234',
:to=>phone.number,
:url=>callbackurl
}

client=Twilio::REST::Client.new(ACCOUNT_SID, ACCOUNT_TOKEN, :ssl_verify_peer => false)
client.account.calls.create data
end

但是,如果通话时间超过一分钟,我不希望 cron 作业在已经与 Twilio 通话时触发对同一号码的调用。此外,如果有人在我更新状态之前挂断了电话,我希望由后续的 cron 触发再次调用该号码。

我知道我需要一个电话状态属性(例如 phone.status),其值为 NOT_STARTED、IN_PROGRESS 和 SUCCESSFULLY_COMPLETED,以及一个 twilio_status 属性(例如 phone.twilio_status),其值为 TWILIO_NOT_STARTED、TWILIO_IN_PROGRESS 和TWILIO_COMPLETED。

通话开始于

phone.status="NOT_STARTED" 
phone.twilio_status="TWILIO_NOT_STARTED"

而且,一旦我创建了电话,我就可以更新电话的状态:

phone.status="IN_PROGRESS" 
phone.twilio_status="TWILIO_IN_PROGRESS"

如果调用在成功路径内正确完成,我可以设置状态

phone.status="SUCCESSFULLY_COMPLETED"

如果我能弄清楚通话何时与 Twilio 断开连接,那么我就可以通过执行此操作判断通话是否已中止

is_aborted? = twilio.status=="IN_PROGRESS" && twilio.twilio_status=="TWILIO_COMPLETED"

但是,我不知道如何运行代码

phone.twilio_status="TWLIO_COMPLETED"

当电话在 Twilio 调用工作流中间甚至在工作流结束时挂断时的特定电话。

Twilio 似乎有一个可以在电话调用完成时调用的回调 URL,但不清楚回调处理程序如何确定哪些并行调用已完成。有没有办法做到这一点,以便我可以用正确的状态标记正确的调用?

最佳答案

在整个调用过程中对您的服务器的每个请求以及状态回调 URL 请求中,Twilio 将唯一的 CallSid 值传递给您的服务器以标识调用。这也会在您首次发起调用时返回的调用 XML 或 JSON 数据中返回给您。

https://www.twilio.com/docs/api/twiml/twilio_request
https://www.twilio.com/docs/api/rest/making-calls

您可以存储此 CallSid 值以跟踪整个调用生命周期的状态。

关于ruby - Twilio:Ruby:并行运行的调用的回调状态 URL:哪个调用已完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625903/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com