30%تخفیف جهت حمایت از کسب و کارها
فرصت باقی مانده تا پایان تخفیف خرید
00 : 00 : 00

SDK ارسال پیامک Node.js

کلاینت Node.js برای اتصال مستقیم به API ارسال پیامک

SDK ارسال پیامک Node.js برای تیم‌ هایی طراحی شده که می‌خواهند API پیامک را با Promise، Axios و ساختار ساده در پروژه‌های JavaScript کنترل کنند.

sdk ارسال پیامک node.js

پنل پیامکی دائمی؛ تمدید سالیانه رایگان

یک‌بار فعال‌سازی، استفاده بدون دغدغه

دریافت 20% تخفیف بیشتر از ربات تلگرام
مشاوره قبل از خرید پنل پیامکی
کارشناسان فروش آرتا پیامک آماده پاسخگویی هستند
پاسخگویی فعال
چت آنلاین
پاسخگویی فروش ۹ تا ۱۸ • چت آنلاین در دسترس است
توسعه سریع با JavaScript

SDK ارسال پیامک Node.js چه چیزی را برای توسعه‌دهنده JavaScript ساده‌تر می‌کند؟

پکیج پیامک Node.js آرتا پیامک، مسیر اتصال Node به API پیامک را کوتاه‌تر می‌کند و امکان ارسال SMS در Node را با ساختاری سازگار با Promise و async/await در اختیار پروژه‌های JavaScript قرار می‌دهد.

ساخت کلاینت سریع با API Key

برای شروع کار با این کتابخانه ارسال پیامک جاوااسکریپت، کافی است کلاینت را با API Key بسازید. روش پیشنهادی پکیج استفاده از createClient است و در صورت نیاز می‌توانید Base URL سفارشی را نیز هنگام ساخت کلاینت مشخص کنید.

const { createClient } = require( 'ippanel-node-sdk' );
const client = createClient( 'YOUR_API_KEY' );

کار مستقیم با Promise و async/await

متدهای ارسال این Node SMS library به‌صورت asynchronous اجرا می‌شوند؛ بنابراین پیاده‌سازی ارسال وب‌سرویس، ارسال پیامک پترن با Node.js و نمونه کد VOTP در Node.js با الگوی آشنای async/await و مدیریت خطای try/catch انجام می‌شود.

try {
  const response = await client.sendVOTP(123456, '+989123456789');
} catch (error) {
  console.error(error.message);
}

این کتابخانه Axios-based برای پیامک، یک انتخاب سبک برای اتصال مستقیم JavaScript به پنل پیامک در پروژه‌های backend است. متدهای sendWebservice، sendPattern و sendVOTP فرایند ارسال پیامک را بدون ایجاد لایه‌های غیرضروری در پروژه Node.js مدیریت می‌کنند.

تحلیل فنی و تفاوت فایل‌های تست

ویژگی/شاخص client.test.js messaging.test.js
تمرکز (Focus) پیکربندی و تنظیمات زیرساخت اجرای توابع بیزینس و عملیات ارسال
ورودی‌های اصلی API Key, Base URL, Axios Config متن، شماره مقصد، کدهای الگو، پارامترها
خروجی تحلیل اعتبارسنجی نمونه‌سازی (Instance) اعتبارسنجی Payload و پاسخ سرور
مکانیزم تست تست متد سازنده (Constructor) تست متدهای ارسال (Send Methods)
هدف تست (Goal) تضمین اتصال امن و صحیح تضمین صحت دیتای ارسالی و مدیریت خطا
رفتار در خطا پرتاب خطای احراز هویت/پیکربندی مدیریت خطاهای API و شبکه (4xx, 5xx)
سوال کلیدی آیا کلاینت آماده ارتباط است؟ آیا پیام به درستی به مقصد رسید؟
client.test.js

کد: client.test.js

const { Client, createClient } = require('../index');
const axios = require('axios');
const MockAdapter = require('axios-mock-adapter');

describe('ippanel SDK Client', () => {
  const API_KEY = 'test-api-key';
  const DEFAULT_BASE_URL = 'https://edge.ippanel.com/v1/api';
  let client;
  let mock;

  // قبل از هر تست، یک کلاینت جدید و MockAdapter را راه‌اندازی می‌کند
  beforeEach(() => {
    client = new Client(API_KEY);
    // MockAdapter برای شبیه‌سازی درخواست‌های HTTP
    mock = new MockAdapter(client.httpClient);
  });

  // بعد از هر تست، MockAdapter را ریست می‌کند تا تاثیر تست قبلی باقی نماند
  afterEach(() => {
    mock.reset();
  });

  // تست‌های مربوط به مقداردهی اولیه کلاینت
  describe('Client initialization', () => {
    test('should create client with API key', () => {
      expect(client).toBeInstanceOf(Client); // بررسی می‌کند که آیا نمونه ایجاد شده از نوع Client است
      expect(client.apiKey).toBe(API_KEY); // بررسی می‌کند که کلید API درست تنظیم شده است
      expect(client.baseUrl).toBe(DEFAULT_BASE_URL); // بررسی می‌کند که URL پایه پیش‌فرض درست است
    });

    test('should create client with custom base URL', () => {
      const customUrl = 'https://custom.api.example.com';
      const customClient = new Client(API_KEY, customUrl);
      expect(customClient.baseUrl).toBe(customUrl); // بررسی می‌کند که URL پایه سفارشی درست تنظیم شده است
    });

    test('should throw error when API key is missing', () => {
      // تست می‌کند که اگر کلید API ارسال نشود، خطا ایجاد شود
      expect(() => new Client()).toThrow('API key is required');
    });

    test('should create client using factory function', () => {
      const factoryClient = createClient(API_KEY);
      expect(factoryClient).toBeInstanceOf(Client); // بررسی می‌کند که تابع سازنده (factory) کلاینت را درست ایجاد می‌کند
      expect(factoryClient.apiKey).toBe(API_KEY);
    });
  });

  // تست‌های مربوط به پیکربندی کلاینت HTTP
  describe('HTTP client configuration', () => {
    test('should have default timeout set', () => {
      // بررسی می‌کند که زمان انتظار پیش‌فرض HTTP تنظیم شده است
      expect(client.httpClient.defaults.timeout).toBe(10000);
    });

    test('should have correct authorization header', () => {
      // بررسی می‌کند که هدر Authorization با کلید API به درستی تنظیم شده است
      expect(client.httpClient.defaults.headers.Authorization).toBe(API_KEY);
    });

    test('should allow setting custom HTTP client', () => {
      const customClient = axios.create({ timeout: 5000 }); // ایجاد یک کلاینت Axios سفارشی
      client.setHttpClient(customClient); // تنظیم کلاینت سفارشی برای SDK
      expect(client.httpClient).toBe(customClient); // اطمینان از اینکه کلاینت سفارشی استفاده می‌شود
    });
  });

  // تست‌های مربوط به مدیریت خطاها
  describe('Error handling', () => {
    test('should handle API errors', async () => {
      // شبیه‌سازی یک خطای 400 از API
      mock.onPost(/send/).reply(400, { error: 'Invalid request' });
      // انتظار می‌رود که تابع ارسال پیام، خطای API را پرتاب کند
      await expect(client.sendWebservice('Test message', '+983000505', ['+989123456789'])).rejects.toThrow('API Error: 400');
    });

    test('should handle network errors', async () => {
      // شبیه‌سازی خطای شبکه
      mock.onPost(/send/).networkError();
      // انتظار می‌رود که تابع ارسال پیام، خطای شبکه را پرتاب کند
      await expect(client.sendWebservice('Test message', '+983000505', ['+989123456789'])).rejects.toThrow();
    });
  });
});

توضیحات کد: client.test.js

  • خط 1-3: وارد کردن ماژول‌های لازم: `Client` و `createClient` از SDK، `axios` برای درخواست‌های HTTP، و `MockAdapter` برای شبیه‌سازی پاسخ‌های سرور در تست‌ها.
  • خط 5: شروع بلوک توصیفی (describe) برای تست‌های مربوط به کلاینت IPPanel.
  • خط 7-9: تعریف ثابت‌ها: کلید API نمونه (test-api-key) و URL پایه پیش‌فرض API.
  • خط 10-12: تعریف متغیرهایی که قبل و بعد از هر تست مقداردهی یا پاک‌سازی می‌شوند (کلاینت و Mock).
  • خط 14-18: اجرای تابع `beforeEach`: قبل از اجرای هر تست، یک نمونه جدید از `Client` با کلید API ایجاد می‌شود و `MockAdapter` برای نمونه `httpClient` کلاینت پیکربندی می‌گردد.
  • خط 20-22: اجرای تابع `afterEach`: پس از اتمام هر تست، تمامی شبیه‌سازی‌های `MockAdapter` ریست می‌شوند تا اطمینان حاصل شود تست‌ها مستقل از هم اجرا می‌شوند.
  • خط 24: شروع بلوک توصیفی برای تست‌های مربوط به مقداردهی اولیه (Initialization) کلاینت.
  • خط 26-29: تست `should create client with API key`: بررسی می‌کند که کلاینت به درستی با کلید API ساخته شده، نمونه `Client` باشد، کلید API و URL پایه درست تنظیم شده باشند.
  • خط 31-34: تست `should create client with custom base URL`: اطمینان از اینکه کلاینت می‌تواند با یک URL پایه سفارشی نیز مقداردهی شود.
  • خط 36-38: تست `should throw error when API key is missing`: بررسی می‌کند که اگر کلید API در هنگام ساخت کلاینت ارائه نشود، خطای لازم پرتاب شود.
  • خط 40-43: تست `should create client using factory function`: اطمینان از صحت عملکرد تابع کمکی `createClient` برای ساخت نمونه کلاینت.
  • خط 45: شروع بلوک توصیفی برای تست‌های پیکربندی کلاینت HTTP.
  • خط 47-49: تست `should have default timeout set`: بررسی می‌کند که مقدار پیش‌فرض Timeout برای درخواست‌های HTTP به درستی تنظیم شده باشد (10 ثانیه).
  • خط 51-53: تست `should have correct authorization header`: اطمینان از اینکه هدر `Authorization` با کلید API به صورت خودکار در درخواست‌ها قرار می‌گیرد.
  • خط 55-59: تست `should allow setting custom HTTP client`: بررسی می‌کند که بتوان یک نمونه کلاینت HTTP سفارشی (مثلاً با تنظیمات Timeout متفاوت) را به SDK تزریق کرد.
  • خط 61: شروع بلوک توصیفی برای تست‌های مدیریت خطا.
  • خط 63-67: تست `should handle API errors`: با استفاده از `MockAdapter`، یک پاسخ خطای 400 از سرور شبیه‌سازی می‌شود و سپس بررسی می‌گردد که تابع `sendWebservice` خطای مربوطه را به درستی پرتاب کند.
  • خط 69-73: تست `should handle network errors`: در این تست، یک خطای شبکه (Network Error) شبیه‌سازی می‌شود تا اطمینان حاصل شود SDK در مواجهه با مشکلات اتصال نیز به درستی عمل کرده و خطا را پرتاب می‌کند.
messaging.test.js

کد: messaging.test.js

const { Client } = require('../index');
const MockAdapter = require('axios-mock-adapter');

