اذهب إلى المحتوى

السؤال

نشر

مرحبًا، السلام عليكم
أواجه مشكلة في ربط Webhook مع Facebook باستخدام Ngrok. عند إدخال رابط النفق (Ngrok URL) في إعدادات Webhook داخل تطبيق Facebook، يتم رفضه أو لا يستجيب التطبيق بشكل صحيح.

تفاصيل المشكلة:

قمت بإنشاء Webhook بلغة PHP لاستقبال الأحداث من Facebook (مثل التعليقات على المنشورات).

استخدمت Ngrok لتوفير عنوان URL عام يصل إلى السيرفر المحلي.

عند وضع رابط Ngrok في إعدادات Webhook على Facebook، يتم رفضه أو لا يتم إرسال الطلبات إليه.

جربت أيضًا استخدام LocalTunnel لكن واجهت مشكلة ظهور صفحة تحذيرية تطلب إدخال كلمة مرور، مما أدى إلى فشل الاتصال.

هدف الكود:

استقبال إشعارات Facebook Webhook عند حدوث أحداث مثل التعليقات أو الرسائل.

الرد تلقائيًا على التعليقات أو إرسال رسالة عبر Facebook Messenger API.

محاولات الحل:

✔️ تأكدت من إعدادات Ngrok بالشكل الصحيح:

✔️ جربت خدمات بديلة مثل LocalTunnel، لكنها تطلب كلمة مرور وتسبب مشاكل مع Webhooks.
✔️ استخدمت استضافة مجانية، ولكن لم يعمل Webhook بسبب قيود الأمان.
✔️ تحققت من أن Webhook يعمل محليًا بدون مشاكل عند إرسال بيانات اختبارية باستخدام cURL.
وهذا هو الكود

وهل يوجد مشاريع جاهزة لمثل هذه الافكار
 

index.php webhook.php

Recommended Posts

  • 0
نشر

Facebook يتطلب أن يكون عنوان Webhook مُشفر يبدأ بـ https://، بالتالي رابط Ngrok الذي تستخدمه يجب أن يكون رابط آمن (HTTPS)، وليس الرابط الذي يبدأ بـ http://.

عند إضافة Webhook في إعدادات تطبيق Facebook، يقوم Facebook بإرسال طلب GET إلى عنوان Webhook لديك للتحقق، ويجب كتابة كود لمعالجة الطلب وإرجاع hub.challenge.

أيضًا تأكد من أن قيمة $_GET['hub_mode'] و$_GET['hub_verify_token'] يتم التحقق منها بشكل صحيح.

if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['hub_mode']) && $_GET['hub_mode'] === 'subscribe') {
    if ($_GET['hub_verify_token'] === $verify_token) {
        echo $_GET['hub_challenge'];
        exit;
    } else {
        echo "رمز التحقق غير صحيح";
        exit;
    }
}

ويجب أن تكون قيمة $verify_token في الكود هي نفسها التي أدخلتها في إعدادات Webhook في تطبيق Facebook.

لاحظت أنك تستخدم الرأس ngrok-skip-browser-warning: 1، لتخطي تحذير المتصفح عند الوصول إلى رابط Ngrok من متصفح الويب، لكنه ليس ضروريًا عند التعامل مع Facebook، من الأفضل إزالة أي رؤوس HTTP مخصصة  عند التعامل مع Facebook.

إن استمرت المشكلة حاول فحص سجلات Ngrok أي الـ logs، فواحدة من مميزات Ngrok هي إمكانية مشاهدة الطلبات التي تمر عبره.

افتح متصفح الويب وانتقل إلى http://localhost:4040، وستجد لوحة تحكم تظهر جميع الطلبات الواردة والصادرة، تفقد طلبات Facebook تصل إلى خادمك أم لا.

في حال لم تكن الطلبات تصل، فربما هناك مشكلة في تكوين Ngrok أو في إعدادات Firewall على جهازك.

وتستطيع استخدام أدوات مثل Postman لإرسال طلبات اختبارية إلى Webhook والتأكد من أنه يعمل بشكل صحيح.

أي إرسال طلب GET يحتوي على البارامترات المطلوبة (hub.mode, hub.challenge, hub.verify_token) وتحقق من الاستجابة.

ستجد تفصيل هنا من المستند الرسمي:

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...