2017-03-07 38 views
1

如果我在「最後一次機會」後5秒內沒有收到有效響應,我想讓下面的代碼掛斷,信息。我已將:timeout設置爲11.該通話應在10秒內結束(不包括提問時間)。第一個問題在詢問第二個問題之前詢問並等待5秒鐘。我想在第二個g.pause之後掛斷電話。我已經在主要區塊嘗試了r.hangup,並且在集合區塊中嘗試了g.hangup。這些都不適合我。應該怎麼做?如果我的應用沒有得到來自呼叫接收方的有效響應,我該如何進行Twilio呼叫掛斷

def digits 
    twiml_response = Twilio::TwiML::Response.new do |r| 
    r.Gather numDigits: '1', timeout: 11, action: communications_menu_path do |g| 
     g.Say "Please press one to continue", voice: 'alice', language: 'an-AU' 
     g.Pause length: 5 
     g.Say "Last chance. I didn't get any response. Please press one to continue.", voice: 'alice', language: 'an-AU' 
     g.Pause length: 5 
    end 
    end 
    render :xml => twiml_response.to_xml 
end 

回答

1

Twilio開發人員在這裏傳福音。

當你的<Gather> times out它仍然會向你的action屬性發出請求。但是,該請求的Digits參數將爲空。

因此,在您的下一個TwiML(communications_menu_path下)期間,您應該檢查Digits參數是否存在但是爲空,然後掛斷,而不是掛在TwiML的這一部分。例如:

def communications_menu 
    if params["Digits"] && params["Digits"].blank? 
    render :xml => Twilio::TwiML::Response.new { |r| r.Hangup }.to_xml 
    else 
    # the rest of the TwiML 
    end 
end 

讓我知道這是否有幫助。

+0

這並沒有工作@ philnash,但我現在有工作。我發現我的11秒超時被添加到最後一次暫停的結尾,所以它在最後一次暫停之後等待11秒,然後掛斷。我將其改爲1,並在最後一個問題後6秒鐘掛起。另一件事是它沒有路由到我的communications_menu_path掛斷之前。它只是掛斷了。我沒有這個問題,但它不像你說的那樣路線。 – RamJet

+0

我應該補充說我在我的問題中錯誤地引用了'r.hangup'和'g.hangup'。菲爾在他的回答中應該是'r.Hangup'和'g.Hangup'。 – RamJet

+0

Bah,我的錯誤。你是對的,你確實需要使用正確的大寫字母。我希望添加不區分大小寫到我的[twiml_template](https://github.com/philnash/twiml_template)庫,以使其更容易。至於超時時間,超時開始於''內的任何內容的末尾,因此它在你的5秒鐘後開始''。 – philnash

相關問題