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.