zenvia-rb 0.0.11 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3ab5173226fc04888992fcca4b1e6d1574397e4
4
- data.tar.gz: b58eac4d7450a00d96e9697537c64f29959ca70f
3
+ metadata.gz: ec6c97be083c4b8465171a3451f5b7f44c838843
4
+ data.tar.gz: 565b1aa8d3f4297eeff2a31d7947169d45866443
5
5
  SHA512:
6
- metadata.gz: 7a3dc3703550712a289e349f13fd2121285c4fa37c30b008487d8cb1a3abbcde2fdc48f6f71c9c2d6f392cd782d157b3a787d7a1e96e826409cd7054e633472c
7
- data.tar.gz: fd3d735994f2ed28159afba88f475c9f2c87d75c65be6ee1d97296eb61fe04d88616c25966a189f707a58236999c2e277649b6211dc3c48ffa9fbeb442f29984
6
+ metadata.gz: 85cebd704334b96716482e0aeaa5f2487b21a78a4f8f2573b3de5b8dc7c305e94ef41e5adaee5e0d149f8d8e3ac14924d781dfc095dde02836af60627132c73e
7
+ data.tar.gz: 1e94b925c75f59a863bf8e9572b64649918d2b95f0c3eece6040ed73b048591b269f4202258acdf1dcba91713fb50b52fe0dd007e51d867a31865eb8119d4f52
data/README.md CHANGED
@@ -1,61 +1,107 @@
1
1
  # Zenvia
2
2
 
