خبرة technical

Webhook لمستوى إرسال رسائل SMS التي لا تنتج: دليل التحكم

Webhook لا تعمل: أسباب حقيقية، طريقة التشخيص والتحليلات الفعلية للأسواق المغربية.

Webhook لمستوى إرسال رسائل SMS التي لا تنتج: دليل التحكم
محتويات هذا المقال
  1. تم تطوير تطبيق [Laravel](/fr/blog/sms-laravel-maroc/) أو Node.js الذي يفعله إرسال رسائل SMS. إرسال يعمل بشكل مثالي، يعود API إلى نجاح (HTTP `200`). أنت الآن تتوقع إرسال مكالمة (webhook) من حالة التسليم (DLR) لتحديث قاعدة بياناتك وتذكير المستخدم بأن رسالة SMS قد وصلت.
  2. كيف يعمل Webhook DLR
  3. 5 أخطاء الإعدادات الأكثر شيوعاً
  4. اختبار نقطة انتهاء مع ngrok أو webhook.site
  5. استراتيجية إعادة التأهيل والتراجع في الانتخابات

تم تطوير تطبيق [Laravel](/fr/blog/sms-laravel-maroc/) أو Node.js الذي يفعله إرسال رسائل SMS. إرسال يعمل بشكل مثالي، يعود API إلى نجاح (HTTP `200`). أنت الآن تتوقع إرسال مكالمة (webhook) من حالة التسليم (DLR) لتحديث قاعدة بياناتك وتذكير المستخدم بأن رسالة SMS قد وصلت.

لكن لا يحدث شيء. لا يزال نقطة انتهاءك هادئة، لا يتم تحديث جدولك.

هذا هو مشكلة الإعدادات الكلاسيكية في معمارات الأحداث. إليك كيفية إزالة DLR (Delivery Report) Webhook الذي لا يفعله.

كيف يعمل Webhook DLR

عند إرسال رسالة SMS من خلال API ، فإن العملية تتم بشكل غير متزامن. يقوم API بإرسال الرسالة ، ويعطيك message_id ، ثم يتم إرسالها إلى شركات الاتصالات (Moroc Telecom, inwi, Orange). هو فقط عندما يثبت الهاتف الرائد وصوله ، يتم إرسال الرسالة إلى الشبكة ، والتي تتم إرسال طلب HTTP POST إلى URL الذي قدمته (Webhook الخاص بك).

إذا لم تتمكن من الحصول على أي شيء ، يمكن أن تقع إزعاج الاتصال في ثلاثة مستويات.

5 أخطاء الإعدادات الأكثر شيوعاً

1. لا يمكن الوصول إلى URL الخاص بك بشكل عام إذا كنت تطبق على المستوى المحلي (http://localhost:8000/api/sms/webhook) ، لا يمكن الوصول إليه من قبل خادم منصة SMS. تحتاج إلى استخدام أداة مثل Ngrok لإظهار موقعك المحلي مؤقتا على الإنترنت.

2. يمنع الحريق IP من المورد إذا كان تطبيقك في عملية إنتاج، فمن الضروري التأكد من أن حريق الحريق في المورد الخاص بك (أو Cloudflare) لا يمنع طلبات الوصول (POST) من عناوين IP من المورد الخاص بك.

3. حماية CSRF على النقطة النهائية هذا هو خطأ رقم 1 مع Laravel. حسب المعيار ، يحمي Laravel جميع طلبات POST مع توقيع CSRF (Cross-Site Request Forgery). لأنه لا يوجد توقيع على شبكة SMS ، فإن Laravel يرفع توقيعها مع خطأ 419 Page Expired. حل: إضافة URL من توقيعك على شبكة الإنترنت في استثناءات شبكة الإنترنت VerifyCsrfToken (أو وضع نقطة النهار في routes/api.php بدلاً من `routes/web.php').

4. Timeout قصير جدًا أو سلة التحكم إذا استغرق webhook الخاص بك وقتًا كافًا للرد بسبب إجراء استفسارات معقدة في قاعدة البيانات أو استدعاء خدمات خارجية أخرى، قد يعتقد المورد SMS أن الاتصال قد فشلت (Timeout) بعد 3 أو 5 ثانية. يجب أن يعود webhook الخاص بك دائمًا إلى رمز HTTP 200 في أقرب وقت ممكن، حتى قبل معالجة المعلومات.

5. URL مصممة بشكل خاطئ في الاستفسار تأكد من أن URL Webhook مصممة بشكل جيد، سواء على المستوى العالمي في لوحة التحكم الخاصة بك أو بشكل إيجابي في إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي إجمالي.

اختبار نقطة انتهاء مع ngrok أو webhook.site

من أجل إزالة المشكلة، فإن أسرع الطريقة هي استخدام webhook.site. 1. إنشاء URL مؤقت على webhook.site. 2. تثبيت هذا URL ك Webhook للمستخدم الخاص بك SMS. 3. إرسال SMS اختبار. 4. إذا حصلت على مكافأة على webhook.site، فإن الشركة تعمل بشكل جيد: المشكلة تأتي من رمزك أو شاحناتك أو توجيهك. 5. إذا لم يحدث شيء على webhook.site، فإن المشكلة تأتي من تثبيت الموقع الخاص بك (URL غير معروف، Webhooks غير فعالة في الحساب، أو SMS لم يتم إرسالها إلى الشركة).

استراتيجية إعادة التأهيل والتراجع في الانتخابات

حتى مع التكوين المثالي، يمكن أن يلجأ webhook إلى إلغاء (إلغاء الشبكة، إعادة تشغيل المورد الخاص بك). تحقق Retry Policy من منتجك: كم مرة سيتم إلغاء webhook في حالة خطأ 500؟

في التطبيقات الأكثر أهمية (بنوك، OTP التجاري)، لا تعتمد فقط على الهواتف المحمولة. تطبق آلية الخسارة في الاستفتاء (استفتاء عادي): إذا لم تتمكن بعد 5 دقائق من الحصول على حالة لمواقع_ID في Pending، فستشعل Cron Job (العمل المحدد) التي ستتطلب من API تدريجياً (على سبيل المثال: `GET /v1/messages/{message_id}') للحصول على الوضع النهائي بالتأكيد.

php
// Exemple de code fonctionnel et asynchrone (Laravel minimal)
Route::post('/api/webhooks/sms', function (Request $request) {
    // 1. On stocke le statut dans une file d'attente pour traitement asynchrone
    ProcessSmsDeliveryReport::dispatch($request->all());

    // 2. On répond TOUT DE SUITE avec un code 200 pour éviter le timeout
    return response()->json(['status' => 'received'], 200);
});

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

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

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

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

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

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

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

ما هو زمن الوصول للتوجيه على شبكات IAM وInwi وOrange؟
نستخدم مسارات محلية نحو اتصالات المغرب (IAM) وأورنج وإنوي، مع تحويل تلقائي بين المسارات. الوسيط الزمني حتى تأكيد المشغّل: 46–58 ثانية (مقاس خلال شتنبر 2026).
كيف تدير المنصة تنسيق الأرقام المغربية؟
يقوم 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 في المغرب