twilio会话变量不返回值
我有一个简单的应用程序,我想确认订单从我的客户反对通过短信购买。我将会话变量中的订单ID传递给我,他将分别响应y或n来接受或拒绝订单。我的代码是一些这样的事twilio会话变量不返回值
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在params。
会话是空的,因为(我猜)它是通用处理程序。你应该通过orderId
客户:
client.account.messages.create(
:from => 'myNo',
:to => sotre_no,
:body => body,
:orderId => @order.id # supply orderId
)
现在,你应该能够内
order = Order.find params['OrderId']
希望它可以帮助恢复。
我是Twilio的开发者宣传员。
您的问题在于,当用户使用网络浏览器浏览您的网站时,会话可以正常工作。每次浏览器发出请求时,Cookie都会标识会话并与服务器共享。
在这种情况下,您没有浏览器与网站进行交互,您的用户正在通过短信进行交互。所以,没有交换cookies,也不能有持续的会话。
相反,您需要将订单保存在更永久的商店中,例如另一个型号。我现在要称它为Offer
(即,您正在向用户提*品)。
class Offer < ActiveRecord::Base
belongs_to :user
belongs_to :order
def self.last_offer_for(phone_number)
self.include(:user).where(['users.phone_number = ?', phone_number]).first
end
end
然后您最初的发送短信的应该是这样的:
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)
这是如何做到这一点,你可以将其保存在像一个键值存储就像Redis的一个简单的数据库只有一个选项。
我希望这可以帮助,请让我知道,如果我可以进一步帮助。
非常感谢您的回复,但在这种情况下,我的系统会表现出意外情况,例如,同一客户和偏离客户的产品的多次访客订单将获得每个订单的短信,并且如果客户接受订单,它将始终接受客户的最后订单,我希望你明白我的观点。 – 2014-10-31 13:42:52
我明白你的观点,但会议仍不会按照你的预期工作。您可能可能需要用户输入他们正在购买的订单的编号并在SMS中检测到该编号,但这会使其比“是/否”响应更难。事情是,将SMS对话连接起来比在基于Web的交互过程中保留状态更难。 – philnash 2014-10-31 14:47:53
目前我在做同样的事情让订单id回到短信让我们随你的解决方案。但是,如果您有任何其他解决方案,请让我知道谢谢 – 2014-11-01 04:54:28
感谢您的回复。我试过这个,但我认为我们不能通过这种方式将参数传递给twilio api。 – 2014-10-31 13:54:03