WhatsApp Trigger لا يستقبل الأحداث وتضارب اشتراك Webhook (n8n ذاتي الاستضافة)

مرحباً بالجميع،
أنا أواجه هذه المشكلة حالياً ولم أتمكن من حلها.
لقد أجريت اختبارات إضافية:

  • تحقق من بيانات اعتماد OAuth.
  • تحقق من HTTPS/SSL.
  • اختبر عنوان URL للاختبار وعنوان URL الإنتاج.
  • نشر سير العمل.
  • تأكد من استقبال Meta لأحداث webhook.
  • سير العمل لا يزال يفشل مع:
    “معرّف تطبيق WhatsApp لديه بالفعل اشتراك webhook.”
    هل واجه أحد هذه المشكلة من قبل أو يمكنه اقتراح كيفية إزالة اشتراك webhook الموجود أو إعادة تعيين WhatsApp Trigger؟
    سأكون ممتناً جداً لأي مساعدة.
    شكراً لك.

البيئة

  • إصدار n8n: أحدث إصدار ذاتي الاستضافة
  • النشر: Docker
  • موفر الاستضافة: Hostinger VPS
  • نظام التشغيل: Ubuntu
  • النطاق: https://n8n-teep.srv1761962.hstgr.cloud
  • HTTPS/SSL: مفعّل وعامل
  • تكامل WhatsApp: Meta WhatsApp Cloud API (OAuth)
  • عقدة AI: OpenAI Chat Model

وصف المشكلة

أحاول بناء سير عمل بسيط للرد الآلي على WhatsApp مدعوم بالذكاء الاصطناعي.
سير العمل:

WhatsApp Trigger
      ↓
AI Agent
      ↓
OpenAI Chat Model

لم يتم تنفيذ وكيل AI لأن WhatsApp Trigger لم يستقبل أبداً الأحداث الواردة.

ما يعمل

  • بيانات اعتماد OAuth الخاصة بـ WhatsApp تتصل بنجاح.
  • اختبار اتصال OAuth ناجح.
  • نطاق HTTPS يمكن الوصول إليه.
  • رقم اختبار Meta WhatsApp Cloud API يعمل بشكل صحيح.
  • يمكنني إرسال رسائل القالب بنجاح من لوحة تحكم Meta Developer.
  • لوحة تحكم Meta Developer تعرض أحداث webhook الواردة في قسم Check Test Webhooks.

ما لا يعمل

عندما أنقر على Execute Step على WhatsApp Trigger، يدخل:

Listening for test event

ثم أرسل رسالة WhatsApp إلى رقم الاختبار.
لا يستقبل الزناد الحدث أبداً ويستمر في الانتظار إلى الأبد.
لم يتم إنشاء أي تنفيذ.
لا يبدأ وكيل AI.

خطأ إضافي

عند نشر أو تنفيذ سير العمل، أتلقى الخطأ التالي:

معرّف تطبيق WhatsApp لديه بالفعل اشتراك webhook.
احذفها أو استخدم تطبيقاً آخر قبل تنفيذ الزناد.
بسبب قيود واجهة برمجة تطبيقات WhatsApp، يمكنك الحصول على زناد واحد فقط لكل تطبيق.

ما جربته بالفعل

  • أعدت إنشاء بيانات اعتماد OAuth الخاصة بـ WhatsApp.
  • تحقق من صحة بيانات اعتماد OAuth.
  • اختبر عنوان URL للاختبار وعنوان URL الإنتاج.
  • نشر سير العمل.
  • تحقق من شهادة SSL.
  • تأكد من استقبال Meta لأحداث webhook.
  • أعادة بناء سير العمل من الصفر.
  • اختبر مع عقدة WhatsApp Trigger فقط.
  • أزلت وكيل AI من الاختبار.
  • تحقق من أن المشكلة غير مرتبطة بعقدة OpenAI.

معلومات إضافية

لدي مثيل n8n ذاتي الاستضافة آخر يعمل على خادم VPS آخر من Hostinger.
من الممكن أن تكون نفس تطبيق Meta WhatsApp متصلة سابقاً بتلك الحالة.
أنا غير متأكد ما إذا كان اشتراك webhook قديم يمنع هذه الحالة الجديدة من تسجيل webhook الخاص بها.

الأسئلة

  1. كيف يمكنني تحديد webhook المسجل حالياً لتطبيق WhatsApp الخاص بي؟
  2. هل هناك طريقة لإزالة أو استبدال اشتراك webhook الموجود دون إنشاء تطبيق Meta جديد؟
  3. هل يقوم WhatsApp Trigger بإلغاء تسجيل webhooks القديمة تلقائياً؟
  4. هل هناك أي أمر أو نقطة نهاية API يمكنني استخدامها لإعادة تعيين تسجيل webhook يدوياً؟
  5. هل هناك أي سجلات يجب عليّ فحصها على مثيل n8n الذي أستضيفه بنفسي لتشخيص سبب فشل تسجيل webhook؟

السلوك المتوقع

يجب أن تؤدي رسائل WhatsApp الواردة إلى تشغيل سير العمل فوراً.

السلوك الفعلي

