NiazpardazSms SDK for Ruby
کتابخانه رسمی Ruby برای کار با API پیامکی نیازپرداز
نصب
Bundler (توصیه شده)
به فایل Gemfile اضافه کنید:
gem 'niazpardaz_sms'سپس اجرا کنید:
bundle installنصب مستقیم
gem install niazpardaz_smsپیکربندی
Ruby خالص
require 'niazpardaz_sms'
# روش 1: ایجاد مستقیم کلاینت
client = NiazpardazSms::Client.new('YOUR_API_KEY')
# روش 2: پیکربندی سراسری
NiazpardazSms.configure do |config|
config.default_api_key = 'YOUR_API_KEY'
config.default_timeout = 30
end
client = NiazpardazSms.clientRails
- اجرای generator:
rails generate niazpardaz_sms:install- ویرایش فایل
config/initializers/niazpardaz_sms.rb:
NiazpardazSms.configure do |config|
config.default_api_key = ENV.fetch('NIAZPARDAZ_API_KEY', nil)
end- یا استفاده از Rails credentials:
rails credentials:editniazpardaz_sms:
api_key: YOUR_API_KEYSinatra
require 'sinatra'
require 'niazpardaz_sms'
configure do
NiazpardazSms.configure do |config|
config.default_api_key = ENV['NIAZPARDAZ_API_KEY']
end
end
post '/send_sms' do
client = NiazpardazSms.client
result = client.send_sms(
from_number: params[:from],
to_number: params[:to],
message: params[:message]
)
json result.success? ? { status: 'ok', id: result.batch_sms_id } : { status: 'error' }
endHanami
# config/providers/niazpardaz_sms.rb
Hanami.app.register_provider :niazpardaz_sms do
start do
require 'niazpardaz_sms'
NiazpardazSms.configure do |config|
config.default_api_key = ENV['NIAZPARDAZ_API_KEY']
end
register 'niazpardaz_sms.client', NiazpardazSms.client
end
endشروع سریع
require 'niazpardaz_sms'
# ساخت کلاینت با API Key
client = NiazpardazSms::Client.new('YOUR_API_KEY')
# ارسال پیامک
result = client.send_sms(
from_number: '10001234',
to_number: '09123456789',
message: 'سلام از نیازپرداز!'
)
if result.success?
puts "شناسه ارسال: #{result.batch_sms_id}"
else
puts "خطا: #{result.result_description}"
endامکانات
ارسال پیامک تکی
result = client.send_sms(
from_number: '10001234',
to_number: '09123456789',
message: 'متن پیامک',
is_flash: false,
send_delay: nil
)
puts "شناسه ارسال: #{result.batch_sms_id}"
puts "وضعیت: #{result.result_description}"ارسال گروهی (یک متن به چند شماره)
result = client.send_bulk_sms(
from_number: '10001234',
to_numbers: ['09123456789', '09198765432'],
message: 'پیام گروهی',
is_flash: false
)
puts "شناسه ارسال: #{result.batch_sms_id}"
puts "وضعیت: #{result.result_description}"ارسال LikeToLike (هر شماره پیام مخصوص خودش)
result = client.send_sms_like_to_like(
from_number: '10001234',
to_numbers: ['09123456789', '09198765432'],
messages: ['سلام علی جان', 'سلام رضا جان']
)
puts "SmsId: #{result.sms_id}"ارسال پیامک صوتی OTP
result = client.send_voice_otp(
from_number: '10001234',
to_number: '09123456789',
otp: '12345'
)
puts "شناسه ارسال: #{result.batch_sms_id}"
puts "وضعیت: #{result.result_description}"گزارش تحویل ارسال گروهی
delivery = client.get_batch_delivery(
batch_sms_id: 123456,
page_index: 1,
page_size: 100
)
if delivery.success?
delivery.delivery_hash.each do |number, status|
puts "#{number}: #{NiazpardazSms::Models::SmsDeliveryStatus.description(status)}"
end
endگزارش تحویل ارسال LikeToLike
delivery = client.get_delivery_like_to_like(sms_id: 789)
if delivery.success?
delivery.numbers.each_with_index do |number, i|
puts "#{number}: #{delivery.delivery_status[i]}"
end
endاعتبار
credit = client.get_credit
if credit.success?
puts "اعتبار: #{credit.credit}"
endشمارههای فرستنده
senders = client.get_sender_numbers
senders.senders.each do |sender|
puts sender
endتعداد پیامکهای دریافتی
inbox_count = client.get_inbox_count(is_read: false)
puts "تعداد: #{inbox_count.inbox_count}"لیست پیامکها
messages = client.get_messages(
message_type: 1,
from_numbers: '10001234',
page_index: 1,
page_size: 50
)
if messages.success?
messages.messages.each do |message|
puts "متن پیامک: #{message.content}"
end
endدریافت پیامکها بر اساس بازه زمانی
messages = client.get_messages_by_date_range(
message_type: 1,
from_numbers: '10001234',
from_date: Time.now - 86400, # دیروز
to_date: Time.now
)
if messages.success?
messages.messages.each do |message|
puts "متن پیامک: #{message.content}"
end
endلیست سیاه مخابرات (بررسی یک شماره)
result = client.number_is_in_telecom_blacklist(number: '09123456789')
puts "در لیست سیاه: #{result.blacklisted?}"لیست سیاه مخابرات (استخراج شمارههای لیست سیاه از یک لیست)
blacklist = client.extract_telecom_blacklist_numbers(
numbers: ['09123456789', '09198765432', '09351234567']
)
if blacklist.success?
blacklist.blacklist_numbers.each do |number|
puts number
end
endبررسی محتوای پیامک
check = client.check_sms_content(message: 'متن پیامک تست')
puts "متن معتبر است: #{check.valid?}"کدهای نتیجه
کدهای نتیجه ارسال (SendResultCode)
| کد | مقدار | توضیحات |
|---|---|---|
| 0 | SEND_WAS_SUCCESSFUL | ارسال موفق ✅ |
| 1 | INVALID_USER_NAME_OR_PASSWORD | نام کاربر یا رمز نامعتبر |
| 2 | USER_BLOCKED | کاربر مسدود |
| 3 | INVALID_SENDER_NUMBER | شماره فرستنده نامعتبر |
| 4 | LIMITATION_IN_DAILY_SEND | محدودیت روزانه |
| 5 | LIMITATION_IN_RECEIVER_COUNT | حداکثر 1000 گیرنده |
| 6 | SENDER_LINE_IS_INACTIVE | خط غیرفعال |
| 7 | SMS_CONTENT_FILTERED_WORDS_IS_INCLUDED | کلمات فیلتر شده |
| 8 | NO_CREDIT | اعتبار ناکافی |
| 9 | SYSTEM_BEING_UPDATED | در حال بروزرسانی |
| 10 | WEB_SERVICE_NOT_ACTIVE | وب سرویس غیرفعال |
| 11 | NOT_IMPLEMENTED | پیاده سازی نشده |
| 12 | LIKE_TO_LIKE_RECEIVER_AND_MESSAGE_COUNT_SHOULD_EQUAL | تعداد پیام و شماره نابرابر |
| 13 | LIMITATION_IN_MESSAGE_CONTENT_COUNT | حداکثر 100 پیام |
| 14 | USER_TARIFF_NOT_DETERMINED | تعرفه تعریف نشده |
| 15 | DUPLICATE_SEND_SMS | ارسال تکراری |
| 16 | INVALID_NUMBER_EMPTY_OR_BLACKLIST | شماره نامعتبر یا بلاک لیست |
| 17 | TEXT_NOT_FOUND | متن خالی |
| 18 | NOT_VALID_TEMPLATE_FOUND | مغایرت با قالب |
| 19 | USER_EXPIRED | کاربر منقضی |
| 20 | USER_IS_NOT_ACTIVE | کاربر غیرفعال |
| 21 | INVALID_PARAMETERS | پارامتر نامعتبر |
| 22 | IP_BLOCKED | آی پی بلاک شده |
| 23 | ENQUEUE_FAILED | خطا در صف ارسال |
| 24 | DUPLICATE_REQUEST_THRESHOLD | درخواست تکراری |
| 25 | INVALID_API_KEY | ApiKey نامعتبر |
| 26 | ERROR_CREATE_VOICE_FILE | خطا در ساخت فایل صوتی |
کدهای نتیجه گزارش تحویل (DeliveryResultCode)
| کد | مقدار | توضیحات |
|---|---|---|
| 0 | SUCCESS | موفق ✅ |
| -1 | SERVICE_CONNECTION_ERROR | خطا در ارتباط با سرویس دهنده |
| -2 | INVALID_BATCH_SMS_ID | پیام با این کد وجود ندارد |
| -3 | REPORT_EXPIRED | مهلت یک هفته ای گزارش پایان یافته |
| -4 | MESSAGE_IN_QUEUE | پیام در صف ارسال مخابرات است |
| -5 | TOO_EARLY | حداقل یک دقیقه بعد از ارسال اقدام نمایید |
| -6 | IP_BLOCKED | آی پی بلاک شده |
| -7 | INVALID_API_KEY | ApiKey نامعتبر |
وضعیت تحویل پیامک (SmsDeliveryStatus)
| کد | مقدار | توضیحات |
|---|---|---|
| 0 | SENT_TO_TELECOM | ارسال شده به مخابرات |
| 1 | DELIVERED | رسیده به گوشی ✅ |
| 2 | NOT_DELIVERED | نرسیده به گوشی |
| 3 | SMS_FAILED | خطای مخابراتی |
| 4 | UNKNOWN_ERROR | خطای نامشخص |
| 5 | RECEIVED_BY_TELECOM | رسیده به مخابرات |
| 6 | NOT_RECEIVED_BY_TELECOM | نرسیده به مخابرات |
| 7 | BLACKLISTED | مسدود شده توسط مقصد |
| 8 | UNKNOWN | نامشخص |
| 9 | REJECTED_BY_TELECOM | مخابرات پیام را مردود اعلام کرد |
| 10 | CANCELED | کنسل شده توسط اپراتور |
| 11 | NOT_SENT | ارسال نشده |
| 12 | NO_TELEGRAM | تلگرام ندارد |
| 13 | IN_QUEUE | در صف ارسال |
مدیریت خطا
begin
result = client.send_sms(
from_number: '10001234',
to_number: '09123456789',
message: 'تست'
)
unless result.success?
puts "خطا: #{result.result_description}"
end
rescue NiazpardazSms::Errors::ValidationError => e
puts "خطای اعتبارسنجی: #{e.message}"
rescue NiazpardazSms::Errors::ApiError => e
puts "خطای API: #{e.message}"
puts "کد خطا: #{e.error_code}"
puts "وضعیت HTTP: #{e.http_status}"
rescue NiazpardazSms::Errors::NetworkError => e
puts "خطای شبکه: #{e.message}"
endتنظیمات پیشرفته
استفاده از Faraday سفارشی
require 'faraday'
connection = Faraday.new do |faraday|
faraday.request :json
faraday.response :json
faraday.adapter :net_http
faraday.options.timeout = 60
faraday.options.open_timeout = 10
end
client = NiazpardazSms::Client.new('YOUR_API_KEY', connection: connection)تنظیم Timeout
client = NiazpardazSms::Client.new('YOUR_API_KEY', timeout: 60)تغییر Base URL
client = NiazpardazSms::Client.new(
'YOUR_API_KEY',
base_url: 'https://custom-url.example.com/api'
)استفاده در Background Jobs
Sidekiq
class SendSmsJob
include Sidekiq::Job
def perform(to_number, message)
client = NiazpardazSms.client
result = client.send_sms(
from_number: ENV['SMS_FROM_NUMBER'],
to_number: to_number,
message: message
)
unless result.success?
raise "SMS failed: #{result.result_description}"
end
end
end
# استفاده
SendSmsJob.perform_async('09123456789', 'سلام!')ActiveJob (Rails)
class SendSmsJob < ApplicationJob
queue_as :default
def perform(to_number, message)
client = NiazpardazSms.client
result = client.send_sms(
from_number: ENV['SMS_FROM_NUMBER'],
to_number: to_number,
message: message
)
unless result.success?
raise "SMS failed: #{result.result_description}"
end
end
end
# استفاده
SendSmsJob.perform_later('09123456789', 'سلام!')سازگاری
- Ruby 2.6+
- Ruby 3.0+
- Rails 5.2+
- Rails 6.x
- Rails 7.x
- Sinatra
- Hanami
- Grape
- و سایر فریمورکهای Ruby
وابستگیها
- faraday (>= 1.0, < 3.0)
مجوز
MIT License
پشتیبانی
- 📚 مستندات: https://niazpardaz-sms.com/webservice
- 🐛 گزارش باگ: GitHub Issues