Kako poslati SMS putem SMPP API-ja koristeći Python

SMPP API (Short Message Peer-to-Peer) je moćan protokol za razmjenu SMS poruka između vanjskih entiteta za kratke poruke (ESME) i centara za usluge kratkih poruka (SMSC). Za programere koji koriste Ozeki SMS Gateway, korištenje SMPP API-ja s Pythonom omogućuje besprijekornu integraciju SMS-a u aplikacije. Ovaj opsežni vodič pruža korak-po-korak upute, praktične primjere Python koda i najbolje prakse za uspostavljanje, održavanje i korištenje SMPP API veze za učinkovito slanje SMS poruka.

Pošalji SMS s Pythonom koristeći SMPP API
Slika 1 - Slanje SMS-a s Pythonom koristeći SMPP API

Zašto koristiti Python s SMPP API-jem za slanje SMS poruka?

Pythonova jednostavnost i robusne biblioteke, poput smpplib, čine ga idealnim izborom za integraciju s SMPP API-jem. SMPP protokol omogućuje visokoučinkovitu isporuku SMS-a, izvješća o isporuci u stvarnom vremenu i pouzdano upravljanje vezom. Kombiniranjem Pythona s SMPP API-jem, programeri mogu stvoriti skalabilna SMS rješenja za aplikacije poput obavijesti, marketinških kampanja ili dvofaktorske autentifikacije (2FA).

Kako poslati SMS putem SMPP API-ja koristeći Python (Brzi koraci)

  1. Provjerite SMPP vjerodajnice: Osigurajte da imate ispravan host, port, korisničko ime i lozinku za vašeg SMPP korisnika u Ozeki SMS Gateway.
  2. Napišite i izvršite Python kod: Koristite biblioteku smpplib za kreiranje skripte za povezivanje s SMPP serverom i slanje SMS-a.
  3. Provjerite rezultate: Potvrdite uspješno slanje poruke putem logova u Ozeki SMS Gateway sučelju.

Kako poslati SMS putem SMPP API-ja koristeći Python (Video tutorial)

Pogledajte ovaj korak-po-korak video tutorial kako biste naučili kako poslati SMS poruke koristeći Python i SMPP API s Ozeki SMS Gateway. Tutorial pokriva postavljanje SMPP korisnika, povezivanje s bibliotekom smpplib, slanje poruka, održavanje veze i rukovanje izvješćima o isporuci.

Korak-po-korak vodič za slanje SMS-a s Pythonom i SMPP API-jem

Korak 1: Odaberite svog SMPP korisnika

U Ozeki SMS Gateway sučelju, idite na odjeljak "Korisnici i aplikacije". Odaberite ili kreirajte SMPP korisnika kako biste uspostavili vezu iz vaše Python skripte. Ovaj korisnik će autentificirati vašu aplikaciju s SMPP serverom.

Odaberite SMPP korisnika u Ozeki SMS Gateway
Slika 2 - Odabir SMPP korisnika u Ozeki SMS Gateway

Korak 2: Dohvatite podatke za povezivanje

Nakon što odaberete svog SMPP korisnika, idite na karticu "Pomoć" u Ozeki SMS Gateway sučelju. Ovdje ćete pronaći ključne podatke za povezivanje, uključujući IP adresu, broj porta, korisničko ime i lozinku. Ove vjerodajnice su ključne za konfiguriranje vaše Python skripte za povezivanje s SMPP serverom.

SMPP podaci za povezivanje
Slika 3 - Dohvaćanje SMPP podataka za povezivanje

Korak 3: Napišite Python SMPP kod

Otvorite svoj omiljeni Python IDE ili editor i zalijepite SMPP kod za povezivanje koji je naveden u nastavku. Ovaj kod koristi biblioteku smpplib za uspostavljanje veze s Ozeki SMS Gateway i pripremu okruženja za slanje SMS poruka.

Zalijepite Python SMPP kod
Slika 4 - Lijepljenje Python SMPP koda

Korak 4: Ažurirajte SMPP vjerodajnice

