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

Short Message Peer-to-Peer (SMPP) API je výkonný telekomunikační protokol určený pro výměnu SMS zpráv mezi partnerskými entitami, jako jsou SMS centra a externí aplikace. Tento komplexní průvodce ukazuje, jak implementovat SMPP API pomocí PHP pro připojení k Ozeki SMS Gateway, což vývojářům umožňuje efektivně odesílat a spravovat SMS zprávy. S podrobnými příklady kódu v PHP tento tutoriál pokrývá nastavení připojení, odesílání zpráv, doručovací zprávy a osvědčené postupy pro vytvoření robustního klienta SMPP API.

Pochopení SMPP API a jeho role v SMS zprávách

SMPP API (Short Message Peer-to-Peer) je široce používáno v telekomunikačním průmyslu pro usnadnění vysokoobjemové SMS komunikace. Umožňuje aplikacím připojit se k SMS bráně, jako je Ozeki SMS Gateway, a odesílat a přijímat zprávy spolehlivě. Využitím PHP mohou vývojáři vytvářet škálovatelné aplikace, které komunikují s SMPP API pro správu SMS workflow. Tento průvodce používá knihovnu php-smpp, robustní nástroj pro implementaci SMPP protokolu v PHP, který zjednodušuje interakce na nízké úrovni protokolu.

Nastavení PHP SMPP klienta pro odesílání SMS přes SMPP API

Pro odesílání SMS přes SMPP API musíte nejprve SMPP serveru Ozeki SMS Gateway. Použijeme knihovnu php-smpp, která poskytuje implementaci SMPP protokolu:

  1. Nainstalujte knihovnu php-smpp pomocí Composeru pro zpracování interakcí s SMPP API.
  2. Nakonfigurujte parametry připojení, včetně hostitele, portu, uživatelského jména a hesla poskytnutých Ozeki SMS Gateway.
  3. Navázat připojení k SMPP serveru pomocí socketového transportu.

Zde je návod, jak nainstalovat knihovnu:

composer require onlinecity/php-smpp

Základní příklad připojení k SMPP API v PHP

Následující kód v PHP ukazuje, jak navázat připojení k Ozeki SMS Gateway pomocí SMPP API. Tento příklad používá knihovnu php-smpp k vytvoření klienta, připojení k serveru a vázání jako vysílače pro odesílání SMS zpráv.

<?php
require 'vendor/autoload.php';

use Smpp\Client;
use Smpp\Transport\Socket;

$host = 'your.ozeki.server';
$port = 2775;
$username = 'your_username';
$password = 'your_password';

// Vytvoření transportu a klienta
$transport = new Socket([$host], $port);
$transport->setRecvTimeout(30000);
$smpp = new Client($transport);

// Připojení a vázání
$transport->open();
$smpp->bindTransmitter($username, $password);

echo "Úspěšně připojeno k SMPP serveru\n";

// Odeslání zprávy zde...

// Uzavření připojení
$smpp->close();
?>

Tento kód inicializuje socketový transport, nastaví časový limit pro příjem dat a váže klienta jako vysílače pomocí poskytnutých přihlašovacích údajů. Jakmile je připojení navázáno, klient je připraven odesílat SMS zprávy přes SMPP API.

Udržování připojení s PHP přes SMPP API

Pro zajištění spolehlivého připojení k SMPP API musí vaše aplikace v PHP odesílat periodické keep-alive zprávy pomocí PDU enquire_link. Tím se zabrání časovému limitu připojení a zajistí se nepřetržitý provoz. Níže je příklad, jak implementovat keep-alive mechanismus v PHP.

function sendKeepAlive($smpp) {
    try {
        $smpp->enquireLink();
        echo "Keep-alive odeslán\n";
    } catch (Exception $e) {
        echo "Keep-alive selhal: " . $e->getMessage() . "\n";
        // Implementujte zde logiku opětovného připojení
    }
}

// Odesílání keep-alive každých 30 sekund
$keepAliveInterval = 30;
$lastKeepAlive = time();
while (true) {
    if (time() - $lastKeepAlive >= $keepAliveInterval) {
        sendKeepAlive($smpp);
        $lastKeepAlive = time();
    }
    // Zde zpracujte další operace
    sleep(1);
}

