Twilio: Ruby: 并行进行的呼叫的回调状态URL:哪个呼叫已完成?

3
我有一份电话列表,需要我的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,可以在电话完成后调用,但不清楚回调处理程序如何确定哪些并行呼叫已完成。是否有办法做到这一点,以便我可以将正确的状态标记与正确的呼叫相关联?

1个回答

3

这个可行。我在传递给client.account.calls.create(data)的数据哈希表中,使用了:StatusCallback=>callbackurl作为另一个哈希表条目。我需要深入到比通话本身更深层次的上下文数据中。回调URL让我传递参数以进入那个更深层次的上下文数据。 - Jay Godse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接