2016-03-23 12 views
0

#callメソッドを実行すると、#connectメソッドの呼び出しがオーディオを再生するようにリダイレクトされ、#connectメソッドが#menu_selectionにリダイレクトされ、すべてが壊れます。私がherokuログに記録するエラーは、セッションがnilまたは定義されているということです。コントローラでセッションメソッドを2回呼び出すことはできません

私が理解していないことは、最初のメソッド#callでsession [:user_id]を使用していることです。なぜ#menu_selectionメソッドで定義されていませんか?未定義のローカル変数やメソッド `セッション」私は、『リスト』変数を定義しています最初の行に

その:#menu_selection方法で

def call 
     @list = User.find_by(id: session[:user_id]).contact_lists.find_by(id: session[:last_contact_list_id]) 
     @contacts = @list.contacts 

     @client = Twilio::REST::Client.new(@@account_sid, @@auth_token) 
     @contacts.each do |contact| 
     @call = @client.account.calls.create(
      :from => '+18056234397', # From your Twilio number 
      :to => '+1' + contact.phone ,  # To any number 

      :url => root_url + "connect" 
     ) 
     end 
     redirect_to root_path 
    end 



    def connect 
    response = Twilio::TwiML::Response.new do |r| 
     r.Play 'https://clyp.it/l1qz52x5.mp3' 
     r.Gather numDigits: '1', action: menu_path do |g| 
     g.Play 'https://a.clyp.it/2mue3ocn.mp3' 
     end 
    end 
    render :xml => response.to_xml 
end 



def menu_selection 
    list = User.find_by(id: session[:user_id]).contact_lists.find_by(id: session[:last_contact_list_id]) 
    user_selection = params[:Digits] 
    @client = Twilio::REST::Client.new(@@account_sid, @@auth_token) 
    case user_selection 
    when "1" 
    @output = "say something." 
    twiml_say(@output, true) 
    when "2" 
    twiml_dial("+1805XXXXX") 
    when "3" 
    @output = "Bye Bye..." 
    twiml_say(@output, true) 
    end 
end 

私はエラーを取得します。

これまでにこのような問題は発生しませんでした。誰が何が起こっているのか分かっていれば、私はあなたの助けに感謝します。

最初の@list変数をメソッド#callの外でクラス変数として定義しようとしましたが、これは私が今取得するのと同じエラーを返します。私は#menu_selectionメソッドでそれを使用しようとする#callメソッド内のクラス変数にしようとしましたが、 "@@リストは未定義です"というエラーが出ます。

答えて

0

ここではTwilioの開発者エバンジェリストです。

ここでの問題は、#callアクションのセッションがユーザーとサーバーの間にあることです。ただし、通話を開始してTwilioがサーバーにコールバックすると、Twilioとサーバー間のセッションはまったく異なります。

この場合、Twilioに必要なデータをURLで渡す必要があります。したがって、単に接続URLを送信するのではなく、後で必要とするパラメータで送信してください。次に、あなたの#connectアクションが(menu_pathラインに注意してください)あまりにもあなた#menu_selectionアクションへのそれらを渡す必要があります

def call 
    @list = User.find_by(id: session[:user_id]).contact_lists.find_by(id: session[:last_contact_list_id]) 
    @contacts = @list.contacts 

    @client = Twilio::REST::Client.new(@@account_sid, @@auth_token) 
    @contacts.each do |contact| 
    @call = @client.account.calls.create(
     :from => '+18056234397', # From your Twilio number 
     :to => '+1' + contact.phone ,  # To any number 

     :url => root_url + "connect?user_id=#{session[:user_id]}&last_contact_list_id=#{session[:last_contact_list_id]}" 
    ) 
    end 
    redirect_to root_path 
end 

def connect 
    response = Twilio::TwiML::Response.new do |r| 
    r.Play 'https://clyp.it/l1qz52x5.mp3' 
    r.Gather numDigits: '1', action: menu_path(:user_id => params[:user_id], :last_contact_list_id => params[:last_contact_list_id] do |g| 
     g.Play 'https://a.clyp.it/2mue3ocn.mp3' 
    end 
    end 
    render :xml => response.to_xml 
end 

最後に、あなたがなりますのでご#callアクションは次のようになります。

def menu_selection 
    list = User.find_by(id: params[:user_id]).contact_lists.find_by(id: params[:last_contact_list_id]) 
    user_selection = params[:Digits] 
    @client = Twilio::REST::Client.new(@@account_sid, @@auth_token) 
    case user_selection 
    when "1" 
    @output = "say something." 
    twiml_say(@output, true) 
    when "2" 
    twiml_dial("+1805XXXXX") 
    when "3" 
    @output = "Bye Bye..." 
    twiml_say(@output, true) 
    end 
end 

が私をKNてみましょう:あなたの#menu_selectionアクションで、代わりにセッションの、これらのパラメータを使用することができこれが助けてくれるならば

+1

Philnash、もう一度ご協力いただきありがとうございます。これはあなたが私のために質問に答える2回目です。ほんとうにありがとう。私はあなたが提案したとおりに正確に試してみました。 :D –

+0

問題ありません!私はちょうど助けるためにここにあります:) – philnash

+0

私はそれを感謝します:)あなたは、電話を受ける人が拾われない場合、私は電話を切ることができる方法を知っていますか?それとも可能ですか?今のところそれが原因ですが、回答がなければ音声メッセージが残ります。 mp3の録音をメッセージとして残します。 –

関連する問題