2017-05-23 82 views
1

我有以下簡單的回叫來處理Twilio呼叫。我要求用戶按下任何鍵盤按鈕繼續。如果通話收件人未按下某個鍵,則再次詢問該問題。如何確定呼叫接收者是否掛斷。目前,如果接聽電話並掛機,我的重定向路線繼續進行,直到我放棄要求按任意鍵。在掛斷之前可能會有一分鐘的延遲,以及我的應用停止接收命中的時間點。如何確定呼叫接收者在Twilio呼叫期間是否掛起電話

def response 
    Twilio::TwiML::Response.new do |r| 
     r.Gather finishOnKey: '#', numDigits: @num_digits, 
     timeout: @phone_wait_time, 
     action: NGROK + 
      voice_path(@notification.id, @final_question_response) do |g| 
      g.Say @latest_question.text, voice: 'alice', language: 'en-AU' 
     end 
     r.Redirect NGROK + 
     voice_redirect_path(@notification.id, @final_question_response) 
    end.to_xml 
    end 

編輯

這裏有一個關於這個問題我已經和我想要做的更多的信息。我將用一個例子。

1)我撥出電話如下

def call_phone 
    client = Twilio::REST::Client.new(
     Rails.application.secrets.twilio_sid, 
     Rails.application.secrets.twilio_token 
    ) 
    call = client.account.calls.create(
     from: Rails.application.secrets.twilio_voice_number, 
     to: @phone_number, 
     url: NGROK + question_path(@notification.id), 
     method: 'GET', 
     statusCallback: NGROK + call_status_path(@notification.id), 
     statusCallbackEvent: [:initiated, :ringing, :answered, :completed] 
    ) 
    end 

2)我statusCallback被擊中與往常一樣,initiatedringing等呼叫接收者拿起電話和statusCallback被擊中in-progress。按照上面1中定義的url:命中我的question_path。一些處理後我的反應叫做如下

def response 
    Twilio::TwiML::Response.new do |r| 
     r.Gather finishOnKey: '#', numDigits: @num_digits, 
     timeout: @phone_wait_time, 
     action: NGROK + 
      voice_path(@notification.id, @final_question_response) do |g| 
      g.Say @latest_question.text, voice: 'alice', language: 'en-AU' 
     end 
     r.Redirect NGROK + 
     voice_redirect_path(@notification.id, @final_question_response) 
    end.to_xml 
    end 

3)@latest_question.textPlease press any key to continue。如果通話收件人掛斷,我想終止通話。我希望我的statusCallback能夠打到狀態,讓我知道電話接收者已掛斷。它不這樣做,我不知道它發生了。超時後,我的voice_redirect_path被擊中。沒有迴應,所以我再次問這個問題。我仍然不知道電話已掛斷。我繼續問這個問題,一切仍在繼續,好像呼叫接收者仍然在線。這一直持續下去,直到我放棄並掛斷電話。然後我的statusCallback被點擊,狀態爲completed

在此先感謝。

+0

您是否在呼出中設置了一個'statusCallback' URL,無論是來自出站的API請求,還是Twilio控制檯中編號的'statusCallback'設置? – philnash

+0

是的,我有。即使呼叫已掛斷,'statusCallback'仍會繼續以'進行中'命中。直到我最終放棄要求呼叫者按任意鍵並掛斷自己,我的'statusCallback'才被命令爲'completed'的狀態。 – RamJet

+0

我發現這個[link](https://stackoverflow.com/questions/24087517/twiml-app-if-the-caller-hangs-up-in-the-middle-of-the-application-process-does) 。它說我可以做我想做的事,但實際上並沒有說我該怎麼做。 – RamJet

回答

0

Twilio開發者傳道這裏。

這很奇怪,你不會立即從狀態回調中獲得掛斷事件。如果您可以發郵件給[email protected]並在發生這種情況時撥打SID,我會在內部與團隊一起提高(儘管我本週假期,所以通過support team可能會更快)。

要解決此問題,可以在重定向到voice_redirect_path時使用計數參數,並在計數過高時自行掛斷。例如:

def response 
    Twilio::TwiML::Response.new do |r| 
     @count = params[:count] || 0 
     if @count > MAX_REDIRECTS 
     r.Hangup 
     else 
     r.Gather finishOnKey: '#', numDigits: @num_digits, 
      timeout: @phone_wait_time, 
      action: NGROK + 
      voice_path(@notification.id, @final_question_response) do |g| 
      g.Say @latest_question.text, voice: 'alice', language: 'en-AU' 
     end 
     r.Redirect NGROK + 
      voice_redirect_path(@notification.id, @final_question_response, :count = @count+1) 
     end 
    end.to_xml 
    end 

這將允許您在等待答案的同時設置最大數量的重定向。

讓我知道這是否有幫助。