0.0
No release in over 3 years
کتابخانه رسمی Ruby برای ارسال پیامک، دریافت گزارش تحویل، مدیریت لیست سیاه و سایر امکانات API پیامکی نیازپرداز. سازگار با Rails، Sinatra و سایر فریم‌ورک‌های Ruby. برای خرید پنل می توانید به سایت https://niazpardaz-sms.com مراجعه نمایید.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

>= 1.0, < 3.0
 Project Readme

NiazpardazSms SDK for Ruby

کتابخانه رسمی Ruby برای کار با API پیامکی نیازپرداز

Gem Version License

نصب

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.client

Rails

  1. اجرای generator:
rails generate niazpardaz_sms:install
  1. ویرایش فایل config/initializers/niazpardaz_sms.rb:
NiazpardazSms.configure do |config|
  config.default_api_key = ENV.fetch('NIAZPARDAZ_API_KEY', nil)
end
  1. یا استفاده از Rails credentials:
rails credentials:edit
niazpardaz_sms:
  api_key: YOUR_API_KEY

Sinatra

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' }
end

Hanami

# 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

پشتیبانی