2012-03-08 33 views
3

我有一個必須由我的Twilio應用程序經常調用的手機列表。我有一個每分鐘運行一次的計時任務,這將使所有計劃在下一分鐘內被調用的電話列表成爲可能。該列表包括計劃在下一分鐘運行的呼叫以及在最後一小時內沒有正確完成的呼叫。Twilio:Ruby:並行運行調用的回調狀態URL:哪個調用完成?

對於列表中的每部手機,我都有類似於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" 

如果我能弄清楚什麼時候通話已經從Twili斷開O,那麼我可以告訴如果呼叫被這樣

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

但是中止,我不知道如何來運行代碼

phone.twilio_status="TWLIO_COMPLETED" 

特定電話時,電話掛起在Twilio調用工作流程的中間,甚至是在工作流程結束時。

Twilio似乎有其可在電話完成時被調用的回調URL,但目前尚不清楚該回調處理程序如何計算其完成並行調用出來。有沒有辦法做到這一點,以便我可以標記正確的電話狀態?

回答

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值來跟蹤整個呼叫的生命週期狀態。

+0

This Works。我使用:StatusCallback => callbackurl作爲我傳遞給client.account.calls.create(data)的數據散列中的另一個散列項。我需要比通話本身更深入的上下文數據。callbackURL讓我傳遞參數來進入更深的上下文數據。 – 2012-03-13 19:51:05

相關問題