【问题标题】:Twilio Rails Integration for Devise and Milia用于 Devise 和 Milia 的 Twilio Rails 集成
【发布时间】:2017-04-04 05:11:01
【问题描述】:

首先对一个新手问题感到抱歉。大约 15 天前才开始在 Rails 中开发。现在我已经安装了 Milia、Devise,他们处理了注册、登录和将客户数据输入数据库的所有工作。

我想达到什么目的? 我想向客户发送短信,我们将使用数据输入表单接收其手机号码,其代码如下所示。 现在,一旦输入了所有信息,并按下了创建客户按钮,所有信息都将输入到数据库中。按下按钮后,我希望通过 Twilio 向具有已定义正文的客户发送 SMS。

为此,我创建了一个控制器、一个 SMS.rb 文件和一个包含有助于触发 SMS 的代码的表单。

信息输入表格:

 <%= form_for [@sms, @tenant, @customer], :html => { :class => "form-horizontal customer" }, :id => 'form1' do |f| %>
  <% if @customer.errors.any? %>
    <div id="error_expl" class="panel panel-danger">
      <div class="panel-heading">
        <h3 class="panel-title"><%= pluralize(@customer.errors.count, "error") %> prohibited this customer from being saved:</h3>
      </div>
      <div class="panel-body">
        <ul>
        <% @customer.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
        </ul>
      </div>
    </div>
  <% end %>

