Sådan sendes en SMS i Node.js via SMPP Gateway

Introduktion

SMPP (Short Message Peer-to-Peer) er en protokol, der anvendes af telekommunikationsindustrien. Det udveksler SMS-beskeder mellem (SMSC) og ESME. SMSC fungerer som mellemmand for at gemme meddelelsen og dirigere den. ESME er det system, der leverer SMS til SMSC.

Denne tutorial hjælper dig med at sende SMS-beskeder ved hjælp af din egen SMSC-gateway.

Kom godt i gang

Hvor bruges SMPP?

SMPP er især velegnet til sms-applikationer med høj lydstyrke og høj kapacitet. Det har følgende funktioner:

  • Forbindelser oprettet af klienten med serveren er vedvarende og kan holdes åben på ubestemt tid. Der er ikke forbindelsesoverhead med protokoller som HTTP, der bruger forbigående forbindelser.
  • Anmodninger kan udstedes af SMPP-klienten såvel som SMPP-serveren.
  • Anmodninger behandles asynkront. Det betyder, at anmodninger kan udstedes uden først at skulle vente på, at svar på tidligere anmodninger modtages.

Brugsvejledning

Vi bruger Node.js node-smpp til implementeringen.

SMPP-anmodninger:

  • bind anmodning for at etablere SMPP-sessionen
  • send_sm anmodninger fra klienten om at sende beskeder til en mobiltelefon
  • leverer_sm- anmodninger fra serveren om at videresende meddelelser fra mobiltelefonen til klienten, inklusive leveringskvitteringer
  • enquire_link anmodninger udstedt af både serveren og klienten for at holde SMPP-sessionen i live
  • frigøre anmodning fra enten serveren eller klienten om at afslutte SMPP-sessionen

Hvordan det virker

Der skal oprettes en SMPP-session mellem ESME (eksterne kortmeddelelsesenheder) og Message Center eller SMPP Routing Entity, hvor det er relevant.

Denne session oprettes ved hjælp af en SMPP-klient, der kommunikerer med en SMPP-protokol. Der er en løbende udveksling af SMPP PDU (Protocol Data Units or Packets) for at sikre, at der oprettes en korrekt binding / forbindelse.

SMPP-klienten tager sig af SMS'en og leverer dem til SMPP-serveren. SMPP-serveren sender også en leveringsrapport tilbage til klienten, når der er en statusændring for en SMS.

Node.js hjælper os med at opnå høj MPS, da den udfører alle I / O-operationer asynkront.

Traditionelt kører I / O-operationer enten synkront (blokering) eller asynkront ved at gyde parallelle tråde for at udføre arbejdet.

Denne gamle tilgang bruger meget hukommelse og er notorisk vanskelig at programmere.

I modsætning hertil, når en Node-applikation skal udføre en I / O-handling, sender den en asynkron opgave til begivenhedssløjfen sammen med en tilbagekaldsfunktion. Derefter fortsætter den med at udføre resten af ​​sit program.

Når asynkroniseringen er afsluttet, vender begivenhedssløjfen tilbage til opgaven for at udføre sit tilbagekald.

Gem og videresend beskedstilstand

Den konventionelle tilgang til SMS har været at gemme meddelelsen i et SMSC-lagerområde (f.eks. Meddelelsesdatabase), inden meddelelsen videresendes til levering til modtagerens SMV. Med denne model forbliver meddelelsen sikkert, indtil SMSC har foretaget alle leveringsforsøg. Denne beskedtilstand kaldes ofte "gemme og videresende".

Trin 1: Opret SMPP-session

I starten er vi nødt til at oprette en ny smppsession med IP-adresse og port.

const smpp = require('smpp'); const session = new smpp.Session({host: '0.0.0.0', port: 9500});

Trin 2: Bind transceiver

Så snart det forbinder, binder vi det på connectbegivenheden:

let isConnected = false session.on('connect', () => { isConnected = true; session.bind_transceiver({ system_id: 'USER_NAME', password: 'USER_PASSWORD', interface_version: 1, system_type: '380666000600', address_range: '+380666000600', addr_ton: 1, addr_npi: 1, }, (pdu) => { if (pdu.command_status == 0) { console.log('Successfully bound') } }) }) session.on('close', () => { console.log('smpp is now disconnected') if (isConnected) { session.connect(); //reconnect again } }) session.on('error', error => { console.log('smpp error', error) isConnected = false; });

Trin 3: Send SMS

Så nu er vi forbundet, lad os sende SMS:

function sendSMS(from, to, text) { from = `+${from}` // this is very important so make sure you have included + sign before ISD code to send sms to = `+${to}` session.submit_sm({ source_addr: from, destination_addr: to, short_message: text }, function(pdu) { if (pdu.command_status == 0) { // Message successfully sent console.log(pdu.message_id); } }); }

Efter afsendelse af SMS'en sender SMSC leveringsrapporten om, at meddelelsen er leveret.

Jeg håber, du finder denne tutorial nyttig. Du er velkommen til at kontakte, hvis du har spørgsmål.

Yderligere læsning:

Hvis du gerne vil vide mere om SMPP, skal du tjekke: //opensmpp.org/specifications.html

Tøv ikke med at klappe, hvis du betragter dette som en god læsning!

Følg Shailesh Shekhawat for at få besked, når jeg offentliggør et nyt indlæg.

Oprindeligt offentliggjort på 101node.io den 16. september 2018.