Ako posielať SMS cez SMPP API pomocou Javy
Short Message Peer-to-Peer (SMPP) API je výkonný telekomunikačný protokol určený na výmenu SMS správ medzi Short Message Service Centers (SMSCs) a External Short Messaging Entities (ESMEs). Využitím Javy a SMPP API môžu vývojári vytvárať robustné aplikácie na efektívne odosielanie a prijímanie SMS správ. Tento komplexný sprievodca vás prevedie procesom implementácie SMPP API v Jave pre pripojenie k Ozeki SMS Gateway, vrátane praktických príkladov kódu pre správu pripojenia, odosielanie správ a spracovanie správ o doručení.
Prečo používať Javu a SMPP API pre SMS správu?
Java je univerzálny, platformovo nezávislý programovací jazyk široko používaný pre
vývoj aplikácií na podnikovej úrovni. V kombinácii so SMPP API
umožňuje Java vývojárom vytvárať škálovateľné SMS riešenia, ktoré sa bezproblémovo
integrujú s SMS bránami ako Ozeki. Protokol SMPP je ideálny pre aplikácie s vysokou
priepustnosťou SMS vďaka svojej spoľahlivosti, podpore hromadného odosielania
a možnostiam sledovania doručenia. Tento sprievodca používa knižnicu jSMPP
,
čistú implementáciu protokolu SMPP v Jave, na zjednodušenie vývoja.
Ak chcete začať odosielať SMS správy pomocou SMPP API v Jave,
musíte vytvoriť účet SMPP používateľa na
SMPP serveri Ozeki SMS Gateway a nakonfigurovať
vašu Java aplikáciu na pripojenie k tomuto SMPP serveru. Knižnica jSMPP
je obľúbenou voľbou medzi vývojármi v Jave vďaka komplexnej podpore funkcií
protokolu SMPP. Nižšie popisujeme kroky na nastavenie vášho Java projektu.
Krok 1: Pridanie závislosti jSMPP
Ak chcete použiť knižnicu jSMPP
vo vašom Java projekte, pridajte
nasledujúcu Maven závislosť do vášho súboru pom.xml
:
<dependency> <groupId>org.jsmpp</groupId> <artifactId>jsmpp</artifactId> <version>2.3.10</version> </dependency>
Táto závislosť poskytuje všetky potrebné triedy na implementáciu SMPP API v Jave, vrátane správy relácií, kódovania správ a spracovania potvrdení o doručení.
Krok 2: Základný príklad pripojenia SMPP
Pripojenie k SMPP serveru vyžaduje vytvorenie relácie a jej naviazanie na
Ozeki SMS Gateway. Nasledujúci Java kód demonštruje, ako vytvoriť jednoduchého
SMPP klienta pomocou knižnice jSMPP
:
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 { // Pripojenie a naviazanie na Ozeki SMS Gateway session.connectAndBind( "your.ozeki.server", 2775, new BindParameter( BindType.BIND_TX, "your_username", "your_password", "cp", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, null) ); System.out.println("Úspešne pripojené k SMPP serveru"); // Sem pridajte kód na odosielanie správ } catch (Exception e) { System.err.println("Nepodarilo sa pripojiť a nadviazať spojenie so SMPP serverom: " + e.getMessage()); } finally { session.unbindAndClose(); } } }
V tomto príklade nahraďte your.ozeki.server
, your_username
a your_password
skutočnými prihlasovacími údajmi poskytnutými
administrátorom Ozeki SMS Gateway. BindType.BIND_TX
označuje
transmiterové naviazanie, vhodné pre odosielanie SMS správ.
Spoľahlivé doručenie SMS vyžaduje udržiavanie aktívneho SMPP pripojenia. Protokol SMPP používa keep-alive správy (enquire_link PDUs) na zabezpečenie, že pripojenie ostáva aktívne. Nižšie je príklad, ako nakonfigurovať nastavenia keep-alive a monitorovať zmeny stavu relácie v Jave:
session.setEnquireLinkTimer(30000); // Posielať keep-alive každých 30 sekúnd session.setTransactionTimer(10000); // Nastaviť časový limit transakcie na 10 sekúnd // Pridať odpočúvač stavu relácie na monitorovanie session.addSessionStateListener(new SessionStateListener() { @Override public void onStateChange(SessionState newState, SessionState oldState, Session source) { System.out.println("Stav SMPP relácie sa zmenil z " + oldState + " na " + newState); } });
Tieto nastavenia zabezpečujú stabilitu pripojenia a odpočúvač stavu relácie vám pomáha monitorovať zmeny, ako sú odpojenia, pre robustné spracovanie chýb.
Odosielanie SMS cez Java pomocou SMPP API
Po pripojení môžete odosielať SMS správy pomocou PDU submit_sm
.
Nasledujúca metóda v Jave demonštruje, ako odoslať SMS pomocou SMPP
API v Jave:
public static void sendSMS(SMPPSession session, String sender, String recipient, String message) throws Exception { try { String messageId = session.submitShortMessage( "CMT", // Typ služby TypeOfNumber.ALPHANUMERIC, // Zdrojový TON NumberingPlanIndicator.UNKNOWN, // Zdrojový NPI sender, // Adresa odosielateľa TypeOfNumber.INTERNATIONAL, // Cieľový TON NumberingPlanIndicator.ISDN, // Cieľový NPI recipient, // Adresa príjemcu new ESMClass(), // Trieda ESM (byte)0, // ID protokolu (byte)1, // Príznak priority null, // Čas naplánovanej dodávky null, // Platnosť new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE), // Potvrdenie o doručení (byte)0, // Príznak nahradenia new GeneralDataCoding(Alphabet.ALPHA_DEFAULT), // Kódovanie dát (byte)0, // Predvolené ID správy message.getBytes() // Obsah správy ); System.out.println("SMS odoslaná s ID správy: " + messageId); } catch (PDUException e) { System.err.println("Neplatný parameter PDU: " + e.getMessage()); throw e; } catch (ResponseTimeoutException e) { System.err.println("Časový limit odpovede: " + e.getMessage()); throw e; } catch (InvalidResponseException e) { System.err.println("Neplatná odpoveď: " + e.getMessage()); throw e; } catch (NegativeResponseException e) { System.err.println("Prijatá negatívna odpoveď: " + e.getMessage()); throw e; } catch (Exception e) { System.err.println("Zlyhanie odoslania SMS: " + e.getMessage()); throw e; } }
Táto metóda odosiela SMS s povoleným sledovaním potvrdenia o doručení. Parameter
RegisteredDelivery
zabezpečuje, že dostanete notifikácie
o stave doručenia správy.
Ak chcete sledovať, či bola SMS úspešne doručená, môžete svoju SMPP reláciu
naviazať ako transceiver (BindType.BIND_TRX
) a implementovať
nasledovný príjemca správ. Nižšie je uvedený príklad, ako spracovať správy
o doručení v Jave:
// Naviazanie ako transceiver na odosielanie a prijímanie správ BindParameter bindParam = new BindParameter( BindType.BIND_TRX, "vaše_prihlasovacie_meno", "vaše_heslo", "cp", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, null ); // Nastavenie nasledovníka prijímania správ pre správy o doručení 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( "Prijaté potvrdenie o doručení pre správu %s: %s", delReceipt.getId(), delReceipt.getFinalStatus() )); } // Odpoveď na správu o doručení try { byte[] messageId = new byte[]{1}; session.deliverSmResponse(0, messageId, deliverSm); } catch (PDUException e) { System.err.println("Zlyhanie odpovede na deliver_sm: " + e.getMessage()); } } });
Tento kód spracúva potvrdenia o doručení, čo vám umožňuje sledovať úspech alebo zlyhanie každej SMS odoslanej cez SMPP API v Jave.
Kompletný Java SMPP klient na odosielanie SMS cez SMPP API
Nižšie je uvedená kompletná trieda v jazyku Java, ktorá integruje správu pripojenia, odosielanie správ a spracovanie prenosových správ. Táto implementácia je pripravená pre produkčné prostredie s riadnym spracovaním chýb a správou zdrojov:
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); // Konfigurácia nastavení relácie session.setEnquireLinkTimer(30000); session.setTransactionTimer(10000); // Nastavenie obsluhy prenosových správ session.setMessageReceiverListener(new DeliveryReceiptListener()); System.out.println("Úspešne pripojené k SMPP serveru"); } catch (Exception e) { System.err.println("Nepodarilo sa pripojiť k SMPP serveru: " + 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("Nepodarilo sa odoslať SMS: " + 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( "Prijatá prenosová správa pre správu %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", "Ahoj z Java SMPP klienta!" ); System.out.println("SMS odoslaná s ID: " + messageId); // Udržiavanie aplikácie spustenej na prijímanie prenosových správ System.out.println("Stlačte Ctrl+C pre ukončenie..."); Thread.sleep(Long.MAX_VALUE); } catch (Exception e) { System.err.println("Chyba v SMPP klientovi: " + e.getMessage()); } } }
Táto kompletná implementácia zapuzdruje funkcionalitu SMPP klienta do
opakovane použiteľnej triedy, čo uľahčuje integráciu do väčších Java aplikácií.
Rozhranie AutoCloseable
zabezpečuje správne uvoľnenie zdrojov.
Aby bol váš Java SMPP API klient robustný a škálovateľný, dodržiavajte tieto najlepšie postupy:
- Pooling pripojení: Použite pooling pripojení pre aplikácie s vysokým objemom SMS na efektívne správu viacerých SMPP relácií.
- Spracovanie výnimiek: Implementujte komplexné spracovanie výnimiek na zotavenie sa zo sieťových problémov alebo chýb servera.
- Pool vlákien: Použite pool vlákien pre súbežné spracovanie správ na zlepšenie výkonu.
- Fronta správ: Implementujte mechanizmus fronty na zabezpečenie spoľahlivého doručenia správ počas sieťových výpadkov.
- Monitorovanie pripojenia: Monitorujte stav SMPP relácie a implementujte logiku automatického opätovného pripojenia pre spoľahlivosť.
- Kódovanie znakov: Spracujte rôzne kódovania znakov (napr. GSM 7-bit, UCS-2) na podporu medzinárodného zasielania SMS.
Implementácia SMPP API v jazyku Java s Ozeki SMS Gateway
poskytuje výkonné riešenie pre odosielanie a prijímanie SMS správ vo vašich
aplikáciách. Knižnica jSMPP
zjednodušuje komplexnosť
protokolu SMPP, čo umožňuje vývojárom sústrediť sa na tvorbu robustných funkcií
pre správu správ. Tento návod pokryl základy nastavenia Java SMPP klienta,
správy pripojení, odosielania SMS správ a spracovania prenosových správ. Podľa
uvedených príkladov a najlepších postupov môžete vytvoriť škálovateľné a
spoľahlivé SMS aplikácie pomocou Javy a SMPP API.
Pre produkčné prostredia zvážte pridanie pokročilých funkcií, ako je zreťazovanie dlhých SMS, podrobné logovanie a monitorovanie výkonu. Protokol SMPP ponúka ďalšie možnosti, ako je plánované odosielanie správ a nastavenia priority, na vylepšenie vašej aplikácie podľa potreby.
More information
- How to set up an SMPP API client connection with Your SMSC
- How to set up an SMPP API server to send ad receive SMS from multiple Apps
- How to choose the right SMPP API provider for your business
- How to Send SMS Using the SMPP API at the protocol level
- How to Send SMS through the SMPP API using Python
- How to Send SMS through the SMPP API using Javascript
- How to send SMS through the SMPP API using Java
- How to Send SMS through the SMPP API using PHP
- How to Send SMS through the SMPP API using C#
- How to Send SMS through the SMPP API using C/Cpp
- How to Receive SMS using the SMPP API
- How to Receive an SMS Delivery Report using the SMPP API
- SMPP API FAQ