Jak wysyłać SMS-y przez SMPP API za pomocą Javascript/Node.js
Short Message Peer-to-Peer (SMPP) API to szeroko stosowany protokół do wymiany wiadomości SMS między podmiotami SMS. Dla programistów JavaScript/Node.JS pracujących z Ozeki SMS Gateway, ten przewodnik wyjaśnia, jak zaimplementować interakcje z protokołem SMPP za pomocą Node.js, wraz z praktycznymi przykładami zarządzania połączeniami i wysyłania wiadomości.
Konfiguracja klienta SMPP API w JavaScript (Node.js) do wysyłania SMS
Aby wysyłać SMS-y przez SMPP API, najpierw musisz skonfigurować użytkownika SMPP, a następnie powiązać swojego klienta z serwerem SMPP Ozeki SMS Gateway.
Po wykonaniu tych czynności możesz użyć pakietu smpp
z npm do obsługi operacji protokołu SMPP:
npm install smpp
Podstawowa konfiguracja połączenia
Oto jak nawiązać połączenie SMPP w Node.js:
const smpp = require('smpp'); const session = smpp.connect({ host: 'your.ozeki.server', port: 2775 }); session.on('connect', () => { console.log('Połączono z serwerem SMPP'); session.bind_transceiver({ system_id: 'your_username', password: 'your_password' }, (pdu) => { if (pdu.command_status === 0) { console.log('Pomyślnie powiązano z serwerem SMPP'); } else { console.error('Błąd powiązania:', pdu.command_status); } }); }); session.on('error', (error) => { console.error('Błąd połączenia SMPP:', error); });
Zarządzanie połączeniami SMPP API w Node.js do wysyłania wiadomości SMS
Połączenia SMPP wymagają wiadomości keep-alive do utrzymania sesji:
// Wysyłaj enquire_link co 30 sekund const keepAliveInterval = setInterval(() => { session.enquire_link({}, (pdu) => { if (pdu.command_status !== 0) { console.error('Błąd keep-alive:', pdu.command_status); } }); }, 30000); // Obsługa zamknięcia sesji session.on('close', () => { clearInterval(keepAliveInterval); console.log('Połączenie SMPP zamknięte'); });
Wysyłanie SMS-ów za pomocą JavaScript przez SMPP API (przykład Node.js)
Aby wysłać SMS za pomocą PDU submit_sm
:
function sendSMS(from, to, message) { session.submit_sm({ source_addr: from, destination_addr: to, short_message: message, data_coding: 0, // Kodowanie GSM 7-bitowe source_addr_ton: 1, // Format międzynarodowy source_addr_npi: 1, // Plan numeracji ISDN dest_addr_ton: 1, // Format międzynarodowy dest_addr_npi: 1 // Plan numeracji ISDN }, (pdu) => { if (pdu.command_status === 0) { console.log(`Wiadomość wysłana pomyślnie, message_id: ${pdu.message_id}`); } else { console.error('Błąd wysyłania wiadomości:', pdu.command_status); } }); } // Przykład użycia sendSMS('12345', '+1234567890', 'Witaj z klienta SMPP Node.js!');
Obsługa raportów dostarczenia SMS w JavaScript za pomocą SMPP API
Aby odbierać powiadomienia o dostarczeniu:
session.on('pdu', (pdu) => { if (pdu.command === 'deliver_sm') { const messageId = pdu.receipted_message_id; const status = pdu.message_state; console.log(`Raport dostarczenia dla ${messageId}: ${status}`); // Wyślij odpowiedź session.deliver_sm_resp({ sequence_number: pdu.sequence_number }); } });Pełna implementacja klienta SMPP API w JavaScript (Node.js) do wysyłania SMS
Oto kompletna implementacja z obsługą błędów i ponownym łączem:
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('Połączono z serwerem SMPP'); this.bind(); }); this.session.on('error', (error) => { console.error('Błąd połączenia:', error); this.reconnect(); }); this.session.on('close', () => { console.log('Połączenie zamknięte'); 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('Pomyślnie połączono z serwerem SMPP'); this.startKeepAlive(); } else { console.error('Błąd połączenia:', pdu.command_status); this.session.close(); } }); } startKeepAlive() { this.keepAliveInterval = setInterval(() => { this.session.enquire_link({}, (pdu) => { if (pdu.command_status !== 0) { console.error('Błąd keep-alive:', 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(`Błąd SMPP: ${pdu.command_status}`)); } }); }); } cleanup() { if (this.keepAliveInterval) { clearInterval(this.keepAliveInterval); this.keepAliveInterval = null; } } reconnect() { this.cleanup(); setTimeout(() => { console.log('Próba ponownego połączenia...'); this.connect(); }, 5000); } } // Przykład użycia const client = new SMPPClient({ host: 'your.ozeki.server', port: 2775, system_id: 'your_username', password: 'your_password' }); client.sendSMS('12345', '+1234567890', 'Witaj od kompletnego klienta SMPP!') .then(messageId => console.log('ID wiadomości:', messageId)) .catch(err => console.error('Błąd:', err));
Obsługa błędów i najlepsze praktyki
- Zawsze implementuj właściwą obsługę błędów dla problemów z siecią
- Używaj obietnic/async-await dla lepszej kontroli przepływu
- Zaimplementuj kolejkowanie wiadomości dla wysyłania dużych ilości
- Monitoruj stan połączenia i zaimplementuj automatyczne ponowne łączenie
- Prawidłowo obsługuj różne kodowania znaków
Podsumowanie
Ten przewodnik pokazał, jak zaimplementować klienta SMPP w JavaScript/Node.JS do pracy z Ozeki SMS Gateway. Kompletny przykład zawiera zarządzanie połączeniem, wysyłanie wiadomości i obsługę raportów dostawy. Korzystając z pakietu smpp, możesz skupić się na logice aplikacji, podczas gdy biblioteka zajmuje się szczegółami protokołu niskiego poziomu.
Do użytku produkcyjnego rozważ zaimplementowanie dodatkowych funkcji, takich jak kolejkowanie wiadomości, właściwe logowanie i monitorowanie. Protokół SMPP obsługuje wiele zaawansowanych funkcji, takich jak łączenie wiadomości i różne schematy kodowania, które można eksplorować w miarę wzrostu potrzeb.
More information
- Jak skonfigurować połączenie klienta SMPP API z Twoim SMSC
- Jak skonfigurować serwer SMPP API do wysyłania i odbierania SMS z wielu aplikacji
- Jak wybrać odpowiedniego dostawcę SMPP API dla Twojej firmy
- Jak wysyłać SMS za pomocą SMPP API na poziomie protokołu
- Jak wysyłać SMS przez SMPP API używając Pythona
- Jak wysyłać SMS przez SMPP API używając Javascript
- Jak wysyłać SMS przez SMPP API używając Java
- Jak wysyłać SMS przez SMPP API używając PHP
- Jak wysyłać SMS-y przez SMPP API za pomocą C#
- Jak wysyłać SMS przez SMPP API używając C/Cpp
- Jak odbierać SMS za pomocą SMPP API
- Jak odebrać raport dostarczenia SMS za pomocą SMPP API
- FAQ SMPP API