<h3 align=centre>Personal Infomation</h3>
  <div class="form-group">
    <%= f.label :name, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :name, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :date_of_birth, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :dob, :class => 'form-control datepicker' %>
    </div>
  </div>

  <div class="form-group">
    <%= f.label :mobileno, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :mobileno, :class => 'form-control', :id =>"mobileno", onblur:"Calculate()" %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :email_Id, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :emailid, :class => 'form-control' %>
    </div>
  </div>
  <H3 align=centre>Address</H3>
  <div class="form-group">
    <%= f.label :building, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :building, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :sub_area, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :subarea, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :locality, :class => 'control-label col-md-2'%>
    <div class="col-lg-10">
      <%= f.text_field :locality, :class => 'form-control', :id => "locality", onblur: "Calculate()" %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :pincode, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :pin, :class => 'form-control' %>
    </div>
  </div>

  <h3 align=left>Medical Information</h3>
  <div class="form-group">
    <%= f.label :blood_group, :class => 'control-label col-lg-2' %>
    <div class="col-lg-10">
      <%= f.text_field :bg, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :diseases, :class => 'control-label col-lg-2' %>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'Diabetes', checked('Diabetes'), id: 'diseases_diabetes'%>
      <%= label_tag 'diseases_diabetes', 'Diabetes' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'Cancer', checked('Cancer'), id: 'diseases_cancer'%>
      <%= label_tag 'diseases_cancer', 'Cancer' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'TB', checked('TB'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_tb', 'TB' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'BP', checked('BP'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_bp', 'BP' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'HIV', checked('TB'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_hiv', 'HIV' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'Brain Tumor', checked('Brain Tumor'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_brain_tumor', 'Brain Tumor' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'STD', checked('STD'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_std', 'STD' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :medicine, :class => 'control-label col-md-2 col-sm-3 col-xs-4' %>
    <div class="col-lg-10">
      <%= f.text_field :medicin, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :allergy, :class => 'control-label col-md-2 col-sm-3 col-xs-4' %>
    <div class="col-lg-10">
      <%= f.text_field :allergy, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :uid, :class => 'control-label col-md-2 col-sm-3 col-xs-4'%>
    <div class="col-lg-10">
      <%= f.text_field :uid , :class => 'form-control', :id => 'uid' %>
    </div>
  </div>
  <div class="form-group">
    <div class="col-lg-offset-2 col-lg-10">
    <br>
      <%= f.hidden_field :tenant_id, value: params[:tenant_id], :class => 'form-control' %>
      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
                root_path, :class => 'btn btn-default' %>
    </div>
  </div>
<% end %> 

SMS.rb 文件:

class SMS < ActiveRecord::Base  

  def client
    Twilio::REST::Client.new Rails.application.secrets.twilio_account_sid, Rails.application.secrets.twilio_token
  end

  acct_sid = "ACCOUNT_SID"
  auth_token = "AUTH_TOKEN"
  twilio_no = "+16xxxxxxxxx"
  acct_sid = ENV['twilio_account_sid']
  auth_token = ENV['twilio_token']
  twilio_no = ENV['twilio_no']

  def send
    numberto = params[:mobileno]
    client.account.messages.create(
    :messaging_service_sid => Rails.application.secrets.twilio_messaging_service_sid,
    :from => "+1xxxxxxxxxx",
    :to => "#{numberto}",
    :body => "Hi. Thanks a lot for signing up with us. Your UID is: #{uid}"
    )
end 

我面临的问题:

我无法将@sms 添加到表单中,因为它已经有 [@tenant, @cusotmer]。添加@sms,给我一个错误。

我被卡住了,不知道如何继续。你们能帮帮我吗?

须知 1. 使用 Rails 4.2.6 2. 使用 Ruby 2.3.3

更新

我现在更新了 Form.html.erb 文件。 这里是:

 <%= form_for [@tenant, @customer], :html => { :class => "form-horizontal customer" }, :id => 'form1' do |f| %>
  <% if @customer.errors.any? %>
    <div id="error_expl" class="panel panel-danger">
      <div class="panel-heading">
        <h3 class="panel-title"><%= pluralize(@customer.errors.count, "error") %> prohibited this customer from being saved:</h3>
      </div>
      <div class="panel-body">
        <ul>
        <% @customer.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
        </ul>
      </div>
    </div>
  <% end %>

<h3 align=centre>Personal Infomation</h3>
  <div class="form-group">
    <%= f.label :name, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :name, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :date_of_birth, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :dob, :class => 'form-control datepicker' %>
    </div>
  </div>

  <div class="form-group">
    <%= f.label :mobileno, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :mobileno, :class => 'form-control', value: params[:mobile], :id =>"mobileno", onblur:"Calculate()" %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :email_Id, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :emailid, :class => 'form-control' %>
    </div>
  </div>
  <H3 align=centre>Address</H3>
  <div class="form-group">
    <%= f.label :building, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :building, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :sub_area, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :subarea, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :locality, :class => 'control-label col-md-2'%>
    <div class="col-lg-10">
      <%= f.text_field :locality, :class => 'form-control', :id => "locality", onblur: "Calculate()" %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :pincode, :class => 'control-label col-md-2' %>
    <div class="col-lg-10">
      <%= f.text_field :pin, :class => 'form-control' %>
    </div>
  </div>

  <h3 align=left>Medical Information</h3>
  <div class="form-group">
    <%= f.label :blood_group, :class => 'control-label col-lg-2' %>
    <div class="col-lg-10">
      <%= f.text_field :bg, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :diseases, :class => 'control-label col-lg-2' %>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'Diabetes', checked('Diabetes'), id: 'diseases_diabetes'%>
      <%= label_tag 'diseases_diabetes', 'Diabetes' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'Cancer', checked('Cancer'), id: 'diseases_cancer'%>
      <%= label_tag 'diseases_cancer', 'Cancer' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'TB', checked('TB'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_tb', 'TB' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'BP', checked('BP'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_bp', 'BP' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'HIV', checked('TB'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_hiv', 'HIV' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'Brain Tumor', checked('Brain Tumor'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_brain_tumor', 'Brain Tumor' %>
    </div>
    <div class="col-md-2 col-sm-3 col-xs-4">
      <%= check_box_tag 'customer[diseases][]', 'STD', checked('STD'), id: 'diseases_tb'%>
      <%= label_tag 'diseases_std', 'STD' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :medicine, :class => 'control-label col-md-2 col-sm-3 col-xs-4' %>
    <div class="col-lg-10">
      <%= f.text_field :medicin, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :allergy, :class => 'control-label col-md-2 col-sm-3 col-xs-4' %>
    <div class="col-lg-10">
      <%= f.text_field :allergy, :class => 'form-control' %>
    </div>
  </div>
  <div class="form-group">
    <%= f.label :uid, :class => 'control-label col-md-2 col-sm-3 col-xs-4'%>
    <div class="col-lg-10">
      <%= f.text_field :uid , :class => 'form-control', :id => 'uid' %>
    </div>
  </div>
  <div class="form-group">
    <div class="col-lg-offset-2 col-lg-10">
    <br>
      <%= f.hidden_field :tenant_id, value: params[:tenant_id], :class => 'form-control' %>
      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
                root_path, :class => 'btn btn-default' %>
    </div>
  </div>
<% end %> 

我还更新了 Customer.rb 文件: 这里是:

    def format_phone_number
        self.to = "+91" + (self.to.gsub('-',''))
    end

    def client
        Twilio::REST::Client.new Rails.application.secrets.twilio_account_sid, Rails.application.secrets.twilio_token
      end

      acct_sid = "Axxxxxxxxxxxx"
      auth_token = "6xxxxxxxxxxx"
      twilio_no = "+1xxxxxxxxxxx"
      acct_sid = ENV['twilio_account_sid']
      auth_token = ENV['twilio_token']
      twilio_no = ENV['twilio_no']

      def send (to,body)
        client.account.messages.create(
        :messaging_service_sid => Rails.application.secrets.twilio_messaging_service_sid,
        :to => '#{mobileno}',
        :body => "Hi. Thanks a lot for signing up with us. Your UID is: #{uid}"
        )
    end 

我没有在 sms.rb 文件中编写代码,而是在 customer.rb 中编写了代码并删除了 sms.rb 文件,现在它可以很好地连接到 Twilio API。但是它需要一个随机数作为to号+66245366,所以消息发送失败。我不知道为什么会这样。

最新更新

Customer.rb

class Customer < ActiveRecord::Base

    before_save do
        self.diseases.gsub!(/[\[\]\"]/,"") if attribute_present?("diseases")
    end

      belongs_to :tenant
      validates_uniqueness_of :mobileno

    def self.by_plan_and_tenant(tenant_id)
        tenant = Tenant.find(tenant_id)
        if tenant.plan == 'free'
            tenant.customers
        else
            tenant.customers
        end
    end

    def client
        Twilio::REST::Client.new Rails.application.secrets.twilio_account_sid, Rails.application.secrets.twilio_token
      end

      acct_sid = "Axxxxxxxxxxxxxx"
      auth_token = "6cxxxxxxxxxxxxxxxxxxxxx"
      twilio_no = "+16xxxxxxxxx"
      acct_sid = ENV['twilio_account_sid']
      auth_token = ENV['twilio_token']
      twilio_no = ENV['twilio_no']

      def send (to, body)
        client.account.messages.create(
        :messaging_service_sid => Rails.application.secrets.twilio_messaging_service_sid,
        :from => "+1xxxxxxxxx1",
        :to => '#{mobileno}',
        :body => "Hi. Thanks a lot for signing up with us. Your UID is: #{uid}"
        )
    end
end

【问题讨论】:

  • 你的控制器在这里做什么? SMS 类是否真的将数据保存到数据库中?
  • 您好,它不会将 SMS 类保存到数据库中。在提交表单时,它将从表单中获取电话号码,然后将 SMS 发送到该号码。
  • 保存表单时,mobileno 字段是否正确保存到Customer 对象?看起来您也想使用 format_phone_number 字段,但您在 to 字段上使用它,所以我不确定它来自哪里。
  • 您好,format_phone_number 仅格式化电话号码,并确保删除破折号和空格以及任何多余的字符。我面临的唯一问题是没有发送短信。是的,手机会毫无问题地保存在客户字段中。
  • 我知道问题在于 SMS 没有发送,但是您说“收件人”号码显示为一个奇怪的号码。我正在尝试弄清楚如何在表格中输入实数并将其变成错误的数字。 format_phone_number 可能是其中的一部分。 mobileno 是否在您的数据库中保存为字符串?如果您在创建消息之前在send 函数中记录mobileno,您看到正确的数字了吗?

标签: ruby-on-rails ruby-on-rails-4 devise rubygems twilio


【解决方案1】:

这里是 Twilio 开发者宣传员。

long chat 之后,我们更改了方法名称,将SMS 消息从send(这是Ruby 中对象的一个​​重要方法)发送到send_sms

然后我们确保该号码具有正确的国际代码。

def send_sms()
  client.account.messages.create(
    :messaging_service_sid => Rails.application.secrets.twilio_messaging_service_sid,
    :from => "+16312010201",
    :to => "#+91{mobileno}",
    :body => "Hi. Thanks a lot for signing up with us. Your UID is: #{uid}"
  )
end

然后我们更新了客户控制器的创建操作,以便在成功创建客户时发送 SMS:

def create
  @customer = Customer.new(customer_params)
  respond_to do |format|
    if @customer.save
      format.html {
        @customer.send_sms
        redirect_to root_url, notice: 'Customer data was successfully created.'
      }
    else
      format.html { render :new }
    end
  end
end

现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多