كيفية إرسال الرسائل القصيرة عبر واجهة برمجة تطبيقات SMPP باستخدام جافا سكريبت/Node.js

واجهة برمجة تطبيقات الرسائل القصيرة من نظير إلى نظير (SMPP) هي بروتوكول قوي وشائع الاستخدام لإرسال واستقبال الرسائل القصيرة بين مراكز خدمة الرسائل القصيرة (SMSCs) وكيانات الرسائل القصيرة الخارجية (ESMEs). بالنسبة للمطورين الذين يستفيدون من JavaScript و Node.js، فإن دمج واجهة برمجة تطبيقات SMPP مع أدوات مثل بوابة Ozeki للرسائل القصيرة يتيح اتصالاً سلسًا بالرسائل القصيرة. يوفر هذا الدليل برنامجًا تعليميًا خطوة بخطوة لإعداد عميل SMPP، وإدارة الاتصالات، وإرسال الرسائل القصيرة، والتعامل مع تقارير التسليم باستخدام JavaScript و Node.js، مع أمثلة عملية للكود.

لماذا تستخدم واجهة برمجة تطبيقات SMPP مع جافا سكريبت؟

بروتوكول SMPP هو خيار قوي للاتصال بالرسائل القصيرة نظرًا لموثوقيته، وقابليته للتوسع، ودعمه لرسائل الحجم الكبير. باستخدام JavaScript و Node.js، يمكن للمطورين إنشاء تطبيقات فعالة تعمل بالأحداث وتتكامل بسلاسة مع واجهة برمجة تطبيقات SMPP. حزمة smpp، المتاحة عبر npm، تبسط تفاعلات البروتوكول منخفضة المستوى، مما يسمح للمطورين بالتركيز على بناء تطبيقات رسائل قصيرة قوية.

إعداد عميل واجهة برمجة تطبيقات SMPP في جافا سكريبت (Node.js) لإرسال الرسائل القصيرة

قبل أن تتمكن من إرسال رسائل قصيرة باستخدام واجهة برمجة تطبيقات SMPP، تحتاج إلى تكوين حساب مستخدم SMPP والاتصال بخادم SMPP، مثل الخادم المقدم من بوابة Ozeki للرسائل القصيرة. يشرح هذا القسم كيفية إعداد البيئة وإنشاء اتصال باستخدام JavaScript.

الخطوة 1: تثبيت حزمة SMPP

للتفاعل مع بروتوكول SMPP، قم بتثبيت حزمة smpp من npm، والتي توفر واجهة بسيطة لعمليات واجهة برمجة تطبيقات SMPP في JavaScript.

npm install smpp

الخطوة 2: إنشاء اتصال

يوجد أدناه مثال لكيفية الاتصال بخادم SMPP باستخدام Node.js وحزمة smpp. استبدل your.ozeki.server، your_username، و your_password بتفاصيل الخادم الفعلية وبيانات الاعتماد الخاصة بك.

const smpp = require('smpp');
const session = smpp.connect({
    host: 'your.ozeki.server',
    port: 2775
});

session.on('connect', () => {
    console.log('تم الاتصال بخادم SMPP');
    
    session.bind_transceiver({
        system_id: 'your_username',
        password: 'your_password'
    }, (pdu) => {
        if (pdu.command_status === 0) {
            console.log('تم الربط بنجاح بخادم SMPP');
        } else {
            console.error('فشل الربط:', pdu.command_status);
        }
    });
});

session.on('error', (error) => {
    console.error('خطأ في اتصال SMPP:', error);
});

تأكد من أن خادم SMPP الخاص بك يمكن الوصول إليه وأن بيانات الاعتماد الخاصة بك صحيحة لتجنب مشكلات الاتصال. طريقة bind_transceiver تنشئ اتصالًا ثنائي الاتجاه لإرسال واستقبال الرسائل القصيرة.

إدارة اتصالات واجهة برمجة تطبيقات SMPP في Node.js لمراسلة الرسائل القصيرة

الحفاظ على جلسة SMPP نشطة يتطلب إرسال رسائل حية دورية باستخدام PDU enquire_link. هذا يضمن بقاء الاتصال مفتوحًا ومستجيبًا، خاصة للتطبيقات طويلة المدى.

const keepAliveInterval = setInterval(() => {
    session.enquire_link({}, (pdu) => {
        if (pdu.command_status !== 0) {
            console.error('فشل الحفاظ على الاتصال:', pdu.command_status);
        }
    });
}, 30000);

session.on('close', () => {
    clearInterval(keepAliveInterval);
    console.log('تم إغلاق اتصال SMPP');
});

هذا الكود يرسل enquire_link كل 30 ثانية للحفاظ على الجلسة نشطة ويمسح الفاصل الزمني عند إغلاق الاتصال.

إرسال الرسائل القصيرة باستخدام جافا سكريبت عبر واجهة برمجة تطبيقات SMPP (مثال Node.js)

بمجرد الاتصال، يمكنك إرسال رسائل قصيرة باستخدام PDU submit_sm. توضح وظيفة JavaScript التالية كيفية إرسال رسالة قصيرة باستخدام واجهة برمجة تطبيقات SMPP.

function sendSMS(from, to, message) {
    session.submit_sm({
        source_addr: from,
        destination_addr: to,
        short_message: message,
        data_coding: 0, // ترميز GSM 7 بت
        source_addr_ton: 1, // تنسيق دولي
        source_addr_npi: 1, // خطة ترقيم ISDN
        dest_addr_ton: 1,  // تنسيق دولي
        dest_addr_npi: 1    // خطة ترقيم ISDN
    }, (pdu) => {
        if (pdu.command_status === 0) {
            console.log(`تم إرسال الرسالة بنجاح، معرف الرسالة: ${pdu.message_id}`);
        } else {
            console.error('فشل إرسال الرسالة:', pdu.command_status);
        }
    });
}

sendSMS('12345', '+1234567890', 'مرحبًا من عميل SMPP لـ Node.js!');

معلمات data_coding، source_addr_ton، و dest_addr_ton تضمن ترميز الرسالة بشكل صحيح وتنسيق رقم الهاتف. اضبط هذه المعلمات بناءً على متطلباتك.

التعامل مع تقارير تسليم الرسائل القصيرة في جافا سكريبت باستخدام واجهة برمجة تطبيقات SMPP

تدعم واجهة برمجة تطبيقات SMPP تقارير التسليم لتأكيد ما إذا كانت الرسالة القصيرة قد تم تسليمها. يتعامل الكود التالي مع PDU deliver_sm الواردة لمعالجة إشعارات التسليم.

session.on('pdu', (pdu) => {
    if (pdu.command === 'deliver_sm') {
        const messageId = pdu.receipted_message_id;
        const status = pdu.message_state;
        
        console.log(`تقرير تسليم لـ ${messageId}: ${status}`);
        
        session.deliver_sm_resp({
            sequence_number: pdu.sequence_number
        });
    }
});

يسجل هذا الكود حالة التسليم ويستجيب للخادم لتأكيد استلام التقرير.

تنفيذ كامل لعميل SMPP API بلغة JavaScript (Node.js) لإرسال الرسائل القصيرة

للحصول على حل جاهز للإنتاج، فإن الفئة التالية JavaScript تغلف إدارة الاتصال، وإرسال الرسائل، ومنطق إعادة الاتصال لـ SMPP API.

const smpp = require('smpp');

class SMPPClient {
    constructor(config) {
        this.config = config;
        this.session = null;
        this.keepAliveInterval = null;
        this.connect();
    }

    connect() {
        this.session = smpp.connect(this.config);
        
        this.session.on('connect', () => {
            console.log('تم الاتصال بخادم SMPP');
            this.bind();
        });

        this.session.on('error', (error) => {
            console.error('خطأ في الاتصال:', error);
            this.reconnect();
        });

        this.session.on('close', () => {
            console.log('تم إغلاق الاتصال');
            this.cleanup();
            this.reconnect();
        });
    }

    bind() {
        this.session.bind_transceiver({
            system_id: this.config.system_id,
            password: this.config.password
        }, (pdu) => {
            if (pdu.command_status === 0) {
                console.log('تم الربط بنجاح بخادم SMPP');
                this.startKeepAlive();
            } else {
                console.error('فشل الربط:', pdu.command_status);
                this.session.close();
            }
        });
    }

    startKeepAlive() {
        this.keepAliveInterval = setInterval(() => {
            this.session.enquire_link({}, (pdu) => {
                if (pdu.command_status !== 0) {
                    console.error('فشل في الحفاظ على الاتصال:', pdu.command_status);
                }
            });
        }, 30000);
    }

    sendSMS(from, to, message) {
        return new Promise((resolve, reject) => {
            this.session.submit_sm({
                source_addr: from,
                destination_addr: to,
                short_message: message,
                data_coding: 0
            }, (pdu) => {
                if (pdu.command_status === 0) {
                    resolve(pdu.message_id);
                } else {
                    reject(new Error(`خطأ في SMPP: ${pdu.command_status}`));
                }
            });
        });
    }

    cleanup() {
        if (this.keepAliveInterval) {
            clearInterval(this.keepAliveInterval);
            this.keepAliveInterval = null;
        }
    }

    reconnect() {
        this.cleanup();
        setTimeout(() => {
            console.log('محاولة إعادة الاتصال...');
            this.connect();
        }, 5000);
    }
}

const client = new SMPPClient({
    host: 'your.ozeki.server',
    port: 2775,
    system_id: 'your_username',
    password: 'your_password'
});

client.sendSMS('12345', '+1234567890', 'مرحبًا من عميل SMPP الكامل!')
    .then(messageId => console.log('معرف الرسالة:', messageId))
    .catch(err => console.error('خطأ:', err));

يتضمن هذا التنفيذ معالجة الأخطاء، وإعادة الاتصال التلقائي، وإرسال الرسائل المعتمد على الوعود، مما يجعله مناسبًا لبيئات الإنتاج.

أفضل الممارسات لاستخدام SMPP API مع JavaScript
  • معالجة الأخطاء: قم بتنفيذ معالجة قوية للأخطاء لإدارة مشكلات الشبكة وأخطاء الخادم.
  • Async/Await: استخدم الوعود أو async/await لتحسين سير التحكم في العمليات غير المتزامنة.
  • تسلسل الرسائل: لإرسال رسائل SMS بكميات كبيرة، قم بتنفيذ قائمة انتظار لإدارة معدل الإرسال.
  • مراقبة الاتصال: راقب حالة الاتصال باستمرار وقم بتنفيذ منطق إعادة الاتصال التلقائي.
  • ترميز الأحرف: تعامل مع ترميزات الأحرف المختلفة (مثل GSM 7-bit، UCS-2) لدعم الرسائل الدولية.
الختام

لقد أظهر هذا الدليل الشامل كيفية تنفيذ عميل SMPP قوي باستخدام JavaScript و Node.js للتفاعل مع SMPP API وبوابة Ozeki SMS. بدءًا من إعداد الاتصال وحتى إرسال الرسائل القصيرة ومعالجة تقارير التسليم، توضح الأمثلة المقدمة التطبيقات العملية لحزمة smpp. لحالات الاستخدام المتقدمة، ضع في اعتبارك استكشاف ميزات مثل دمج الرسائل، ومخططات الترميز المتقدمة، والتسجيل لتطبيقات الإنتاج.

لمزيد من التفاصيل حول بروتوكول SMPP أو بوابة Ozeki SMS، قم بزيارة الوثائق الرسمية أو اتصل بمزود بوابة الرسائل القصيرة الخاص بك.

More information