كيفية إرسال رسائل SMS عبر واجهة برمجة تطبيقات SMPP باستخدام PHP

تعد واجهة برمجة تطبيقات الرسائل القصيرة من نظير إلى نظير (SMPP) بروتوكول اتصالات قويًا مصممًا لتبادل رسائل SMS بين الكيانات النظيرة، مثل مراكز الرسائل القصيرة والتطبيقات الخارجية. يوضح هذا الدليل الشامل كيفية تنفيذ واجهة برمجة تطبيقات SMPP باستخدام PHP للاتصال ببوابة Ozeki للرسائل القصيرة، مما يمكّن المطورين من إرسال رسائل SMS وإدارتها بكفاءة. مع أمثلة تفصيلية لشفرة PHP، يغطي هذا البرنامج التعليمي إعداد الاتصال، وإرسال الرسائل، وتقارير التسليم، وأفضل الممارسات لبناء عميل قوي لواجهة برمجة تطبيقات SMPP.

فهم واجهة برمجة تطبيقات SMPP ودورها في رسائل SMS

تُستخدم واجهة برمجة تطبيقات SMPP (الرسائل القصيرة من نظير إلى نظير) على نطاق واسع في صناعة الاتصالات لتسهيل الاتصال بحجم كبير من رسائل SMS. تسمح للتطبيقات بالاتصال ببوابة رسائل قصيرة، مثل بوابة Ozeki للرسائل القصيرة، لإرسال الرسائل واستقبالها بشكل موثوق. من خلال الاستفادة من PHP، يمكن للمطورين إنشاء تطبيقات قابلة للتطوير تتفاعل مع واجهة برمجة تطبيقات SMPP لإدارة سير عمل الرسائل القصيرة. يستخدم هذا الدليل مكتبة php-smpp، وهي أداة قوية لتنفيذ بروتوكول SMPP في PHP، لتبسيط تفاعلات البروتوكول منخفضة المستوى.

إعداد عميل SMPP في PHP لإرسال رسائل SMS عبر واجهة برمجة تطبيقات SMPP

لإرسال رسائل SMS عبر واجهة برمجة تطبيقات SMPP، يجب أولاً خادم SMPP الخاص ببوابة Ozeki للرسائل القصيرة. سنستخدم مكتبة php-smpp التي توفر تنفيذ بروتوكول SMPP:

  1. قم بتثبيت مكتبة php-smpp باستخدام Composer للتعامل مع تفاعلات واجهة برمجة تطبيقات SMPP.
  2. قم بتكوين معلمات الاتصال الخاصة بك، بما في ذلك المضيف، والمنفذ، واسم المستخدم، وكلمة المرور المقدمة من بوابة Ozeki للرسائل القصيرة.
  3. قم بإجراء اتصال بخادم SMPP باستخدام نقل المقبس.

إليك كيفية تثبيت المكتبة:

composer require onlinecity/php-smpp

مثال أساسي للاتصال بواجهة برمجة تطبيقات SMPP في PHP

يوضح كود PHP التالي كيفية إجراء اتصال ببوابة Ozeki للرسائل القصيرة باستخدام واجهة برمجة تطبيقات SMPP. يستخدم هذا المثال مكتبة php-smpp لإنشاء عميل، والاتصال بالخادم، والربط كمرسل لإرسال رسائل SMS.

<?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 = new Socket([$host], $port);
$transport->setRecvTimeout(30000);
$smpp = new Client($transport);

// الاتصال والربط
$transport->open();
$smpp->bindTransmitter($username, $password);

echo "تم الاتصال بنجاح بخادم SMPP\n";

// إرسال الرسالة هنا...

// إغلاق الاتصال
$smpp->close();
?>

يقوم هذا الكود بتهيئة نقل المقبس، وتعيين مهلة لاستقبال البيانات، وربط العميل كمرسل باستخدام بيانات الاعتماد المقدمة. بمجرد الاتصال، يكون العميل جاهزًا لإرسال رسائل SMS عبر واجهة برمجة تطبيقات SMPP.

الحفاظ على الاتصال بـ PHP عبر واجهة برمجة تطبيقات SMPP

