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 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/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in smsaero_api.gemspec
4
+ gemspec
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"
@@ -0,0 +1,3 @@
1
+ module SmsAeroApi
2
+ VERSION = '1.0'
3
+ end
@@ -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: []