smsaero_api 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 +7 -0
- data/.gemspec +20 -0
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/README.md +31 -0
- data/Rakefile +1 -0
- data/lib/smsaero_api/version.rb +3 -0
- data/lib/smsaero_api.rb +244 -0
- metadata +51 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9558d4ef3ba027cfb57899bd1c945bafdbaf4a172edc37893547ba08e2213dd2
|
|
4
|
+
data.tar.gz: 404136062f07eff8c3d6f8e2b93be2178fcdfa3082f3be4b70179ef871b8cab2
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 4c79a8d2b999148a53ce9d73d011829b7a163f4d502c67f8971fa69ec3b3634b30f6f02b045cd2b8431a527b716705daefa7b1e036bb7984356c80701d8ef612
|
|
7
|
+
data.tar.gz: b8d3ea6b8afb6d53b6dceb473d77c090c0b7a290417645d024b087fed3e7c5a0ed8ea3ebe7cd66a57597bf44331e67a3aeb8a0e12f192472bd39f47da85f8354
|
data/.gemspec
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "smsaero_api/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "smsaero_api"
|
|
7
|
+
s.version = SmsAeroApi::VERSION
|
|
8
|
+
s.licenses = 'MIT'
|
|
9
|
+
s.summary = %q{Send SMS via smsaero.ru gate}
|
|
10
|
+
s.description = %q{Send SMS/HLR/Viber via smsaero.ru gate}
|
|
11
|
+
s.authors = ["SmsAero"]
|
|
12
|
+
s.email = ["admin@smsaero.ru"]
|
|
13
|
+
s.homepage = "https://smsaero.ru/integration/class/ruby"
|
|
14
|
+
s.metadata = { "source_code_uri" => "https://github.com/smsaero/smsaero_ruby" }
|
|
15
|
+
|
|
16
|
+
s.required_ruby_version = '>= 2.6.0'
|
|
17
|
+
|
|
18
|
+
s.files = `git ls-files`.split("\n")
|
|
19
|
+
s.require_paths = ["lib"]
|
|
20
|
+
end
|
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# SmsAero Ruby Api
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Installation:
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
gem install smsaero_api
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Usage:
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
require 'smsaero_api'
|
|
15
|
+
|
|
16
|
+
SMSAERO_EMAIL = 'your email'
|
|
17
|
+
SMSAERO_API_KEY = 'your api key'
|
|
18
|
+
|
|
19
|
+
api = SmsAeroApi::SmsAero.new(SMSAERO_EMAIL, SMSAERO_API_KEY)
|
|
20
|
+
|
|
21
|
+
begin
|
|
22
|
+
puts api.send('70000000000', 'Hello, World!')
|
|
23
|
+
rescue => e
|
|
24
|
+
puts "Error: #{e.message}"
|
|
25
|
+
end
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### License
|
|
30
|
+
|
|
31
|
+
MIT License
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/smsaero_api.rb
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
require 'net/http'
|
|
2
|
+
require 'uri'
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module SmsAeroApi
|
|
6
|
+
|
|
7
|
+
class SmsAeroError < StandardError
|
|
8
|
+
# SmsAero Errors
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class SmsAeroHTTPError < SmsAeroError
|
|
12
|
+
# A Connection error occurred
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class SmsAeroConnectionError < SmsAeroError
|
|
16
|
+
# A Connection error occurred
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class SmsAero
|
|
20
|
+
GATE_URLS = [
|
|
21
|
+
'@gate.smsaero.ru/v2/',
|
|
22
|
+
'@gate.smsaero.org/v2/',
|
|
23
|
+
'@gate.smsaero.net/v2/',
|
|
24
|
+
'@gate.smsaero.uz/v2/'
|
|
25
|
+
]
|
|
26
|
+
SIGNATURE = 'SMS Aero'
|
|
27
|
+
TYPE_SEND = 2
|
|
28
|
+
|
|
29
|
+
def initialize(email, api_key, url_gate: nil, signature: SIGNATURE, type_send: TYPE_SEND)
|
|
30
|
+
@session = Net::HTTP
|
|
31
|
+
@uri = URI(url_gate || GATE_URLS.first)
|
|
32
|
+
@email = email
|
|
33
|
+
@api_key = api_key
|
|
34
|
+
@signature = signature
|
|
35
|
+
@type_send = type_send
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def send(number, text, date_send = nil, callback_url = nil)
|
|
39
|
+
num, number = get_num(number)
|
|
40
|
+
data = {
|
|
41
|
+
num => number,
|
|
42
|
+
'sign' => @signature,
|
|
43
|
+
'text' => text,
|
|
44
|
+
'callbackUrl' => callback_url
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if !date_send.nil?
|
|
48
|
+
if date_send.is_a?(Time)
|
|
49
|
+
data['dateSend'] = date_send.to_i
|
|
50
|
+
else
|
|
51
|
+
raise SmsAeroError, 'param `date` is not a Time object'
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
request('sms/send', data)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def sms_status(sms_id)
|
|
59
|
+
request('sms/status', { 'id' => sms_id })
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def sms_list(number = nil, text = nil, page = nil)
|
|
63
|
+
data = {}
|
|
64
|
+
if number
|
|
65
|
+
data['number'] = number.to_s
|
|
66
|
+
end
|
|
67
|
+
if text
|
|
68
|
+
data['text'] = text
|
|
69
|
+
end
|
|
70
|
+
request('sms/list', data, page)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def balance
|
|
74
|
+
request('balance')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def auth
|
|
78
|
+
request('auth')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def cards
|
|
82
|
+
request('cards')
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def add_balance(_sum, card_id)
|
|
86
|
+
request('balance/add', { 'sum' => _sum, 'cardId' => card_id })
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def tariffs
|
|
90
|
+
request('tariffs')
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def sign_list(page = nil)
|
|
94
|
+
request('sign/list', nil, page)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def group_add(name)
|
|
98
|
+
request('group/add', { 'name' => name })
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def group_delete(group_id)
|
|
102
|
+
request('group/delete', { 'id' => group_id })
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def group_list(page = nil)
|
|
106
|
+
request('group/list', nil, page)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def contact_add(number, group_id = nil, birthday = nil, sex = nil, lname = nil, fname = nil, sname = nil, param1 = nil, param2 = nil, param3 = nil)
|
|
110
|
+
request('contact/add', {
|
|
111
|
+
'number' => number.to_s,
|
|
112
|
+
'groupId' => group_id,
|
|
113
|
+
'birthday' => birthday,
|
|
114
|
+
'sex' => sex,
|
|
115
|
+
'lname' => lname,
|
|
116
|
+
'fname' => fname,
|
|
117
|
+
'sname' => sname,
|
|
118
|
+
'param1' => param1,
|
|
119
|
+
'param2' => param2,
|
|
120
|
+
'param3' => param3
|
|
121
|
+
})
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def contact_delete(contact_id)
|
|
125
|
+
request('contact/delete', { 'id' => contact_id })
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def contact_list(number = nil, group_id = nil, birthday = nil, sex = nil, operator = nil, lname = nil, fname = nil, sname = nil, page = nil)
|
|
129
|
+
request('contact/list', {
|
|
130
|
+
'number' => number && number.to_s,
|
|
131
|
+
'groupId' => group_id,
|
|
132
|
+
'birthday' => birthday,
|
|
133
|
+
'sex' => sex,
|
|
134
|
+
'operator' => operator,
|
|
135
|
+
'lname' => lname,
|
|
136
|
+
'fname' => fname,
|
|
137
|
+
'sname' => sname
|
|
138
|
+
}, page)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def blacklist_add(number)
|
|
142
|
+
num, number = get_num(number)
|
|
143
|
+
request('blacklist/add', { num => number })
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def blacklist_list(number = nil, page = nil)
|
|
147
|
+
data = number && { 'number' => number.to_s }
|
|
148
|
+
request('blacklist/list', data, page)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def blacklist_delete(blacklist_id)
|
|
152
|
+
request('blacklist/delete', { 'id' => blacklist_id.to_i })
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def hlr_check(number)
|
|
156
|
+
num, number = get_num(number)
|
|
157
|
+
request('hlr/check', { num => number })
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def hlr_status(hlr_id)
|
|
161
|
+
request('hlr/status', { 'id' => hlr_id.to_i })
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def number_operator(number)
|
|
165
|
+
num, number = get_num(number)
|
|
166
|
+
request('number/operator', { num => number })
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def viber_send(sign, channel, text, number = nil, group_id = nil, image_source = nil, text_button = nil, link_button = nil, date_send = nil, sign_sms = nil, channel_sms = nil, text_sms = nil, price_sms = nil)
|
|
170
|
+
num, number = get_num(number)
|
|
171
|
+
request('viber/send', {
|
|
172
|
+
num => number,
|
|
173
|
+
'groupId' => group_id && group_id.to_i,
|
|
174
|
+
'sign' => sign && sign.to_s,
|
|
175
|
+
'channel' => channel && channel.to_s,
|
|
176
|
+
'text' => text,
|
|
177
|
+
'imageSource' => image_source,
|
|
178
|
+
'textButton' => text_button,
|
|
179
|
+
'linkButton' => link_button,
|
|
180
|
+
'dateSend' => date_send,
|
|
181
|
+
'signSms' => sign_sms,
|
|
182
|
+
'channelSms' => channel_sms,
|
|
183
|
+
'textSms' => text_sms,
|
|
184
|
+
'priceSms' => price_sms
|
|
185
|
+
})
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def viber_sign_list
|
|
189
|
+
request('viber/sign/list')
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def viber_list(page = nil)
|
|
193
|
+
request('viber/list', nil, page)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
private
|
|
197
|
+
|
|
198
|
+
def request(selector, data = nil, page = nil, proto = 'https')
|
|
199
|
+
get_gate_urls.each do |gate|
|
|
200
|
+
begin
|
|
201
|
+
uri = URI.join("#{proto}://#{gate}", selector)
|
|
202
|
+
if page
|
|
203
|
+
uri.query = URI.encode_www_form(page: page)
|
|
204
|
+
end
|
|
205
|
+
http = @session.new(uri.host, uri.port)
|
|
206
|
+
http.use_ssl = (proto == 'https')
|
|
207
|
+
request = Net::HTTP::Post.new(uri.request_uri, { 'Content-Type' => 'application/json' })
|
|
208
|
+
request.basic_auth @email, @api_key
|
|
209
|
+
request.body = data.to_json if data
|
|
210
|
+
response = http.request(request)
|
|
211
|
+
# puts response.body
|
|
212
|
+
return check_response(response.body)
|
|
213
|
+
rescue OpenSSL::SSL::SSLError
|
|
214
|
+
proto = 'http'
|
|
215
|
+
retry
|
|
216
|
+
rescue Errno::ECONNREFUSED
|
|
217
|
+
next
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
raise SmsAeroConnectionError, 'All connection attempts failed'
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def get_gate_urls
|
|
224
|
+
@url_gate ? [@url_gate] : GATE_URLS
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def check_response(response)
|
|
228
|
+
result = JSON.parse(response)
|
|
229
|
+
raise SmsAeroHTTPError, result['message'] unless result['success']
|
|
230
|
+
result['data']
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def get_num(number)
|
|
234
|
+
if number.is_a?(Array)
|
|
235
|
+
num = 'numbers'
|
|
236
|
+
else
|
|
237
|
+
num = 'number'
|
|
238
|
+
number = number.to_s
|
|
239
|
+
end
|
|
240
|
+
[num, number]
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: smsaero_api
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: '1.0'
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- SmsAero
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2024-06-21 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: Send SMS/HLR/Viber via smsaero.ru gate
|
|
14
|
+
email:
|
|
15
|
+
- admin@smsaero.ru
|
|
16
|
+
executables: []
|
|
17
|
+
extensions: []
|
|
18
|
+
extra_rdoc_files: []
|
|
19
|
+
files:
|
|
20
|
+
- ".gemspec"
|
|
21
|
+
- ".gitignore"
|
|
22
|
+
- Gemfile
|
|
23
|
+
- README.md
|
|
24
|
+
- Rakefile
|
|
25
|
+
- lib/smsaero_api.rb
|
|
26
|
+
- lib/smsaero_api/version.rb
|
|
27
|
+
homepage: https://smsaero.ru/integration/class/ruby
|
|
28
|
+
licenses:
|
|
29
|
+
- MIT
|
|
30
|
+
metadata:
|
|
31
|
+
source_code_uri: https://github.com/smsaero/smsaero_ruby
|
|
32
|
+
post_install_message:
|
|
33
|
+
rdoc_options: []
|
|
34
|
+
require_paths:
|
|
35
|
+
- lib
|
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 2.6.0
|
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
requirements: []
|
|
47
|
+
rubygems_version: 3.5.11
|
|
48
|
+
signing_key:
|
|
49
|
+
specification_version: 4
|
|
50
|
+
summary: Send SMS via smsaero.ru gate
|
|
51
|
+
test_files: []
|