class Smess::Twilio

Attributes

auth_token[RW]
callback_url[RW]
from[RW]
messaging_service_sid[RW]
results[RW]
sid[RW]

Public Class Methods

new(config) click to toggle source
Calls superclass method Smess::Output::new
# File lib/smess/outputs/twilio.rb, line 7
def initialize(config)
  super
  @results = []
end

Public Instance Methods

deliver() click to toggle source
# File lib/smess/outputs/twilio.rb, line 21
def deliver
  send_one_sms sms.message
end
validate_config() click to toggle source
# File lib/smess/outputs/twilio.rb, line 13
def validate_config
  @sid = config.fetch(:sid)
  @auth_token = config.fetch(:auth_token)
  @from = config.fetch(:from, nil)
  @messaging_service_sid = config.fetch(:messaging_service_sid, nil)
  @callback_url = config.fetch(:callback_url)
end

Private Instance Methods

client() click to toggle source
# File lib/smess/outputs/twilio.rb, line 64
def client
  @client ||= ::Twilio::REST::Client.new(sid, auth_token)
end
create_client_message(params) click to toggle source
# File lib/smess/outputs/twilio.rb, line 60
def create_client_message(params)
  client.api.account.messages.create(params)
end
normal_result(response) click to toggle source
# File lib/smess/outputs/twilio.rb, line 68
def normal_result(response)
  response_code = response.status
  response_code = "0" unless response.status == "failed"
  # Successful response
  {
    message_id: response.sid,
    response_code: response_code.to_s,
    response: {
      sid: response.sid,
      status: response.status,
      error_code: response.error_code,
      error_message: response.error_message
    },
    destination_address: sms.to,
    data: result_data
  }
end
parts() click to toggle source
# File lib/smess/outputs/twilio.rb, line 29
def parts
  @parts ||= split_parts
end
result_data() click to toggle source
# File lib/smess/outputs/twilio.rb, line 100
def result_data
  {
    to: sms.to,
    text: sms.message,
    from: from
  }
end
result_for_error(e) click to toggle source
# File lib/smess/outputs/twilio.rb, line 86
def result_for_error(e)
  code = "-1"
  code = e.code.to_s rescue code
  {
    response_code: code,
    response: {
      temporaryError: 'true',
      responseCode: code,
      responseText: e.message
    },
    data: result_data
  }
end
send_one_sms(message) click to toggle source
# File lib/smess/outputs/twilio.rb, line 37
def send_one_sms(message)
  begin
    opts = {
      to: "+#{sms.to}",
      body: message,
      status_callback: callback_url
    }
    if messaging_service_sid.present?
      opts[:messaging_service_sid] =  messaging_service_sid
    else
      opts[:from] =  from
    end
    puts "about to create_client_message"
    response = create_client_message(opts)
    puts "got response #{response.inspect}"
    result = normal_result(response)
  rescue => e
    puts "got exception #{e.inspect}"
    result = result_for_error(e)
  end
  result
end
split_parts() click to toggle source
# File lib/smess/outputs/twilio.rb, line 33
def split_parts
  Smess.separate_sms(sms.message).reject {|s| s.empty? }
end