ravencovington
ravencovington

Reputation: 1

A 'To' phone number is required-- Twilio-- Rails 4

I'm new to Rails and this is the first time I'm implementing an API into my app. I'm creating an app that allows users to schedule text messages (SMS) with twilio. I'm trying to pass in 'number' so that the user can input the number. I've gotten the app to work when I hard code a number in but I'm getting "A 'To' phone number is required." when I try to pass in an argument.

Here's the controller

    class TextMessagesController < ApplicationController

      def index 
        @message = TextMessage.all
      end

      def new
        @message = TextMessage.new
      end

      def create 
        @active = 'messages'
        @message = TextMessage.send_sms(params[:number], params[:message])
        if @message.save
          flash[:success] = "Text Message Sent."
          redirect_to message_path
        else
          render 'home'
        end
      end

     def text_message_params
       params.require(:text_messages).permit(:number, :message)
     end
  end

Here's the Model

class TextMessage < ActiveRecord::Base
belongs_to :user

validates :message, length: { maximum: 160 }, presence: true

def self.send_sms(number, message)
  twilio_account_sid = 'XXXXXX'
  twilio_auth_token  = 'XXXXXX'
  twilio_number      = 'XXXXXX'

@client = Twilio::REST::Client.new twilio_account_sid, twilio_auth_token

message = @client.account.sms.messages.create(
  :from => "+1#{twilio_number}",
  :to => "#{number}",
  :body => "#{message}"
  )
 end

end

Anyone know where I'm making my mistake?

Upvotes: 0

Views: 1068

Answers (2)

ravencovington
ravencovington

Reputation: 1

you were absolutely right. Below is what I came up with. Thanks for you help!

    class TextMessagesController < ApplicationController

      def index 
        @message = TextMessage.all
      end

      def new
        @message = TextMessage.new
      end

      def create 
        @active = 'messages'
        @message = TextMessage.send_sms(text_message_params[:number], text_message_params[:message])
        if @message
          flash[:success] = "Text Message Sent."
          redirect_to text_messages_path
        else
          render 'home'
        end
     end

     def text_message_params
       params.require(:text_message).permit(:number, :message)
     end
   end

Upvotes: 0

Philip Hallstrom
Philip Hallstrom

Reputation: 19879

My guess is that params[:number] is blank:

@message = TextMessage.send_sms(params[:number], params[:message])

Maybe that should be params[:text_messages][:number] instead? Basing this off of your text_message_params method (which you aren't taking advantage of).

@message = TextMessage.send_sms(params[:text_messages][:number], params[:text_messages][:message])

Upvotes: 1

Related Questions