Hogyan küldjünk SMS-t az SMPP API-n keresztül Javascript/Node.js segítségével

A Short Message Peer-to-Peer (SMPP) API egy széles körben elterjedt protokoll SMS-üzenetek cseréjére SMS-entitások között. JavaScript/Node.JS fejlesztők számára, akik az Ozeki SMS Gateway-vel dolgoznak, ez az útmutató bemutatja, hogyan implementálható az SMPP protokoll Node.js segítségével, gyakorlati példákkal a kapcsolatkezelésre és az üzenetküldésre.

SMPP API kliens beállítása JavaScriptben (Node.js) SMS küldéshez

Ahhoz, hogy SMS-t küldhess az SMPP API-n keresztül, először Ozeki SMS Gateway SMPP szerverével.

Miután ez megvan, használhatod az smpp csomagot az npm-ből az SMPP protokoll műveletek kezelésére:

npm install smpp

Alapvető kapcsolat beállítása

Íme, hogyan állíthatsz be egy SMPP kapcsolatot Node.js-ben:

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

session.on('connect', () => {
    console.log('Csatlakozva az SMPP szerverhez');
    
    session.bind_transceiver({
        system_id: 'your_username',
        password: 'your_password'
    }, (pdu) => {
        if (pdu.command_status === 0) {
            console.log('Sikeresen kötve az SMPP szerverhez');
        } else {
            console.error('A kötés sikertelen:', pdu.command_status);
        }
    });
});

session.on('error', (error) => {
    console.error('SMPP kapcsolati hiba:', error);
});

SMPP API kapcsolatok kezelése Node.js-ben SMS üzenetküldéshez

Az SMPP kapcsolatokhoz keep-alive üzenetek szükségesek a munkamenet fenntartásához:

// enquire_link küldése 30 másodpercenként
const keepAliveInterval = setInterval(() => {
    session.enquire_link({}, (pdu) => {
        if (pdu.command_status !== 0) {
            console.error('Keep-alive sikertelen:', pdu.command_status);
        }
    });
}, 30000);

// Munkamenet lezárásának kezelése
session.on('close', () => {
    clearInterval(keepAliveInterval);
    console.log('SMPP kapcsolat lezárva');
});

SMS küldése JavaScript segítségével az SMPP API-n keresztül (Node.js példa)

Az SMS küldéséhez a submit_sm PDU használata:

function sendSMS(from, to, message) {
    session.submit_sm({
        source_addr: from,
        destination_addr: to,
        short_message: message,
        data_coding: 0, // GSM 7-bit kódolás
        source_addr_ton: 1, // Nemzetközi formátum
        source_addr_npi: 1, // ISDN számozási terv
        dest_addr_ton: 1,  // Nemzetközi formátum
        dest_addr_npi: 1    // ISDN számozási terv
    }, (pdu) => {
        if (pdu.command_status === 0) {
            console.log(`Üzenet sikeresen elküldve, message_id: ${pdu.message_id}`);
        } else {
            console.error('Üzenetküldés sikertelen:', pdu.command_status);
        }
    });
}

// Példa használatra
sendSMS('12345', '+1234567890', 'Helló a Node.js SMPP kliensről!');

SMS kézbesítési jelentések kezelése JavaScriptben az SMPP API segítségével

Kézbesítési értesítések fogadásához:

session.on('pdu', (pdu) => {
    if (pdu.command === 'deliver_sm') {
        const messageId = pdu.receipted_message_id;
        const status = pdu.message_state;
        
        console.log(`Kézbesítési jelentés a(z) ${messageId} azonosítójú üzenethez: ${status}`);
        
        // Válasz küldése
        session.deliver_sm_resp({
            sequence_number: pdu.sequence_number
        });
    }
});

Teljes SMPP API kliens implementáció JavaScriptben (Node.js) SMS küldéshez

Itt egy teljes implementáció hibakezeléssel és újrakapcsolódással:

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('Csatlakozva az SMPP szerverhez');
            this.bind();
        });

        this.session.on('error', (error) => {
            console.error('Kapcsolati hiba:', error);
            this.reconnect();
        });

        this.session.on('close', () => {
            console.log('Kapcsolat lezárva');
            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('Sikeresen kötve az SMPP szerverhez');
                this.startKeepAlive();
            } else {
                console.error('Kötés sikertelen:', pdu.command_status);
                this.session.close();
            }
        });
    }

    startKeepAlive() {
        this.keepAliveInterval = setInterval(() => {
            this.session.enquire_link({}, (pdu) => {
                if (pdu.command_status !== 0) {
                    console.error('Keep-alive sikertelen:', 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 hiba: ${pdu.command_status}`));
                }
            });
        });
    }

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

    reconnect() {
        this.cleanup();
        setTimeout(() => {
            console.log('Újrakapcsolódás megkísérlése...');
            this.connect();
        }, 5000);
    }
}

// Példa használatra
const client = new SMPPClient({
    host: 'your.ozeki.server',
    port: 2775,
    system_id: 'your_username',
    password: 'your_password'
});

client.sendSMS('12345', '+1234567890', 'Helló a teljes SMPP kliensről!')
    .then(messageId => console.log('Üzenet azonosító:', messageId))
    .catch(err => console.error('Hiba:', err));

Hibakezelés és ajánlott eljárások

  • Mindig implementálj megfelelő hibakezelést hálózati problémákra
  • Használj promise-okat/async-await-et a jobb folyamatvezérlés érdekében
  • Implementálj üzenetsorolást nagy mennyiségű küldéshez
  • Figyeld a kapcsolat állapotát és implementálj automatikus újrakapcsolódást
  • Kezeld megfelelően a különböző karakterkódolásokat

Összegzés

Ez az útmutató bemutatta, hogyan implementálhatsz egy SMPP klienst JavaScript/Node.JS segítségével az Ozeki SMS Gateway-vel való együttműködéshez. A teljes példa tartalmazza a kapcsolatkezelést, az üzenetküldést és a kézbesítési jelentések kezelését. Az smpp csomag használatával az alkalmazás logikájára koncentrálhatsz, miközben a könyvtár kezeli az alacsony szintű protokoll részleteket.

Éles környezetben érdemes további funkciókat implementálni, mint például üzenetsorolás, megfelelő naplózás és monitorozás. Az SMPP protokoll számos fejlett funkciót támogat, mint például üzenetösszefűzés és különböző kódolási sémák, amelyeket tovább lehet vizsgálni, ahogy az igényeid nőnek.

More information