Tento skript odesílá keep-alive zprávu každých 30 sekund a obsahuje zpracování chyb pro správu problémů s připojením. Pokud keep-alive selže, můžete implementovat logiku opětovného připojení k obnovení připojení k SMPP API.

Odesílání SMS zpráv s PHP přes SMPP API

Odesílání SMS zpráv přes SMPP API v PHP zahrnuje vytvoření SMS zprávy s PDU submit_sm. Následující příklad ukazuje, jak odeslat zprávu pomocí knihovny php-smpp.

use Smpp\Address;
use Smpp\SMS;

$from = new Address('12345', SMPP::TON_ALPHANUMERIC);
$to = new Address('+1234567890', SMPP::TON_INTERNATIONAL, SMPP::NPI_ISDN);

$message = new SMS($from, $to, 'Ahoj z PHP SMPP klienta!');
$message->setDataCoding(SMPP::DATA_CODING_DEFAULT);

try {
    $messageId = $smpp->sendSMS($message);
    echo "Zpráva úspěšně odeslána, ID: $messageId\n";
} catch (Exception $e) {
    echo "Odeslání zprávy selhalo: " . $e->getMessage() . "\n";
}

V tomto příkladu je adresa odesílatele nastavena jako alfanumerický řetězec a číslo příjemce používá mezinárodní formát. Nastavení DATA_CODING_DEFAULT zajišťuje kompatibilitu se standardními textovými zprávami. Zpracování chyb zajišťuje, že všechny problémy při odesílání zprávy jsou zachyceny a nahlášeny.

Zpracování doručovacích zpráv pomocí PHP přes SMPP API

SMPP API podporuje doručovací zprávy pro sledování stavu odeslaných zpráv. Pro přijímání těchto zpráv v PHP se připojte jako příjemce a zpracujte příchozí deliver_sm PDU. Následující kód ukazuje, jak tuto funkci implementovat.

// Nejprve se připojte jako příjemce pro získání doručovacích zpráv
$smpp->bindReceiver($username, $password);

while (true) {
    try {
        $pdu = $smpp->readPDU();
        if ($pdu instanceof DeliverSm) {
            $messageId = $pdu->getReceiptedMessageId();
            $status = $pdu->getMessageStatus();
            
            echo "Doručovací zpráva pro $messageId: $status\n";
            
            // Odeslat odpověď
            $smpp->respond($pdu, new DeliverSmResp());
        }
    } catch (Exception $e) {
        echo "Chyba při čtení PDU: " . $e->getMessage() . "\n";
        break;
    }
}

Tento kód připojí klienta jako příjemce pro naslouchání doručovacím zprávám, zpracovává příchozí PDU a odesílá odpovídající odpovědi. Tím je zajištěno, že vaše PHP aplikace může efektivně sledovat stavy doručení zpráv.

Kompletní PHP SMPP klient pro odesílání SMS přes SMPP API

Níže je uvedena komplexní PHP třída, která zapouzdřuje funkcionalitu SMPP API, včetně správy připojení, odesílání zpráv a logiky opětovného připojení. Tato implementace je navržena pro produkční použití s robustním zpracováním chyb a modularitou.

<?php
require 'vendor/autoload.php';

use Smpp\Client;
use Smpp\Transport\Socket;
use Smpp\Address;
use Smpp\SMS;

class SMPPClient {
    private $transport;
    private $smpp;
    private $config;
    private $isConnected = false;
    
    public function __construct($config) {
        $this->config = $config;
        $this->connect();
    }
    
    public function connect() {
        try {
            $this->transport = new Socket([$this->config['host']], $this->config['port']);
            $this->transport->setRecvTimeout(30000);
            $this->smpp = new Client($this->transport);
            $this->transport->open();
            $this->smpp->bindTransceiver(
                $this->config['username'],
                $this->config['password']
            );
            $this->isConnected = true;
            echo "Připojeno k SMPP serveru\n";
        } catch (Exception $e) {
            echo "Připojení selhalo: " . $e->getMessage() . "\n";
            $this->reconnect();
        }
    }
    
