Kako poslati SMS putem SMPP API-ja koristeći Javascript/Node.js
Short Message Peer-to-Peer (SMPP) API je robustan i široko korišten protokol za slanje i primanje SMS poruka između Short Message Service Centara (SMSC) i External Short Messaging Entities (ESME). Za programere koji koriste JavaScript i Node.js, integracija SMPP API-ja s alatima poput Ozeki SMS Gateway-a omogućuje nesmetanu SMS komunikaciju. Ovaj vodič pruža korak-po-korak tutorial o postavljanju SMPP klijenta, upravljanju vezama, slanju SMS-a i rukovanju izvješćima o isporuci koristeći JavaScript i Node.js, zajedno s praktičnim primjerima koda.
Zašto koristiti SMPP API s JavaScript-om?
SMPP protokol je moćan izbor za SMS komunikaciju zbog svoje pouzdanosti,
skalabilnosti i podrške za velike količine poruka. Korištenjem JavaScript-a
i Node.js-a, programeri mogu stvoriti učinkovite, događajima vođene aplikacije koje se besprijekorno integriraju
s SMPP API-jem. Paket smpp, dostupan
putem npm-a, pojednostavljuje interakcije s niskorazinskim protokolom, omogućujući programerima
da se usredotoče na izgradnju robusnih SMS aplikacija.
Postavljanje SMPP API klijenta u JavaScript-u (Node.js) za slanje SMS-a
Prije nego što možete slati SMS poruke koristeći SMPP API, morate konfigurirati SMPP korisnički račun i spojiti se na SMPP poslužitelj, kao što je onaj koji nudi Ozeki SMS Gateway. Ovaj odjeljak objašnjava kako postaviti okruženje i uspostaviti vezu koristeći JavaScript.
Korak 1: Instalirajte SMPP paket
Za interakciju s SMPP protokolom, instalirajte paket smpp iz
npm-a, koji pruža jednostavno sučelje za operacije SMPP API-ja
u JavaScript-u.
npm install smpp
Korak 2: Uspostavite vezu
Ispod je primjer kako se spojiti na SMPP poslužitelj koristeći Node.js i
paket smpp. Zamijenite your.ozeki.server, your_username,
i your_password svojim stvarnim podacima poslužitelja i vjerodajnicama.
const smpp = require('smpp');
const session = smpp.connect({
host: 'your.ozeki.server',
port: 2775
});
session.on('connect', () => {
console.log('Spojeno na SMPP poslužitelj');
session.bind_transceiver({
system_id: 'your_username',
password: 'your_password'
}, (pdu) => {
if (pdu.command_status === 0) {
console.log('Uspješno povezano s SMPP poslužiteljem');
} else {
console.error('Povezivanje nije uspjelo:', pdu.command_status);
}
});
});
session.on('error', (error) => {
console.error('Greška u SMPP vezi:', error);
});
Osigurajte da je vaš SMPP poslužitelj dostupan i da su vaše vjerodajnice točne kako biste izbjegli
probleme s vezom. Metoda bind_transceiver uspostavlja dvosmjernu
vezu za slanje i primanje SMS-a.
Upravljanje SMPP API vezama u Node.js-u za SMS poruke
Održavanje aktivne SMPP sesije zahtijeva slanje periodičnih keep-alive poruka
koristeći enquire_link PDU. Ovo osigurava da veza ostane otvorena
i responzivna, posebno za dugotrajne aplikacije.
const keepAliveInterval = setInterval(() => {
session.enquire_link({}, (pdu) => {
if (pdu.command_status !== 0) {
console.error('Keep-alive nije uspio:', pdu.command_status);
}
});
}, 30000);
session.on('close', () => {
clearInterval(keepAliveInterval);
console.log('SMPP veza zatvorena');
});
Ovaj kod šalje enquire_link svakih 30 sekundi kako bi održao sesiju
aktivnom i briše interval kada se veza zatvori.
Slanje SMS-a s JavaScript-om putem SMPP API-ja (Node.js primjer)
Nakon što ste spojeni, možete slati SMS poruke koristeći submit_sm PDU.
Sljedeća JavaScript funkcija pokazuje kako poslati SMS s
SMPP API-jem.
function sendSMS(from, to, message) {
session.submit_sm({
source_addr: from,
destination_addr: to,
short_message: message,
data_coding: 0, // GSM 7-bit kodiranje
source_addr_ton: 1, // Međunarodni format
source_addr_npi: 1, // ISDN plan numeriranja
dest_addr_ton: 1, // Međunarodni format
dest_addr_npi: 1 // ISDN plan numeriranja
}, (pdu) => {
if (pdu.command_status === 0) {
console.log(`Poruka uspješno poslana, message_id: ${pdu.message_id}`);
} else {
console.error('Slanje poruke nije uspjelo:', pdu.command_status);
}
});
}
sendSMS('12345', '+1234567890', 'Pozdrav iz Node.js SMPP klijenta!');
Parametri data_coding, source_addr_ton i dest_addr_ton
osiguravaju pravilno kodiranje poruke i formatiranje telefonskog broja.
Prilagodite ove parametre prema svojim zahtjevima.
Rukovanje izvješćima o isporuci SMS-a u JavaScript-u koristeći SMPP API
SMPP API podržava izvješća o isporuci kako bi potvrdio je li SMS
isporučen. Sljedeći kod obrađuje dolazne deliver_sm
PDU-e kako bi obradio obavijesti o isporuci.
session.on('pdu', (pdu) => {
if (pdu.command === 'deliver_sm') {
const messageId = pdu.receipted_message_id;
const status = pdu.message_state;
console.log(`Izvješće o isporuci za ${messageId}: ${status}`);
session.deliver_sm_resp({
sequence_number: pdu.sequence_number
});
}
});
Ovaj kod bilježi status isporuke i odgovara poslužitelju kako bi potvrdio primljeno izvješće.
Kompletna implementacija SMPP API klijenta u JavaScriptu (Node.js) za slanje SMS-aZa produkcijsko rješenje, sljedeća JavaScript klasa obuhvaća upravljanje vezom, slanje poruka i logiku ponovnog povezivanja za 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('Povezan s SMPP serverom');
this.bind();
});
this.session.on('error', (error) => {
console.error('Greška u vezi:', error);
this.reconnect();
});
this.session.on('close', () => {
console.log('Veza zatvorena');
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('Uspješno povezan s SMPP serverom');
this.startKeepAlive();
} else {
console.error('Povezivanje nije uspjelo:', pdu.command_status);
this.session.close();
}
});
}
startKeepAlive() {
this.keepAliveInterval = setInterval(() => {
this.session.enquire_link({}, (pdu) => {
if (pdu.command_status !== 0) {
console.error('Keep-alive nije uspio:', 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 greška: ${pdu.command_status}`));
}
});
});
}
cleanup() {
if (this.keepAliveInterval) {
clearInterval(this.keepAliveInterval);
this.keepAliveInterval = null;
}
}
reconnect() {
this.cleanup();
setTimeout(() => {
console.log('Pokušaj ponovnog povezivanja...');
this.connect();
}, 5000);
}
}
const client = new SMPPClient({
host: 'your.ozeki.server',
port: 2775,
system_id: 'your_username',
password: 'your_password'
});
client.sendSMS('12345', '+1234567890', 'Pozdrav iz kompletnog SMPP klijenta!')
.then(messageId => console.log('ID poruke:', messageId))
.catch(err => console.error('Greška:', err));
Ova implementacija uključuje rukovanje greškama, automatsko ponovno povezivanje i slanje poruka temeljeno na obećanjima, što je čini prikladnom za produkcijska okruženja.
Najbolje prakse za korištenje SMPP API-ja s JavaScriptom
- Rukovanje greškama: Implementirajte robusno rukovanje greškama za upravljanje mrežnim problemima i greškama servera.
- Async/Await: Koristite obećanja ili async/await za bolji tok upravljanja u asinkronim operacijama.
- Red poruka: Za slanje velikog broja SMS-ova, implementirajte red za upravljanje propusnošću poruka.
- Praćenje veze: Kontinuirano pratite stanje veze i implementirajte logiku automatskog ponovnog povezivanja.
- Kodiranje znakova: Rukujte različitim kodiranjima znakova (npr. GSM 7-bit, UCS-2) kako biste podržali međunarodne SMS-ove.
Zaključak
Ovaj opsežan vodič pokazao je kako implementirati robustan SMPP klijent koristeći
JavaScript i Node.js za interakciju s SMPP API-jem
i Ozeki SMS Gatewayom. Od postavljanja veze do slanja SMS-ova i rukovanja izvješćima o isporuci,
navedeni primjeri demonstriraju praktične primjene paketa smpp. Za napredne slučajeve korištenja,
razmotrite istraživanje značajki kao što su spajanje poruka, napredne sheme kodiranja i bilježenje za aplikacije produkcijske razine.
Za dodatne pojedinosti o SMPP protokolu ili Ozeki SMS Gatewayu, posjetite službenu dokumentaciju ili kontaktirajte svog pružatelja SMS gateway usluga.