我有一份电话列表,需要我的Twilio应用程序定期拨打。我有一个cron作业,每分钟运行一次,它会列出所有计划在下一分钟内拨打的电话。该列表包括计划在下一分钟内运行的呼叫以及上一个小时内未能正确完成的呼叫。
对于列表中的每个电话,我有如下代码(使用Ruby)来启动并行运行的电话列表(列表“phones”),这段代码每分钟运行一次。
然而,如果电话通话时间超过一分钟,我不希望cron job在Twilio与同一号码通话时触发另一个呼叫。此外,如果一个人在通话中挂断电话,在我更新状态之前,我希望通过随后的cron触发再次拨打该号码。
如果调用在成功路径中正常完成,我可以设置状态。
然而,我不知道如何运行这段代码。
对于列表中的每个电话,我有如下代码(使用Ruby)来启动并行运行的电话列表(列表“phones”),这段代码每分钟运行一次。
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 job在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,可以在电话完成后调用,但不清楚回调处理程序如何确定哪些并行呼叫已完成。是否有办法做到这一点,以便我可以将正确的状态标记与正确的呼叫相关联?