3
- ## Installation
3
+ Esta biblioteca -**não oficial**- segue as diretivas da [documentação API REST da Zenvia](http://docs.zenviasms.apiary.io/#introduction/autenticacao).
4
4
 
5
- Add this line to your application's Gemfile:
5
+ ## Instalação
6
+
7
+ Adicione esta linha ao seu Gemfile
6
8
 
7
9
  ```ruby
8
- gem 'zenvia-rb', '~> 0.0.11'
10
+ gem 'zenvia-rb', '~> 0.1.0'
9
11
  ```
10
12
 
11
- And then execute:
13
+ E depois execute:
12
14
 
13
15
  $ bundle
14
16
 
15
- Or install it yourself as:
17
+ Ou instale através do "gem install":
16
18
 
17
19
  $ gem install zenvia-rb
18
20
 
19
- HTTParty is the only dependency for this gem.
21
+ A única dependência desta Gem é o HTTParty.
20
22
 
21
- ## Usage
23
+ ## Uso
22
24
 
23
- In your script
25
+ Para usar esta biblioteca, [você vai precisar informar alguns dados](http://docs.zenviasms.apiary.io/#introduction/autenticacao), que são obtidos através da própria Zenvia.
24
26
 
25
27
  ```ruby
26
28
  require 'zenvia'
29
+
27
30
 
28
31
  Zenvia.configure {|config|
29
- config.account = account_given_by_zenvia
30
- config.code = code_given_by_zenvia
31
- config.from = user_or_enterprise_name # optional
32
+ config.account = 'SUA-CONTA'
33
+ config.code = 'SEU-CODIGO'
34
+ config.from = 'NOME-DA-EMPRESA-OU-PESSOA' # opcional
32
35
  }
36
+ ```
37
+ *Se você pretende usar esta Gem com Rails, insira o snippet acima em config/initializers.*
33
38
 
34
- # from = personal or enterprise name. config.from is used as default.
35
- # if you do not want to identify the sender, use from = ''
36
- # number = area code + number / there's no need to put 55 before them
37
- # AND format the number (i.e. remove parentheses, dashes...)
38
- # message = body of the message
39
+ Feito isso, [para enviar uma mensagem](http://docs.zenviasms.apiary.io/#reference/servicos-da-api/envio-de-um-unico-sms/testar-envio-de-um-unico-sms), será preciso apenas chamar a função "send_message":
39
40
 
40
- Zenvia.send_message(number, message, from = config.from)
41
+ ```ruby
42
+ options = {from: config.from, id: 'SEU-ID', schedule: '2017-07-18T02:01:23'}
43
+ Zenvia.send_message(number, message, options)
44
+
45
+ # no hash 'options', você ainda pode inserir o aggregateId. Todos esses valores são opcionais
46
+
47
+ # Exemplo de resposta:
48
+ {"sendSmsResponse"=>{"statusCode"=>"00", "statusDescription"=>"Ok", "detailCode"=>"000", "detailDescription"=>"Message Sent"}}
49
+ ```
41
50
 
42
- # alternatively, you can set number parameter equal to an array of numbers
43
- # and send the same message to them
44
- numbers = ['DDNNNNNNNNN', 'DDNNNNNNNNM']
45
- Zenvia.send_message(numbers, message, from = config.from)
51
+ Se preferir, você pode definir um array de números e enviar a **mesma** mensagem a eles:
46
52
 
47
- ```
53
+ ```ruby
48
54
 
49
- That's all ;)
55
+ numbers = ['DDNNNNNNNNN', 'DDNNNNNNNNM']
56
+ Zenvia.send_message(numbers, message)
57
+
58
+
59
+ # Exemplo de resposta
60
+
61
+ [
62
+ {"sendSmsResponse"=>{"statusCode"=>"00", "statusDescription"=>"Ok", "detailCode"=>"000", "detailDescription"=>"Message Sent"}},
63
+ {"sendSmsResponse"=>{"statusCode"=>"00", "statusDescription"=>"Ok", "detailCode"=>"000", "detailDescription"=>"Message Sent"}}
64
+ ]
65
+ ```
50
66
 
51
- ## Development
67
+ Ou usar a função nativa do Zenvia, [de enviar múltiplos SMSs](http://docs.zenviasms.apiary.io/#reference/servicos-da-api/envio-de-varios-smss-simultaneamente/testar-envio-de-varios-smss-simultaneamente):
52
68
 
53
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
69
+ ```ruby
70
+ list = [
71
+ {
72
+ from: "remetente",
73
+ to: "555192551015",
74
+ msg: "uma mensagem",
75
+ callbackOption: "NONE"
76
+ },
77
+ {
78
+ from: "remetente",
79
+ to: "555199668010",
80
+ schedule: "2014-07-18T02:01:23",
81
+ msg: "outra mensagem",
82
+ callbackOption: "NONE",
83
+ id: "004"
84
+ }
85
+ ]
86
+
87
+
88
+ Zenvia.send_multiple_messages list
89
+ ```
54
90
 
55
- ## Contributing
91
+ Caso tenha definido o ID no envio de uma mensagem, poderá buscar seu status chamando a função "lookup":
56
92
 
57
- Bug reports and pull requests are welcome on GitHub at https://github.com/jefersonhuan/zenvia-rb
93
+ ```ruby
94
+ id = 'SEU-ID'
95
+
96
+ Zenvia.lookup(id)
97
+
98
+
99
+ # Exemplo de resposta
100
+
101
+ {"sendSmsResponse": {"statusCode": "00", "statusDescription": "Ok", "detailCode": "000", "detailDescription": "Message Sent" }}
102
+ ```
58
103
 
104
+ Isso é tudo, pessoal!
59
105
 
60
106
  ## License
61
107
 
@@ -14,7 +14,15 @@ module Zenvia
14
14
  end
15
15
 
16
16
  # alias for Zenvia::SMS.send_message(*args)
17
- def self.send_message(number, message, from = nil)
18
- SMS.send_message number, message, from
17
+ def self.send_message(number, message, options = {})
18
+ SMS.send_message number, message, options
19
+ end
20
+
21
+ def self.send_multiple_messages(list = [])
22
+ SMS.send_multiple_messages list
23
+ end
24
+
25
+ def self.lookup(id)
26
+ SMS.lookup id
19
27
  end
20
28
  end
@@ -4,54 +4,126 @@ require 'timeout'
4
4
 
5
5
  module Zenvia
6
6
  class SMS
7
- attr_writer :from, :number, :message
7
+
8
+ def self.lookup(id)
9
+ begin
10
+ res = self.get_status id
11
+ JSON.parse res.body
12
+ rescue => e
13
+ puts "Error!\n#{e}"
14
+ end
15
+ end
8
16
 
9
17
  # function to send the message
10
- def self.send_message(number, message, from = nil)
18
+ def self.send_message(number, message, options = {})
11
19
  begin
12
- @from = from.nil? ? Zenvia.config.from : from
20
+ @responses = []
21
+ @from = options[:from].nil? ? Zenvia.config.from : options[:from]
13
22
  @message = message
14
- # create numbers array and push onto it number(s) from parameters
23
+ @options = options
15
24
  numbers = number.is_a?(Array) ? number : number.split
25
+
16
26
  numbers.each do |nb|
17
27
  @number = nb
18
- response = self.send_sms
19
- response = JSON.parse(response.body)
20
- puts "Response for #{nb}: #{response['sendSmsResponse']['detailDescription']}"
28
+ response = self.send_one_request
29
+ @responses.push JSON.parse(response.body)
30
+ end
31
+
32
+ treat_response
33
+ rescue => e
34
+ puts "Error!\n#{e}"
35
+ end
36
+ end
37
+
38
+ def self.send_multiple_messages(list = [], aggregate_id = nil)
39
+ begin
40
+ @list = list
41
+ @aggregate_id = aggregate_id
42
+ validate_list!
43
+
44
+ if @errors[:errors].empty?
45
+ response = self.send_multiple_requests
46
+ JSON.parse response.body
47
+ else
48
+ @errors
21
49
  end
22
50
  rescue => e
23
- puts 'Error!'
24
- raise e
51
+ puts "Error!\n#{e}"
25
52
  end
26
53
  end
27
54
 
28
55
  private
29
- def self.send_sms
30
- # convert number to string (if isn't yet) and insert the country code (standard: BR, 55)
31
- # if not found
32
- @number = @number.to_s unless @number.is_a? String
33
- patterns = ['(', ')', ' ', '-']
34
- patterns.each {|p| @number = @number.gsub(p, '')}
35
- @number.insert(0, '55') unless /^55/.match(@number)
36
- puts "THE NUMBER: #{@number}"
37
- # retrieve auth value set in Config class
38
- @auth = Zenvia.config.auth
39
- endpoint = 'https://api-rest.zenvia360.com.br/services/send-sms'
40
- HTTParty.post(endpoint,
41
- body: {
42
- sendSmsRequest: {
43
- from: @from,
44
- to: @number,
45
- msg: @message,
46
- callbackOption: 'NONE'
56
+ def self.send_one_request
57
+ @number = treat_number @number
58
+ endpoint = 'https://api-rest.zenvia360.com.br/services/send-sms'
59
+ HTTParty.post(endpoint,
60
+ body: {
61
+ sendSmsRequest: {
62
+ from: @from,
63
+ to: @number,
64
+ msg: @message,
65
+ id: @options[:id],
66
+ schedule: @options[:schedule],
67
+ aggregateId: @options[:aggregate_id],
68
+ callbackOption: 'NONE'
69
+ }
70
+ }.to_json,
71
+ headers: self.headers
72
+ )
73
+ end
74
+
75
+ def self.send_multiple_requests
76
+ endpoint = 'https://api-rest.zenvia360.com.br/services/send-sms-multiple'
77
+ HTTParty.post(endpoint,
78
+ body: {
79
+ sendSmsMultiRequest: {
80
+ aggregateId: @aggregate_id,
81
+ sendSmsRequestList: @list
47
82
  }
48
- }.to_json,
49
- headers: {
83
+ }.to_json,
84
+ headers: self.headers
85
+ )
86
+ end
87
+
88
+ def self.get_status(id)
89
+ endpoint = "https://api-rest.zenvia360.com.br/services/get-sms-status/#{id}"
90
+ HTTParty.get(endpoint, headers: {
91
+ 'Authorization' => "Basic #{Zenvia.config.auth}"
92
+ }
93
+ )
94
+ end
95
+
96
+ def self.treat_number(number)
97
+ number = number.to_s unless number.is_a? String
98
+ patterns = ['(', ')', ' ', '-']
99
+ patterns.each {|p| number = number.gsub(p, '')}
100
+ number.insert(0, '55') unless /^55/.match(number)
101
+ number
102
+ end
103
+
104
+ def self.validate_list!
105
+ @errors = {errors: []}
106
+
107
+ @list.each do |data|
108
+ @list[@list.index(data)][:to] = treat_number data[:to]
109
+
110
+ @errors[:errors].push to: 'required' unless data.include?(:to)
111
+ @errors[:errors].push msg: 'required' unless data.include?(:msg)
112
+
113
+ break if @errors[:errors].any?
114
+ end
115
+ end
116
+
117
+ def self.treat_response
118
+ @responses.count == 1 ? @responses.first : @responses
119
+ end
120
+
121
+ def self.headers
122
+ {
50
123
  'Content-Type' => 'application/json',
51
- 'Authorization' => "Basic #{@auth}",
124
+ 'Authorization' => "Basic #{Zenvia.config.auth}",
52
125
  'Accept' => 'application/json'
53
126
  }
54
- )
55
- end
127
+ end
56
128
  end
57
129
  end
@@ -1,3 +1,3 @@
1
1
  module Zenvia
2
- VERSION = "0.0.11"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zenvia-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeferson Huan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-18 00:00:00.000000000 Z
11
+ date: 2017-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler