Jak posílat SMS přes SMPP API pomocí Javy
Short Message Peer-to-Peer (SMPP) API je výkonný telekomunikační protokol určený pro výměnu SMS zpráv mezi centry krátkých zpráv (SMSC) a externími entitami pro zasílání zpráv (ESME). Využitím Javy a SMPP API mohou vývojáři vytvářet robustní aplikace pro efektivní odesílání a přijímání SMS zpráv. Tento komplexní průvodce vás provede procesem implementace SMPP API v Javě pro připojení k Ozeki SMS Gateway, včetně praktických příkladů kódu pro správu připojení, odesílání zpráv a zpracování doručovacích zpráv.
Proč používat Javu a SMPP API pro zasílání SMS?
Java je univerzální, platformně nezávislý programovací jazyk široce používaný pro
vývoj podnikových aplikací. V kombinaci se SMPP API
umožňuje Java vývojářům vytvářet škálovatelná SMS řešení, která se bezproblémově
integrují s SMS bránami, jako je Ozeki. SMPP protokol je ideální pro aplikace
s vysokou propustností díky své spolehlivosti, podpoře hromadného zasílání
a možnosti sledování doručení. Tento průvodce používá knihovnu jSMPP
,
čistou implementaci SMPP protokolu v Javě, která zjednodušuje vývoj.
Nastavení SMPP API klienta v Javě pro odesílání SMS
Chcete-li začít odesílat SMS zprávy pomocí SMPP API v Javě,
musíte vytvořit uživatelský účet SMPP na
SMPP serveru Ozeki SMS Gateway a nakonfigurovat
vaši Java aplikaci pro připojení k tomuto serveru. Knihovna jSMPP
je oblíbenou volbou mezi vývojáři v Javě díky komplexní podpoře funkcí SMPP protokolu.
Níže popisujeme kroky pro nastavení vašeho projektu v Javě.
Krok 1: Přidání závislosti jSMPP
Chcete-li použít knihovnu jSMPP
ve vašem projektu v Javě, přidejte
následující závislost Maven do vašeho souboru pom.xml
:
<dependency> <groupId>org.jsmpp</groupId> <artifactId>jsmpp</artifactId> <version>2.3.10</version> </dependency>
Tato závislost poskytuje všechny potřebné třídy pro implementaci SMPP API v Javě, včetně správy relací, kódování zpráv a zpracování potvrzení o doručení.
Krok 2: Základní příklad připojení SMPP
Připojení k SMPP serveru vyžaduje vytvoření relace a její navázání na
Ozeki SMS Gateway. Následující kód v Javě ukazuje, jak vytvořit jednoduchého
SMPP klienta pomocí knihovny 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 { // Připojení a navázání relace s 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("Úspěšně připojeno k SMPP serveru"); // Zde přidejte kód pro odesílání zpráv } catch (Exception e) { System.err.println("Nepodařilo se připojit a navázat relaci s SMPP serverem: " + e.getMessage()); } finally { session.unbindAndClose(); } } }
V tomto příkladu nahraďte your.ozeki.server
, your_username
a your_password
skutečnými přihlašovacími údaji poskytnutými vaším
správcem Ozeki SMS Gateway. BindType.BIND_TX
označuje vazbu vysílače,
vhodnou pro odesílání SMS zpráv.
Správa připojení SMPP API v Javě pro spolehlivé doručení SMS
Spolehlivé doručení SMS vyžaduje udržování aktivního SMPP připojení. SMPP protokol používá keep-alive zprávy (enquire_link PDUs) k zajištění, že připojení zůstává aktivní. Níže je příklad, jak nakonfigurovat nastavení keep-alive a sledovat změny stavu relace v Javě:
session.setEnquireLinkTimer(30000); // Odesílání keep-alive každých 30 sekund session.setTransactionTimer(10000); // Nastavení časového limitu transakce na 10 sekund // Přidání posluchače změn stavu relace pro monitorování session.addSessionStateListener(new SessionStateListener() { @Override public void onStateChange(SessionState newState, SessionState oldState, Session source) { System.out.println("Stav SMPP relace se změnil z " + oldState + " na " + newState); } });
Tato nastavení zajišťují stabilitu připojení a posluchač stavu relace pomáhá sledovat změny, jako jsou odpojení, pro robustní zpracování chyb.
Odesílání SMS pomocí Java přes SMPP API
Po připojení můžete odesílat SMS zprávy pomocí PDU submit_sm
.
Následující Java metoda ukazuje, jak odeslat SMS pomocí SMPP
API v Javě:
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 odesílatele TypeOfNumber.INTERNATIONAL, // Cílový TON NumberingPlanIndicator.ISDN, // Cílový NPI recipient, // Adresa příjemce new ESMClass(), // Třída ESM (byte)0, // ID protokolu (byte)1, // Příznak priority null, // Čas doručení null, // Platnost new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE), // Potvrzení doručení (byte)0, // Příznak nahrazení new GeneralDataCoding(Alphabet.ALPHA_DEFAULT), // Kódování dat (byte)0, // Výchozí ID zprávy message.getBytes() // Obsah zprávy ); System.out.println("SMS odeslána s ID zprávy: " + messageId); } catch (PDUException e) { System.err.println("Neplatný parametr PDU: " + e.getMessage()); throw e; } catch (ResponseTimeoutException e) { System.err.println("Časový limit odpovědi: " + e.getMessage()); throw e; } catch (InvalidResponseException e) { System.err.println("Neplatná odpověď: " + e.getMessage()); throw e; } catch (NegativeResponseException e) { System.err.println("Obdržena negativní odpověď: " + e.getMessage()); throw e; } catch (Exception e) { System.err.println("Nepodařilo se odeslat SMS: " + e.getMessage()); throw e; } }
Tato metoda odesílá SMS s povoleným sledováním doručení. Parametr
RegisteredDelivery
zajišťuje, že obdržíte oznámení
o stavu doručení zprávy.
Zpracování hlášení o doručení SMS pomocí Java a SMPP API
Pro sledování úspěšného doručení SMS můžete svou SMPP relaci navázat
jako transceiver (BindType.BIND_TRX
) a implementovat naslouchací
metodu pro příjem zpráv. Níže je příklad, jak zpracovat hlášení o doručení v Javě:
// Navázání jako transceiver pro odesílání a příjem zpráv BindParameter bindParam = new BindParameter( BindType.BIND_TRX, "vaše_uživatelské_jméno", "vaše_heslo", "cp", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, null ); // Nastavení naslouchací metody pro hlášení 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( "Obdrženo hlášení o doručení pro zprávu %s: %s", delReceipt.getId(), delReceipt.getFinalStatus() )); } // Odpověď na hlášení o doručení try { byte[] messageId = new byte[]{1}; session.deliverSmResponse(0, messageId, deliverSm); } catch (PDUException e) { System.err.println("Nepodařilo se odpovědět na deliver_sm: " + e.getMessage()); } } });
Tento kód zpracovává hlášení o doručení, což vám umožňuje sledovat úspěch nebo selhání každé SMS odeslané přes SMPP API v Javě.
Kompletní Java SMPP klient pro odesílání SMS přes SMPP APINíže je kompletní třída v Javě, která integruje správu připojení, odesílání zpráv a zpracování doručených zpráv. Tato implementace je připravena pro produkční prostředí s řádným zpracováním chyb a správou zdrojů:
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); // Nastavení parametrů session session.setEnquireLinkTimer(30000); session.setTransactionTimer(10000); // Nastavení obsluhy doručených zpráv session.setMessageReceiverListener(new DeliveryReceiptListener()); System.out.println("Úspěšně připojeno k SMPP serveru"); } catch (Exception e) { System.err.println("Nepodařilo se připojit 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("Nepodařilo se odeslat 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( "Přijata doručenka pro zprá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 odeslána s ID: " + messageId); // Udržování aplikace v běhu pro příjem doručenek System.out.println("Pro ukončení stiskněte Ctrl+C..."); Thread.sleep(Long.MAX_VALUE); } catch (Exception e) { System.err.println("Chyba v SMPP klientovi: " + e.getMessage()); } } }
Tato kompletní implementace zapouzdřuje funkčnost SMPP klienta do znovupoužitelné
třídy, což usnadňuje integraci do větších Java aplikací. Rozhraní AutoCloseable
zajišťuje správné uvolnění zdrojů.
Doporučené postupy pro vytváření Java SMPP klientů
Pro zajištění robustnosti a škálovatelnosti vašeho Java SMPP API klienta dodržujte tyto doporučené postupy:
- Pooling připojení: Pro aplikace s vysokým objemem SMS používejte pooling připojení pro efektivní správu více SMPP session.
- Zpracování výjimek: Implementujte komplexní zpracování výjimek pro obnovu po síťových problémech nebo chybách serveru.
- Thread pooly: Pro zlepšení výkonu používejte thread pooly pro souběžné zpracování zpráv.
- Fronty zpráv: Implementujte mechanismus front pro zajištění spolehlivého doručení zpráv při výpadcích sítě.
- Monitorování připojení: Sledujte stav SMPP session a implementujte logiku automatického opětovného připojení pro spolehlivost.
- Kódování znaků: Zpracovávejte různá kódování znaků (např. GSM 7-bit, UCS-2) pro podporu mezinárodního zasílání SMS.
Závěr
Implementace SMPP API v Javě s Ozeki SMS Gateway poskytuje výkonné řešení
pro odesílání a přijímání SMS zpráv ve vašich aplikacích. Knihovna jSMPP
zjednodušuje složitosti SMPP protokolu, což vývojářům umožňuje soustředit se na vytváření
robustních funkcí pro zasílání zpráv. Tato příručka pokryla základy nastavení Java SMPP klienta,
správy připojení, odesílání SMS zpráv a zpracování doručenek. Dodržováním uvedených příkladů
a doporučených postupů můžete vytvářet škálovatelné a spolehlivé SMS aplikace pomocí
Javy a SMPP API.
Pro produkční prostředí zvažte přidání pokročilých funkcí, jako je spojování zpráv pro dlouhé SMS, podrobné logování a monitorování výkonu. SMPP protokol nabízí další možnosti, jako je plánované odesílání zpráv a nastavení priority, které mohou vylepšit vaši aplikaci s měnícími se požadavky.
More information
- Jak nastavit klientské připojení SMPP API s vaším SMSC
- Jak nastavit SMPP API server pro odesílání a příjem SMS z více aplikací
- Jak vybrat správného poskytovatele SMPP API pro vaše podnikání
- Jak odesílat SMS pomocí SMPP API na úrovni protokolu
- Jak odesílat SMS přes SMPP API pomocí Pythonu
- Jak odesílat SMS přes SMPP API pomocí Javascriptu
- Jak odesílat SMS přes SMPP API pomocí Javy
- Jak odesílat SMS přes SMPP API pomocí PHP
- Jak odeslat SMS přes SMPP API pomocí C#
- Jak odesílat SMS přes SMPP API pomocí C/Cpp
- Jak přijímat SMS pomocí SMPP API
- Jak přijmout zprávu o doručení SMS pomocí SMPP API
- SMPP API FAQ