在下面的代码中,当#call方法执行时,它会将调用重定向到#connect方法以播放音频,然后#connect方法重定向到#menu_selection,其中所有内容都会中断。我在heroku日志中得到的错误是会话是零或定义的。
我不明白的是,我已经在第一个方法#call中使用了session [:user_id]。为什么在#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
在#menu_selection方法中,我得到错误:未定义的局部变量或方法`session'
它位于我定义"列表"的第一行。变量
我之前从未遇到过这类问题。如果有人知道最新情况,我将非常感谢您的帮助。
我尝试将第一个@list变量定义为方法#call之外的类变量,但它给了我与现在相同的错误。我也尝试在#call方法中使它成为一个类变量,尝试在#menu_selection方法中使用它,但我得到一个" @@ list未定义"错误。
答案 0 :(得分:0)
Twilio开发者传道者在这里。
此处的问题是#call
操作中的会话位于您的用户和服务器之间。但是,当您发起呼叫并且Twilio回叫您的服务器时,Twilio与服务器之间的会话完全不同。
在这种情况下,您需要通过您的URL传递Twilio需要的数据。因此,不是仅发送连接URL,而是使用稍后需要的参数发送它。因此,您的#call
操作将如下所示:
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
然后,您的#connect
操作也需要将这些操作传递给您的#menu_selection
操作(请注意menu_path
行):
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
最后,您可以在#menu_selection
操作中使用这些参数,而不是会话:
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
请告诉我这是否有帮助!