لضمان اتصال موثوق بـ واجهة برمجة تطبيقات SMPP، يجب على تطبيق PHP الخاص بك إرسال رسائل keep-alive دورية باستخدام PDU enquire_link. هذا يمنع انتهاء مهلة الاتصال ويضمن التشغيل المستمر. فيما يلي مثال لكيفية تنفيذ آلية keep-alive في PHP.

function sendKeepAlive($smpp) {
    try {
        $smpp->enquireLink();
        echo "تم إرسال keep-alive\n";
    } catch (Exception $e) {
        echo "فشل keep-alive: " . $e->getMessage() . "\n";
        // تنفيذ منطق إعادة الاتصال هنا
    }
}

// إرسال keep-alive كل 30 ثانية
$keepAliveInterval = 30;
$lastKeepAlive = time();
while (true) {
    if (time() - $lastKeepAlive >= $keepAliveInterval) {
        sendKeepAlive($smpp);
        $lastKeepAlive = time();
    }
    // التعامل مع العمليات الأخرى هنا
    sleep(1);
}

يُرسل هذا النص بريدًا إلكترونيًا keep-alive كل 30 ثانية ويتضمن معالجة الأخطاء لإدارة مشكلات الاتصال. إذا فشل keep-alive، يمكنك تنفيذ منطق إعادة الاتصال لاستعادة الاتصال بـ واجهة برمجة تطبيقات SMPP.

إرسال رسائل SMS باستخدام PHP عبر واجهة برمجة تطبيقات SMPP

يتضمن إرسال رسائل SMS عبر واجهة برمجة تطبيقات SMPP في PHP إنشاء رسالة SMS باستخدام PDU submit_sm. يوضح المثال التالي كيفية إرسال رسالة باستخدام مكتبة 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, 'مرحبًا من عميل PHP SMPP!');
$message->setDataCoding(SMPP::DATA_CODING_DEFAULT);

try {
    $messageId = $smpp->sendSMS($message);
    echo "تم إرسال الرسالة بنجاح، المعرف: $messageId\n";
} catch (Exception $e) {
    echo "فشل إرسال الرسالة: " . $e->getMessage() . "\n";
}

في هذا المثال، يتم تعيين عنوان المرسل كسلسلة أبجدية رقمية، ويستخدم رقم المستلم التنسيق الدولي. يضمن إعداد DATA_CODING_DEFAULT التوافق مع رسائل النص القياسية. تضمن معالجة الأخطاء التقاط أي مشكلات أثناء إرسال الرسالة والإبلاغ عنها.

معالجة تقارير التسليم باستخدام PHP عبر واجهة برمجة تطبيقات SMPP

تدعم واجهة برمجة تطبيقات SMPP تقارير التسليم لتتبع حالة الرسائل المرسلة. لاستقبال هذه التقارير في PHP، قم بربط عميلك كمستقبل وقم بمعالجة وحدات PDU الواردة deliver_sm. يوضح الكود التالي كيفية تنفيذ هذه الوظيفة.

// أولاً قم بالربط كمستقبل للحصول على تقارير التسليم
$smpp->bindReceiver($username, $password);

while (true) {
    try {
        $pdu = $smpp->readPDU();
        if ($pdu instanceof DeliverSm) {
            $messageId = $pdu->getReceiptedMessageId();
            $status = $pdu->getMessageStatus();
            
            echo "تقرير التسليم للرسالة $messageId: $status\n";
            
            // إرسال الرد
            $smpp->respond($pdu, new DeliverSmResp());
        }
    } catch (Exception $e) {
        echo "خطأ في قراءة PDU: " . $e->getMessage() . "\n";
        break;
    }
}

يقوم هذا الكود بربط العميل كمستقبل للاستماع إلى تقارير التسليم، ومعالجة وحدات PDU الواردة، وإرسال الردود المناسبة. هذا يضمن أن تطبيق PHP الخاص بك يمكنه تتبع حالات تسليم الرسائل بشكل فعال.

عميل PHP كامل لـ SMPP لإرسال الرسائل القصيرة عبر واجهة برمجة تطبيقات SMPP

