Ruby on rails twilio会话变量不返回值

Ruby on rails twilio会话变量不返回值,ruby-on-rails,ruby,ruby-on-rails-4,twilio,Ruby On Rails,Ruby,Ruby On Rails 4,Twilio,我有一个简单的应用程序,我想确认从我的客户对短信购买订单。我正在将带有会话变量的订单id传递给我的,他将分别用y或n响应接受或拒绝订单。我的代码是这样的 body = "You have a new order of a #{product.title}" session[:orderId] = @order.id client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN) client.account.messages.create(:

我有一个简单的应用程序,我想确认从我的客户对短信购买订单。我正在将带有会话变量的订单id传递给我的,他将分别用y或n响应接受或拒绝订单。我的代码是这样的

body = "You have a new order of a #{product.title}"
session[:orderId] = @order.id
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => sotre_no, :body => body)
并得到回应

from = params["From"]
response = params["Body"]
order = Order.find session[:orderId] #session[:orderId] returns nil why?
if order.confirm(response)
  body = "your order is confirmed! Thanks"
else
  body = "You have reject the order Thanks for your response"
end
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => from, :body => body)
我无法获取订单id,为什么有人可以在这方面提供帮助,或者建议我如何在参数中发送订单id。

会话为空,因为(我猜)它是通用处理程序。您应该将
orderId
传递给客户端:

client.account.messages.create(
  :from => 'myNo', 
  :to => sotre_no, 
  :body => body,
  :orderId => @order.id # supply orderId
)
现在,您应该能够在

order = Order.find params['OrderId']

希望能有所帮助。

我是Twilio的开发者宣传者

这里的问题是,当用户使用web浏览器浏览您的站点时,会话会起作用。cookie标识会话,并在浏览器每次发出请求时与服务器共享

在这种情况下,您没有与站点交互的浏览器,您的用户是通过SMS进行交互的。因此,不会交换cookie,也不会有持久会话

相反,您需要将订单保存在一个更永久的存储中,例如另一个型号。我现在称之为
优惠
(即向用户提供产品)

当您收到回复信息时,您将通过电话号码查找您上次向用户提供的服务,并从那里获得订单:

from = params["From"]
response = params["Body"]
offer = Offer.last_offer_for(from)
order = offer.order
if order.confirm(response)
  body = "your order is confirmed! Thanks"
else
  body = "You have reject the order Thanks for your response"
end
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => from, :body => body)
这只是实现这一点的一个选项,您可以将其保存在一个更简单的数据库中,如redis这样的键值存储


我希望这有帮助,请让我知道我是否可以提供进一步的帮助。

非常感谢您的回复,但我的系统在这种情况下会表现出意外行为,例如,同一客户的产品多次收到访客订单,非正常客户将收到每个订单的短信,如果客户接受订单,它将始终接受我收到的客户的最后一个订单希望你明白我的意思。我明白你的意思,但是课程仍然不能按你期望的方式进行。您可能会要求用户在SMS中包含他们正在购买的订单的id并检测该id,但这比是/否响应更难。问题是,在基于web的交互过程中,将SMS对话联系在一起肯定比保持状态更难。目前,我也在做同样的事情,在SMS中获取订单id,让我们使用您的解决方案。但如果您有其他解决方案,请让我知道谢谢您的回复。我尝试过这个方法,但我认为我们不能以这种方式将参数传递给TwilioAPI。
body = "You have a new order of a #{product.title}"
Offer.create(:order => @order, :user => @user)
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => @user.phone_number, :body => body)
from = params["From"]
response = params["Body"]
offer = Offer.last_offer_for(from)
order = offer.order
if order.confirm(response)
  body = "your order is confirmed! Thanks"
else
  body = "You have reject the order Thanks for your response"
end
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => from, :body => body)