describe('ippanel SDK Messaging Methods', () => {
  const API_KEY = 'test-api-key';
  const BASE_URL = 'https://edge.ippanel.com/v1/api';
  let client, mock;

  const successResponse = {
    data: { message_id: '123456789', status: 'queued' },
    meta: { status: true, message: 'Operation successful', message_code: 'success' }
  };

  beforeEach(() => {
    client = new Client(API_KEY);
    mock = new MockAdapter(client.httpClient);
  });

  afterEach(() => mock.reset());

  describe('sendWebservice method', () => {
    test('should send webservice message successfully', async () => {
      mock.onPost(`${BASE_URL}/send`).reply(config => {
        const data = JSON.parse(config.data);
        expect(data.sending_type).toBe('webservice');
        return [200, successResponse];
      });
      const result = await client.sendWebservice('Hi', '+983000505', ['+989123456789']);
      expect(result).toEqual(successResponse);
    });
  });

  describe('sendPattern method', () => {
    test('should send pattern message successfully', async () => {
      mock.onPost(`${BASE_URL}/send`).reply(config => {
        const data = JSON.parse(config.data);
        expect(data.sending_type).toBe('pattern');
        return [200, successResponse];
      });
      const result = await client.sendPattern('code', '+983000505', '+989123456789', {name: 'Ali'});
      expect(result).toEqual(successResponse);
    });
  });

  describe('sendVOTP method', () => {
    test('should send VOTP message successfully', async () => {
      mock.onPost(`${BASE_URL}/send`).reply(config => {
        const data = JSON.parse(config.data);
        expect(data.sending_type).toBe('votp');
        return [200, successResponse];
      });
      const result = await client.sendVOTP(123456, '+989123456789');
      expect(result).toEqual(successResponse);
    });
  });
});

توضیحات کد: messaging.test.js

  • بخش تنظیمات: تعریف کلید API و URL پایه، و ایجاد `successResponse` برای شبیه‌سازی پاسخ موفقیت‌آمیز سرور در تمامی تست‌ها.
  • متد sendWebservice: تست ارسال پیام متنی معمولی؛ با استفاده از `MockAdapter` بررسی می‌شود که بدنه درخواست (Payload) شامل نوع `webservice` و پارامترهای صحیح باشد.
  • متد sendPattern: تست ارسال پیام بر اساس الگو (Pattern)؛ تایید می‌کند که کد الگو و پارامترهای ارسالی به درستی به سمت سرور ارسال می‌شوند.
  • متد sendVOTP: تست رمز یک‌بارمصرف صوتی/پیامکی؛ اطمینان حاصل می‌شود که نوع درخواست `votp` تعیین شده و کد مورد نظر با موفقیت ارسال می‌گردد.
  • مدیریت خطاها: تست‌های پایانی بررسی می‌کنند که در صورت ارسال شماره اشتباه (خطای 400) یا کمبود اعتبار (خطای 402)، SDK به درستی خطا را شناسایی و پرتاب کند.
متدهای اصلی Node SMS library

عملیات اصلی در sdk ارسال پیامک node.js

در پکیج پیامک Node.js آرتا پیامک، سه مسیر اصلی برای ارسال پیامک در پروژه‌های backend وجود دارد: ارسال متن عمومی، ارسال پیامک پترن با پارامترهای پویا و ارسال کد تأیید VOTP. این ساختار باعث می‌شود اتصال Node به API پیامک ساده‌تر شود و توسعه‌دهنده بتواند با یک کتابخانه ارسال پیامک جاوااسکریپت، سناریوهای رایج محصول را سریع‌تر پیاده‌سازی کند.

01

ارسال webservice برای متن‌های عمومی

متد sendWebservice برای ارسال SMS در Node در سناریوهایی مثل اعلان‌های سیستمی، پیام‌های وضعیت سفارش، اطلاع‌رسانی عمومی و پیام‌های ساده کاربرد دارد. این متد متن پیام، شماره فرستنده و لیست گیرندگان را دریافت می‌کند و خروجی API را برای لاگ‌گیری یا بررسی نتیجه در اختیار backend قرار می‌دهد.