يبقى الزناد في حالة “Listening for test event” إلى الأبد، وينتج عن نشر سير العمل خطأ تعارض اشتراك webhook.
سأكون ممتناً جداً لأي توجيهات.
شكراً لك.
إليك التفاصيل الكاملة:

@Hussain_Farooq هذا الخطأ بالذات، n8ns trigger يتحقق من اشتراك تطبيقك الحالي في webhook ويتراجع عندما لا تطابق callback_url الخاص به عنوان URL الذي يريده هذا trigger، وmeta يسمح بـ webhook واحد فقط لكل تطبيق. لذا meta تسلم أحداثك إلى callback URL آخر/قديم، وهذا هو سبب ظهور الأحداث في لوحة المعلومات لكن trigger لا يراها. الحل: في لوحة تحكم تطبيق meta الخاص بك اذهب إلى WhatsApp > Configuration وحذف callback webhook الموجود (أو اضبطه على عنوان URL الدقيق المعروض على عقدة n8n trigger)، ثم فعّل workflow حتى يسجل n8n عنوان URL الإنتاج الخاص به وتأكد من اشتراك حقل messages. إنه trigger واحد لكل تطبيق، لذا إذا كانت flow أخرى أو instance سجلت callback هناك بالفعل فهذا هو التضارب الخاص بك.

لرؤية ما هو مسجل بالضبط، يجب عليك استخدام Meta Graph API Explorer أو curl. يحدث الاشتراك على مستوى WhatsApp Business Account (WABA)، وليس فقط على مستوى التطبيق.

الفحص: قم بتشغيل طلب GET إلى نقطة النهاية التالية: https://graph.facebook.com/v21.0/{your-waba-id}/subscribed_apps (استبدل {your-waba-id} برقم معرف حسابك التجاري WhatsApp الموجود في إعدادات Meta Business).

إذا كانت الاستجابة تحتوي على معرف تطبيقك، فهذا يعني أن التطبيق مشترك حاليًا في استقبال الأحداث لهذا الحساب، وهذا هو السبب في حجب n8n.

لـ “تمهيد الطريق” لمثيل n8n الجديد، تحتاج إلى إلغاء اشتراك التطبيق من WABA.

الحل عبر Graph API:

  1. انتقل إلى Meta Graph API Explorer.
  2. حدد تطبيقك وتأكد من أن لديك System User Token أو Page Access Token مع صلاحيات whatsapp_business_management.
  3. غير الطريقة إلى DELETE.
  4. أدخل نقطة النهاية: /{your-waba-id}/subscribed_apps
  5. نفذ الطلب. هذا سيزيل اشتراك التطبيق من WABA ويحرر «القفل».

لا، ليس بشكل موثوق عبر مثيلات مختلفة. بينما يحاول العقدة تحديث webhook عند تنشيط سير عمل على نفس المثيل، فإنها لا يمكنها معرفة الاشتراكات التي تم إنشاؤها بواسطة خادم/VPS مختلف. عندما انتقلت إلى VPS Hostinger الجديد، كان Meta API لا يزال يتذكر عنوان URL للرد من VPS القديم.

إذا كنت تفضل استخدام المحطة الطرفية، يمكنك استخدام أوامر curl هذه (استبدل العناصر النائبة):

للتحقق من الاشتراك الحالي:

curl -X GET "https://graph.facebook.com/v21.0/<WABA_ID>/subscribed_apps?access_token=<YOUR_TOKEN>"

لإزالة الاشتراك:

curl -X DELETE "https://graph.facebook.com/v21.0/<WABA_ID>/subscribed_apps?access_token=<YOUR_TOKEN>"

إذا استمر الخطأ بعد تنظيف API، تحقق من سجلات Docker لرؤية رد الخطأ الخام الدقيق من Meta:

docker logs -f <your-n8n-container-name>

ابحث عن إدخالات تحتوي على whatsapp أو webhook registration. إذا رأيت 400 Bad Request مع رمز خطأ محدد من Meta، فسيؤكد ما إذا كانت المشكلة «اشتراك مكرر» أو «فشل التحقق» (الذي يحدث إذا كان متغير بيئتك WEBHOOK_URL غير صحيح).

إذا كنت تريد أن تعمل بشكل فوري، اتبع هذا التسلسل بالضبط:

  1. تنظيف Meta: قم بتشغيل طلب DELETE على /{waba-id}/subscribed_apps كما هو موضح أعلاه.
  2. مسح حالة n8n الداخلية:
    • افتح سير العمل الخاص بك.
    • احذف عقدة WhatsApp Trigger بالكامل.
    • احفظ سير العمل.
    • أعد تحديث صفحة المتصفح.
    • أعد إضافة عقدة WhatsApp Trigger من البداية. (هذا يجبر n8n على نسيان معرفات التسجيل المخزنة مؤقتًا).
  3. تحقق من متغيرات البيئة: تأكد من أن متغير بيئة Docker WEBHOOK_URL هو بالضبط https://n8n-teep.srv1761962.hstgr.cloud.
  4. انشر: «انشر» سير العمل أولاً، بدلاً من النقر على «تنفيذ الخطوة». تنشيط سير العمل هو الطريقة الأكثر موثوقية لـ n8n لتسجيل عنوان URL الإنتاج.