Hogyan küldjünk SMS-t az SMPP API segítségével Java nyelven
A Short Message Peer-to-Peer (SMPP) API egy hatékony távközlési protokoll, amelyet SMS-üzenetek cseréjére terveztek Short Message Service Center-ek (SMSC) és External Short Messaging Entity-k (ESME) között. A Java és az SMPP API kombinálásával a fejlesztők robusztus alkalmazásokat építhetnek SMS-üzenetek hatékony küldésére és fogadására. Ez az átfogó útmutató végigvezeti az SMPP API Java-ban történő implementálásán, hogy kapcsolódj az Ozeki SMS Gateway-hez, gyakorlati kódpéldákkal a kapcsolatkezelésről, üzenetküldésről és kézbesítési jelentések kezeléséről.
Miért érdemes Java-t és az SMPP API-t használni SMS küldéshez?
A Java egy sokoldalú, platformfüggetlen programozási nyelv, amelyet széles körben használnak
vállalati szintű alkalmazások fejlesztéséhez. Az SMPP API-val kombinálva
a Java lehetővé teszi a fejlesztők számára, hogy skálázható SMS megoldásokat hozzanak létre, amelyek zökkenőmentesen
integrálódnak az Ozekihez hasonló SMS gateway-ekkel. Az SMPP protokoll ideális nagy teljesítményű SMS
alkalmazásokhoz, megbízhatósága, tömeges üzenetküldés támogatása és kézbesítési nyomkövetési képességei miatt. Ez az útmutató a jSMPP
könyvtárat használja, egy
tiszta Java implementációt az SMPP protokollhoz, hogy egyszerűsítse a fejlesztést.
Java SMPP API kliens beállítása SMS üzenetek küldéséhez
Ahhoz, hogy SMS üzeneteket küldhess az SMPP API Java-ban,
létre kell hoznod egy SMPP felhasználói fiókot az
Ozeki SMS Gateway SMPP szerverén, és konfigurálnod kell a
Java alkalmazásodat, hogy kapcsolódjon az SMPP szerveréhez. A jSMPP
könyvtár
népszerű választás a Java fejlesztők körében, mivel átfogó támogatást nyújt az
SMPP protokoll funkcióihoz. Az alábbiakban áttekintjük a Java projekt beállításának lépéseit.
1. lépés: jSMPP függőség hozzáadása
A jSMPP
könyvtár használatához a Java projektben add hozzá a következő
Maven függőséget a pom.xml
fájlhoz:
<dependency> <groupId>org.jsmpp</groupId> <artifactId>jsmpp</artifactId> <version>2.3.10</version> </dependency>
Ez a függőség biztosítja az összes szükséges osztályt az SMPP API Java-ban történő implementálásához, beleértve a munkamenet-kezelést, üzenetkódolást és kézbesítési visszaigazolások kezelését.
2. lépés: Alap SMPP kapcsolat példa
Az SMPP szerverhez való kapcsolódáshoz létre kell hozni egy munkamenetet és kötni kell azt az
Ozeki SMS Gateway-hez. A következő Java kód bemutatja, hogyan hozzunk létre egy egyszerű
SMPP klienst a jSMPP
könyvtár segítségével:
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 { // Kapcsolódás és kötés az Ozeki SMS Gateway-hez session.connectAndBind( "your.ozeki.server", 2775, new BindParameter( BindType.BIND_TX, "your_username", "your_password", "cp", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, null) ); System.out.println("Sikeresen kapcsolódott az SMPP szerverhez"); // Üzenetküldő kód hozzáadása itt } catch (Exception e) { System.err.println("Nem sikerült kapcsolódni és kötni az SMPP szerverhez: " + e.getMessage()); } finally { session.unbindAndClose(); } } }
Ebben a példában cseréld le a your.ozeki.server
, your_username
,
és your_password
értékeket az Ozeki SMS Gateway adminisztrátor által biztosított valós hitelesítő adatokra. A BindType.BIND_TX
egy
adó kötést jelez, amely alkalmas SMS üzenetek küldésére.
SMPP API kapcsolatok kezelése Java-ban megbízható SMS kézbesítés érdekében
A megbízható SMS kézbesítéshez aktív SMPP kapcsolatot kell fenntartani. Az SMPP protokoll keep-alive üzeneteket (enquire_link PDU-kat) használ a kapcsolat aktív maradásának biztosítására. Az alábbi példa bemutatja, hogyan konfigurálhatod a keep-alive beállításokat és figyelheted a munkamenet állapotváltozásait Java-ban:
session.setEnquireLinkTimer(30000); // Keep-alive küldése 30 másodpercenként session.setTransactionTimer(10000); // Tranzakció időtúllépés beállítása 10 másodpercre // Munkamenet állapotfigyelő hozzáadása monitorozáshoz session.addSessionStateListener(new SessionStateListener() { @Override public void onStateChange(SessionState newState, SessionState oldState, Session source) { System.out.println("SMPP munkamenet állapota megváltozott " + oldState + " -ról " + newState + " -ra"); } });
Ezek a beállítások biztosítják a kapcsolat stabilitását, és a munkamenet állapotfigyelő segít nyomon követni a változásokat, például a kapcsolat megszakadását, a robusztus hibakezelés érdekében.
SMS küldése Java nyelven az SMPP API segítségével
A kapcsolat létrejötte után SMS üzeneteket küldhetsz a submit_sm
PDU segítségével.
A következő Java metódus bemutatja, hogyan küldj SMS-t az SMPP
API Java-ban:
public static void sendSMS(SMPPSession session, String sender, String recipient, String message) throws Exception { try { String messageId = session.submitShortMessage( "CMT", // Szolgáltatás típusa TypeOfNumber.ALPHANUMERIC, // Forrás TON NumberingPlanIndicator.UNKNOWN, // Forrás NPI sender, // Küldő címe TypeOfNumber.INTERNATIONAL, // Cél TON NumberingPlanIndicator.ISDN, // Cél NPI recipient, // Címzett címe new ESMClass(), // ESM osztály (byte)0, // Protokoll ID (byte)1, // Prioritás jelző null, // Ütemezett kézbesítési idő null, // Érvényességi idő new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE), // Kézbesítési visszaigazolás (byte)0, // Cserélje ki, ha jelen van jelző new GeneralDataCoding(Alphabet.ALPHA_DEFAULT), // Adatkódolás (byte)0, // Alapértelmezett üzenet ID message.getBytes() // Üzenet tartalma ); System.out.println("SMS elküldve, üzenet azonosító: " + messageId); } catch (PDUException e) { System.err.println("Érvénytelen PDU paraméter: " + e.getMessage()); throw e; } catch (ResponseTimeoutException e) { System.err.println("Válasz időtúllépés: " + e.getMessage()); throw e; } catch (InvalidResponseException e) { System.err.println("Érvénytelen válasz: " + e.getMessage()); throw e; } catch (NegativeResponseException e) { System.err.println("Negatív válasz érkezett: " + e.getMessage()); throw e; } catch (Exception e) { System.err.println("Nem sikerült SMS-t küldeni: " + e.getMessage()); throw e; } }
Ez a metódus egy SMS-t küld kézbesítési visszaigazolás követéssel. A
RegisteredDelivery
paraméter biztosítja, hogy értesítéseket kapj
az üzenet kézbesítési állapotáról.
SMS kézbesítési jelentések kezelése Java-ban és az SMPP API segítségével
Ahhoz, hogy nyomon kövesd, hogy egy SMS sikeresen kézbesítésre került-e, kötheted az SMPP munkamenetedet
transceiver-ként (BindType.BIND_TRX
) és implementálhatsz egy üzenet fogadó figyelőt. Az alábbi példa bemutatja, hogyan kezelheted a kézbesítési jelentéseket Java-ban:
// Transceiver-ként kötés üzenetek küldéséhez és fogadásához BindParameter bindParam = new BindParameter( BindType.BIND_TRX, "your_username", "your_password", "cp", TypeOfNumber.ALPHANUMERIC, NumberingPlanIndicator.UNKNOWN, null ); // Üzenet fogadó figyelő beállítása kézbesítési jelentésekhez 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( "Kézbesítési visszaigazolás érkezett a(z) %s azonosítójú üzenethez: %s", delReceipt.getId(), delReceipt.getFinalStatus() )); } // Válasz a kézbesítési jelentésre try { byte[] messageId = new byte[]{1}; session.deliverSmResponse(0, messageId, deliverSm); } catch (PDUException e) { System.err.println("Nem sikerült válaszolni a deliver_sm-re: " + e.getMessage()); } } });
Ez a kód feldolgozza a kézbesítési visszaigazolásokat, lehetővé téve, hogy nyomon kövesd az egyes SMS üzenetek sikerességét vagy hibáját az SMPP API Java-ban történő küldés során.
Teljes Java SMPP kliens SMS küldéshez az SMPP API segítségével
Az alábbiakban egy teljes Java osztály látható, amely integrálja a kapcsolatkezelést, üzenetküldést, és kézbesítési jelentések kezelését. Ez az implementáció termelési környezetben használható megfelelő hibakezeléssel és erőforrás-kezeléssel:
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); // Munkamenet beállítások konfigurálása session.setEnquireLinkTimer(30000); session.setTransactionTimer(10000); // Kézbesítési visszaigazolás kezelő beállítása session.setMessageReceiverListener(new DeliveryReceiptListener()); System.out.println("Sikeresen kapcsolódott az SMPP szerverhez"); } catch (Exception e) { System.err.println("Nem sikerült kapcsolódni az SMPP szerverhez: " + 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("Nem sikerült SMS-t küldeni: " + 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( "Kézbesítési visszaigazolás érkezett a(z) %s azonosítójú üzenethez: %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", "Helló a Java SMPP klienstől!" ); System.out.println("SMS elküldve, azonosító: " + messageId); // Alkalmazás futása a kézbesítési jelentések fogadásához System.out.println("Nyomj Ctrl+C-t a kilépéshez..."); Thread.sleep(Long.MAX_VALUE); } catch (Exception e) { System.err.println("Hiba az SMPP kliensben: " + e.getMessage()); } } }
Ez a teljes implementáció az SMPP kliens funkcionalitását egy újrafelhasználható osztályba csomagolja,
megkönnyítve a nagyobb Java alkalmazásokba való integrálást. Az
AutoCloseable
interfész biztosítja a megfelelő erőforrás-felszabadítást.
Ajánlott eljárások Java SMPP kliensek fejlesztéséhez
Annak érdekében, hogy a Java SMPP API kliens robusztus és skálázható legyen, kövesd az alábbi ajánlott eljárásokat:
- Kapcsolatkészlet: Használj kapcsolatkészletet nagy mennyiségű SMS alkalmazásokhoz az SMPP munkamenetek hatékony kezeléséhez.
- Kivételkezelés: Implementálj átfogó kivételkezelést a hálózati problémák vagy szerverhibák kezeléséhez.
- Szálkészlet: Használj szálkészletet párhuzamos üzenetfeldolgozáshoz a teljesítmény javítása érdekében.
- Üzenetsor: Implementálj egy üzenetsoroló mechanizmust a megbízható üzenetkézbesítés érdekében hálózati megszakadások esetén.
- Kapcsolatmonitorozás: Figyeld az SMPP munkamenet állapotát és implementálj automatikus újrakapcsolódási logikát a megbízhatóság érdekében.
- Karakterkódolás: Kezeld a különböző karakterkódolásokat (pl. GSM 7-bit, UCS-2) a nemzetközi SMS üzenetküldés támogatásához.
Összegzés
Az SMPP API Java-ban történő implementálása az Ozeki SMS Gateway segítségével
hatékony megoldást nyújt SMS üzenetek küldésére és fogadására az alkalmazásaidban. A
jSMPP
könyvtár leegyszerűsíti az SMPP protokoll bonyolultságát, lehetővé téve a fejlesztők számára, hogy a robusztus üzenetküldési funkciókra koncentráljanak. Ez az útmutató bemutatta a Java SMPP kliens beállításának alapjait,
a kapcsolatkezelést, SMS üzenetek küldését és a kézbesítési jelentések kezelését. A megadott példák és ajánlott eljárások követésével skálázható és megbízható SMS alkalmazásokat hozhatsz létre Java és az SMPP API segítségével.
Termelési környezetekben érdemes lehet fejlett funkciókat hozzáadni, mint például hosszú SMS-ek összefűzése, részletes naplózás, és teljesítményfigyelés. Az SMPP protokoll további képességeket kínál, mint például ütemezett üzenetküldés és prioritási beállítások, hogy tovább fejleszthesd az alkalmazásodat az igények változásával.
More information
- SMPP API kliens kapcsolat beállítása az SMSC-vel
- SMPP API szerver beállítása több alkalmazás SMS küldéséhez és fogadásához
- A megfelelő SMPP API szolgáltató kiválasztása vállalkozásához
- SMS küldése SMPP API-val protokoll szinten
- SMS küldése SMPP API-val Python használatával
- SMS küldése SMPP API-val Javascript használatával
- SMS küldése SMPP API-val Java használatával
- SMS küldése SMPP API-val PHP használatával
- Hogyan küldjünk SMS-t az SMPP API-n keresztül C# használatával
- SMS küldése SMPP API-val C/Cpp használatával
- SMS fogadása SMPP API-val
- SMS kézbesítési jelentés fogadása SMPP API-val
- SMPP API GYIK