Day 6

Connecting to Twilio

I connected Prompt with Twilio today. Twilio is a service for sending text (SMS) messages, among other things. They have a really great API and if you have a need for sending texts in your application, I highly recommend them.

For a Rails application, it’s pretty easy to set up. You just include the twilio-ruby gem. In the place of your choice, you set up your Twilio client with your account variables, and start sending messages, with very little trouble. These instructions are great. I set my Twilio integration up in a class called PhoneTexter, in app/texters/phone_texter.rb, to treat it similar to the pattern of Rails mailers.

class PhoneTexter
class << self
# so I can use new_confirmation_url
# get rid of this if you don't need to use any URL helpers
include Rails.application.routes.url_helpers
end
  def self.send_confirmation(phone)
token = phone.token
    # fancy multi-line message!
line1 = "Please confirm your account by clicking this link:"
line2 = new_confirmation_url(token: token)
    message = "#{line1}\n\n#{line2}"
    send phone.number, message
end
  private_class_method def self.send(number, message)
# set these up with your account information
# preferably stored in environment variables
account_sid = "xxxxxxxxxxxxxxxxxxxxx"
auth_token = "xxxxxxxxxxxxxxxxxxxxx"
from = "+xxxxxxxxxxx" # your sending phone number
    twilio = Twilio::REST::Client.new account_sid, auth_token
    begin
twilio.account.sms.messages.create(
from: from,
to: number,
body: message
)
rescue Twilio::REST::RequestError => e
logger.error e.message
end
end
end

From my Phone class, I’m calling PhoneTexter.send_confirmation in an after_create action and passing in my phone object, which has the number and token ready to go. Here are the important bits:

class Phone < ApplicationRecord
after_create :send_confirmation
private
  def send_confirmation
PhoneTexter.send_confirmation self
end
end

This could possibly be improved by offloading sending the confirmation to a job queue instead of doing it immediately, but I don’t want there to be any delay and I want to keep things simple for now.

What do you think? I’d love to hear feed back or suggestions for other ways to improve this.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.