Ako posielať SMS cez SMPP API pomocou Javascriptu/Node.js

Short Message Peer-to-Peer (SMPP) API je robustný a široko používaný protokol na odosielanie a prijímanie SMS správ medzi Short Message Service Centers (SMSCs) a External Short Messaging Entities (ESMEs). Pre vývojárov využívajúcich JavaScript a Node.js, integrácia SMPP API s nástrojmi ako Ozeki SMS Gateway umožňuje bezproblémovú SMS komunikáciu. Tento sprievodca poskytuje podrobný návod na nastavenie SMPP klienta, správu pripojení, odosielanie SMS a spracovanie správ o doručení pomocou JavaScriptu a Node.js, vrátane praktických príkladov kódu.

Prečo používať SMPP API s JavaScriptom?

SMPP protokol je výkonná voľba pre SMS komunikáciu vďaka svojej spoľahlivosti, škálovateľnosti a podpore pre vysokoobjemové zasielanie správ. Použitím JavaScriptu a Node.js môžu vývojári vytvárať efektívne, udalosťami riadené aplikácie, ktoré sa bezproblémovo integrujú s SMPP API. Balík smpp, dostupný cez npm, zjednodušuje interakcie s nízkou úrovňou protokolu, čo umožňuje vývojárom sústrediť sa na vytváranie robustných SMS aplikácií.

Nastavenie SMPP API klienta v JavaScripte (Node.js) na odosielanie SMS

Predtým, ako môžete odosielať SMS správy pomocou SMPP API, musíte nakonfigurovať používateľský účet SMPP a pripojiť sa k SMPP serveru, ako je napríklad ten poskytovaný Ozeki SMS Gateway. Táto časť vysvetľuje, ako nastaviť prostredie a nadviazať pripojenie pomocou JavaScriptu.

Krok 1: Inštalácia balíka SMPP

Pre interakciu s protokolom SMPP nainštalujte balík smpp z npm, ktorý poskytuje jednoduché rozhranie pre operácie SMPP API v JavaScripte.

npm install smpp

Krok 2: Nadviazanie pripojenia

Nižšie je príklad, ako sa pripojiť k SMPP serveru pomocou Node.js a balíka smpp. Nahraďte your.ozeki.server, your_username, a your_password skutočnými údajmi servera a prihlasovacími údajmi.

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

session.on('connect', () => {
    console.log('Pripojené k SMPP serveru');
    
    session.bind_transceiver({
        system_id: 'your_username',
        password: 'your_password'
    }, (pdu) => {
        if (pdu.command_status === 0) {
            console.log('Úspešne pripojené k SMPP serveru');
        } else {
            console.error('Pripojenie zlyhalo:', pdu.command_status);
        }
    });
});

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

Uistite sa, že váš SMPP server je dostupný a vaše prihlasovacie údaje sú správne, aby ste sa vyhli problémom s pripojením. Metóda bind_transceiver nadväzuje obojsmerné pripojenie pre odosielanie aj prijímanie SMS.

Správa pripojení SMPP API v Node.js pre SMS správu

Udržiavanie aktívnej SMPP relácie vyžaduje periodické odosielanie keep-alive správ pomocou PDU enquire_link. Toto zabezpečuje, že pripojenie zostáva otvorené a responzívne, najmä pre dlhotrvajúce aplikácie.

const keepAliveInterval = setInterval(() => {
    session.enquire_link({}, (pdu) => {
        if (pdu.command_status !== 0) {
            console.error('Keep-alive zlyhal:', pdu.command_status);
        }
    });
}, 30000);

session.on('close', () => {
    clearInterval(keepAliveInterval);
    console.log('SMPP pripojenie uzavreté');
});

Tento kód odosiela enquire_link každých 30 sekúnd, aby udržal reláciu aktívnu, a vymaže interval pri uzavretí pripojenia.

Odosielanie SMS s JavaScriptom cez SMPP API (Príklad pre Node.js)

Po pripojení môžete odosielať SMS správy pomocou PDU submit_sm. Nasledujúca funkcia v JavaScripte demonštruje, ako odoslať SMS pomocou SMPP API.

function sendSMS(from, to, message) {
    session.submit_sm({
        source_addr: from,
        destination_addr: to,
        short_message: message,
        data_coding: 0, // GSM 7-bit kódovanie
        source_addr_ton: 1, // Medzinárodný formát
        source_addr_npi: 1, // ISDN číslovací plán
        dest_addr_ton: 1,  // Medzinárodný formát
        dest_addr_npi: 1    // ISDN číslovací plán
    }, (pdu) => {
        if (pdu.command_status === 0) {
            console.log(`Správa úspešne odoslaná, message_id: ${pdu.message_id}`);
        } else {
            console.error('Odoslanie správy zlyhalo:', pdu.command_status);
        }
    });
}

sendSMS('12345', '+1234567890', 'Ahoj z Node.js SMPP klienta!');

Parametre data_coding, source_addr_ton a dest_addr_ton zabezpečujú správne kódovanie správy a formátovanie telefónneho čísla. Upravte ich podľa vašich požiadaviek.

Spracovanie správ o doručení SMS v JavaScripte pomocou SMPP API

SMPP API podporuje správy o doručení na potvrdenie, či bola SMS doručená. Nasledujúci kód spracováva prichádzajúce PDU deliver_sm na spracovanie oznámení o doručení.

session.on('pdu', (pdu) => {
    if (pdu.command === 'deliver_sm') {
        const messageId = pdu.receipted_message_id;
        const status = pdu.message_state;
        
        console.log(`Správa o doručení pre ${messageId}: ${status}`);
        
        session.deliver_sm_resp({
            sequence_number: pdu.sequence_number
        });
    }
});

Tento kód zaznamenáva stav doručenia a odpovedá serveru na potvrdenie prijatia správy o doručení.

Kompletná implementácia SMPP API klienta v JavaScripte (Node.js) pre odosielanie SMS

Pre produkčne pripravené riešenie, nasledujúca trieda v JavaScripte zahŕňa správu pripojenia, odosielanie správ a logiku opätovného pripojenia pre 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('Pripojené k SMPP serveru');
            this.bind();
        });

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

        this.session.on('close', () => {
            console.log('Pripojenie ukončené');
            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('Úspešne pripojené k SMPP serveru');
                this.startKeepAlive();
            } else {
                console.error('Pripojenie zlyhalo:', pdu.command_status);
                this.session.close();
            }
        });
    }

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

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

    reconnect() {
        this.cleanup();
        setTimeout(() => {
            console.log('Pokus o opätovné pripojenie...');
            this.connect();
        }, 5000);
    }
}

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

client.sendSMS('12345', '+1234567890', 'Ahoj z kompletného SMPP klienta!')
    .then(messageId => console.log('ID správy:', messageId))
    .catch(err => console.error('Chyba:', err));

Táto implementácia zahŕňa spracovanie chýb, automatické opätovné pripojenie a odosielanie správ založené na promises, čo ju robí vhodnou pre produkčné prostredia.

Najlepšie postupy pre používanie SMPP API s JavaScriptom
  • Spracovanie chýb: Implementujte robustné spracovanie chýb pre správu sieťových problémov a chýb servera.
  • Async/Await: Použite promises alebo async/await pre lepšiu kontrolu toku v asynchrónnych operáciách.
  • Fronta správ: Pre odosielanie SMS vo veľkom objeme implementujte frontu na správu priepustnosti správ.
  • Monitorovanie pripojenia: Priebežne monitorujte stav pripojenia a implementujte logiku automatického opätovného pripojenia.
  • Kódovanie znakov: Spracujte rôzne kódovania znakov (napr. GSM 7-bit, UCS-2) pre podporu medzinárodných SMS.
Záver

Tento komplexný sprievodca ukázal, ako implementovať robustného SMPP klienta pomocou JavaScriptu a Node.js pre interakciu s SMPP API a Ozeki SMS Gateway. Od nastavenia pripojenia po odosielanie SMS a spracovanie správ o doručení, poskytnuté príklady demonštrujú praktické aplikácie balíka smpp. Pre pokročilé prípady použitia zvážte preskúmanie funkcií ako zreťazenie správ, pokročilé schémy kódovania a logovanie pre produkčné aplikácie.

Pre ďalšie podrobnosti o SMPP protokole alebo Ozeki SMS Gateway navštívte oficiálnu dokumentáciu alebo kontaktujte vášho poskytovateľa SMS brány.

More information