Zamijenite zamjenske vrijednosti u Python kodu (host, port, korisničko ime, lozinka i telefonski brojevi) s vašim stvarnim SMPP vjerodajnicama i telefonskim brojem primatelja. Ovo osigurava da se vaša skripta povezuje s ispravnim SMPP serverom i šalje poruke namijenjenom primatelju.

Ažurirajte SMPP vjerodajnice u Pythonu
Slika 5 - Ažuriranje SMPP vjerodajnica u Python skripti

Korak 5: Potvrdite uspješno povezivanje

Pokrenite svoju Python skriptu. Ako je ispravno konfigurirana, Ozeki SMS Gateway sučelje će zabilježiti uspješno povezivanje za vašeg SMPP korisnika. Ovo potvrđuje da je vaša Python skripta spremna za slanje SMS poruka putem SMPP API-ja.

Uspješno SMPP povezivanje
Slika 6 - Potvrda uspješnog SMPP povezivanja

Kako uspostaviti SMPP API vezu u Pythonu za SMS poruke

Za slanje SMS poruka pomoću SMPP API-ja, prvo morate postaviti SMPP korisnika u Ozeki SMS Gateway i povezati vaš Python klijent s SMPP serverom. Biblioteka smpplib pojednostavljuje ovaj proces rukovanjem detaljima niskog nivoa protokola. Ispod je primjer Python koda za uspostavljanje SMPP veze:

import smpplib

# SMPP parametri veze
HOST = 'your.ozeki.server'
PORT = 2775
SYSTEM_ID = 'your_username'
PASSWORD = 'your_password'

# Inicijalizacija SMPP klijenta
client = smpplib.client.Client(HOST, PORT)

# Povezivanje kao transceiver za slanje SMS-a
client.connect()
client.bind_transmitter(
    system_id=SYSTEM_ID,
    password=PASSWORD,
)

print("Uspješno povezan s SMPP serverom koristeći Python")

Ključne SMPP Protocol Data Units (PDU)

SMPP protokol se oslanja na Protocol Data Units (PDU) za upravljanje vezama i porukama. Ispod je tablica koja sažima ključne PDU-e korištene u Pythonu za SMPP API integraciju:

PDU Python metoda Svrha
bind_transmitter client.bind_transmitter() Inicira vezu za slanje SMS poruka
bind_receiver client.bind_receiver() Uspostavlja vezu za primanje SMS poruka
bind_transceiver client.bind_transceiver() Omogućuje dvosmjernu SMS komunikaciju (slanje i primanje)

Održavanje stabilne SMPP API veze u Pythonu za slanje SMS-a

SMPP veze zahtijevaju periodične "keep-alive" signale kako bi se spriječili prekidi veze. PDU enquire_link se šalje svakih 30 sekundi kako bi se održala veza. Ispod je Python primjer koji koristi pristup s nitima za slanje keep-alive signala:

import time
import threading

def send_enquire_link():
    while True:
        try:
            client.enquire_link()
            print("Poslan enquire_link PDU za održavanje SMPP veze")
        except Exception as e:
            print(f"Greška pri slanju enquire_link: {e}")
        time.sleep(30)  # Šalje se svakih 30 sekundi

# Pokretanje keep-alive niti
keepalive_thread = threading.Thread(target=send_enquire_link)
keepalive_thread.daemon = True
keepalive_thread.start()
Slanje SMS-a putem Python-a kroz SMPP API

Nakon uspostave veze, možete slati SMS poruke koristeći submit_sm PDU. Sljedeći Python kod pokazuje kako poslati SMS i upravljati odgovorom:

def send_sms(source_addr, destination_addr, message):
    try:
        # Pošalji 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-bitno kodiranje
        )
        
        print(f"SMS uspješno poslan, ID poruke: {pdu.message_id}")
        
    except smpplib.exceptions.PDUError as e:
        print(f"SMPP PDU greška: {e}")
    except Exception as e:
        print(f"Greška pri slanju SMS-a: {e}")

