Ruby on rails 使用Rails和Twilio跟踪SMS会话

Ruby on rails 使用Rails和Twilio跟踪SMS会话,ruby-on-rails,ruby-on-rails-3,session,twilio,Ruby On Rails,Ruby On Rails 3,Session,Twilio,我在我的rails 3.1.3应用程序中使用了Twilio,我已经基本上设置好了所有东西,即一个用于sms的控制器和用于视图的xml构建器,具体取决于响应。我唯一搞不懂的是如何跟踪对话。Twilio文档对于使用PHP以外的任何东西来实现这一点来说都是非常糟糕的。我已经尝试使用Rails会话哈希,session[:variable],但它似乎没有保存会话,因为我尝试重定向并打印它,但没有得到任何结果。下面是控制器的代码 def receive # Check for session var

我在我的rails 3.1.3应用程序中使用了Twilio,我已经基本上设置好了所有东西,即一个用于sms的控制器和用于视图的xml构建器,具体取决于响应。我唯一搞不懂的是如何跟踪对话。Twilio文档对于使用PHP以外的任何东西来实现这一点来说都是非常糟糕的。我已经尝试使用Rails会话哈希,session[:variable],但它似乎没有保存会话,因为我尝试重定向并打印它,但没有得到任何结果。下面是控制器的代码

def receive # Check for session variable and redirect if necessary @sms_state = session[:sms_state] if @sms_state == 'confirmation' redirect_to 'confirm' end if condition @sms_state = 'confirmation' session[:sms_state] = @sms_state render :action => "view.xml.builder", :layout => false else @sms_state = 'new_state' session[:sms_state] = @sms_state render :action => "error.xml.builder", :layout => false end end # method that should be called after user deals with first part def confirm if condition @sms_state = session[:sms_state] = nil render :action => "confirm_view.xml.builder", :layout => false else @sms_state = 'confirmation' session[:sms_state] = @sms_state render :action => "error.xml.builder", :layout => false end end def接收 #检查会话变量,必要时重定向 @sms_状态=会话[:sms_状态] 如果@sms_state==“确认” 将_重定向到“确认” 结束 如果条件 @sms_状态='确认' 会话[:sms_状态]=@sms_状态 render:action=>view.xml.builder,:layout=>false 其他的 @sms_状态='新_状态' 会话[:sms_状态]=@sms_状态 render:action=>error.xml.builder,:layout=>false 结束 结束 #方法,该方法应在用户处理第一部分后调用 def确认 如果条件 @sms_状态=会话[:sms_状态]=无 render:action=>confirm_view.xml.builder,:layout=>false 其他的 @sms_状态='确认' 会话[:sms_状态]=@sms_状态 render:action=>error.xml.builder,:layout=>false 结束 结束
我现在已经建立了一个数据库表,根据联系我的应用程序的电话号码来跟踪当前的对话状态。现在我唯一需要做的就是为这个对话设置一个过期时间,就像会话或cookie一样。我不知道该怎么做,或者它是否可能。这取决于您如何定义“对话”,但一般来说,您最好使用某种持久性(建议使用数据库而不是文件),并根据您对对话的定义构建结构

假设对话被定义为两个10位电话号码之间没有时间限制的文本消息,您可以设置具有发件人和收件人属性的db,因此如果需要在用户界面中输出内容,您可以查找发件人和收件人电话号码,并显示发往他们或从他们那里发来的所有消息


SMS与电话通话不同,因为您可以为电话通话会话设置cookies。SMS在交付或发送时完成。当您收到手机号码或短代码的短信时,Twilio将向您提供的短信URL发出请求,然后您的应用程序可以响应。如果您收到另一个响应,这是一个全新的请求,因此您必须构建“对话”的概念。

这取决于您如何定义“对话”,但一般来说,您最好使用某种持久性(建议使用数据库而不是文件),并根据您对对话的定义构建结构

假设对话被定义为两个10位电话号码之间没有时间限制的文本消息,您可以设置具有发件人和收件人属性的db,因此如果需要在用户界面中输出内容,您可以查找发件人和收件人电话号码,并显示发往他们或从他们那里发来的所有消息


SMS与电话通话不同,因为您可以为电话通话会话设置cookies。SMS在交付或发送时完成。当您收到手机号码或短代码的短信时,Twilio将向您提供的短信URL发出请求,然后您的应用程序可以响应。如果您收到另一个响应,这是一个全新的请求,因此您必须构建“对话”的概念。

因此,我创建了一个db表,根据电话号码添加条目,并声明消息位于。我现在唯一的问题是在一段时间后删除这个状态。这可能吗?我不完全确定您在这里要问什么-如果由于某些限制需要转储数据,您可以创建一个定期运行和清理的流程。你能详细说明删除它的原因和你设置的数据结构吗?当然,所以基本上我想跟踪短信对话,我已经这样做了,但一旦结束,用户停止发送短信,我想删除它,以便下次他们发短信时,对话重新开始。我想根据时间框架来做,比如30分钟后。在这种情况下,我只需要创建一个对话ID,并放置一个时间戳,您可以在每次向对话添加消息时更新该时间戳。在查找是创建新对话还是使用现有对话时,请设置一个约束条件,即如果原始对话中的最后一条消息超过30分钟,则您希望创建一个新ID。因此,我创建了一个db表,根据电话号码添加条目,并声明该消息位于。我现在唯一的问题是在一段时间后删除这个状态。这可能吗?我不完全确定您在这里要问什么-如果由于某些限制需要转储数据,您可以创建一个定期运行和清理的流程。你能详细说明删除它的原因和你设置的数据结构吗?当然,所以基本上我想跟踪短信对话,我已经这样做了,但一旦结束,用户停止发送短信,我想删除它,以便下次他们发短信时,对话重新开始。我想根据时间框架来做,比如30分钟后。在这种情况下,我只需要创建一个对话ID,并放置一个时间戳,您可以在每次向对话添加消息时更新该时间戳。在查找是创建新对话还是使用现有对话时,请设置一个约束条件,即如果原始对话中的最后一条消息超过30分钟,则您希望创建一个新ID。我相信这篇博文