Jak posílat SMS přes SMPP API pomocí Pythonu

SMPP API (Short Message Peer-to-Peer) je výkonný protokol pro výměnu SMS zpráv mezi externími entitami (ESMEs) a centry služby krátkých zpráv (SMSCs). Pro vývojáře používající Ozeki SMS Gateway umožňuje využití SMPP API s Pythonem bezproblémovou integraci SMS do aplikací. Tento komplexní průvodce poskytuje podrobné pokyny, praktické příklady kódu v Pythonu a osvědčené postupy pro navázání, udržování a využití spojení přes SMPP API k efektivnímu odesílání SMS zpráv.

Posílání SMS pomocí Pythonu a SMPP API
Obrázek 1 - Odesílání SMS pomocí Pythonu a SMPP API

Proč používat Python s SMPP API pro SMS zprávy?

Jednoduchost Pythonu a jeho robustní knihovny, jako je smpplib, z něj činí ideální volbu pro integraci s SMPP API. Protokol SMPP umožňuje vysokovýkonné doručování SMS, sledování doručení v reálném čase a spolehlivé řízení spojení. Kombinací Pythonu a SMPP API mohou vývojáři vytvářet škálovatelná řešení pro aplikace jako oznámení, marketingové kampaně nebo dvoufaktorové ověřování (2FA).

Jak posílat SMS přes SMPP API pomocí Pythonu (Rychlé kroky)

  1. Ověřte SMPP přihlašovací údaje: Ujistěte se, že máte správný hostitel, port, uživatelské jméno a heslo pro vašeho SMPP uživatele v Ozeki SMS Gateway.
  2. Napište a spusťte kód v Pythonu: Použijte knihovnu smpplib k vytvoření skriptu pro připojení k SMPP serveru a odesílání SMS.
  3. Zkontrolujte výsledky: Potvrďte úspěšné doručení zpráv prostřednictvím logů v rozhraní Ozeki SMS Gateway.

Jak posílat SMS přes SMPP API pomocí Pythonu (Video návod)

Podívejte se na tento podrobný video návod, jak odesílat SMS zprávy pomocí Pythonu a SMPP API s Ozeki SMS Gateway. Návod pokrývá nastavení SMPP uživatele, připojení pomocí knihovny smpplib, odesílání zpráv, udržování spojení a zpracování potvrzení o doručení.

Podrobný návod k odesílání SMS pomocí Pythonu a SMPP API

Krok 1: Vyberte svého SMPP uživatele

V rozhraní Ozeki SMS Gateway přejděte do sekce "Uživatelé a aplikace". Vyberte nebo vytvořte SMPP uživatele pro navázání spojení z vašeho Python skriptu. Tento uživatel bude ověřovat vaši aplikaci u SMPP serveru.

Výběr SMPP uživatele v Ozeki SMS Gateway
Obrázek 2 - Výběr SMPP uživatele v Ozeki SMS Gateway

Krok 2: Získejte údaje pro připojení

Po výběru SMPP uživatele přejděte na kartu "Nápověda" v rozhraní Ozeki SMS Gateway. Zde najdete klíčové údaje pro připojení, včetně IP adresy, čísla portu, uživatelského jména a hesla. Tyto údaje jsou nezbytné pro konfiguraci vašeho Python skriptu pro připojení k SMPP serveru.

Údaje pro SMPP připojení
Obrázek 3 - Získání údajů pro SMPP připojení

Krok 3: Napište kód v Pythonu pro SMPP

Otevřete váš oblíbený Python IDE nebo editor a vložte níže uvedený kód pro SMPP připojení. Tento kód využívá knihovnu smpplib k navázání spojení s Ozeki SMS Gateway a přípravě prostředí pro odesílání SMS zpráv.

Vložení Python kódu pro SMPP
Obrázek 4 - Vložení Python kódu pro SMPP

Krok 4: Aktualizujte SMPP přihlašovací údaje

Nahraďte zástupné hodnoty v Python kódu (hostitel, port, uživatelské jméno, heslo a telefonní čísla) vašimi skutečnými SMPP údaji a telefonním číslem příjemce. Tím zajistíte, že se váš skript připojí ke správnému SMPP serveru a odešle zprávy zamýšlenému příjemci.

