2011-12-22 45 views
1

我在我的rails 3.1.3应用程序中使用Twilio,并且基本设置了一切,即根据响应取决于视图的sms和xml构建器的控制器。唯一我无法弄清楚的是如何跟踪对话。 Twilio文档对于使用除PHP之外的任何其他文档都很不好。我尝试过使用Rails会话哈希,会话[:变量],但它似乎并没有保存会话,因为我试图重定向和打印出来,什么都没有。以下是控制器的代码。使用Rails和Twilio跟踪SMS对话

 
    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 

我现在已经建立了一个数据库表来跟踪这取决于我的应用程序联系的电话号码当前通话状态。现在我唯一需要做的就是为会话设置一个到期,就像会话或cookie一样。我不确定如何做到这一点,或者甚至有可能。

+0

我相信这篇博文是http://www.twilio.com/blog/2012/01/twilio-and-rails-3-tracking-sms-conversations.html,涵盖了你在找什么。特别是,看看Rails对CSRF的保护的底部。 – mguymon 2013-01-29 19:57:43

+0

谢谢。我在写完文章后写了那篇文章,但感谢读它! – acmeyer9 2013-02-02 20:18:27

回答

1

这取决于您如何定义“对话”,但通常情况下,您最好使用某种持久性(将数据库推荐到文件上),并根据您的对话定义构建结构。

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

短信与电话不同,因为您可以为电话会话设置Cookie。 SMS在交付或发送时完成。当您收到短信至电话号码或短代码时,Twilio会向您提供的短信网址发送请求,然后您的应用可以进行回复。如果您收到另一个回复,这是一个全新的请求,所以您必须构建“对话”的概念。

+0

所以我创建了一个数据库表来添加条目,具体取决于电话号码和状态,该消息是在。现在我遇到的唯一问题是在一段时间后删除这个状态。这可能吗? – acmeyer9 2011-12-28 03:32:05

+0

我不完全确定你在这里问的是什么 - 如果由于某些限制需要转储数据,可以创建一个定期运行并清理它的进程。请您详细说明删除它的原因以及您实施的数据结构? – Sologoub 2011-12-28 04:12:25

+0

当然,所以基本上我想跟踪一个短信会话,我已经完成了,但一旦它结束,用户已经停止发送短信,我想删除它,以便下次他们发短信时,会话从头再次开始。我想根据一段时间来完成,比如30分钟后。 – acmeyer9 2011-12-28 14:00:05