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 +4 -4
- data/README.md +73 -27
- data/lib/zenvia.rb +10 -2
- data/lib/zenvia/sms.rb +104 -32
- data/lib/zenvia/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec6c97be083c4b8465171a3451f5b7f44c838843
|
4
|
+
data.tar.gz: 565b1aa8d3f4297eeff2a31d7947169d45866443
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85cebd704334b96716482e0aeaa5f2487b21a78a4f8f2573b3de5b8dc7c305e94ef41e5adaee5e0d149f8d8e3ac14924d781dfc095dde02836af60627132c73e
|
7
|
+
data.tar.gz: 1e94b925c75f59a863bf8e9572b64649918d2b95f0c3eece6040ed73b048591b269f4202258acdf1dcba91713fb50b52fe0dd007e51d867a31865eb8119d4f52
|
data/README.md
CHANGED
@@ -1,61 +1,107 @@
|
|
1
1
|
# Zenvia
|
2
2
|
|
3
|
-
|
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
|
-
|
5
|
+
## Instalação
|
6
|
+
|
7
|
+
Adicione esta linha ao seu Gemfile
|
6
8
|
|
7
9
|
```ruby
|
8
|
-
gem 'zenvia-rb', '~> 0.0
|
10
|
+
gem 'zenvia-rb', '~> 0.1.0'
|
9
11
|
```
|
10
12
|
|
11
|
-
|
13
|
+
E depois execute:
|
12
14
|
|
13
15
|
$ bundle
|
14
16
|
|
15
|
-
|
17
|
+
Ou instale através do "gem install":
|
16
18
|
|
17
19
|
$ gem install zenvia-rb
|
18
20
|
|
19
|
-
|
21
|
+
A única dependência desta Gem é o HTTParty.
|
20
22
|
|
21
|
-
##
|
23
|
+
## Uso
|
22
24
|
|
23
|
-
|
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 =
|
30
|
-
config.code =
|
31
|
-
config.from =
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
91
|
+
Caso tenha definido o ID no envio de uma mensagem, poderá buscar seu status chamando a função "lookup":
|
56
92
|
|
57
|
-
|
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
|
|
data/lib/zenvia.rb
CHANGED
@@ -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,
|
18
|
-
SMS.send_message number, message,
|
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
|
data/lib/zenvia/sms.rb
CHANGED
@@ -4,54 +4,126 @@ require 'timeout'
|
|
4
4
|
|
5
5
|
module Zenvia
|
6
6
|
class SMS
|
7
|
-
|
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,
|
18
|
+
def self.send_message(number, message, options = {})
|
11
19
|
begin
|
12
|
-
@
|
20
|
+
@responses = []
|
21
|
+
@from = options[:from].nil? ? Zenvia.config.from : options[:from]
|
13
22
|
@message = message
|
14
|
-
|
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.
|
19
|
-
|
20
|
-
|
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
|
24
|
-
raise e
|
51
|
+
puts "Error!\n#{e}"
|
25
52
|
end
|
26
53
|
end
|
27
54
|
|
28
55
|
private
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
-
|
49
|
-
|
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 #{
|
124
|
+
'Authorization' => "Basic #{Zenvia.config.auth}",
|
52
125
|
'Accept' => 'application/json'
|
53
126
|
}
|
54
|
-
|
55
|
-
end
|
127
|
+
end
|
56
128
|
end
|
57
129
|
end
|
data/lib/zenvia/version.rb
CHANGED
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
|
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-
|
11
|
+
date: 2017-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|