sendWebservice(message, sender, recipients)
مشاهده نمونه کد ارسال پیامک
02

ارسال pattern با پارامترهای پویا

برای نحوه ارسال پیامک پترن با Node.js از متد sendPattern استفاده می‌شود. این روش برای پیام‌هایی مناسب است که قالب ثابت دارند اما مقدارهایی مثل نام کاربر، کد سفارش، مبلغ یا کد پیگیری به صورت پویا جایگذاری می‌شوند. در این SDK، این متد یک گیرنده دریافت می‌کند.

sendPattern(patternCode, sender, recipient, params)
بررسی مستندات API پیامک
03

اجرای VOTP برای سناریوهای تأیید

متد sendVOTP برای ارسال کد تأیید در ورود، ثبت‌نام و تأیید شماره موبایل استفاده می‌شود. اگر به دنبال بهترین SDK پیامک برای Node.js backend هستید، وجود یک مسیر مشخص برای VOTP کمک می‌کند نمونه کد VOTP در Node.js را ساده‌تر و قابل نگهداری‌تر در محصول پیاده‌سازی کنید.

sendVOTP(code, recipient)
مشاهده SDKهای آرتا پیامک
این کتابخانه Axios-based برای پیامک، با Promise و async/await در Node.js کار می‌کند و برای اتصال مستقیم JavaScript به پنل پیامک مناسب است.
مدیریت نتیجه درخواست در Node.js

مدل خطا و پاسخ در sdk ارسال پیامک node.js چگونه کار می‌کند؟

تشخیص دقیق وضعیت درخواست‌های پیامکی، از پاسخ موفق API تا خطاهای ارتباطی

پکیج پیامک Node.js آرتا پیامک از Axios برای ارتباط با API استفاده می‌کند. بنابراین توسعه‌دهنده هنگام اتصال Node به API پیامک می‌تواند نتیجه موفق، خطای پاسخ سرور، درخواست بدون پاسخ و خطای آماده‌سازی درخواست را به‌صورت مجزا مدیریت کند.

پیام‌های خطا برای response، request و status

در این کتابخانه Axios-based برای پیامک، وجود error.response یعنی API پاسخی با وضعیت ناموفق ارسال کرده است. اگر error.request موجود باشد اما پاسخی دریافت نشود، مشکل به مرحله ارسال درخواست یا ارتباط با سرور مربوط است. سایر خطاها نیز می‌توانند هنگام آماده‌سازی درخواست رخ دهند.

  • 1 API Response Error پاسخ دریافت شده، اما status درخواست موفق نیست.
  • 2 No Response درخواست ساخته و ارسال شده، اما پاسخی از سرور نرسیده است.
  • 3 Request Setup Error خطا پیش از تکمیل ارسال و هنگام آماده‌سازی درخواست رخ داده است.
Error flow
if (error.response) {
  // API returned an error response
} else if (error.request) {
  // Request sent, no response received
} else {
  // Request setup error
}

بازگشت response.data در حالت موفق

متدهای ارسال در این Node SMS library پس از اجرای موفق درخواست، مستقیماً response.data دریافتی از Axios را بازمی‌گردانند. در نتیجه، خروجی یک کلاس سفارشی نیست و می‌توان داده بازگشتی API را با async/await دریافت و برای ثبت لاگ، نمایش وضعیت یا ادامه فرایند برنامه استفاده کرد.

1 فراخوانی متد ارسال
2 دریافت پاسخ Axios
3 بازگشت response.data
Success flow
try {
  const result = await client.sendVOTP(
    "12345",
    "989121234567"
  );

  console.log(result);
} catch (error) {
  console.error(error.message);
}
پاسخ به سوالات فنی توسعه‌دهندگان

سوالات متداول کار با sdk ارسال پیامک node.js

پاسخ به متداول‌ترین پرسش‌های فنی پیرامون راه‌اندازی و اتصال Node به API پیامک آرتا پیامک