niazpardaz_sms 1.0.2
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/.rspec +3 -0
- data/.rubocop.yml +35 -0
- data/CHANGELOG.md +38 -0
- data/Gemfile +15 -0
- data/LICENSE +21 -0
- data/README.md +518 -0
- data/Rakefile +35 -0
- data/lib/generators/niazpardaz_sms/install/install_generator.rb +26 -0
- data/lib/generators/niazpardaz_sms/install/templates/README +36 -0
- data/lib/generators/niazpardaz_sms/install/templates/niazpardaz_sms.rb +18 -0
- data/lib/niazpardaz_sms/client.rb +331 -0
- data/lib/niazpardaz_sms/errors/niazpardaz_api_error.rb +41 -0
- data/lib/niazpardaz_sms/models/responses.rb +261 -0
- data/lib/niazpardaz_sms/models/result_codes.rb +440 -0
- data/lib/niazpardaz_sms/railtie.rb +34 -0
- data/lib/niazpardaz_sms/version.rb +5 -0
- data/lib/niazpardaz_sms.rb +67 -0
- metadata +96 -0
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NiazpardazSms
|
|
4
|
+
module Models
|
|
5
|
+
# کدهای نتیجه ارسال پیامک
|
|
6
|
+
module SendResultCode
|
|
7
|
+
SEND_WAS_SUCCESSFUL = 0 # ارسال با موفقیت انجام شد
|
|
8
|
+
INVALID_USER_NAME_OR_PASSWORD = 1 # نام کاربر یا کلمه عبور نامعتبر می باشد
|
|
9
|
+
USER_BLOCKED = 2 # کاربر مسدود شده است
|
|
10
|
+
INVALID_SENDER_NUMBER = 3 # شماره فرستنده نامعتبر است
|
|
11
|
+
LIMITATION_IN_DAILY_SEND = 4 # محدودیت در ارسال روزانه
|
|
12
|
+
LIMITATION_IN_RECEIVER_COUNT = 5 # تعداد گیرندگان حداکثر 1000 شماره می باشد
|
|
13
|
+
SENDER_LINE_IS_INACTIVE = 6 # خط فرستنده غیرفعال است
|
|
14
|
+
SMS_CONTENT_FILTERED_WORDS_IS_INCLUDED = 7 # متن پیامک شامل کلمات فیلتر شده است
|
|
15
|
+
NO_CREDIT = 8 # اعتبار کافی نیست
|
|
16
|
+
SYSTEM_BEING_UPDATED = 9 # سامانه در حال بروز رسانی است
|
|
17
|
+
WEB_SERVICE_NOT_ACTIVE = 10 # وب سرویس غیرفعال است
|
|
18
|
+
NOT_IMPLEMENTED = 11 # پیاده سازی نشده است
|
|
19
|
+
LIKE_TO_LIKE_RECEIVER_AND_MESSAGE_COUNT_SHOULD_EQUAL = 12 # تعداد پیامها و شماره ها باید یکسان باشد
|
|
20
|
+
LIMITATION_IN_MESSAGE_CONTENT_COUNT = 13 # تعداد پیامها حداکثر 100 پیام می باشد
|
|
21
|
+
USER_TARIFF_NOT_DETERMINED = 14 # هیچ مقداری برای تعرفه جاری کاربر تعریف نشده است
|
|
22
|
+
DUPLICATE_SEND_SMS = 15 # ارسال تکراری متن مشابه به شماره مشابه
|
|
23
|
+
INVALID_NUMBER_EMPTY_OR_BLACKLIST = 16 # شماره موبایل گیرنده یافت نشد
|
|
24
|
+
TEXT_NOT_FOUND = 17 # متن وارد نشده است
|
|
25
|
+
NOT_VALID_TEMPLATE_FOUND = 18 # متن طبق الگوی تعریف شده نیست
|
|
26
|
+
USER_EXPIRED = 19 # کاربر منقضی شده است
|
|
27
|
+
USER_IS_NOT_ACTIVE = 20 # وضعیت کاربر فعال نیست
|
|
28
|
+
INVALID_PARAMETERS = 21 # مقدار یکی یا بیشتر از پارامترهای ورودی معتبر نیست
|
|
29
|
+
IP_BLOCKED = 22 # آی پی موقت بلاک شده است
|
|
30
|
+
ENQUEUE_FAILED = 23 # عملیات با خطا مواجه شد
|
|
31
|
+
DUPLICATE_REQUEST_THRESHOLD = 24 # درخواست کاملا تکراری در بازه کوتاه
|
|
32
|
+
INVALID_API_KEY = 25 # ApiKey نامعتبر
|
|
33
|
+
ERROR_CREATE_VOICE_FILE = 26 # خطا در ساخت فایل صوتی
|
|
34
|
+
|
|
35
|
+
DESCRIPTIONS = {
|
|
36
|
+
SEND_WAS_SUCCESSFUL => 'ارسال با موفقیت انجام شد',
|
|
37
|
+
INVALID_USER_NAME_OR_PASSWORD => 'نام کاربر یا کلمه عبور نامعتبر می باشد',
|
|
38
|
+
USER_BLOCKED => 'کاربر مسدود شده است',
|
|
39
|
+
INVALID_SENDER_NUMBER => 'شماره فرستنده نامعتبر است',
|
|
40
|
+
LIMITATION_IN_DAILY_SEND => 'محدودیت در ارسال روزانه',
|
|
41
|
+
LIMITATION_IN_RECEIVER_COUNT => 'تعداد گیرندگان حداکثر 1000 شماره می باشد',
|
|
42
|
+
SENDER_LINE_IS_INACTIVE => 'خط فرستنده غیرفعال است',
|
|
43
|
+
SMS_CONTENT_FILTERED_WORDS_IS_INCLUDED => 'متن پیامک شامل کلمات فیلتر شده است',
|
|
44
|
+
NO_CREDIT => 'اعتبار کافی نیست',
|
|
45
|
+
SYSTEM_BEING_UPDATED => 'سامانه در حال بروز رسانی است',
|
|
46
|
+
WEB_SERVICE_NOT_ACTIVE => 'وب سرویس غیرفعال است',
|
|
47
|
+
NOT_IMPLEMENTED => 'پیاده سازی نشده است',
|
|
48
|
+
LIKE_TO_LIKE_RECEIVER_AND_MESSAGE_COUNT_SHOULD_EQUAL => 'تعداد پیامها و شماره ها باید یکسان باشد',
|
|
49
|
+
LIMITATION_IN_MESSAGE_CONTENT_COUNT => 'تعداد پیامها حداکثر 100 پیام می باشد',
|
|
50
|
+
USER_TARIFF_NOT_DETERMINED => 'هیچ مقداری برای تعرفه جاری کاربر تعریف نشده است',
|
|
51
|
+
DUPLICATE_SEND_SMS => 'ارسال تکراری متن مشابه به شماره مشابه',
|
|
52
|
+
INVALID_NUMBER_EMPTY_OR_BLACKLIST => 'شماره موبایل گیرنده یافت نشد',
|
|
53
|
+
TEXT_NOT_FOUND => 'متن وارد نشده است',
|
|
54
|
+
NOT_VALID_TEMPLATE_FOUND => 'متن طبق الگوی تعریف شده نیست',
|
|
55
|
+
USER_EXPIRED => 'کاربر منقضی شده است',
|
|
56
|
+
USER_IS_NOT_ACTIVE => 'وضعیت کاربر فعال نیست',
|
|
57
|
+
INVALID_PARAMETERS => 'مقدار یکی یا بیشتر از پارامترهای ورودی معتبر نیست',
|
|
58
|
+
IP_BLOCKED => 'آی پی موقت بلاک شده است',
|
|
59
|
+
ENQUEUE_FAILED => 'عملیات با خطا مواجه شد',
|
|
60
|
+
DUPLICATE_REQUEST_THRESHOLD => 'درخواست کاملا تکراری در بازه کوتاه',
|
|
61
|
+
INVALID_API_KEY => 'ApiKey نامعتبر',
|
|
62
|
+
ERROR_CREATE_VOICE_FILE => 'خطا در ساخت فایل صوتی'
|
|
63
|
+
}.freeze
|
|
64
|
+
|
|
65
|
+
def self.description(code)
|
|
66
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.success?(code)
|
|
70
|
+
code == SEND_WAS_SUCCESSFUL
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# کدهای نتیجه گزارش تحویل
|
|
75
|
+
module DeliveryResultCode
|
|
76
|
+
SUCCESS = 0 # موفق
|
|
77
|
+
SERVICE_CONNECTION_ERROR = -1 # خطا در ارتباط با سرویس دهنده
|
|
78
|
+
INVALID_BATCH_SMS_ID = -2 # پیام با این کد وجود ندارد
|
|
79
|
+
REPORT_EXPIRED = -3 # مهلت یک هفته ای گرفتن گزارش پایان یافته است
|
|
80
|
+
MESSAGE_IN_QUEUE = -4 # پیام در صف ارسال مخابرات است
|
|
81
|
+
TOO_EARLY = -5 # حداقل یک دقیقه بعد از ارسال اقدام نمایید
|
|
82
|
+
IP_BLOCKED = -6 # آی پی موقتا بلاک شده است
|
|
83
|
+
INVALID_API_KEY = -7 # ApiKey نامعتبر
|
|
84
|
+
|
|
85
|
+
DESCRIPTIONS = {
|
|
86
|
+
SUCCESS => 'موفق',
|
|
87
|
+
SERVICE_CONNECTION_ERROR => 'خطا در ارتباط با سرویس دهنده',
|
|
88
|
+
INVALID_BATCH_SMS_ID => 'پیام با این کد وجود ندارد',
|
|
89
|
+
REPORT_EXPIRED => 'مهلت یک هفته ای گرفتن گزارش پایان یافته است',
|
|
90
|
+
MESSAGE_IN_QUEUE => 'پیام در صف ارسال مخابرات است',
|
|
91
|
+
TOO_EARLY => 'حداقل یک دقیقه بعد از ارسال اقدام نمایید',
|
|
92
|
+
IP_BLOCKED => 'آی پی موقتا بلاک شده است',
|
|
93
|
+
INVALID_API_KEY => 'ApiKey نامعتبر'
|
|
94
|
+
}.freeze
|
|
95
|
+
|
|
96
|
+
def self.description(code)
|
|
97
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def self.success?(code)
|
|
101
|
+
code == SUCCESS
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# وضعیت تحویل پیامک
|
|
106
|
+
module SmsDeliveryStatus
|
|
107
|
+
NONE = -10 # نامشخص
|
|
108
|
+
SENT_TO_TELECOM = 0 # ارسال شده به مخابرات
|
|
109
|
+
DELIVERED = 1 # رسیده به گوشی
|
|
110
|
+
NOT_DELIVERED = 2 # نرسیده به گوشی
|
|
111
|
+
SMS_FAILED = 3 # خطای مخابراتی
|
|
112
|
+
UNKNOWN_ERROR = 4 # خطای نامشخص
|
|
113
|
+
RECEIVED_BY_TELECOM = 5 # رسیده به مخابرات
|
|
114
|
+
NOT_RECEIVED_BY_TELECOM = 6 # نرسیده به مخابرات
|
|
115
|
+
BLACKLISTED = 7 # مسدود شده توسط مقصد
|
|
116
|
+
UNKNOWN = 8 # نامشخص
|
|
117
|
+
REJECTED_BY_TELECOM = 9 # مخابرات پیام را مردود اعلام کرد
|
|
118
|
+
CANCELED = 10 # کنسل شده توسط اپراتور
|
|
119
|
+
NOT_SENT = 11 # ارسال نشده
|
|
120
|
+
NO_TELEGRAM = 12 # تلگرام ندارد
|
|
121
|
+
IN_QUEUE = 13 # در صف ارسال
|
|
122
|
+
|
|
123
|
+
DESCRIPTIONS = {
|
|
124
|
+
NONE => 'نامشخص',
|
|
125
|
+
SENT_TO_TELECOM => 'ارسال شده به مخابرات',
|
|
126
|
+
DELIVERED => 'رسیده به گوشی',
|
|
127
|
+
NOT_DELIVERED => 'نرسیده به گوشی',
|
|
128
|
+
SMS_FAILED => 'خطای مخابراتی',
|
|
129
|
+
UNKNOWN_ERROR => 'خطای نامشخص',
|
|
130
|
+
RECEIVED_BY_TELECOM => 'رسیده به مخابرات',
|
|
131
|
+
NOT_RECEIVED_BY_TELECOM => 'نرسیده به مخابرات',
|
|
132
|
+
BLACKLISTED => 'مسدود شده توسط مقصد',
|
|
133
|
+
UNKNOWN => 'نامشخص',
|
|
134
|
+
REJECTED_BY_TELECOM => 'مخابرات پیام را مردود اعلام کرد',
|
|
135
|
+
CANCELED => 'کنسل شده توسط اپراتور',
|
|
136
|
+
NOT_SENT => 'ارسال نشده',
|
|
137
|
+
NO_TELEGRAM => 'تلگرام ندارد',
|
|
138
|
+
IN_QUEUE => 'در صف ارسال'
|
|
139
|
+
}.freeze
|
|
140
|
+
|
|
141
|
+
def self.description(code)
|
|
142
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def self.delivered?(code)
|
|
146
|
+
code == DELIVERED
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# کدهای نتیجه اعتبار
|
|
151
|
+
module CreditResultCode
|
|
152
|
+
SUCCESS = 0 # موفق
|
|
153
|
+
INVALID_CREDENTIALS = -1 # نام کاربری و رمز عبور صحیح نمی باشد
|
|
154
|
+
USER_DISABLED = -2 # کاربر غیرفعال می باشد
|
|
155
|
+
IP_BLOCKED = -6 # آی پی موقتا بلاک شده است
|
|
156
|
+
INVALID_API_KEY = -7 # ApiKey نامعتبر
|
|
157
|
+
|
|
158
|
+
DESCRIPTIONS = {
|
|
159
|
+
SUCCESS => 'موفق',
|
|
160
|
+
INVALID_CREDENTIALS => 'نام کاربری و رمز عبور صحیح نمی باشد',
|
|
161
|
+
USER_DISABLED => 'کاربر غیرفعال می باشد',
|
|
162
|
+
IP_BLOCKED => 'آی پی موقتا بلاک شده است',
|
|
163
|
+
INVALID_API_KEY => 'ApiKey نامعتبر'
|
|
164
|
+
}.freeze
|
|
165
|
+
|
|
166
|
+
def self.description(code)
|
|
167
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def self.success?(code)
|
|
171
|
+
code == SUCCESS
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# کدهای نتیجه لیست سیاه
|
|
176
|
+
module BlacklistResultCode
|
|
177
|
+
SUCCESS = 0 # عملیات با موفقیت انجام شد
|
|
178
|
+
INVALID_CREDENTIALS = -1 # نام کاربری و رمز عبور صحیح نمی باشد
|
|
179
|
+
USER_DISABLED = -2 # کاربر غیرفعال می باشد
|
|
180
|
+
EMPTY_NUMBERS_ARRAY = -3 # آرایه شماره های همراه خالی می باشد
|
|
181
|
+
MAX_NUMBERS_EXCEEDED = -4 # تعداد شماره ها حداکثر 1000 شماره می باشد
|
|
182
|
+
IP_BLOCKED = -6 # آی پی موقتا بلاک شده است
|
|
183
|
+
INVALID_API_KEY = -7 # ApiKey نامعتبر
|
|
184
|
+
|
|
185
|
+
DESCRIPTIONS = {
|
|
186
|
+
SUCCESS => 'عملیات با موفقیت انجام شد',
|
|
187
|
+
INVALID_CREDENTIALS => 'نام کاربری و رمز عبور صحیح نمی باشد',
|
|
188
|
+
USER_DISABLED => 'کاربر غیرفعال می باشد',
|
|
189
|
+
EMPTY_NUMBERS_ARRAY => 'آرایه شماره های همراه خالی می باشد',
|
|
190
|
+
MAX_NUMBERS_EXCEEDED => 'تعداد شماره ها حداکثر 1000 شماره می باشد',
|
|
191
|
+
IP_BLOCKED => 'آی پی موقتا بلاک شده است',
|
|
192
|
+
INVALID_API_KEY => 'ApiKey نامعتبر'
|
|
193
|
+
}.freeze
|
|
194
|
+
|
|
195
|
+
def self.description(code)
|
|
196
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def self.success?(code)
|
|
200
|
+
code == SUCCESS
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# کدهای نتیجه شماره های ارسال کننده
|
|
205
|
+
module SenderNumbersResultCode
|
|
206
|
+
SUCCESS = 0 # موفق
|
|
207
|
+
INVALID_CREDENTIALS = -1 # نام کاربری و رمز عبور صحیح نمی باشد
|
|
208
|
+
USER_DISABLED = -2 # کاربر غیرفعال می باشد
|
|
209
|
+
IP_BLOCKED = -6 # آی پی موقتا بلاک شده است
|
|
210
|
+
INVALID_API_KEY = -7 # ApiKey نامعتبر
|
|
211
|
+
|
|
212
|
+
DESCRIPTIONS = {
|
|
213
|
+
SUCCESS => 'موفق',
|
|
214
|
+
INVALID_CREDENTIALS => 'نام کاربری و رمز عبور صحیح نمی باشد',
|
|
215
|
+
USER_DISABLED => 'کاربر غیرفعال می باشد',
|
|
216
|
+
IP_BLOCKED => 'آی پی موقتا بلاک شده است',
|
|
217
|
+
INVALID_API_KEY => 'ApiKey نامعتبر'
|
|
218
|
+
}.freeze
|
|
219
|
+
|
|
220
|
+
def self.description(code)
|
|
221
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def self.success?(code)
|
|
225
|
+
code == SUCCESS
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# کدهای نتیجه تعداد پیامک های دریافتی
|
|
230
|
+
module InboxCountResultCode
|
|
231
|
+
SUCCESS = 0 # موفق
|
|
232
|
+
INVALID_CREDENTIALS = -1 # نام کاربری و رمز عبور صحیح نمی باشد
|
|
233
|
+
USER_DISABLED = -2 # کاربر غیرفعال می باشد
|
|
234
|
+
IP_BLOCKED = -6 # آی پی موقتا بلاک شده است
|
|
235
|
+
INVALID_API_KEY = -7 # ApiKey نامعتبر
|
|
236
|
+
|
|
237
|
+
DESCRIPTIONS = {
|
|
238
|
+
SUCCESS => 'موفق',
|
|
239
|
+
INVALID_CREDENTIALS => 'نام کاربری و رمز عبور صحیح نمی باشد',
|
|
240
|
+
USER_DISABLED => 'کاربر غیرفعال می باشد',
|
|
241
|
+
IP_BLOCKED => 'آی پی موقتا بلاک شده است',
|
|
242
|
+
INVALID_API_KEY => 'ApiKey نامعتبر'
|
|
243
|
+
}.freeze
|
|
244
|
+
|
|
245
|
+
def self.description(code)
|
|
246
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def self.success?(code)
|
|
250
|
+
code == SUCCESS
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# کدهای نتیجه بررسی محتوای پیامک
|
|
255
|
+
module CheckContentResultCode
|
|
256
|
+
SUCCESS = 0 # موفق
|
|
257
|
+
INVALID_CREDENTIALS = -1 # نام کاربری و رمز عبور صحیح نمی باشد
|
|
258
|
+
USER_DISABLED = -2 # کاربر غیرفعال می باشد
|
|
259
|
+
IP_BLOCKED = -6 # آی پی موقتا بلاک شده است
|
|
260
|
+
INVALID_API_KEY = -7 # ApiKey نامعتبر
|
|
261
|
+
|
|
262
|
+
DESCRIPTIONS = {
|
|
263
|
+
SUCCESS => 'موفق',
|
|
264
|
+
INVALID_CREDENTIALS => 'نام کاربری و رمز عبور صحیح نمی باشد',
|
|
265
|
+
USER_DISABLED => 'کاربر غیرفعال می باشد',
|
|
266
|
+
IP_BLOCKED => 'آی پی موقتا بلاک شده است',
|
|
267
|
+
INVALID_API_KEY => 'ApiKey نامعتبر'
|
|
268
|
+
}.freeze
|
|
269
|
+
|
|
270
|
+
def self.description(code)
|
|
271
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def self.success?(code)
|
|
275
|
+
code == SUCCESS
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
# زبان پیامک
|
|
280
|
+
module SmsLangType
|
|
281
|
+
NONE = -10 # نامشخص
|
|
282
|
+
FA = 1 # فارسی
|
|
283
|
+
EN = 2 # انگلیسی
|
|
284
|
+
|
|
285
|
+
DESCRIPTIONS = {
|
|
286
|
+
NONE => 'نامشخص',
|
|
287
|
+
FA => 'فارسی',
|
|
288
|
+
EN => 'انگلیسی'
|
|
289
|
+
}.freeze
|
|
290
|
+
|
|
291
|
+
def self.description(code)
|
|
292
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# وضعیت پیامک
|
|
297
|
+
module SmsStatusType
|
|
298
|
+
NONE = -10 # نامشخص
|
|
299
|
+
PENDING = 1 # منتظر تایید
|
|
300
|
+
ILLEGAL = 2 # غیر مجاز
|
|
301
|
+
SENDING = 3 # در حال ارسال
|
|
302
|
+
NOT_APPROVED = 4 # تایید نشده
|
|
303
|
+
SENT = 5 # ارسال شده
|
|
304
|
+
CANCELED = 6 # انصراف
|
|
305
|
+
ERROR = 7 # توقف ارسال
|
|
306
|
+
NO_CREDIT = 8 # مبلغ شارژ جهت ارسال کافی نیست
|
|
307
|
+
NOT_SENT = 9 # ارسال نشده
|
|
308
|
+
WAIT_FOR_SEND = 10 # منتظر ارسال
|
|
309
|
+
PENDING_DEC_COST = 11 # در حال کسر هزینه
|
|
310
|
+
IN_QUEUE = 12 # در صف منتظر ارسال
|
|
311
|
+
MANY_TO_MANY_CALC_COST = 13 # در حال کسر هزینه چند به چند
|
|
312
|
+
|
|
313
|
+
DESCRIPTIONS = {
|
|
314
|
+
NONE => 'نامشخص',
|
|
315
|
+
PENDING => 'منتظر تایید',
|
|
316
|
+
ILLEGAL => 'غیر مجاز',
|
|
317
|
+
SENDING => 'در حال ارسال',
|
|
318
|
+
NOT_APPROVED => 'تایید نشده',
|
|
319
|
+
SENT => 'ارسال شده',
|
|
320
|
+
CANCELED => 'انصراف',
|
|
321
|
+
ERROR => 'توقف ارسال',
|
|
322
|
+
NO_CREDIT => 'مبلغ شارژ جهت ارسال کافی نیست',
|
|
323
|
+
NOT_SENT => 'ارسال نشده',
|
|
324
|
+
WAIT_FOR_SEND => 'منتظر ارسال',
|
|
325
|
+
PENDING_DEC_COST => 'در حال کسر هزینه',
|
|
326
|
+
IN_QUEUE => 'در صف منتظر ارسال',
|
|
327
|
+
MANY_TO_MANY_CALC_COST => 'در حال کسر هزینه چند به چند'
|
|
328
|
+
}.freeze
|
|
329
|
+
|
|
330
|
+
def self.description(code)
|
|
331
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
# وضعیت ارسال پیامک
|
|
336
|
+
module SmsSendStatusType
|
|
337
|
+
NONE = -10 # نامشخص
|
|
338
|
+
SENT = 1 # ارسال شده
|
|
339
|
+
ERROR = 2 # خطای مخابراتی
|
|
340
|
+
BLOCK_LIST = 3 # خط مقصد دریافت از خطوط پیامک را مسدود کرده است
|
|
341
|
+
|
|
342
|
+
DESCRIPTIONS = {
|
|
343
|
+
NONE => 'نامشخص',
|
|
344
|
+
SENT => 'ارسال شده',
|
|
345
|
+
ERROR => 'خطای مخابراتی',
|
|
346
|
+
BLOCK_LIST => 'خط مقصد دریافت از خطوط پیامک را مسدود کرده است'
|
|
347
|
+
}.freeze
|
|
348
|
+
|
|
349
|
+
def self.description(code)
|
|
350
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
# روش ارسال
|
|
355
|
+
module SmsSendMethodType
|
|
356
|
+
NONE = -10 # نامشخص
|
|
357
|
+
QUICK = 1 # سریع
|
|
358
|
+
TEST = 2 # تست
|
|
359
|
+
REGIONAL = 3 # منطقه ای
|
|
360
|
+
GROUP = 4 # گروهی
|
|
361
|
+
WEB_SERVICE = 5 # وب سرویس
|
|
362
|
+
ANNOUNCEMENT = 6 # اطلاع رسانی
|
|
363
|
+
SECRETARY = 7 # منشی
|
|
364
|
+
INTELLIGENT_SEND = 8 # ارسال هوشمند
|
|
365
|
+
CORRESPONDING_SEND = 9 # ارسال متناظر
|
|
366
|
+
CODE_READER = 10 # کد خوان
|
|
367
|
+
POLL = 11 # نظرسنجی
|
|
368
|
+
TRANSFER = 12 # انتقال پیامک
|
|
369
|
+
REPLY = 13 # پاسخ
|
|
370
|
+
PHONE_BOOK = 14 # ارسال از دفتر تلفن
|
|
371
|
+
POSTAL_CODE = 15 # ارسال کد پستی
|
|
372
|
+
SMS_EVENT = 16 # پیامک مناسبت
|
|
373
|
+
INTELLIGENT_SECRETARY = 17 # منشی هوشمند
|
|
374
|
+
ADD_TO_PHONE_BOOK = 18 # اضافه به لیست
|
|
375
|
+
INSTANT_SMS = 19 # پیامک فوری
|
|
376
|
+
SCHEDULE_SMS = 20 # پیامک زماندار
|
|
377
|
+
USANCE_SMS = 21 # پیامک سررسید
|
|
378
|
+
AGE_AND_GENDER = 22 # سن و جنسیت
|
|
379
|
+
SYSTEM = 23 # سیستمی
|
|
380
|
+
BIRTHDAY_SMS = 24 # ارسال تولد
|
|
381
|
+
KIOSK_SMS = 25 # کیوسک
|
|
382
|
+
CANCELLATION_BY_11 = 26 # لغو11
|
|
383
|
+
|
|
384
|
+
DESCRIPTIONS = {
|
|
385
|
+
NONE => 'نامشخص',
|
|
386
|
+
QUICK => 'سریع',
|
|
387
|
+
TEST => 'تست',
|
|
388
|
+
REGIONAL => 'منطقه ای',
|
|
389
|
+
GROUP => 'گروهی',
|
|
390
|
+
WEB_SERVICE => 'وب سرویس',
|
|
391
|
+
ANNOUNCEMENT => 'اطلاع رسانی',
|
|
392
|
+
SECRETARY => 'منشی',
|
|
393
|
+
INTELLIGENT_SEND => 'ارسال هوشمند',
|
|
394
|
+
CORRESPONDING_SEND => 'ارسال متناظر',
|
|
395
|
+
CODE_READER => 'کد خوان',
|
|
396
|
+
POLL => 'نظرسنجی',
|
|
397
|
+
TRANSFER => 'انتقال پیامک',
|
|
398
|
+
REPLY => 'پاسخ',
|
|
399
|
+
PHONE_BOOK => 'ارسال از دفتر تلفن',
|
|
400
|
+
POSTAL_CODE => 'ارسال کد پستی',
|
|
401
|
+
SMS_EVENT => 'پیامک مناسبت',
|
|
402
|
+
INTELLIGENT_SECRETARY => 'منشی هوشمند',
|
|
403
|
+
ADD_TO_PHONE_BOOK => 'اضافه به لیست',
|
|
404
|
+
INSTANT_SMS => 'پیامک فوری',
|
|
405
|
+
SCHEDULE_SMS => 'پیامک زماندار',
|
|
406
|
+
USANCE_SMS => 'پیامک سررسید',
|
|
407
|
+
AGE_AND_GENDER => 'سن و جنسیت',
|
|
408
|
+
SYSTEM => 'سیستمی',
|
|
409
|
+
BIRTHDAY_SMS => 'ارسال تولد',
|
|
410
|
+
KIOSK_SMS => 'کیوسک',
|
|
411
|
+
CANCELLATION_BY_11 => 'لغو11'
|
|
412
|
+
}.freeze
|
|
413
|
+
|
|
414
|
+
def self.description(code)
|
|
415
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
# نوع مسیر پیامک
|
|
420
|
+
module SmsDirectionType
|
|
421
|
+
NONE = -10 # نامشخص
|
|
422
|
+
IN = 1 # دریافتی
|
|
423
|
+
OUT = 2 # ارسالی
|
|
424
|
+
SCHEDULE = 3 # زماندار
|
|
425
|
+
USANCE = 4 # سررسید
|
|
426
|
+
|
|
427
|
+
DESCRIPTIONS = {
|
|
428
|
+
NONE => 'نامشخص',
|
|
429
|
+
IN => 'دریافتی',
|
|
430
|
+
OUT => 'ارسالی',
|
|
431
|
+
SCHEDULE => 'زماندار',
|
|
432
|
+
USANCE => 'سررسید'
|
|
433
|
+
}.freeze
|
|
434
|
+
|
|
435
|
+
def self.description(code)
|
|
436
|
+
DESCRIPTIONS[code] || 'کد نامشخص'
|
|
437
|
+
end
|
|
438
|
+
end
|
|
439
|
+
end
|
|
440
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails/railtie'
|
|
4
|
+
|
|
5
|
+
module NiazpardazSms
|
|
6
|
+
# Railtie برای یکپارچگی با Rails
|
|
7
|
+
#
|
|
8
|
+
# این کلاس به صورت خودکار توسط Rails بارگذاری میشود و امکانات زیر را فراهم میکند:
|
|
9
|
+
# - بارگذاری خودکار generators
|
|
10
|
+
# - پیکربندی از طریق Rails credentials
|
|
11
|
+
#
|
|
12
|
+
class Railtie < Rails::Railtie
|
|
13
|
+
# بارگذاری generators
|
|
14
|
+
generators do
|
|
15
|
+
require_relative '../generators/niazpardaz_sms/install/install_generator'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# پیکربندی اولیه
|
|
19
|
+
initializer 'niazpardaz_sms.configure' do |app|
|
|
20
|
+
# اگر credentials تنظیم شده باشد، از آن استفاده کن
|
|
21
|
+
if app.credentials.respond_to?(:niazpardaz_sms)
|
|
22
|
+
credentials = app.credentials.niazpardaz_sms
|
|
23
|
+
NiazpardazSms.default_api_key ||= credentials[:api_key] if credentials[:api_key]
|
|
24
|
+
NiazpardazSms.default_timeout ||= credentials[:timeout] if credentials[:timeout]
|
|
25
|
+
NiazpardazSms.default_base_url ||= credentials[:base_url] if credentials[:base_url]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Rake tasks (در صورت نیاز)
|
|
30
|
+
rake_tasks do
|
|
31
|
+
# میتوانید rake tasks اضافه کنید
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'niazpardaz_sms/version'
|
|
4
|
+
require_relative 'niazpardaz_sms/errors/niazpardaz_api_error'
|
|
5
|
+
require_relative 'niazpardaz_sms/models/result_codes'
|
|
6
|
+
require_relative 'niazpardaz_sms/models/responses'
|
|
7
|
+
require_relative 'niazpardaz_sms/client'
|
|
8
|
+
|
|
9
|
+
# بارگذاری Railtie در صورت وجود Rails
|
|
10
|
+
require_relative 'niazpardaz_sms/railtie' if defined?(Rails::Railtie)
|
|
11
|
+
|
|
12
|
+
# کتابخانه رسمی Ruby برای کار با API پیامکی نیازپرداز
|
|
13
|
+
#
|
|
14
|
+
# @example استفاده ساده
|
|
15
|
+
# client = NiazpardazSms::Client.new('YOUR_API_KEY')
|
|
16
|
+
# result = client.send_sms(
|
|
17
|
+
# from_number: '10001234',
|
|
18
|
+
# to_number: '09123456789',
|
|
19
|
+
# message: 'سلام از نیازپرداز!'
|
|
20
|
+
# )
|
|
21
|
+
#
|
|
22
|
+
# @example با تنظیمات سفارشی
|
|
23
|
+
# client = NiazpardazSms::Client.new('YOUR_API_KEY', timeout: 60)
|
|
24
|
+
#
|
|
25
|
+
module NiazpardazSms
|
|
26
|
+
class << self
|
|
27
|
+
# تنظیمات پیشفرض
|
|
28
|
+
attr_accessor :default_api_key, :default_timeout, :default_base_url
|
|
29
|
+
|
|
30
|
+
# ایجاد کلاینت با تنظیمات پیشفرض
|
|
31
|
+
#
|
|
32
|
+
# @param api_key [String, nil] کلید API (اختیاری اگر default_api_key تنظیم شده باشد)
|
|
33
|
+
# @param options [Hash] تنظیمات اختیاری
|
|
34
|
+
# @return [Client] کلاینت جدید
|
|
35
|
+
def client(api_key = nil, options = {})
|
|
36
|
+
key = api_key || default_api_key
|
|
37
|
+
opts = {
|
|
38
|
+
timeout: default_timeout,
|
|
39
|
+
base_url: default_base_url
|
|
40
|
+
}.compact.merge(options)
|
|
41
|
+
|
|
42
|
+
Client.new(key, opts)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# پیکربندی کتابخانه
|
|
46
|
+
#
|
|
47
|
+
# @yield [self] بلوک پیکربندی
|
|
48
|
+
# @example
|
|
49
|
+
# NiazpardazSms.configure do |config|
|
|
50
|
+
# config.default_api_key = 'YOUR_API_KEY'
|
|
51
|
+
# config.default_timeout = 60
|
|
52
|
+
# end
|
|
53
|
+
def configure
|
|
54
|
+
yield self
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# ریست کردن تنظیمات
|
|
58
|
+
def reset_configuration!
|
|
59
|
+
@default_api_key = nil
|
|
60
|
+
@default_timeout = nil
|
|
61
|
+
@default_base_url = nil
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Alias برای دسترسی آسانتر
|
|
67
|
+
Niazpardaz = NiazpardazSms unless defined?(Niazpardaz)
|
metadata
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: niazpardaz_sms
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Niazpardaz
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: faraday
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '1.0'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '3.0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '1.0'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '3.0'
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: faraday-net_http
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '1.0'
|
|
39
|
+
type: :runtime
|
|
40
|
+
prerelease: false
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '1.0'
|
|
46
|
+
description: کتابخانه رسمی Ruby برای ارسال پیامک، دریافت گزارش تحویل، مدیریت لیست
|
|
47
|
+
سیاه و سایر امکانات API پیامکی نیازپرداز. سازگار با Rails، Sinatra و سایر فریمورکهای
|
|
48
|
+
Ruby. برای خرید پنل می توانید به سایت https://niazpardaz-sms.com مراجعه نمایید.
|
|
49
|
+
executables: []
|
|
50
|
+
extensions: []
|
|
51
|
+
extra_rdoc_files: []
|
|
52
|
+
files:
|
|
53
|
+
- ".rspec"
|
|
54
|
+
- ".rubocop.yml"
|
|
55
|
+
- CHANGELOG.md
|
|
56
|
+
- Gemfile
|
|
57
|
+
- LICENSE
|
|
58
|
+
- README.md
|
|
59
|
+
- Rakefile
|
|
60
|
+
- lib/generators/niazpardaz_sms/install/install_generator.rb
|
|
61
|
+
- lib/generators/niazpardaz_sms/install/templates/README
|
|
62
|
+
- lib/generators/niazpardaz_sms/install/templates/niazpardaz_sms.rb
|
|
63
|
+
- lib/niazpardaz_sms.rb
|
|
64
|
+
- lib/niazpardaz_sms/client.rb
|
|
65
|
+
- lib/niazpardaz_sms/errors/niazpardaz_api_error.rb
|
|
66
|
+
- lib/niazpardaz_sms/models/responses.rb
|
|
67
|
+
- lib/niazpardaz_sms/models/result_codes.rb
|
|
68
|
+
- lib/niazpardaz_sms/railtie.rb
|
|
69
|
+
- lib/niazpardaz_sms/version.rb
|
|
70
|
+
homepage: https://github.com/NiazpardazSms/niazpardaz-sms-ruby
|
|
71
|
+
licenses:
|
|
72
|
+
- MIT
|
|
73
|
+
metadata:
|
|
74
|
+
homepage_uri: https://github.com/NiazpardazSms/niazpardaz-sms-ruby
|
|
75
|
+
source_code_uri: https://github.com/NiazpardazSms/niazpardaz-sms-ruby
|
|
76
|
+
changelog_uri: https://github.com/NiazpardazSms/niazpardaz-sms-ruby/blob/main/CHANGELOG.md
|
|
77
|
+
documentation_uri: https://niazpardaz-sms.com/webservice
|
|
78
|
+
rubygems_mfa_required: 'true'
|
|
79
|
+
rdoc_options: []
|
|
80
|
+
require_paths:
|
|
81
|
+
- lib
|
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
|
+
requirements:
|
|
84
|
+
- - ">="
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: 2.6.0
|
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
|
+
requirements:
|
|
89
|
+
- - ">="
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: '0'
|
|
92
|
+
requirements: []
|
|
93
|
+
rubygems_version: 4.0.3
|
|
94
|
+
specification_version: 4
|
|
95
|
+
summary: کتابخانه رسمی Ruby برای کار با API پیامکی نیازپرداز
|
|
96
|
+
test_files: []
|