Class: Smstraffic::SMS

Inherits:
Object
  • Object
show all
Defined in:
lib/smstraffic/sms.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(phone, subject, message, translit = nil) ⇒ SMS

Returns a new instance of SMS.



12
13
14
15
16
17
18
19
20
21
# File 'lib/smstraffic/sms.rb', line 12

def initialize(phone, subject, message, translit=nil)
  @phone = phone.to_s.length == 10 ? "7#{phone}".to_i : phone
  @subject = subject
  @message = message
  @status = 'not-sent'
  @translit = translit.nil? ? @@translit : translit
  @errors = []

  validate!
end

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



10
11
12
# File 'lib/smstraffic/sms.rb', line 10

def errors
  @errors
end

#idObject (readonly)

Returns the value of attribute id.



10
11
12
# File 'lib/smstraffic/sms.rb', line 10

def id
  @id
end

#messageObject

Returns the value of attribute message.



9
10
11
# File 'lib/smstraffic/sms.rb', line 9

def message
  @message
end

#phoneObject

Returns the value of attribute phone.



9
10
11
# File 'lib/smstraffic/sms.rb', line 9

def phone
  @phone
end

#statusObject (readonly)

Returns the value of attribute status.



10
11
12
# File 'lib/smstraffic/sms.rb', line 10

def status
  @status
end

#subjectObject

Returns the value of attribute subject.



9
10
11
# File 'lib/smstraffic/sms.rb', line 9

def subject
  @subject
end

Class Method Details

.settings=(settings = {}) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/smstraffic/sms.rb', line 23

def self.settings=(settings={})
  @@login = settings[:login]
  @@password = settings[:password]
  @@server = settings[:server]
  @@routeGroupId = settings[:routeGroupId]
  @@port = 80
  @@ssl_port = 443
  @@ssl = !settings[:ssl].nil? ? settings[:ssl] : true # connect using ssl by default
  @@translit = !settings[:translit].nil? ? settings[:translit] : false # use translit or not
  validate_settings!
end

.sslObject



39
40
41
# File 'lib/smstraffic/sms.rb', line 39

def self.ssl
  @@ssl
end

.ssl=(flag) ⇒ Object



35
36
37
# File 'lib/smstraffic/sms.rb', line 35

def self.ssl=(flag)
  @@ssl = flag
end

.status(id) ⇒ Object



121
122
123
124
125
126
127
128
129
# File 'lib/smstraffic/sms.rb', line 121

def self.status(id)
  establish_connection.start do |http|
    request = Net::HTTP::Get.new(status_url id)
    response = http.request(request)
    body = response.body
    hash = Hash.from_xml(Nokogiri::XML(body).to_s)['reply']
    hash['status'] || hash['error'] #status or error
  end
end

Instance Method Details

#sendObject

> SMS send status codes:

401 - Не указан логин
402 - Не указан пароль
403 - Не указаны номера телефонов
404 - Несовместимые параметры запроса
405 - Не указан текст сообщения
406 - wap push сообщение слишком длинное
407 - Не указан ни один телефон
408 - Неподдерживаемый тип сообщения: "тип_сообщения"
409 - Не указан udh
410 - Автоматическая разбивка бинарных сообщений не поддерживается
411 - Неверный логин или пароль
412 - Неверный IP
413 - Такой группы не существует: "имя_группы"
414 - В группе нет ни одного телефона
415 - Недостаточно средств
416 - Неверный формат даты начала рассылки: "дата_старта_рассылки"
417 - Дата начала рассылки "дата_старта_рассылки" находится в прошлом
418 - Идентификаторы не предоставляются для отложенных сообщений
419 - Вам не разрешено использовать данный маршрут
420 - Сообщение "текст_сообщения" слишком длинное
421 - Имя отправителя слишком длинное
422 - Не указан телефон в строке "номер_строки": "строка"
423 - Пустое сообщение для телефона "номер_телефона"
424 - Сообщение "текст_сообщения" для телефона "номер_телефона" слишком длинное
425 - Номер телефона "номер_телефона" слишком короткий. Ни одно сообщение не было отправлено
426 - Номер телефона "номер_телефона" слишком длинный. Ни одно сообщение не было отправлено
427 - "номер_телефона": неверная длина номера телефона. Ни одно сообщение не было отправлено
428 - "номер_телефона": неверный формат номера телефона. Ни одно сообщение не было отправлено
429 - "номер_телефона": неподдерживаемый оператор. Ни одно сообщение не было отправлено
430 - "номер_телефона": неверный номер телефона. Ни одно сообщение не было отправлено
431 - Телефон +"номер_телефона" не подписан на рассылку. Ни одно сообщение не было отправлено
432 - Заблокированный номер телефона: "номер_телефона". Ни одно сообщение не было отправлено
433 - Не указан параметр sms_id
434 - Такого сообщения нет или оно вам не принадлежит
435 - Невозможно отменить сообщение "sms_id"
436 - Отправитель "отправитель" запрещен
437 - Сообщение превышает 160 символов после транслитерации "текст_сообщения"
438 - В сообщении найден шаблон, но не задана ни одна группа
439 - Вы не можете отправлять SMS­сообщения через HTTP
440 - Параметр "phones" не задан или задан некорректно
441 - Неверный формат файла параметров
442 - Неверное число параметров
501 - Время окончания рассылки в прошлом
502 - Время начала рассылки больше времени окончания рассылки
1000 - Временные проблемы на сервере


90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/smstraffic/sms.rb', line 90

def send
  #return stubbed_send if (defined?(Rails) && !Rails.env.production?)
  self.class.establish_connection.start do |http|
    request = Net::HTTP::Get.new(send_url)
    response = http.request(request)
    body = response.body
    hash = Hash.from_xml(Nokogiri::XML(body).to_s)['reply']
    result = hash['result']
    if result == 'OK'
      @status = 'sent'
      @id = hash['message_infos']['message_info']['sms_id']
      true
    else
      @errors << "#{result}: code: #{hash['code']}, description: #{hash['description']}"
      false
    end
  end
end

#update_statusObject



131
132
133
134
135
136
# File 'lib/smstraffic/sms.rb', line 131

def update_status
  return @status if @id.nil?
  code, status = self.class.status(@id)
  return code unless code == 'ok'
  @status = status
end

#validate!Object

Raises:

  • (ArgumentError)


138
139
140
141
142
143
# File 'lib/smstraffic/sms.rb', line 138

def validate!
  raise ArgumentError, "Phone should be assigned to #{self.class}." if @phone.nil?
  raise ArgumentError, "Phone number should contain only numbers. Minimum length is 11. #{@phone.inspect} is given." unless "#{@phone}" =~ /^[0-9]{11}$/
  raise ArgumentError, "Subject should be assigned to #{self.class}." if @subject.nil?
  raise ArgumentError, "Message should be assigned to #{self.class}." if @message.nil?
end