خبرة technical

إدارة التخفيضات والضغط SMS في حالة فشل إرسال (المعمارية وكود)

Retry queue sms fail send : دليل تقني مع أمثلة الكود للمطورين في المغرب.

إدارة التخفيضات والضغط SMS في حالة فشل إرسال (المعمارية وكود)
محتويات هذا المقال
  1. في تطوير البرمجيات ، غالبا ما يكون هناك تركيز على أنه إذا أردت إرسال مكالمة API إلى الخطأ ، فمن الممكن فقط إعادة تشغيلها. في مجال الرسائل التلفزيونية ، وخاصة للاتصال بالرسائل SMS في المغرب ، فإن هذا النهج البسيط سيكون ضاربا.
  2. لماذا يمكن أن يزيد من الارتياح الغامض على المشكلة
  3. الفرق بين الخطأ المؤقت والمستمر
  4. استراتيجية Backoff التكتيكية
  5. مثال التطبيق مع Laravel Horizon / BullMQ

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

قد يؤدي إعادة تشغيل رسالة رسالة رسالة رسالة بعد فشل دون تحليل السبب إلى البيانات المزدوجة (إرسال 15 مرة من نفس الرسالة إلى العملاء) ، أو إغلاق حسابك من قبل آلية مكافحة البريد الالكتروني (/fr/blog/throttling-sms-au-maroc-à-quelle-vitesse-pouvez-vous-reellement/) ، أو غرق شبكة قديمة بالفعل.

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

لماذا يمكن أن يزيد من الارتياح الغامض على المشكلة

تخيل أن Maroc Telecom (IAM) يواجه محدودي قطع شبكة 2 دقائق. يحاول نظامك إرسال 1000 إشعارات تجارية عاجلة. يقوم API بإرسال Timeout أو خطأ في خادم HTTP 503. إذا قمت بإنشاء رمز بسيط while(failed) { retry(); }، فسوف تتحطم API مع 1000 طلبات إضافية كل ثانية. بمجرد إعادة بناء الشبكة، سيحصل الشبكة على 50 000 طلبات في وقت واحد، مما سيؤدي إلى سقوطها مرة أخرى.

الفرق بين الخطأ المؤقت والمستمر

قبل التفكير في Retry ، يجب أن يقرأ رمز الخطأ HTTP أو حالة DLR من API.

لا تتكرر أبدًا (خطأ دائم) : - HTTP 400: رقم الهدف مصممة بشكل خاطئ. - HTTP 401 / 403: مفتوح مفتاح API الخاص بك أو ID المرسلة مستحيل. - DLR Failed: يثبت المستخدم أنه لا يوجد رقم.

عندما تظهر (خطأ مؤقت) : - HTTP 429: حصلت على الحد الأدنى من سرعة النقل (Rate Limit). - HTTP 500 / 502 / 503: الحد الأدنى من سرعة النقل SMS أو الاتصال الشبكي المغربي غير متوفر مؤقتًا.

استراتيجية Backoff التكتيكية

Exponential Backoff هو ألغاز يحدد مدة التوقف بين كل محاولة إعادة تشغيل. بدلاً من محاولة إعادة تشغيل كل ثانية، يمكنك محاولة إعادة تشغيلها بعد 2 ثانية، ثم 4 ثانية، ثم 8 ثانية.

مثال التطبيق مع Laravel Horizon / BullMQ

في الأكاديميات الحديثة، لا يتم التعامل مع إعادة تدوير في جهاز التحكم HTTP. يحرك الرسالة إلى Message Broker (مثل Redis) ويترك Worker لمواجهة ذلك.

في PHP (Laravel Queues) Laravel يتعامل مع backoff الإحصائي بطريقة مثالية مباشرة في خصائص "العملات" الخاصة بك.

php
namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class SendSmsNotification implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $phoneNumber;
    public $message;

    // Nombre maximal de tentatives (ex: abandonner après 5 essais)
    public $tries = 5;

    // Algorithme de recul : réessayer après 2s, 10s, 30s, 60s
    public function backoff()
    {
        return [2, 10, 30, 60];
    }

    public function handle()
    {
        $response = EnvoiSmsApi::send($this->phoneNumber, $this->message);

        // Si l'API renvoie un 400 (erreur permanente), on abandonne tout de suite
        if ($response->status === 400) {
            $this->fail(new \Exception('Numéro invalide, abandon.'));
            return;
        }

        // Si c'est une erreur 503, la fonction va naturellement throw une exception
        // et Laravel replacera le Job dans la file d'attente avec le backoff prévu.
        if (!$response->successful()) {
            throw new \Exception('Erreur temporaire API.');
        }
    }
}

قاعدة الزمنية للاتصال بالإنترنت إذا كنت تعمل على إرسال الكود OTP لتأهيل 2FA, يمكن أن يكون إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال

لماذا تختار EnvoiSMS لشركتك؟

التوصيل نحو المشغلين

مسارات محلية نحو اتصالات المغرب وأورنج وإنوي، مع تحويل تلقائي بين المسارات وإرسال حالة التسليم عبر webhook.

تحسين الميزانية

واجهة برمجة تطبيقات WhatsApp Business ابتداءً من 0.65 درهم لكل رسالة. أفضل عائد على الاستثمار.

سيادة البيانات (CNDP)

استضافة ومعالجة متوافقة تماماً مع لوائح حماية المعطيات ذات الطابع الشخصي CNDP.

كيف تتابع التوجيه على شبكات IAM وInwi وOrange؟
تُرسل مساراتنا المحلية نحو اتصالات المغرب (IAM) وأورنج وإنوي، مع تحويل تلقائي بين المسارات، حالة التسليم من المشغل لكل رسالة عبر webhook. ويتوقف زمن التسليم على مشغل المستلم وشبكته.
كيف تدير المنصة تنسيق الأرقام المغربية؟
يقوم EnvoiSMS تلقائيًا بتسوية الأرقام المدخلة (06..., 07..., 00212...) إلى معيار E.164 (+212) لتجنب أي فشل في التسليم.

مقالات مقترحة

تنسيق الرسائل القصيرة في المغرب: فواصل الأسطر، تشفير GSM-7 مقابل UCS-2 وتحسين التكلفة
technical

تنسيق الرسائل القصيرة في المغرب: فواصل الأسطر، تشفير GSM-7 مقابل UCS-2 وتحسين التكلفة

تنسيق واتساب للأعمال في المغرب: نص معزز ورموز تعبيرية وأزرار تفاعلية
technical

تنسيق واتساب للأعمال في المغرب: نص معزز ورموز تعبيرية وأزرار تفاعلية

التحقق عبر واتساب بنقرة واحدة وتعبئة تلقائية One-Tap Autofill OTP في المغرب
technical

التحقق عبر واتساب بنقرة واحدة وتعبئة تلقائية One-Tap Autofill OTP في المغرب