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

时间:2012-03-08 22:15:21

标签: ruby twilio

我有一个电话列表,必须经常通过我的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,可以在电话呼叫完成时调用,但不清楚回调处理程序如何确定哪些并行调用已完成。有没有办法做到这一点,以便我可以用正确的状态标记正确的呼叫?

1 个答案:

答案 0 :(得分:3)

在整个呼叫和状态回调URL请求中向服务器发出的每个请求中,Twilio将唯一的CallSid值传递给您的服务器以识别呼叫。这也会在您首次发起呼叫时收到的调用XML或JSON数据中返回给您。

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

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