    public function sendSMS($from, $to, $message) {
        if (!$this->isConnected) {
            throw new Exception("Není připojeno k SMPP serveru");
        }
        
        try {
            $fromAddr = new Address($from, SMPP::TON_ALPHANUMERIC);
            $toAddr = new Address($to, SMPP::TON_INTERNATIONAL, SMPP::NPI_ISDN);
            
            $sms = new SMS($fromAddr, $toAddr, $message);
            $sms->setDataCoding(SMPP::DATA_CODING_DEFAULT);
            
            return $this->smpp->sendSMS($sms);
        } catch (Exception $e) {
            $this->isConnected = false;
            throw $e;
        }
    }
    
    public function reconnect() {
        $this->close();
        sleep(5);
        $this->connect();
    }
    
    public function close() {
        if ($this->isConnected) {
            $this->smpp->close();
            $this->isConnected = false;
        }
    }
    
    public function __destruct() {
        $this->close();
    }
}

// Příklad použití
$config = [
    'host' => 'your.ozeki.server',
    'port' => 2775,
    'username' => 'your_username',
    'password' => 'your_password'
];

$client = new SMPPClient($config);

try {
    $messageId = $client->sendSMS('12345', '+1234567890', 'Ahoj z PHP!');
    echo "Zpráva odeslána s ID: $messageId\n";
} catch (Exception $e) {
    echo "Chyba při odesílání zprávy: " . $e->getMessage() . "\n";
}
?>

Tato třída poskytuje opakovaně použitelnou implementaci PHP pro SMPP API, s metodami pro připojení, odesílání zpráv, opětovné připojení při selhání a uvolnění zdrojů. Je navržena tak, aby byla modulární a snadno integrovatelná do větších aplikací.

Doporučené postupy pro vytvoření PHP SMPP klienta

Pro zajištění robustnosti a škálovatelnosti vaší PHP aplikace používající SMPP API dodržujte tyto doporučené postupy:

  • Implementujte robustní zpracování chyb: Zachycujte a zpracovávejte výjimky pro selhání připojení, chyby při odesílání zpráv a problémy se zpracováním PDU, aby byla zajištěna spolehlivost.
  • Používejte trvalá připojení: Udržujte jediné připojení k SMPP API, abyste snížili režii a zlepšili výkon.
  • Implementujte frontu zpráv: Pro odesílání SMS ve vysokém objemu použijte frontu pro správu doručování zpráv a předejte přetížení serveru.
  • Sledujte stav připojení: Průběžně kontrolujte stav připojení a implementujte logiku automatického opětovného připojení pro zvládnutí výpadků sítě.
  • Používejte pracovní proces: Spusťte svého PHP SMPP klienta jako démona nebo pracovní proces pro nepřetržitý provoz v produkčních prostředích.
  • Logujte aktivitu: Implementujte logování pro sledování událostí připojení, stavů zpráv a chyb pro ladění a monitorování.

Závěr

Tento komplexní průvodce ukázal, jak implementovat PHP klienta pro SMPP API k odesílání a správě SMS zpráv pomocí Ozeki SMS Gateway. Využitím knihovny php-smpp mohou vývojáři zvládnout detaily SMPP protokolu na nízké úrovni a zároveň se soustředit na vytváření robustních aplikací. Poskytnuté příklady kódu pokrývají správu připojení, odesílání zpráv, zpracování doručovacích zpráv a kompletní PHP třídu pro produkční použití. Pro pokročilé aplikace zvažte implementaci dalších funkcí, jako je fronta zpráv, podrobné logování a monitorování, abyste zvýšili spolehlivost a škálovatelnost.

Pro produkční prostředí zajistěte, aby váš PHP SMPP klient obsahoval robustní zpracování chyb, monitorování připojení a logování. SMPP API podporuje pokročilé funkce, jako je priorizace zpráv a omezení rychlosti, které lze prozkoumat s růstem požadavků vaší aplikace.

More information