【问题标题】:Twilio SMS not working with rails 4Twilio SMS 不适用于 rails 4
【发布时间】:2017-04-21 01:57:52
【问题描述】:

我已按照以下说明进行操作,

https://www.twilio.com/blog/2016/04/receive-and-reply-to-sms-in-rails.html,

尝试在 rails 4.0 中发送短信。我有一个带有简单 Rails 控制器的试用帐户,如下所示

class MessagesController < ApplicationController
  skip_before_filter :verify_authenticity_token
  # skip_before_filter :authenticate_user!, :only => "reply"

  def reply
    message_body = params["Body"]
    from_number = params["From"]
    boot_twilio
    sms = @client.messages.create(
      from: Rails.application.secrets.twilio_number,
      to: from_number,
      body: "Hello there, thanks for texting me. Your number is #{from_number}."
    )
  end

  private

  def boot_twilio
    account_sid = Rails.application.secrets.twilio_sid
    auth_token = Rails.application.secrets.twilio_token
    @client = Twilio::REST::Client.new account_sid, auth_token
  end
end

在 MyAppName/config/secrets.yml 中,我定义了 SID 和令牌。根据教程,我正在使用 ngrok 向世界公开我的应用程序。如图所示,我已将 ngrok 的 URL 输入到 Twilio 的 configuration 中。我已经通过将 ngrok 给我的 URL 复制到浏览器的 URL 中来验证它。当我这样做时,它会在主页上打开我的 rails 应用程序。

问题是 Twilio 从不将 SMS 路由到我的 rails 应用程序。我没有在回复操作中回复 SMS,而是收到“从您的 Twilio 试用帐户发送 - Twilio 您好!”。这是我在编写 Rails 应用程序之前得到的 Twilio 响应。我应该提一下,我有

reply_messages POST /messages/reply(.:format) messages#reply

在我的路由表中

【问题讨论】:

    标签: ruby-on-rails twilio


    【解决方案1】:

    这里是 Twilio 开发者宣传员。

    问题在于您在 Twilio 控制台中输入了您的 ngrok URL。您实际上已经在故障转移 URL 框中输入了它。如果您再次查看,您会发现当收到一条消息时,您正在使用名为“SMS Getting Started TwiML”的 TwiML Bin,这就是您仍然收到教程回复的原因。

    您需要将左侧的下拉菜单从“TwiML”更改为“Webhook”,然后在出现的输入中输入 URL。

    第二点,您正在使用 REST API 来响应传入的消息,但您可以改用 TwiML 来响应。只需将您的操作更新为:

      def reply
        from_number = params["From"]
    
        resp = Twilio::TwiML::Response.new do |r|
          r.Message "Hello there, thanks for texting me. Your number is #{from_number}."
        end 
    
        render xml: resp.to_xml
      end
    

    如果有帮助,请告诉我。

    【讨论】:

    • 问题已解决。这也是应对回复的更好方法。谢谢。
    • 甜蜜!您介意将答案标记为正确,以便其他看到此问题的人也可以看到它有效吗?谢谢!
    • 另外不要忘记在ApplicationController 处添加protect_from_forgery with: :exception。因为这个功能,我损失了将近 2 天
    • 您不想为 Twilio webhook 端点包含 CSRF 保护,因为 webhook 是一个跨站点请求,只是您所期望的。这就是为什么最初的问题在控制器中有skip_before_filter :verify_authenticity_token
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2014-02-17
    • 2015-11-16
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多