Aktualizace SMPP přihlašovacích údajů v Pythonu
Obrázek 5 - Aktualizace SMPP přihlašovacích údajů v Python skriptu

Krok 5: Ověřte úspěšné připojení

Spusťte váš Python skript. Pokud je vše správně nakonfigurováno, rozhraní Ozeki SMS Gateway zaznamená úspěšné připojení vašeho SMPP uživatele. Tím potvrdíte, že váš Python skript je připraven odesílat SMS zprávy přes SMPP API.

Úspěšné SMPP připojení
Obrázek 6 - Potvrzení úspěšného SMPP připojení

Jak navázat spojení SMPP API v Pythonu pro zasílání SMS

Pro odesílání SMS zpráv pomocí SMPP API musíte nejprve nastavit uživatele SMPP v Ozeki SMS Gateway a připojit svého Python klienta k SMPP serveru. Knihovna smpplib tento proces zjednodušuje tím, že se stará o nízkou úroveň protokolových detailů. Níže je příklad kódu v Pythonu pro navázání SMPP spojení:

import smpplib

# Parametry SMPP spojení
HOST = 'your.ozeki.server'
PORT = 2775
SYSTEM_ID = 'your_username'
PASSWORD = 'your_password'

# Inicializace SMPP klienta
client = smpplib.client.Client(HOST, PORT)

# Připojení jako vysílač pro odesílání SMS
client.connect()
client.bind_transmitter(
    system_id=SYSTEM_ID,
    password=PASSWORD,
)

print("Úspěšně připojeno k SMPP serveru pomocí Pythonu")

Klíčové protokolové datové jednotky (PDU) SMPP

Protokol SMPP spoléhá na protokolové datové jednotky (PDU) pro správu spojení a zasílání zpráv. Níže je tabulka shrnující klíčové PDU používané v Pythonu pro integraci SMPP API:

PDU Metoda v Pythonu Účel
bind_transmitter client.bind_transmitter() Inicializuje spojení pro odesílání SMS zpráv
bind_receiver client.bind_receiver() Navazuje spojení pro příjem SMS zpráv
bind_transceiver client.bind_transceiver() Umožňuje obousměrné zasílání SMS (odesílání a příjem)

Udržování stabilního spojení SMPP API v Pythonu pro odesílání SMS

SMPP spojení vyžadují periodické "keep-alive" signály, aby nedocházelo k timeoutům. PDU enquire_link se odesílá každých 30 sekund pro udržení spojení. Níže je příklad v Pythonu využívající přístup s vlákny pro odesílání keep-alive signálů:

import time
import threading

def send_enquire_link():
    while True:
        try:
            client.enquire_link()
            print("Odeslán enquire_link PDU pro udržení SMPP spojení")
        except Exception as e:
            print(f"Chyba při odesílání enquire_link: {e}")
        time.sleep(30)  # Odeslat každých 30 sekund

# Spuštění keep-alive vlákna
keepalive_thread = threading.Thread(target=send_enquire_link)
keepalive_thread.daemon = True
keepalive_thread.start()
Odesílání SMS pomocí Pythonu přes SMPP API

Jakmile je připojení navázáno, můžete odesílat SMS zprávy pomocí PDU submit_sm. Následující kód v Pythonu ukazuje, jak odeslat SMS a zpracovat odpověď:

def send_sms(source_addr, destination_addr, message):
    try:
        # Odeslat submit_sm PDU
        pdu = client.send_message(
            source_addr_ton=smpplib.consts.SMPP_TON_INTL,
            source_addr_npi=smpplib.consts.SMPP_NPI_ISDN,
            source_addr=source_addr,
            dest_addr_ton=smpplib.consts.SMPP_TON_INTL,
            dest_addr_npi=smpplib.consts.SMPP_NPI_ISDN,
            destination_addr=destination_addr,
            short_message=message,
            data_coding=0x00,  # GSM 7-bit kódování
        )
        
        print(f"SMS úspěšně odeslána, ID zprávy: {pdu.message_id}")
        
    except smpplib.exceptions.PDUError as e:
        print(f"Chyba SMPP PDU: {e}")
    except Exception as e:
        print(f"Chyba při odesílání SMS: {e}")

# Příklad použití
send_sms(
    source_addr="12345",
    destination_addr="+1234567890",
    message="Ahoj z Python SMPP klienta!"
)

