【发布时间】:2012-03-09 07:25:24
【问题描述】:
我有一个电话列表,我的 Twilio 应用程序必须经常拨打这些电话。我有一个每分钟运行的 cron 作业,它列出了计划在下一分钟调用的所有电话。该列表包括计划在下一分钟运行的呼叫以及在过去一小时内未正确完成的呼叫。
对于列表中的每部电话,我都有如下代码(在 Ruby 中),用于启动将并行运行的电话列表(“电话”列表),并且此 sn-p 每分钟运行一次。
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,但尚不清楚回调处理程序如何确定哪些并行调用已完成。有没有办法做到这一点,以便我可以用正确的状态标记正确的呼叫?
【问题讨论】: