Jak posílat SMS přes SMPP API pomocí Javascriptu/Node.js

Short Message Peer-to-Peer (SMPP) API je robustní a široce používaný protokol pro odesílání a přijímání SMS zpráv mezi Short Message Service Centry (SMSC) a externími entitami pro krátké zprávy (ESME). Pro vývojáře využívající JavaScript a Node.js umožňuje integrace SMPP API s nástroji jako Ozeki SMS Gateway bezproblémovou SMS komunikaci. Tento průvodce poskytuje podrobný návod, jak nastavit SMPP klienta, spravovat připojení, odesílat SMS a zpracovávat doručovací zprávy pomocí JavaScriptu a Node.js, včetně praktických příkladů kódu.

Proč používat SMPP API s JavaScriptem?

SMPP protokol je výkonnou volbou pro SMS komunikaci díky své spolehlivosti, škálovatelnosti a podpoře vysokoobjemového zasílání zpráv. Použitím JavaScriptu a Node.js mohou vývojáři vytvářet efektivní, událostmi řízené aplikace, které se bezproblémově integrují s SMPP API. Balíček smpp, dostupný přes npm, zjednodušuje interakce s nízkou úrovní protokolu, což vývojářům umožňuje soustředit se na vytváření robustních SMS aplikací.

Nastavení SMPP API klienta v JavaScriptu (Node.js) pro odesílání SMS

Než budete moci odesílat SMS zprávy pomocí SMPP API, musíte nakonfigurovat uživatelský účet SMPP a připojit se k SMPP serveru, jako je například ten poskytovaný Ozeki SMS Gateway. Tato část vysvětluje, jak nastavit prostředí a navázat připojení pomocí JavaScriptu.

Krok 1: Instalace balíčku SMPP

Pro interakci s SMPP protokolem nainstalujte balíček smpp z npm, který poskytuje jednoduché rozhraní pro operace SMPP API v JavaScriptu.

npm install smpp

Krok 2: Navázání připojení

Níže je příklad, jak se připojit k SMPP serveru pomocí Node.js a balíčku smpp. Nahraďte your.ozeki.server, your_username, a your_password skutečnými údaji o serveru a přihlašovacími údaji.

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

session.on('connect', () => {
    console.log('Připojeno k SMPP serveru');
    
    session.bind_transceiver({
        system_id: 'your_username',
        password: 'your_password'
    }, (pdu) => {
        if (pdu.command_status === 0) {
            console.log('Úspěšně navázáno spojení s SMPP serverem');
        } else {
            console.error('Navázání spojení selhalo:', pdu.command_status);
        }
    });
});

session.on('error', (error) => {
    console.error('Chyba připojení SMPP:', error);
});

Ujistěte se, že je váš SMPP server dostupný a že jsou vaše přihlašovací údaje správné, abyste předešli problémům s připojením. Metoda bind_transceiver navazuje obousměrné připojení pro odesílání i přijímání SMS.

Správa připojení SMPP API v Node.js pro zasílání SMS

Udržování aktivní SMPP relace vyžaduje pravidelné odesílání keep-alive zpráv pomocí PDU enquire_link. Tím se zajistí, že připojení zůstane otevřené a reagující, zejména pro dlouho běžící aplikace.

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

session.on('close', () => {
    clearInterval(keepAliveInterval);
    console.log('SMPP připojení ukončeno');
});

Tento kód odesílá enquire_link každých 30 sekund, aby udržel relaci aktivní, a interval vymaže při ukončení připojení.

Odesílání SMS pomocí JavaScriptu přes SMPP API (příklad pro Node.js)

Po připojení můžete odesílat SMS zprávy pomocí PDU submit_sm. Následující funkce v JavaScriptu ukazuje, jak odeslat SMS pomocí 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ódování
        source_addr_ton: 1, // Mezinárodní formát
        source_addr_npi: 1, // ISDN číslovací plán
        dest_addr_ton: 1,  // Mezinárodní formát
        dest_addr_npi: 1    // ISDN číslovací plán
    }, (pdu) => {
        if (pdu.command_status === 0) {
            console.log(`Zpráva úspěšně odeslána, message_id: ${pdu.message_id}`);
        } else {
            console.error('Odeslání zprávy selhalo:', pdu.command_status);
        }
    });
}

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

Parametry data_coding, source_addr_ton a dest_addr_ton zajišťují správné kódování zprávy a formátování telefonního čísla. Upravte je podle svých požadavků.

Zpracování doručovacích zpráv SMS v JavaScriptu pomocí SMPP API

SMPP API podporuje doručovací zprávy pro potvrzení, zda byla SMS doručena. Následující kód zpracovává příchozí PDU deliver_sm pro zpracování 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(`Doručovací zpráva pro ${messageId}: ${status}`);
        
        session.deliver_sm_resp({
            sequence_number: pdu.sequence_number
        });
    }
});

Tento kód zaznamenává stav doručení a odpovídá serveru, aby potvrdil přijetí zprávy.

Kompletní implementace SMPP API klienta v JavaScriptu (Node.js) pro odesílání SMS

Pro produkční řešení následující třída JavaScript zapouzdřuje správu připojení, odesílání zpráv a logiku opětovného připojení pro 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('Připojeno k SMPP serveru');
            this.bind();
        });

        this.session.on('error', (error) => {
            console.error('Chyba připojení:', error);
            this.reconnect();
        });

        this.session.on('close', () => {
            console.log('Připojení ukončeno');
            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('Úspěšně navázáno spojení s SMPP serverem');
                this.startKeepAlive();
            } else {
                console.error('Navázání spojení selhalo:', pdu.command_status);
                this.session.close();
            }
        });
    }

    startKeepAlive() {
        this.keepAliveInterval = setInterval(() => {
            this.session.enquire_link({}, (pdu) => {
                if (pdu.command_status !== 0) {
                    console.error('Keep-alive selhal:', 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é připojení...');
            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 od kompletního SMPP klienta!')
    .then(messageId => console.log('ID zprávy:', messageId))
    .catch(err => console.error('Chyba:', err));

Tato implementace zahrnuje zpracování chyb, automatické opětovné připojení a odesílání zpráv založené na promisách, což ji činí vhodnou pro produkční prostředí.

Doporučené postupy pro používání SMPP API s JavaScriptem

  • Zpracování chyb: Implementujte robustní zpracování chyb pro správu síťových problémů a chyb serveru.
  • Async/Await: Pro lepší řízení toku v asynchronních operacích používejte promisy nebo async/await.
  • Fronta zpráv: Pro odesílání SMS ve vysokém objemu implementujte frontu pro správu propustnosti zpráv.
  • Monitorování připojení: Průběžně monitorujte stav připojení a implementujte logiku automatického opětovného připojení.
  • Kódování znaků: Zpracujte různá kódování znaků (např. GSM 7-bit, UCS-2) pro podporu mezinárodních SMS.

Závěr

Tento komplexní průvodce ukázal, jak implementovat robustního SMPP klienta pomocí JavaScriptu a Node.js pro interakci s SMPP API a Ozeki SMS Gateway. Od nastavení připojení přes odesílání SMS až po zpracování doručených zpráv, poskytnuté příklady demonstrují praktické aplikace balíčku smpp. Pro pokročilé případy použití zvažte prozkoumání funkcí jako spojování zpráv, pokročilá schémata kódování a logování pro produkční aplikace.

Pro další podrobnosti o SMPP protokolu nebo Ozeki SMS Gateway navštivte oficiální dokumentaci nebo kontaktujte svého poskytovatele SMS brány.

More information