Edge Function returned a non-2xx status code: وين الخطأ؟

خطأ Edge Function returned a non-2xx status code في Lovable و Supabase رسالة عامة تخبي السبب. كيف تلقى الخطأ الحقيقي في السجلات، وأشهر أسبابه.

22 أكتوبر 2026 (11 جمادى الأولى 1448 هـ) · قراءة 4 دقائق · كتبها م. معاذ أحمد

منتجك على Lovable، وزر يرسل إيميل أو يكلّم الذكاء الاصطناعي أو يفتح صفحة الدفع، وفجأة يطلع: Edge Function returned a non-2xx status code. تطلب من Lovable يصلّحه، فيغيّر شي ويرجع نفس الخطأ. السبب إن هذي الرسالة ما تقول إيش المشكلة. تقول فقط إن دالة على السيرفر ردّت بخطأ.

إيش يعني بالضبط

Edge Function كود صغير يشتغل على سيرفرات Supabase، مو في المتصفح. المنتجات المبنية بـ Lovable و Bolt تستخدمها لأي شي يحتاج مفتاح سري: إرسال الإيميل، والدفع، وطلبات OpenAI. كل رد من السيرفر معه رقم: الأرقام اللي تبدأ بـ 2 معناها نجاح، وغيرها معناها خطأ. لما الدالة ترد بـ 400 أو 401 أو 500، مكتبة Supabase في الواجهة تعطيك هذي الرسالة العامة، والسبب الحقيقي يبقى داخل الرد أو في سجل الدالة.

يعني الرسالة مثل لمبة «فحص المحرك» في السيارة: تقول إن فيه مشكلة، وما تقول وين.

وين تلقى السبب الحقيقي

  1. سجل الدالة: في لوحة Supabase افتح Edge Functions، واختار الدالة، وافتح Logs. سوّ الحركة اللي تفشل مرة ثانية، وراقب السطر الجديد. غالبًا السبب مكتوب فيه بوضوح.
  2. تبويب Network: اضغط F12، وسوّ الحركة، ودوّر على الطلب الأحمر اللي رابطه فيه /functions/v1/ واسم الدالة. افتح Response: إذا الدالة ترجع رسالة خطأ، بتلقاها هنا. والرقم نفسه يفيد: 401 غير 500.
  3. في الكود: الخطأ اللي ترجعه المكتبة فيه الرد الأصلي في error.context. المبرمج يقدر يقرأ نصه ويعرضه في السجل بدل الرسالة العامة.

الأسباب اللي نشوفها أكثر

  • سر ناقص: الدالة تقرأ مفتاح مثل OPENAI_API_KEY أو مفتاح الدفع من إعدادات Supabase، والمفتاح ما انضاف هناك، أو اسمه مختلف حرف واحد. على جهازك أو في المعاينة كان موجود، وفي المشروع الحقيقي لا.
  • 401 من التحقق: الدوال افتراضيًا تطلب توكن صالح مع الطلب. المفتاح العام يعدّي هذا التحقق، لكن توكن مستخدم منتهي ما يعدّيه. ولو الكود داخل الدالة يتأكد من المستخدم والصفحة تناديها قبل تسجيل الدخول، ترفض. شوف JWT expired.
  • الخدمة الخارجية رفضت: الدالة نفسها شغّالة، لكن OpenAI أو بوابة الدفع ردّت بخطأ، والدالة نقلته. مثلًا رصيد OpenAI خلص، وهذا له درسه: You exceeded your current quota.
  • البيانات اللي وصلت غلط: الواجهة ترسل اسم حقل مختلف عن اللي تنتظره الدالة، فتتعطّل وهي تقراه وترد بـ 500.
  • الدالة أخذت وقت طويل: طلب ذكاء اصطناعي طويل، أو حلقة على بيانات كثيرة، يتجاوز حدود الوقت أو الذاكرة للدالة، فتنقطع.

الحل اللي لا تسويه

  • إسكات الخطأ. أدوات الذكاء الاصطناعي أحيانًا تلف الكود بحيث الدالة ترجع «نجاح» دايم، حتى لو فشلت. الرسالة تختفي، والإيميل ما ينرسل، والدفع ما يتسجّل، ومحد يدري.
  • إلغاء التحقق من المستخدم على الدالة كلها. بعض الدوال لازم تكون مفتوحة، مثل استقبال إشعارات بوابة الدفع، وهذي لها تحقق ثاني بالتوقيع. لكن دالة تكلّم OpenAI أو ترسل إيميلات لازم تتأكد بنفسها إن الطلب من مستخدم مسجّل، لأن المفتاح العام يعدّي التحقق الافتراضي. إذا ما تتأكد، أي أحد يقدر يناديها آلاف المرات على حسابك.
  • نقل المفتاح للواجهة عشان «يشتغل». المفتاح ينكشف لكل زائر. شوف مفتاحك انكشف؟.

الحل الصح

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

إذا الدالة تتعطّل بعد كل تعديل يسويه الذكاء الاصطناعي، شوف كيف توقف الدوامة.

تبي أحد يلقاها معك؟

خطأ في دالة وحدة غالبًا يتحل في مكالمة استشارية: نشارك الشاشة، ونفتح السجل معك، ونوصل للسبب. إذا عندك دوال كثيرة تفشل وتبيها تنصلح وتتأمّن، فيه الإصلاح المباشر. وأشهر مشاكل المنصة في مشاكل Lovable.

عندك نفس المشكلة؟

علّمنا إيش صار بدون كلام تقني، ونقول لك إيش تحتاج وكم يكلّف.

ابدأ طلبك

بدون أي كلمة سر · عرض السعر مجاني