الأدلة
الأخطاء والحدود وإعادة المحاولة
اقرأ استجابات الأخطاء ورؤوس حدود المعدل، وأعد المحاولة بأمان، وشخّص الأعطال الشائعة.
تعيد كل واجهة Felo API نص خطأ JSON يتضمن رمز خطأ ثابتًا ومعرّف طلب. اقرأ حالة HTTP أولًا، ثم الرمز، ثم الرسالة.
غلاف الخطأ
تستخدم استجابات الإنتاج الحالية حالة HTTP كقيمة status:
{
"status": 401,
"code": "UNAUTHORIZED",
"message": "Invalid API Key",
"request_id": "202610221444486982113280416060637185"
}| الحقل | المعنى |
|---|---|
status | رمز حالة HTTP، مكرر في النص |
code | رمز خطأ قابل للقراءة آليًا |
message | تفسير قابل للقراءة البشرية |
request_id | معرّف غامض لهذا الطلب؛ أدرجه في طلبات الدعم |
تستخدم بعض أمثلة endpoints الأقدم status: "error" وسلسلة رمز مختلفة. اعتمد على حالة HTTP وcode، لا على الصياغة الدقيقة لـmessage.
الرموز الشائعة
| HTTP | الرمز | ما يعنيه | ما يجب فعله |
|---|---|---|---|
| 400 | رمز تحقق خاص بـendpoint | معامل مفقود أو غير صالح | أصلح الطلب؛ لا تعده دون تغيير |
| 401 | UNAUTHORIZED | مفتاح API مفقود أو غير صالح أو منتهي الصلاحية أو ملغى | أرسل Authorization: Bearer $FELO_API_KEY؛ دوّر المفتاح إذا كان ملغى |
| 402 | INSUFFICIENT_CREDITS | أرصدة خدمة غير كافية | أعد الشحن في Console Billing، ثم أعد المحاولة |
| 404 | خاص بـendpoint | نموذج أو مهمة أو مسار غير معروف | تحقق من معرّف النموذج أو معرّف المهمة ومسار endpoint |
| 429 | RATE_LIMITED | تجاوزت حد المعدل | انتظر Retry-After، ثم أعد المحاولة |
| 5xx | CHAT_FAILED و*_FAILED وSERVICE_UNAVAILABLE | فشل في المنبع أو في الخدمة | أعد المحاولة مع تراجع تدريجي؛ تواصل مع الدعم إذا استمر |
تسرد مراجع endpoint الرموز الخاصة بذلك endpoint. ابدأ بـأخطاء Chat API أو بمرجع endpoint الذي تستدعيه.
endpoints توليد النماذج
تُرجع POST /api/v1/images/generations وPOST /api/v1/videos/generations أخطاء على مستوى endpoint ضمن غلاف OpenAI بدلًا من الغلاف أعلاه:
{
"error": {
"message": "Model kind does not match this generation endpoint",
"type": "invalid_request_error",
"param": null,
"code": "model_kind_mismatch"
}
}يوجد معرّف الطلب في رأس الاستجابة X-Request-Id، وليس في النص. الطلب المرفوض لا ينشئ مهمة. بعد وجود المهمة، تصل معظم حالات الفشل كحالة مهمة نهائية ضمن استجابة 200 بدلًا من خطأ HTTP: تحقق من status بحثًا عن failed أو interrupted، ثم اقرأ error.message. راجع توليد الصور والمهام غير المتزامنة.
معرّفات الطلب
تتضمن نصوص أخطاء Felo request_id. سجّله مع endpoint وحالة HTTP ورمز الخطأ ومعرّف النموذج ومعرّف المهمة. لا تسجّل مفتاح API الكامل أبدًا.
يقبل Model API أيضًا رأس طلب اختياريًا X-Request-Id. عند إرساله، يُعاد إليك لأغراض التشخيص، ما يتيح ربط سجلاتك بطلب معين. إذا لم ترسله، فاستخدم request_id المعاد.
حدود المعدل
/v2/chat هو endpoint Felo الوحيد الذي له حدود معدل مفروضة وموثقة:
- لكل مفتاح API، نافذة دقيقة واحدة.
- لكل مستخدم، نافذة دقيقة واحدة.
- لكل مستخدم، نافذة ساعة واحدة.
يُستثنى المستخدمون الذين لديهم اشتراك Felo مدفوع ساري، بما في ذلك اشتراكات المؤسسات، ولا يتلقون رؤوس X-RateLimit-*. إذا تعذّر التحقق من حالة الاشتراك، تظل الحدود سارية.
| الرأس | المعنى |
|---|---|
X-RateLimit-Limit | حد أضيق بُعد سارٍ حاليًا |
X-RateLimit-Remaining | الحد الأدنى للحصة المتبقية عبر الأبعاد الثلاثة |
X-RateLimit-Reset | طابع زمني Unix بالثواني لإعادة تعيين النافذة الحالية |
Retry-After | عند 429، التأخير الموصى به بالثواني |
لا توجد حاليًا حدود معدل مفروضة على endpoints أخرى ضمن /v2/**. قد تظل طلبات Model API محدودة من قِبل المزوّد الأعلى، وقد يظهر ذلك على هيئة 429.
لا تضع الحدود الرقمية مباشرة في الشيفرة. اقرأ الرؤوس في كل استجابة.
سياسة إعادة المحاولة
| الحالة | إعادة المحاولة؟ |
|---|---|
| 400 و401 و402 و404 | لا. أصلح الطلب أو المفتاح أو الرصيد أولًا. |
| 429 | نعم، بعد Retry-After أو X-RateLimit-Reset. |
| 5xx والمهلات وإعادات تعيين الاتصال | نعم، مع تراجع أسّي وتشويش عشوائي. |
| انقطاع اتصال البث أثناء الاستجابة | أعد المحاولة فقط إذا كان تطبيقك يتحمل توليدًا مكررًا. |
الحلقة الموصى بها:
- أعد المحاولة فقط للطلبات المتكررة بأمان (idempotent) أو الآمنة التكرار.
- استخدم تراجعًا أسّيًا: ابدأ بنحو ثانية واحدة، وضاعفها، وبحد أقصى 30 ثانية.
- أضف تشويشًا عشوائيًا حتى لا يعيد العملاء المحاولة في تزامن تام.
- توقف بعد عدد قليل من المحاولات وأظهر الخطأ.
- عند 429، التزم بـ
Retry-Afterبدلًا من جدولك الخاص.
تسلسل تصحيح الأخطاء
- تحقق من وجود المفتاح وأنه غير ملغى.
- استدعِ
GET /api/v1/modelsبالمفتاح نفسه لتأكيد المصادقة. - أرسل أصغر طلب صالح إلى endpoint المستهدف.
- أضف البث أو الأدوات أو المدخلات الكبيرة واحدًا في كل مرة.
- للعمل غير المتزامن، تحقق من حالة المهمة قبل إعادة الإرسال.