Como Enviar SMS através da API SMPP usando PHP

// Primeiro vincule como receptor para obter relatórios de entrega $smpp->bindReceiver($username, $password); while (true) { try { $pdu = $smpp->readPDU(); if ($pdu instanceof DeliverSm) { $messageId = $pdu->getReceiptedMessageId(); $status = $pdu->getMessageStatus(); echo "Relatório de entrega para $messageId: $status\n"; // Envie uma resposta $smpp->respond($pdu, new DeliverSmResp()); } } catch (Exception $e) { echo "Erro ao ler PDU: " . $e->getMessage() . "\n"; break; } }

Este código vincula o cliente como um receptor para ouvir relatórios de entrega, processa os PDUs recebidos e envia respostas apropriadas. Isso garante que sua aplicação PHP possa rastrear os status de entrega de mensagens de forma eficaz.

Cliente PHP SMPP Completo para Envio de SMS via API SMPP

Abaixo está uma classe PHP abrangente que encapsula a funcionalidade da API SMPP, incluindo gerenciamento de conexão, envio de mensagens e lógica de reconexão. Esta implementação é projetada para uso em produção, com tratamento robusto de erros e modularidade.

<?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 "Conectado ao servidor SMPP\n";
        } catch (Exception $e) {
            echo "Falha na conexão: " . $e->getMessage() . "\n";
            $this->reconnect();
        }
    }
    
    public function sendSMS($from, $to, $message) {
        if (!$this->isConnected) {
            throw new Exception("Não conectado ao servidor SMPP");
        }
        
        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();
    }
}

// Exemplo de uso
$config = [
    'host' => 'your.ozeki.server',
    'port' => 2775,
    'username' => 'your_username',
    'password' => 'your_password'
];

$client = new SMPPClient($config);

try {
    $messageId = $client->sendSMS('12345', '+1234567890', 'Olá do PHP!');
    echo "Mensagem enviada com ID: $messageId\n";
} catch (Exception $e) {
    echo "Erro ao enviar mensagem: " . $e->getMessage() . "\n";
}
?>

Esta classe fornece uma implementação reutilizável em PHP da API SMPP, com métodos para conexão, envio de mensagens, reconexão em caso de falha e limpeza de recursos. Ela foi projetada para ser modular e fácil de integrar em aplicações maiores.

Melhores Práticas para Construir um Cliente PHP SMPP

Para garantir que sua aplicação PHP usando a API SMPP seja robusta e escalável, siga estas melhores práticas:

  • Implemente Tratamento de Erros Robusto: Capture e trate exceções para falhas de conexão, erros no envio de mensagens e problemas no processamento de PDUs para garantir confiabilidade.
  • Use Conexões Persistentes: Mantenha uma única conexão com a API SMPP para reduzir sobrecarga e melhorar o desempenho.
  • Implemente Enfileiramento de Mensagens: Para envio de SMS em alto volume, use uma fila para gerenciar a entrega de mensagens e evitar sobrecarga do servidor.
  • Monitore o Estado da Conexão: Verifique continuamente o status da conexão e implemente lógica de reconexão automática para lidar com interrupções de rede.
  • Use um Processo Worker: Execute seu cliente PHP SMPP como um daemon ou processo worker para operação contínua em ambientes de produção.
  • Registre Atividades: Implemente logs para rastrear eventos de conexão, status de mensagens e erros para depuração e monitoramento.

Conclusão

Este guia abrangente demonstrou como implementar um cliente PHP para a API SMPP para enviar e gerenciar mensagens SMS usando o Ozeki SMS Gateway. Ao aproveitar a biblioteca php-smpp, desenvolvedores podem lidar com detalhes de baixo nível do protocolo SMPP enquanto se concentram em construir aplicações robustas. Os exemplos de código fornecidos cobrem gerenciamento de conexão, envio de mensagens, manipulação de relatórios de entrega e uma classe PHP completa para uso em produção. Para aplicações avançadas, considere implementar recursos adicionais como enfileiramento de mensagens, registro detalhado e monitoramento para melhorar confiabilidade e escalabilidade.

Para ambientes de produção, certifique-se de que seu cliente PHP SMPP inclua tratamento robusto de erros, monitoramento de conexão e registro. A API SMPP suporta recursos avançados como priorização de mensagens e limitação de taxa, que podem ser explorados conforme suas necessidades de aplicação crescem.

More information