Zpracování doručovacích zpráv SMS v Pythonu

Pro sledování stavu doručení odeslaných SMS můžete zpracovávat doručovací zprávy pomocí PDU deliver_sm. Níže je příklad v Pythonu pro zpracování doručovacích zpráv:

def handle_delivery_report(pdu):
    print(f"Přijata doručovací zpráva pro zprávu {pdu.receipted_message_id}")
    print(f"Stav: {pdu.message_state}")

# Nastavení obsluhy doručovacích zpráv
client.set_message_received_handler(lambda pdu: handle_delivery_report(pdu))

Kompletní příklad Python SMPP API klienta pro odesílání SMS

Níže je kompletní, produkčně připravený skript v Pythonu, který integruje SMPP API pro odesílání SMS, udržování stabilního připojení a zpracování doručovacích zpráv:

import smpplib
import threading
import time

class SMPPClient:
    def __init__(self, host, port, system_id, password):
        self.client = smpplib.client.Client(host, port)
        self.client.set_message_received_handler(self.handle_message)
        
        # Připojení k SMPP serveru
        self.client.connect()
        self.client.bind_transceiver(
            system_id=system_id,
            password=password,
        )
        
        # Spuštění keep-alive vlákna
        self.start_keepalive()
    
    def start_keepalive(self):
        def _keepalive():
            while True:
                try:
                    self.client.enquire_link()
                    print("Keep-alive signál odeslán")
                except Exception:
                    try:
                        self.client.connect()
                        self.client.bind_transceiver(
                            system_id=system_id,
                            password=password,
                        )
                        print("Obnoveno připojení k SMPP serveru")
                    except Exception as e:
                        print(f"Obnovení připojení selhalo: {e}")
                time.sleep(30)
        
        thread = threading.Thread(target=_keepalive)
        thread.daemon = True
        thread.start()
    
    def send_sms(self, from_addr, to_addr, message):
        try:
            return self.client.send_message(
                source_addr=from_addr,
                destination_addr=to_addr,
                short_message=message,
            )
        except Exception as e:
            print(f"Odeslání SMS selhalo: {e}")
            return None
    
    def handle_message(self, pdu):
        if pdu.command == "deliver_sm":
            print(f"Doručovací zpráva: {pdu.receipted_message_id} - {pdu.message_state}")
        else:
            print(f"Přijata zpráva: {pdu.short_message}")

# Příklad použití
if __name__ == "__main__":
    client = SMPPClient(
        host="your.ozeki.server",
        port=2775,
        system_id="your_username",
        password="your_password"
    )
    
    # Odeslat SMS
    client.send_sms(
        from_addr="12345",
        to_addr="+1234567890",
        message="Ahoj z Python SMPP klienta!"
    )
    
    # Udržovat skript spuštěný
    while True:
        time.sleep(1)

Doporučené postupy pro integraci SMPP API s Pythonem

  • Ošetření chyb: Vždy implementujte robustní ošetření výjimek pro správu selhání připojení, chyb PDU a časových limitů.
  • Obnovení připojení: Zahrňte logiku pro automatické opětovné připojení, pokud se SMPP připojení přeruší.
  • Logování: Logujte stav připojení, odeslané zprávy a doručovací zprávy pro ladění a monitorování.
  • Bezpečnost: Uchovávejte přihlašovací údaje SMPP bezpečně, pomocí proměnných prostředí nebo konfiguračního souboru.
  • Škálovatelnost: Pro aplikace s vysokým objemem SMS zvažte použití asynchronních knihoven nebo poolování připojení.

Závěr

Tento průvodce poskytl podrobný návod pro integraci SMPP API s Pythonem pomocí Ozeki SMS Gateway. Využitím knihovny smpplib mohou vývojáři snadno navázat spolehlivá SMPP připojení, odesílat SMS zprávy a zpracovávat doručovací zprávy. Poskytnuté příklady kódu v Pythonu a doporučené postupy zajišťují robustní a škálovatelné SMS aplikace pro různé případy použití, od oznámení po marketingové kampaně.

Poznámka: Pro produkční prostředí vylepšete poskytnutý kód o komplexní ošetření chyb, logiku opětovného připojení a logování, aby byla zajištěna maximální spolehlivost a výkon.

More information