Wie man SMS über die SMPP API mit PHP versendet
Die Short Message Peer-to-Peer (SMPP) API ist ein leistungsstarkes Telekommunikationsprotokoll, das für den Austausch von SMS-Nachrichten zwischen Peer-Entitäten wie SMS-Zentren und externen Anwendungen entwickelt wurde. Diese umfassende Anleitung zeigt, wie Sie die SMPP API mit PHP implementieren, um eine Verbindung zum Ozeki SMS Gateway herzustellen, und ermöglicht Entwicklern, SMS-Nachrichten effizient zu versenden und zu verwalten. Mit detaillierten PHP-Codebeispielen behandelt dieses Tutorial die Verbindungseinrichtung, das Versenden von Nachrichten, Zustellungsberichte und Best Practices für den Aufbau eines robusten SMPP API-Clients.
Die SMPP API und ihre Rolle in der SMS-Kommunikation verstehen
Die SMPP API (Short Message Peer-to-Peer) wird in der
Telekommunikationsbranche häufig verwendet, um die Kommunikation mit hohem SMS-Aufkommen zu ermöglichen. Sie ermöglicht
Anwendungen, eine Verbindung zu einem SMS-Gateway wie dem Ozeki SMS Gateway herzustellen, um
Nachrichten zuverlässig zu senden und zu empfangen. Durch die Nutzung von PHP können
Entwickler skalierbare Anwendungen erstellen, die mit der SMPP API interagieren, um
SMS-Workflows zu verwalten. Diese Anleitung verwendet die php-smpp
-Bibliothek, ein robustes
Tool zur Implementierung des SMPP-Protokolls in PHP,
um Low-Level-Protokollinteraktionen zu vereinfachen.
Einrichten eines PHP SMPP-Clients zum Versenden von SMS über die SMPP API
Um SMS über die SMPP API zu versenden, müssen Sie zunächst einen SMPP-Benutzer einrichten, und dann Ihren Client an den SMPP-Server des Ozeki SMS Gateways binden. Wir verwenden die php-smpp-Bibliothek, die eine SMPP-Protokollimplementierung bereitstellt:
- Installieren Sie die
php-smpp
-Bibliothek mit Composer, um die Interaktion mit der SMPP API zu handhaben. - Konfigurieren Sie Ihre Verbindungsparameter, einschließlich Host, Port, Benutzername und Passwort, die vom Ozeki SMS Gateway bereitgestellt werden.
- Stellen Sie eine Verbindung zum SMPP-Server über einen Socket-Transport her.
So installieren Sie die Bibliothek:
composer require onlinecity/php-smpp
Grundlegendes Verbindungsbeispiel für die SMPP API in PHP
Der folgende PHP-Code zeigt, wie eine Verbindung
zum Ozeki SMS Gateway über die SMPP API hergestellt wird. Dieses Beispiel verwendet die
php-smpp
-Bibliothek, um einen Client zu erstellen, eine Verbindung zum Server herzustellen und
sich als Transmitter für das Versenden von SMS-Nachrichten zu binden.
<?php require 'vendor/autoload.php'; use Smpp\Client; use Smpp\Transport\Socket; $host = 'your.ozeki.server'; $port = 2775; $username = 'your_username'; $password = 'your_password'; // Transport und Client erstellen $transport = new Socket([$host], $port); $transport->setRecvTimeout(30000); $smpp = new Client($transport); // Verbinden und binden $transport->open(); $smpp->bindTransmitter($username, $password); echo "Erfolgreich mit dem SMPP-Server verbunden\n"; // Hier Nachricht versenden... // Verbindung schließen $smpp->close(); ?>
Dieser Code initialisiert einen Socket-Transport, setzt ein Timeout für den Empfang von Daten und bindet den Client als Transmitter mit den angegebenen Anmeldedaten. Sobald die Verbindung hergestellt ist, ist der Client bereit, SMS-Nachrichten über die SMPP API zu versenden.
Aufrechterhaltung der Verbindung mit PHP über die SMPP API
Um eine zuverlässige Verbindung zur SMPP API zu gewährleisten, muss Ihre PHP-
Anwendung regelmäßige Keep-Alive-Nachrichten mit der enquire_link
-
PDU senden. Dies verhindert, dass die Verbindung aufgrund von Timeouts abbricht, und gewährleistet einen kontinuierlichen Betrieb.
Nachfolgend finden Sie ein Beispiel, wie Sie einen Keep-Alive-Mechanismus in PHP implementieren können.
function sendKeepAlive($smpp) { try { $smpp->enquireLink(); echo "Keep-Alive gesendet\n"; } catch (Exception $e) { echo "Keep-Alive fehlgeschlagen: " . $e->getMessage() . "\n"; // Implementieren Sie hier die Wiederherstellungslogik } } // Alle 30 Sekunden ein Keep-Alive senden $keepAliveInterval = 30; $lastKeepAlive = time(); while (true) { if (time() - $lastKeepAlive >= $keepAliveInterval) { sendKeepAlive($smpp); $lastKeepAlive = time(); } // Hier andere Operationen handhaben sleep(1); }
Dieses Skript sendet alle 30 Sekunden eine Keep-Alive-Nachricht und beinhaltet eine Fehlerbehandlung für Verbindungsprobleme. Wenn ein Keep-Alive fehlschlägt, können Sie eine Wiederherstellungslogik implementieren, um die Verbindung zur SMPP API wiederherzustellen.
SMS-Nachrichten mit PHP über die SMPP API versenden
Das Versenden von SMS-Nachrichten über die SMPP API in PHP
erfordert die Erstellung einer SMS-Nachricht mit der submit_sm
-PDU. Das folgende
Beispiel zeigt, wie Sie eine Nachricht mit der php-smpp
-Bibliothek versenden.
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, 'Hallo vom PHP SMPP-Client!'); $message->setDataCoding(SMPP::DATA_CODING_DEFAULT); try { $messageId = $smpp->sendSMS($message); echo "Nachricht erfolgreich gesendet, ID: $messageId\n"; } catch (Exception $e) { echo "Nachricht konnte nicht gesendet werden: " . $e->getMessage() . "\n"; }
In diesem Beispiel wird die Absenderadresse als alphanumerische Zeichenkette festgelegt, und die
Empfängernummer verwendet das internationale Format. Die Einstellung DATA_CODING_DEFAULT
stellt die Kompatibilität mit Standard-Textnachrichten sicher. Die Fehlerbehandlung stellt sicher,
dass Probleme beim Versenden der Nachricht erkannt und gemeldet werden.
Umgang mit Zustellungsberichten in PHP über die SMPP-API
Die SMPP-API unterstützt Zustellungsberichte, um den Status von
gesendeten Nachrichten zu verfolgen. Um diese Berichte in PHP zu empfangen,
binden Sie Ihren Client als Empfänger und verarbeiten Sie eingehende deliver_sm
-PDUs.
Der folgende Code zeigt, wie Sie diese Funktionalität implementieren.
// Zuerst als Empfänger binden, um Zustellungsberichte zu erhalten $smpp->bindReceiver($username, $password); while (true) { try { $pdu = $smpp->readPDU(); if ($pdu instanceof DeliverSm) { $messageId = $pdu->getReceiptedMessageId(); $status = $pdu->getMessageStatus(); echo "Zustellungsbericht für $messageId: $status\n"; // Antwort senden $smpp->respond($pdu, new DeliverSmResp()); } } catch (Exception $e) { echo "Fehler beim Lesen der PDU: " . $e->getMessage() . "\n"; break; } }
Dieser Code bindet den Client als Empfänger, um auf Zustellungsberichte zu warten, verarbeitet eingehende PDUs und sendet entsprechende Antworten. Dadurch kann Ihre PHP-Anwendung Nachrichtenzustellungsstatus effektiv verfolgen.
Vollständiger PHP-SMPP-Client zum Senden von SMS über die SMPP-API
Unten finden Sie eine umfassende PHP-Klasse, die die Funktionalität der SMPP-API kapselt, einschließlich Verbindungsverwaltung, Nachrichtenversand und Wiederherstellungslogik. Diese Implementierung ist für den Produktionseinsatz konzipiert, mit robuster Fehlerbehandlung und Modularität.
<?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 "Mit SMPP-Server verbunden\n"; } catch (Exception $e) { echo "Verbindung fehlgeschlagen: " . $e->getMessage() . "\n"; $this->reconnect(); } } public function sendSMS($from, $to, $message) { if (!$this->isConnected) { throw new Exception("Nicht mit SMPP-Server verbunden"); } 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(); } } // Anwendungsbeispiel $config = [ 'host' => 'your.ozeki.server', 'port' => 2775, 'username' => 'your_username', 'password' => 'your_password' ]; $client = new SMPPClient($config); try { $messageId = $client->sendSMS('12345', '+1234567890', 'Hallo von PHP!'); echo "Nachricht gesendet mit ID: $messageId\n"; } catch (Exception $e) { echo "Fehler beim Senden der Nachricht: " . $e->getMessage() . "\n"; } ?>
Diese Klasse bietet eine wiederverwendbare PHP-Implementierung der SMPP-API, mit Methoden zum Verbinden, Nachrichtenversand, Wiederherstellen bei Fehlern und Bereinigen von Ressourcen. Sie ist modular gestaltet und leicht in größere Anwendungen zu integrieren.
Beste Praktiken für den Aufbau eines PHP-SMPP-Clients
Um sicherzustellen, dass Ihre PHP-Anwendung mit der SMPP-API robust und skalierbar ist, befolgen Sie diese Best Practices:
- Robuste Fehlerbehandlung implementieren: Fangen und behandeln Sie Ausnahmen für Verbindungsfehler, Nachrichtenversandprobleme und PDU-Verarbeitungsfehler, um Zuverlässigkeit zu gewährleisten.
- Persistente Verbindungen nutzen: Halten Sie eine einzige Verbindung zur SMPP-API aufrecht, um Overhead zu reduzieren und die Leistung zu verbessern.
- Nachrichtenwarteschlange implementieren: Verwenden Sie für hohe Nachrichtenaufkommen eine Warteschlange, um die Nachrichtenzustellung zu verwalten und Serverüberlastung zu vermeiden.
- Verbindungsstatus überwachen: Überprüfen Sie kontinuierlich den Verbindungsstatus und implementieren Sie automatische Wiederherstellungslogik für Netzwerkunterbrechungen.
- Worker-Prozess verwenden: Führen Sie Ihren PHP-SMPP-Client als Daemon oder Worker-Prozess für kontinuierlichen Betrieb in Produktionsumgebungen aus.
- Aktivitäten protokollieren: Implementieren Sie Protokollierung, um Verbindungsereignisse, Nachrichtenstatus und Fehler zur Fehlerbehebung und Überwachung zu verfolgen.
Fazit
Dieser umfassende Leitfaden hat gezeigt, wie Sie einen PHP-Client
für die SMPP-API implementieren, um SMS-Nachrichten mit dem
Ozeki SMS Gateway zu senden und zu verwalten. Durch die Nutzung der php-smpp
-Bibliothek
können Entwickler sich auf die Erstellung robuster Anwendungen konzentrieren, während
die Details des SMPP-Protokolls abstrahiert werden. Die bereitgestellten
Codebeispiele decken Verbindungsverwaltung, Nachrichtenversand, Zustellungsberichte
und eine vollständige PHP-Klasse für den Produktionseinsatz ab.
Für fortgeschrittene Anwendungen können zusätzliche Funktionen wie Nachrichtenwarteschlangen,
detaillierte Protokollierung und Überwachung implementiert werden, um Zuverlässigkeit
und Skalierbarkeit zu verbessern.
Für Produktionsumgebungen sollten Sie sicherstellen, dass Ihr PHP-SMPP-Client robuste Fehlerbehandlung, Verbindungsüberwachung und Protokollierung enthält. Die SMPP-API unterstützt erweiterte Funktionen wie Nachrichtenpriorisierung und Drosselung, die bei wachsenden Anforderungen erkundet werden können.
More information
- Wie man eine SMPP-API-Client-Verbindung mit Ihrem SMSC einrichtet
- Wie man einen SMPP-API-Server einrichtet, um SMS von mehreren Apps zu senden und zu empfangen
- Wie man den richtigen SMPP-API-Anbieter für Ihr Unternehmen auswählt
- Wie man SMS mit der SMPP-API auf Protokollebene sendet
- Wie man SMS über die SMPP-API mit Python sendet
- Wie man SMS über die SMPP-API mit Javascript sendet
- Wie man SMS über die SMPP-API mit Java sendet
- Wie man SMS über die SMPP-API mit PHP sendet
- Wie man SMS über die SMPP API mit C# sendet
- Wie man SMS über die SMPP-API mit C/C++ sendet
- Wie man SMS mit der SMPP-API empfängt
- Wie man einen SMS-Zustellungsbericht mit der SMPP-API empfängt
- SMPP-API FAQ