Kako poslati SMS putem SMPP API-ja koristeći Java
Short Message Peer-to-Peer (SMPP) API je moćan telekomunikacijski protokol dizajniran za razmjenu SMS poruka između Short Message Service Centara (SMSC) i External Short Messaging Entitija (ESME). Koristeći Java i SMPP API, programeri mogu izgraditi robusne aplikacije za učinkovito slanje i primanje SMS poruka. Ovaj sveobuhvatni vodič vodi vas kroz proces implementacije SMPP API-ja u Javi za povezivanje s Ozeki SMS Gateway-om, zajedno s praktičnim primjerima koda za upravljanje vezom, slanje poruka i rukovanje izvješćima o isporuci.
Zašto koristiti Java i SMPP API za SMS poruke?
Java je svestrani, platformski neovisni programski jezik široko korišten za
izgradnju aplikacija na razini poduzeća. Kada se upari s SMPP API-jem,
Java omogućuje programerima stvaranje skalabilnih SMS rješenja koja se besprijekorno integriraju
s SMS gateway-ima poput Ozeki. SMPP protokol je idealan za aplikacije s visokim protokom SMS
poruka zbog svoje pouzdanosti, podrške za masovno slanje poruka i
mogućnosti praćenja isporuke. Ovaj vodič koristi jSMPP
biblioteku,
čistu Java implementaciju SMPP protokola, kako bi pojednostavio razvoj.
Postavljanje Java SMPP API klijenta za slanje SMS poruka
Da biste počeli slati SMS poruke koristeći SMPP API u Javi,
morate postaviti SMPP korisnički račun na
Ozeki SMS Gateway-ov SMPP server i konfigurirati svoju
Java aplikaciju za povezivanje s njegovim SMPP serverom. jSMPP
biblioteka
je popularan izbor za Java programere zbog svoje sveobuhvatne podrške za
značajke SMPP protokola. U nastavku, opisujemo korake za postavljanje vašeg Java projekta.
Korak 1: Dodajte jSMPP ovisnost
Da biste koristili jSMPP
biblioteku u svom Java projektu, uključite sljedeću
Maven ovisnost u svoju pom.xml
datoteku:
<dependency> <groupId>org.jsmpp</groupId> <artifactId>jsmpp</artifactId> <version>2.3.10</version> </dependency>
Ova ovisnost pruža sve potrebne klase za implementaciju SMPP API-ja u Javi, uključujući upravljanje sesijom, kodiranje poruka i rukovanje potvrdama o isporuci.
Korak 2: Osnovni primjer SMPP veze
Povezivanje s SMPP serverom zahtijeva uspostavu sesije i povezivanje s
Ozeki SMS Gateway-om. Sljedeći Java kod pokazuje kako stvoriti jednostavnog
SMPP klijenta koristeći jSMPP
biblioteku:
import org.jsmpp.*; import org.jsmpp.bean.*; import org.jsmpp.session.*; public class SimpleSMPPClient { public static void main(String[] args) { SMPPSession session = new SMPPSession(); try { // Povežite se i povežite s Ozeki SMS Gateway-om session.connectAndBind( "your.ozeki.server", 2775, new BindParameter( BindType.BIND_TX, "your_username", "your_password", "cp", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, null) ); System.out.println("Uspješno povezan s SMPP serverom"); // Dodajte kod za slanje poruke ovdje } catch (Exception e) { System.err.println("Neuspješno povezivanje i povezivanje s SMPP serverom: " + e.getMessage()); } finally { session.unbindAndClose(); } } }
U ovom primjeru, zamijenite your.ozeki.server
, your_username
,
i your_password
sa stvarnim vjerodajnicama koje vam je dao vaš Ozeki
SMS Gateway administrator. BindType.BIND_TX
označava
transmitersko povezivanje, prikladno za slanje SMS poruka.
Upravljanje SMPP API vezama u Javi za pouzdanu isporuku SMS poruka
Pouzdana isporuka SMS poruka zahtijeva održavanje aktivne SMPP veze. SMPP protokol koristi keep-alive poruke (enquire_link PDU-e) kako bi osigurao da veza ostane aktivna. U nastavku je primjer kako konfigurirati postavke keep-alive-a i nadzirati promjene stanja sesije u Javi:
session.setEnquireLinkTimer(30000); // Šalji keep-alive svakih 30 sekundi session.setTransactionTimer(10000); // Postavi vremensko ograničenje transakcije na 10 sekundi // Dodajte osluškivač stanja sesije za nadzor session.addSessionStateListener(new SessionStateListener() { @Override public void onStateChange(SessionState newState, SessionState oldState, Session source) { System.out.println("Stanje SMPP sesije promijenjeno iz " + oldState + " u " + newState); } });
Ove postavke osiguravaju da veza ostane stabilna, a osluškivač stanja sesije pomaže vam nadzirati promjene, poput prekida veze, za robusno rukovanje greškama.
Slanje SMS-a putem Java SMPP API-ja
Nakon povezivanja, možete slati SMS poruke koristeći submit_sm
PDU.
Sljedeća Java metoda pokazuje kako poslati SMS koristeći SMPP
API u Javi:
public static void sendSMS(SMPPSession session, String sender, String recipient, String message) throws Exception { try { String messageId = session.submitShortMessage( "CMT", // Vrsta usluge TypeOfNumber.ALPHANUMERIC, // Izvorni TON NumberingPlanIndicator.UNKNOWN, // Izvorni NPI sender, // Adresa pošiljatelja TypeOfNumber.INTERNATIONAL, // Odredišni TON NumberingPlanIndicator.ISDN, // Odredišni NPI recipient, // Adresa primatelja new ESMClass(), // ESM klasa (byte)0, // ID protokola (byte)1, // Zastavica prioriteta null, // Vrijeme isporuke null, // Valjanost poruke new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE), // Potvrda isporuke (byte)0, // Zastavica zamjene new GeneralDataCoding(Alphabet.ALPHA_DEFAULT), // Kodiranje podataka (byte)0, // Zadani ID poruke message.getBytes() // Sadržaj poruke ); System.out.println("SMS poslan s ID-om poruke: " + messageId); } catch (PDUException e) { System.err.println("Nevažeći PDU parametar: " + e.getMessage()); throw e; } catch (ResponseTimeoutException e) { System.err.println("Vrijeme odgovora isteklo: " + e.getMessage()); throw e; } catch (InvalidResponseException e) { System.err.println("Nevažeći odgovor: " + e.getMessage()); throw e; } catch (NegativeResponseException e) { System.err.println("Primljen negativan odgovor: " + e.getMessage()); throw e; } catch (Exception e) { System.err.println("Slanje SMS-a nije uspjelo: " + e.getMessage()); throw e; } }
Ova metoda šalje SMS s omogućenim praćenjem potvrde isporuke.
Parametar RegisteredDelivery
osigurava da primate obavijesti
o statusu isporuke poruke.
Rukovanje izvješćima o isporuci SMS-a s Java i SMPP API-jem
Da biste pratili je li SMS uspješno isporučen, možete povezati svoju SMPP sesiju
kao transceiver (BindType.BIND_TRX
) i implementirati slušatelja za primanje
poruka. Ispod je primjer kako rukovati izvješćima o isporuci u Javi:
// Poveži se kao transceiver za slanje i primanje poruka BindParameter bindParam = new BindParameter( BindType.BIND_TRX, "vaše_korisničko_ime", "vaša_lozinka", "cp", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, null ); // Postavi slušatelja za primanje izvješća o isporuci session.setMessageReceiverListener(new MessageReceiverListener() { @Override public void onAcceptDeliverSm(DeliverSm deliverSm) { if (MessageType.SMSC_DEL_RECEIPT.containedIn(deliverSm.getEsmClass())) { DeliveryReceipt delReceipt = deliverSm.getShortMessageAsDeliveryReceipt(); System.out.println(String.format( "Primljeno izvješće o isporuci za poruku %s: %s", delReceipt.getId(), delReceipt.getFinalStatus() )); } // Odgovori na izvješće o isporuci try { byte[] messageId = new byte[]{1}; session.deliverSmResponse(0, messageId, deliverSm); } catch (PDUException e) { System.err.println("Neuspjelo odgovaranje na deliver_sm: " + e.getMessage()); } } });
Ovaj kod obrađuje potvrde o isporuci, omogućujući vam praćenje uspjeha ili neuspjeha svakog SMS-a poslanog putem SMPP API-ja u Javi.
Kompletan Java SMPP klijent za slanje SMS-a putem SMPP API-jaIspod je kompletna Java klasa koja integrira upravljanje vezom, slanje poruka, i rukovanje izvješćima o isporuci. Ova implementacija je spremna za produkciju s pravilnim upravljanjem greškama i resursima:
import org.jsmpp.*; import org.jsmpp.bean.*; import org.jsmpp.session.*; import org.jsmpp.util.*; public class SMPPClient implements AutoCloseable { private SMPPSession session; private String host; private int port; private String username; private String password; public SMPPClient(String host, int port, String username, String password) { this.host = host; this.port = port; this.username = username; this.password = password; this.session = new SMPPSession(); } public void connect() throws Exception { try { BindParameter bindParam = new BindParameter( BindType.BIND_TRX, username, password, "cp", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, null ); session.connectAndBind(host, port, bindParam); // Konfiguracija postavki sesije session.setEnquireLinkTimer(30000); session.setTransactionTimer(10000); // Postavljanje osluškivača za potvrde isporuke session.setMessageReceiverListener(new DeliveryReceiptListener()); System.out.println("Uspješno spojeno na SMPP server"); } catch (Exception e) { System.err.println("Neuspješno spajanje na SMPP server: " + e.getMessage()); throw e; } } public String sendSMS(String sender, String recipient, String message) throws Exception { try { return session.submitShortMessage( "CMT", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, sender, TypeOfNumber.INTERNATIONAL, NumberingPlanIndicator.ISDN, recipient, new ESMClass(), (byte)0, (byte)1, null, null, new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE), (byte)0, new GeneralDataCoding(Alphabet.ALPHA_DEFAULT), (byte)0, message.getBytes() ); } catch (Exception e) { System.err.println("Neuspješno slanje SMS-a: " + e.getMessage()); throw e; } } @Override public void close() { if (session != null) { session.unbindAndClose(); } } private static class DeliveryReceiptListener implements MessageReceiverListener { @Override public void onAcceptDeliverSm(DeliverSm deliverSm) { if (MessageType.SMSC_DEL_RECEIPT.containedIn(deliverSm.getEsmClass())) { DeliveryReceipt delReceipt = deliverSm.getShortMessageAsDeliveryReceipt(); System.out.println(String.format( "Primljena potvrda isporuke za poruku %s: %s", delReceipt.getId(), delReceipt.getFinalStatus() )); } } } public static void main(String[] args) { try (SMPPClient client = new SMPPClient( "your.ozeki.server", 2775, "your_username", "your_password")) { client.connect(); String messageId = client.sendSMS( "12345", "+1234567890", "Pozdrav iz Java SMPP klijenta!" ); System.out.println("SMS poslan s ID-om: " + messageId); // Održavanje aplikacije pokrenutom za primanje izvješća o isporuci System.out.println("Pritisnite Ctrl+C za izlaz..."); Thread.sleep(Long.MAX_VALUE); } catch (Exception e) { System.err.println("Greška u SMPP klijentu: " + e.getMessage()); } } }
Ova kompletna implementacija enkapsulira funkcionalnost SMPP klijenta u
ponovno upotrebljivu klasu, što olakšava integraciju u veće Java aplikacije.
AutoCloseable
sučelje osigurava pravilno čišćenje resursa.
Najbolje prakse za izradu Java SMPP klijenata
Kako biste osigurali da je vaš Java SMPP API klijent robustan i skalabilan, slijedite ove najbolje prakse:
- Pooling veza: Koristite pooling veza za aplikacije s velikim volumenom SMS-ova kako biste učinkovito upravljali višestrukim SMPP sesijama.
- Upravljanje iznimkama: Implementirajte sveobuhvatno upravljanje iznimkama za oporavak od mrežnih problema ili grešaka na serveru.
- Poolovi niti: Koristite poolove niti za istodobnu obradu poruka kako biste poboljšali performanse.
- Red poruka: Implementirajte mehanizam reda poruka kako biste osigurali pouzdano isporučivanje poruka tijekom mrežnih prekida.
- Nadzor veze: Pratite stanje SMPP sesije i implementirajte logiku automatskog ponovnog spajanja za pouzdanost.
- Kodiranje znakova: Upravljajte različitim kodiranjima znakova (npr. GSM 7-bit, UCS-2) kako biste podržali međunarodno slanje SMS poruka.
Zaključak
Implementacija SMPP API-ja u Javi s Ozeki SMS Gateway-om
pruža moćno rješenje za slanje i primanje SMS poruka u vašim
aplikacijama. jSMPP
biblioteka pojednostavljuje složenosti
SMPP protokola, omogućujući programerima da se usredotoče na izradu robustnih
mogućnosti poruka. Ovaj vodič pokrio je osnove postavljanja Java SMPP klijenta,
upravljanja vezama, slanja SMS poruka i rukovanja izvješćima o isporuci. Slijedeći
dane primjere i najbolje prakse, možete stvoriti skalabilne i
pouzdane SMS aplikacije koristeći Javu i SMPP API.
Za produkcijska okruženja, razmislite o dodavanju naprednih značajki kao što su spajanje poruka za duge SMS-ove, detaljno evidentiranje i praćenje performansi. SMPP protokol nudi dodatne mogućnosti, kao što su planirano isporučivanje poruka i postavke prioriteta, kako biste poboljšali svoju aplikaciju kako se zahtjevi razvijaju.
More information
- Kako postaviti SMPP API klijentsku vezu s Vašim SMSC
- Kako postaviti SMPP API poslužitelj za slanje i primanje SMS-a iz više aplikacija
- Kako odabrati pravog SMPP API pružatelja za vaš posao
- Kako poslati SMS koristeći SMPP API na razini protokola
- Kako poslati SMS putem SMPP API-a koristeći Python
- Kako poslati SMS putem SMPP API-a koristeći Javascript
- Kako poslati SMS putem SMPP API-a koristeći Java
- Kako poslati SMS putem SMPP API-a koristeći PHP
- Kako poslati SMS putem SMPP API-ja koristeći C#
- Kako poslati SMS putem SMPP API-a koristeći C/Cpp
- Kako primiti SMS koristeći SMPP API
- Kako primiti izvješće o isporuci SMS-a koristeći SMPP API
- SMPP API FAQ