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.

Nastavenie klienta Java SMPP API pre odosielanie SMS správ

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.

Správa pripojení SMPP API v Jave pre spoľahlivé doručenie SMS

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.

Spracovanie správ o doručení SMS pomocou Java a SMPP API

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.

Najlepšie postupy pre tvorbu Java SMPP klientov

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.
Záver

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