【问题标题】:Tracking SMS conversation using Rails and Twilio使用 Rails 和 Twilio 跟踪 SMS 对话
【发布时间】:2011-12-22 17:47:19
【问题描述】:

我在我的 rails 3.1.3 应用程序中使用 Twilio,我已经基本设置好了所有内容,即根据响应为视图创建 sms 和 xml 构建器的控制器。我唯一不知道的是如何跟踪对话。 Twilio 文档不适合使用 PHP 以外的任何东西来执行此操作。我曾尝试使用 Rails 会话哈希 session[:variable],但它似乎并没有保存会话,因为我尝试重定向并打印它并没有得到任何结果。下面是控制器的代码。

定义接收 # 检查会话变量并在必要时重定向 @sms_state = 会话[:sms_state] 如果@sms_state == '确认' 重定向到“确认” 结尾 如果条件 @sms_state = '确认' 会话[:sms_state] = @sms_state 渲染 :action => "view.xml.builder", :layout => false 别的 @sms_state = '新状态' 会话[:sms_state] = @sms_state 渲染 :action => "error.xml.builder", :layout => false 结尾 结尾 # 用户处理完第一部分后应该调用的方法 定义确认 如果条件 @sms_state = session[:sms_state] = nil 渲染 :action => "confirm_view.xml.builder", :layout => false 别的 @sms_state = '确认' 会话[:sms_state] = @sms_state 渲染 :action => "error.xml.builder", :layout => false 结尾 结尾

我现在已经设置了一个数据库表来根据联系我的应用程序的电话号码来跟踪当前的对话状态。现在我唯一需要做的就是为这个会话设置一个过期时间,就像会话或 cookie 一样。我不知道该怎么做,或者它是否可能。

【问题讨论】:

  • 我相信这篇博文 twilio.com/blog/2012/01/… 涵盖了您正在寻找的内容。特别是,请查看关于 Rails 对 CSRF 的保护的底部部分。
  • 是的,谢谢。其实我是在想通之后才写这篇文章的,不过感谢阅读!

标签: ruby-on-rails ruby-on-rails-3 session twilio


【解决方案1】:

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

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

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

【讨论】:

  • 所以我创建了一个数据库表来根据电话号码和消息所在的状态添加条目。现在我遇到的唯一问题是在一定时间后删除此状态。这可能吗?
  • 我不完全确定您在这里问的是什么 - 如果您由于某些限制需要转储数据,您可以创建一个定期运行并清理它的进程。您能否详细说明删除它的原因以及您放置的数据结构?
  • 当然,所以基本上我想跟踪一个短信对话,我已经完成了,但是一旦结束,用户已经停止发送短信,我想删除它,以便下次他们发短信时,谈话又从头开始了。我想根据时间框架来做,比如 30 分钟后。
  • 在这种情况下,我只需创建一个对话 ID 并放置一个时间戳,每次将消息添加到对话中时您都会更新该时间戳。在查找是创建新对话还是使用现有对话时,如果原始对话中的最后一条消息超过 30 分钟,请限制您要创建新 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多