يوجد أدناه فصل PHP شامل يضم وظائف واجهة برمجة تطبيقات SMPP، بما في ذلك إدارة الاتصال، وإرسال الرسائل، ومنطق إعادة الاتصال. هذا التنفيذ مصمم للاستخدام في الإنتاج، مع معالجة قوية للأخطاء ومرونة عالية.

<?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 "تم الاتصال بخادم SMPP\n";
        } catch (Exception $e) {
            echo "فشل الاتصال: " . $e->getMessage() . "\n";
            $this->reconnect();
        }
    }
    
    public function sendSMS($from, $to, $message) {
        if (!$this->isConnected) {
            throw new Exception("غير متصل بخادم 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();
    }
}

// مثال للاستخدام
$config = [
    'host' => 'your.ozeki.server',
    'port' => 2775,
    'username' => 'your_username',
    'password' => 'your_password'
];

$client = new SMPPClient($config);

try {
    $messageId = $client->sendSMS('12345', '+1234567890', 'مرحبًا من PHP!');
    echo "تم إرسال الرسالة بالمعرف: $messageId\n";
} catch (Exception $e) {
    echo "خطأ في إرسال الرسالة: " . $e->getMessage() . "\n";
}
?>

يوفر هذا الفصل تنفيذًا قابلًا لإعادة الاستخدام لـ واجهة برمجة تطبيقات SMPP في PHP، مع طرق للاتصال، وإرسال الرسائل، وإعادة الاتصال عند الفشل، وتنظيف الموارد. تم تصميمه ليكون مرنًا وسهل التكامل مع التطبيقات الأكبر.

أفضل الممارسات لبناء عميل SMPP باستخدام PHP

لضمان أن تطبيق PHP الخاص بك الذي يستخدم واجهة برمجة تطبيقات SMPP قوي وقابل للتوسع، اتبع أفضل الممارسات التالية:

  • تنفيذ معالجة قوية للأخطاء: اكتشف الأخطاء وتعامل معها في حالات فشل الاتصال، وأخطاء إرسال الرسائل، ومشكلات معالجة PDU لضمان الموثوقية.
  • استخدم اتصالات دائمة: حافظ على اتصال واحد بـ واجهة برمجة تطبيقات SMPP لتقليل الحمل وتحسين الأداء.
  • تنفيذ طابور الرسائل: لإرسال رسائل SMS بكميات كبيرة، استخدم طابورًا لإدارة تسليم الرسائل ومنع تحميل الخادم الزائد.
  • مراقبة حالة الاتصال: تحقق باستمرار من حالة الاتصال ونفذ منطق إعادة الاتصال التلقائي للتعامل مع انقطاعات الشبكة.
  • استخدم عملية عامل: شغل عميل PHP SMPP الخاص بك كعملية دائمة أو عامل للتشغيل المستمر في بيئات الإنتاج.
  • سجل النشاط: نفذ التسجيل لتتبع أحداث الاتصال، وحالات الرسائل، والأخطاء لأغراض التصحيح والمراقبة.
الختام

لقد أوضح هذا الدليل الشامل كيفية تنفيذ عميل PHP لـ واجهة برمجة تطبيقات SMPP لإرسال وإدارة رسائل SMS باستخدام بوابة Ozeki SMS. من خلال الاستفادة من مكتبة php-smpp، يمكن للمطورين التعامل مع تفاصيل بروتوكول SMPP منخفضة المستوى مع التركيز على بناء تطبيقات قوية. تغطي أمثلة الكود المقدمة إدارة الاتصال، وإرسال الرسائل، ومعالجة تقارير التسليم، وفصل PHP كامل للاستخدام في الإنتاج. بالنسبة للتطبيقات المتقدمة، ضع في اعتبارك تنفيذ ميزات إضافية مثل طابور الرسائل، والتسجيل التفصيلي، والمراقبة لتعزيز الموثوقية والقابلية للتوسع.

لبيئات الإنتاج، تأكد من أن عميل PHP SMPP الخاص بك يتضمن معالجة قوية للأخطاء، ومراقبة الاتصال، والتسجيل. تدعم واجهة برمجة تطبيقات SMPP ميزات متقدمة مثل تحديد أولوية الرسائل والتحكم في معدل الإرسال، والتي يمكن استكشافها مع نمو متطلبات تطبيقك.

More information