# Primjer korištenja
send_sms(
    source_addr="12345",
    destination_addr="+1234567890",
    message="Pozdrav iz Python SMPP klijenta!"
)

Upravljanje izvješćima o isporuci SMS-a u Pythonu

Za praćenje statusa isporuke poslanih SMS poruka, možete upravljati izvješćima o isporuci koristeći deliver_sm PDU. Ispod je Python primjer za obradu izvješća o isporuci:

def handle_delivery_report(pdu):
    print(f"Primljeno izvješće o isporuci za poruku {pdu.receipted_message_id}")
    print(f"Status: {pdu.message_state}")

# Postavljanje rukovatelja izvješća o isporuci
client.set_message_received_handler(lambda pdu: handle_delivery_report(pdu))

Potpuni primjer Python SMPP API klijenta za slanje SMS-a

Ispod je potpuni, produkcijski spreman Python skript koji se integrira sa SMPP API-jem za slanje SMS poruka, održavanje stabilne veze i upravljanje izvješćima o isporuci:

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)
        
        # Poveži se na SMPP server
        self.client.connect()
        self.client.bind_transceiver(
            system_id=system_id,
            password=password,
        )
        
        # Pokreni thread za održavanje veze
        self.start_keepalive()
    
    def start_keepalive(self):
        def _keepalive():
            while True:
                try:
                    self.client.enquire_link()
                    print("Signal održavanja veze poslan")
                except Exception:
                    try:
                        self.client.connect()
                        self.client.bind_transceiver(
                            system_id=system_id,
                            password=password,
                        )
                        print("Ponovno spojen na SMPP server")
                    except Exception as e:
                        print(f"Ponovno povezivanje nije uspjelo: {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"Slanje SMS-a nije uspjelo: {e}")
            return None
    
    def handle_message(self, pdu):
        if pdu.command == "deliver_sm":
            print(f"Izvješće o isporuci: {pdu.receipted_message_id} - {pdu.message_state}")
        else:
            print(f"Primljena poruka: {pdu.short_message}")

# Primjer korištenja
if __name__ == "__main__":
    client = SMPPClient(
        host="your.ozeki.server",
        port=2775,
        system_id="your_username",
        password="your_password"
    )
    
    # Pošalji SMS
    client.send_sms(
        from_addr="12345",
        to_addr="+1234567890",
        message="Pozdrav iz Python SMPP klijenta!"
    )
    
    # Održavaj skriptu pokrenutom
    while True:
        time.sleep(1)

Najbolje prakse za integraciju SMPP API-ja s Pythonom

  • Upravljanje greškama: Uvijek implementirajte robusno upravljanje iznimkama za upravljanje greškama veze, PDU greškama i vremenskim ograničenjima.
  • Ponovno uspostavljanje veze: Uključite logiku za automatsko ponovno povezivanje ako se SMPP veza prekine.
  • Evidencija: Evidentirajte status veze, poslane poruke i izvješća o isporuci za otklanjanje grešaka i praćenje.
  • Sigurnost: Pohranite SMPP vjerodajnice sigurno, koristeći varijable okruženja ili konfiguracijsku datoteku.
  • Skalabilnost: Za aplikacije s velikim volumenom SMS poruka, razmislite o korištenju asinkronih biblioteka ili grupiranja veza.

Zaključak

Ovaj vodič pruža detaljan pregled integracije SMPP API-ja s Pythonom koristeći Ozeki SMS Gateway. Korištenjem biblioteke smpplib, programeri mogu uspostaviti pouzdane SMPP veze, slati SMS poruke i upravljati izvješćima o isporuci s lakoćom. Pruženi Python primjeri koda i najbolje prakse osiguravaju robusne i skalabilne SMS aplikacije za različite slučajeve upotrebe, od obavijesti do marketinških kampanja.

Napomena: Za produkcijska okruženja, poboljšajte pruženi kod s sveobuhvatnim upravljanjem greškama, logikom ponovnog povezivanja i evidencijom kako biste osigurali maksimalnu pouzdanost i performanse.

More information