terasms 1.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 26b7495307de0b909a483c6f1739cf624913dd544254fd547f68d74cbac3d192
4
+ data.tar.gz: 2057616cc214fa59be511a74e28402fbc2de2ca5181f85baf96bdf7210cca08b
5
+ SHA512:
6
+ metadata.gz: 976ed8292ae3cfa1de361b5aae2a3e63946a951271e4acfe60fa48a90ba79bc80449af94183db1e1c1e496cfc6cc88c7a714bfea2355a37ccd81a15ef9f40ecf
7
+ data.tar.gz: bf36315b1a295bab2f7b1e4e2ebac03266106ea1c3905e3f2cc5271b73661d04cdbc4e306c6c56fcf129f47bf85d53b32d78ebf78205eb4084ae3304816a5da2
@@ -0,0 +1,23 @@
1
+ ## Terasms
2
+
3
+ ### Description
4
+ Sending messages via Terasms
5
+
6
+ ### Usage:
7
+ ```ruby
8
+ require 'terasms'
9
+
10
+ Terasms.configure do |config|
11
+ config.url = "https://auth.terasms.ru/outbox/send"
12
+ config.login = "Your_user_name"
13
+ config.password = "Passwd"
14
+ config.sign = "your_token"
15
+ config.sender = "Sender"
16
+ config.type = "sms"
17
+ end
18
+
19
+ api = Terasms::Sms.new
20
+ result = api.send({target: "+77501112233", message: "Привет Мир! Тест рассылки смс"})
21
+ ```
22
+ ### License
23
+ MIT License. Copyright 2019 isheninp@gmail.com
@@ -0,0 +1,174 @@
1
+ # https://terasms.ru/documentation/api/http
2
+
3
+ =begin
4
+ login строка обязательный параметр
5
+ Логин на Платформе TERASMS
6
+
7
+ sign строка Подпись запроса. Процедура формирования подписи описана в разделе Авторизация при использовании HTTP API.
8
+ password строка Пароль партнёра на Платформе TERASMS. Может использоваться вместо параметра sign, однако использование подписи является рекомендуемым способом авторизации
9
+
10
+ target строка обязательный параметр
11
+ Для всех сообщений кроме e-mail — номер абонента в международном формате.
12
+ Если необходимо отправить одно и то же сообщение нескольким абонентам, то номера абонентов можно задать через запятую.
13
+ Пример: 79161111111
14
+ Для самостоятельных e-mail сообщений — почтовый адрес получателя. Также допускается указывать несколько получателей через запятую/точку с запятой.
15
+ Пример: mailbox@domain.com
16
+ Для e-mail сообщений в составе «Каскада» — пара номер_телефона-почтовый_адрес, разделенные между собой двоеточием.
17
+ В этом случае пара сохраняется в нашей системе и в дальнейшем можно указывать только номер телефона. Почтовый адрес, при необходимости, будет взят по этому номеру.
18
+ Управление сохраненными связками также доступно по API и описано в разделе Отправка сообщений E-mail.
19
+ Пример: 79161111111:mailbox@domain.com
20
+
21
+ sender строка обязательный параметр
22
+ Имя отправителя, зарегистрированное для вас на Платформе TERASMS. Имя отправителя, содержащее в себе латинские буквы (в любом регистре), может содержать от 2 до 11 символов, цифровое имя отправителя — от 2 до 15 символов.
23
+
24
+ message строка обязательный параметр
25
+ Текст сообщения. Текст 1 сообщения составляет 160 символов для латиницы и 70 символов для кириллицы. Сообщение, содержащее большее кол-во символов, разбивается на несколько сегментов и доставляется одним сообщением. Сообщение, состоящее более чем из 160 для латиницы или из 70 символов для кириллицы, разбивается на сегменты. Каждый сегмент составляет 153 для латиницы и 67 символов для кириллицы. По умолчанию сообщение может состоять максимум из 10 сегментов.
26
+
27
+ email_message массив необязательный параметр
28
+ Используется только при передаче в формате JSON.
29
+ Предназначен для передачи параметров при отправке e-mail сообщений, как самостоятельных, так и в составе «Каскада».
30
+ Поля массива:
31
+ template_id — идентификатор предварительно загруженного шаблона
32
+ from — почтовый адрес отправителя письма
33
+ title — тема письма
34
+ placeholders — массив подстановок, используемых в указанном шаблоне
35
+ Если не указан и передается e-mail сообщение, то:
36
+ адрес отправителя будет взят из настроек в Личном кабинете или, при его отсутствии, подставлен общий системный адрес;
37
+ тема письма будет взята из настроек в Личном кабинете или, при ее отсутствии, подставлено значение параметра sender;
38
+ шаблон текста письма — будет использован шаблон по умолчанию, настроенный в Личном кабинете. При его отсутствии будет отправлен просто текст, без использования шаблона.
39
+ Более подробное описание находится в разделе Отправка сообщений E-mail.
40
+
41
+ cp 1251 необязательный параметр
42
+ По умолчанию предполагается, что текст SMS передается в кодировке utf-8. Если ваш текст в кодировке cp1251 (Windows-1251), нужно добавить параметр cp=1251.
43
+
44
+ mass_push 1 или 0 необязательный параметр
45
+ Если необходимо отправить разный текст сообщения каждому абоненту, необходимо добавить параметр mass_push=1, поле message оставить пустым, а в поле target передать номера абонентов и тексты сообщений. В этом случае номер телефона и сообщение разделяются одним пробелом, а символ для разделения сообщений можно задать с помощью параметра delimiter.
46
+
47
+ delimiter символ необязательный параметр
48
+ Символ для разделения сообщений в поле target. По умолчанию принимается символ перевода на новую строку \n.
49
+
50
+ flash 1 или 0 необязательный параметр
51
+ Для отправки сообщений в формате flash.
52
+
53
+ relative_time число необязательный параметр
54
+ Время в секундах, в течение которого предпринимаются попытки доставить сообщение. Если параметр не задан, по умолчанию от 24 до 72 часов в зависимости от оператора.
55
+
56
+ relative_time_read число необязательный параметр
57
+ Время в секундах, в течение которого ожидается отчет о просмотре/прочтении сообщения, где это применимо (мессенджеры Viber, Telegram и т.п.).
58
+
59
+ date_schedule строка необязательный параметр
60
+ Дата и время отложенной отправки сообщения, задается в формате Y-m-d H:i:s. Если задан параметр timezone=1, то платформа сама определит часовой пояс абонента и скорректирует время отправки с учетом этих данных. Время отложенной отправки не должно превышать 30 дней от текущего времени. Если timezone не задан, отправка производится в по московскому времени (GMT +3).
61
+ timezone 1 необязательный параметр
62
+ Указывает учитывать ли часовой пояс абонента при отложенной отправке. Для определения часового пояса абонента номер должен принадлежать российским сотовым операторам, в противном случае планирование идет по московскому времени (GMT +3).
63
+
64
+ time_from дата и время в формате Y-m-d H:i:s (пример 2017-06-01 17:30:00) необязательный параметр (требует time_to)
65
+ Вместе с time_to задает временное окно для отправки смс абоненту с учетом часового пояса. Номер должен принадлежать российским сотовым операторам, если не удалось определить часовой пояс абонента сообщение отправляется сразу
66
+ В случае неверного формата даты возвращается код ошибки -130.
67
+ Если указанное время в регионе абонента еще не наступило, дата отправки откладывается на дату старта (time_from)
68
+ Если временное окно в регионе абонента уже прошло, но мы попадаем в рамки по времени на текущюю дату, то смс уходит сразу. Если смс не попадает в рамки и время прошло, переносим на дату старта на следующие сутки Если смс не попадает в рамки и время не наступило, оставляем текущую дату в регионе и время старта из time_from.
69
+
70
+ time_to дата и время в формате Y-m-d H:i:s (пример 2017-06-01 20:30:30) необязательный параметр (требует time_from)
71
+ Вместе с time_from задает временное окно для отправки смс абоненту с учетом часового пояса.
72
+ schedule_id ID рассылки, созданной с помощью метода add_delivery необязательный параметр
73
+ Позволяет указать ID именованной рассылки для группировки сообщений. Подробнее об именованных рассылках можно прочитать в описании HTTP API.
74
+ type
75
+ =end
76
+
77
+ require 'rubygems'
78
+ require 'ostruct'
79
+ require 'terasms/http_client/base'
80
+ require 'json'
81
+
82
+ module Terasms
83
+
84
+ def self.config
85
+ @config ||= OpenStruct.new
86
+ end
87
+
88
+ # url, login, password, sign
89
+ def self.configure
90
+ yield(config)
91
+ end
92
+
93
+ class Sms < HttpClient
94
+
95
+ ERRORS = {
96
+ -1 => 'Неверный логин или пароль',
97
+ -20 => 'Пустой текст сообщения',
98
+ -30 => 'Пустой номер абонента',
99
+ -40 => 'Неправильно задан номер абонента',
100
+ -45 => 'Превышено количество номеров',
101
+ -50 => 'Неправильно задано имя отправителя',
102
+ -60 => 'Рассылка по данному направлению недоступна',
103
+ -70 => 'Недостаточно средств на счете',
104
+ -80 => 'Не установлена стоимость рассылки по данному направлению',
105
+ -90 => 'Рассылка запрещена',
106
+ -100 => 'Не указаны необходимые параметры',
107
+ -110 => 'Номер в черном списке',
108
+ -120 => 'Некорректно задано время отложенной отправки',
109
+ -130 => 'Некорректно задано временное окно отправки',
110
+ -140 => 'Передан некорректный ID рассылки',
111
+ -160 => 'Превышен дневной лимит рассылки (Вы можете установить максимальную сумму ежедневной рассылки после согласования с Вашим менеджером)',
112
+ }
113
+
114
+ def error code
115
+ ERRORS[code]
116
+ end
117
+
118
+ def main_status result
119
+ result["result"]["status"] rescue 'undefined'
120
+ end
121
+
122
+ def message_status result
123
+ result["result"]["message_infos"].last["status"] rescue 'undefined'
124
+ end
125
+
126
+ def message_id result
127
+ result["result"]["message_infos"].last["id"] rescue 'undefined'
128
+ end
129
+
130
+ # target, sender, message,
131
+ # cp, mass_push, delimiter, flash, relative_time, relative_time_read, date_schedule, timezone, time_from, time_to, schedule_id, type
132
+ def send params
133
+ result = submit Terasms.config.url, {}, 'POST', 'json', Terasms.config.to_h.tap{|hs| hs.delete(:url)}.merge(params).to_json
134
+ if main_status(result) < 0
135
+ result.merge!({"info"=> error(main_status(result)), "status"=>"error"})
136
+ else
137
+ if message_status(result) < 0
138
+ result.merge!({"info"=> error(message_status(result)), "status"=>"error"})
139
+ else
140
+ result.merge!({"id"=> message_id(result)})
141
+ end
142
+ end
143
+ result
144
+ end
145
+
146
+ def balance
147
+ result = submit Terasms.config.balance_url, {}, 'POST', 'json', Terasms.config.to_h.slice(:login, :password).to_json
148
+ result.merge!({"info"=> error(main_status(result)), "status"=>"error"}) if main_status(result) < 0
149
+ result
150
+ end
151
+
152
+ def statuses array_of_id
153
+ submit(Terasms.config.status_url, {}, 'POST', 'json', Terasms.config.to_h.slice(:login, :password, :sign).merge({'message_ids': array_of_id}).to_json)
154
+ end
155
+
156
+ def status_ id
157
+ begin
158
+ {"result"=> "success"}.merge(statuses([id])["result"]["statuses"].last.slice("status", "status_desc"))
159
+ rescue => error
160
+ {"result"=> "error", "info" => error.to_s}
161
+ end
162
+ end
163
+
164
+ def status id
165
+ begin
166
+ raise 'wrong message id' if statuses([id])["result"]["statuses"] == []
167
+ {"result"=> "success"}.merge(statuses([id])["result"]["statuses"].last.slice("status", "status_desc"))
168
+ rescue => error
169
+ {"result"=> "error", "info" => error.to_s}
170
+ end
171
+ end
172
+
173
+ end
174
+ end
@@ -0,0 +1,42 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'json'
4
+
5
+ module Terasms
6
+ class HttpClient
7
+ def submit url, params, method = 'GET', type = 'text', body =''
8
+ begin
9
+ uri = URI.parse(url)
10
+ uri.query = URI.encode_www_form(params)
11
+ http = Net::HTTP.new(uri.host, uri.port)
12
+ http.use_ssl = true
13
+ http.read_timeout = 10
14
+ headers = case type
15
+ when 'json'
16
+ {'Content-Type' => 'application/json'}
17
+ when 'text'
18
+ {'Content-Type' => 'text/html'}
19
+ else
20
+ raise 'unknown type'
21
+ end
22
+ response = case method
23
+ when 'GET'
24
+ http.get(uri.request_uri, headers)
25
+ when 'POST'
26
+ http.post(uri.request_uri, body, headers)
27
+ else
28
+ raise 'unknown protocol'
29
+ end
30
+ result = case type
31
+ when 'json'
32
+ JSON.parse(response.body)
33
+ when 'text'
34
+ response.body
35
+ end
36
+ {"status"=> "success", "result" => result}
37
+ rescue => error
38
+ {"status"=> "error", "info" => error.to_s}
39
+ end
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: terasms
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Pavel Ishenin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: 'Terasms http rest api '
14
+ email: isheninp@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - README.md
20
+ - lib/terasms.rb
21
+ - lib/terasms/http_client/base.rb
22
+ homepage: https://github.com/isheninp/terasms
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.0.4
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Terasms sms messaging
45
+ test_files: []