class Zenvia::SMS

Public Class Methods

lookup(id) click to toggle source
# File lib/zenvia/sms.rb, line 8
def self.lookup(id)
  begin
    res = self.get_status id
    JSON.parse res.body
  rescue => e
    puts "Error!\n#{e}"
  end
end
send_message(number, message, options = {}) click to toggle source

function to send the message

# File lib/zenvia/sms.rb, line 18
def self.send_message(number, message, options = {})
  begin
    @responses = []
    @from = options[:from].nil? ? Zenvia.config.from : options[:from]
    @message = message
    @options = options
    numbers = number.is_a?(Array) ? number : number.split

    numbers.each do |nb|
      @number = nb
      response = self.send_one_request
      @responses.push JSON.parse(response.body)
    end

    treat_response
  rescue => e
    puts "Error!\n#{e}"
  end
end
send_multiple_messages(list = [], aggregate_id = nil) click to toggle source
# File lib/zenvia/sms.rb, line 38
def self.send_multiple_messages(list = [], aggregate_id = nil)
  begin
    @list = list
    @aggregate_id = aggregate_id
    validate_list!

    if @errors[:errors].empty?
      response = self.send_multiple_requests
      JSON.parse response.body
    else
      @errors
    end
  rescue => e
    puts "Error!\n#{e}"
  end
end

Private Class Methods

get_status(id) click to toggle source
# File lib/zenvia/sms.rb, line 88
def self.get_status(id)
  endpoint = "https://api-rest.zenvia360.com.br/services/get-sms-status/#{id}"
  HTTParty.get(endpoint, headers: {
      'Authorization' => "Basic #{Zenvia.config.auth}"
    }
  )
end
headers() click to toggle source
# File lib/zenvia/sms.rb, line 121
def self.headers
  {
      'Content-Type' => 'application/json',
      'Authorization' => "Basic #{Zenvia.config.auth}",
      'Accept' => 'application/json'
  }
end
send_multiple_requests() click to toggle source
# File lib/zenvia/sms.rb, line 75
def self.send_multiple_requests
  endpoint = 'https://api-rest.zenvia360.com.br/services/send-sms-multiple'
  HTTParty.post(endpoint,
    body: {
        sendSmsMultiRequest: {
          aggregateId: @aggregate_id,
          sendSmsRequestList: @list
      }
    }.to_json,
    headers: self.headers
  )
end
send_one_request() click to toggle source
# File lib/zenvia/sms.rb, line 56
def self.send_one_request
  @number = treat_number @number
  endpoint = 'https://api-rest.zenvia360.com.br/services/send-sms'
  HTTParty.post(endpoint,
    body: {
        sendSmsRequest: {
            from: @from,
            to: @number,
            msg: @message,
            id: @options[:id],
            schedule: @options[:schedule],
            aggregateId: @options[:aggregate_id],
            callbackOption: 'NONE'
        }
    }.to_json,
    headers: self.headers
  )
end
treat_number(number) click to toggle source
# File lib/zenvia/sms.rb, line 96
def self.treat_number(number)
  number = number.to_s unless number.is_a? String
  patterns = ['(', ')', ' ', '-']
  patterns.each {|p| number = number.gsub(p, '')}
  number.insert(0, '55') unless /^55/.match(number)
  number
end
treat_response() click to toggle source
# File lib/zenvia/sms.rb, line 117
def self.treat_response
  @responses.count == 1 ? @responses.first : @responses
end
validate_list!() click to toggle source
# File lib/zenvia/sms.rb, line 104
def self.validate_list!
  @errors = {errors: []}

  @list.each do |data|
    @list[@list.index(data)][:to] = treat_number data[:to]

    @errors[:errors].push to: 'required' unless data.include?(:to)
    @errors[:errors].push msg: 'required' unless data.include?(:msg)

    break if @errors[:errors].any?
  end
end