zenvia-rb 0.0.11 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|