وثائق API Hop
رموز الأخطاء وتشخيصها
>-
حدد ما الذي فشل
- سجل حالة HTTP الفعلية وطريقة الطلب ومساره. تصف حالة HTTP ورمز خطأ التطبيق طبقتين مختلفتين؛ ولا تستبدل أحدهما بالآخر.
- اقرأ حقول الخطأ بحسب البروتوكول الذي استدعيته. لا تشترك الاستجابات الأصلية وOpenAI وClaude وGemini كلها في البنية نفسها.
- لطلبات البث، افحص أيضا أحداث الخطأ وحالة الاكتمال. وللمهام غير المتزامنة، افحص
statusالمهمة. لا تضمن HTTP200نجاح التوليد. - استخدم الجدول أدناه لإصلاح الطلب أو تحديد ما إذا كنت ستعيد المحاولة.
messageنص توضيحي، وليس تعدادا ثابتا؛ ولا تبن تفرعات منطقية على صياغته.
تعداد رموز أخطاء المنصة
هذا هو التعداد الكامل لرموز أخطاء تطبيق المنصة. الأسماء تسميات مرجعية؛ وقيم code في الاستجابة أرقام. «HTTP الشائع» دليل للتشخيص، وليس تطابقا ثابتا لكل نقطة نهاية. استخدم حالة HTTP الفعلية وجسم الاستجابة. قد لا ينتمي code الممرر من المزود إلى هذا التعداد.
code الرقمي | الاسم | HTTP الشائع | المعنى والإجراء |
|---|---|---|---|
10000 | BAD_REQUEST | 400 | تنسيق الطلب أو مساره أو معاملاته الأساسية غير صحيح. تحقق من الطريقة والمسار وصياغة JSON وأسماء المعاملات. |
10001 | VALIDATION_ERROR | 400 / 422 | فشل التحقق من المعاملات. تحقق من الحقول المطلوبة والأنواع والنطاقات وتركيبات المعاملات. |
20000 | AUTH_ERROR | 401 | فشلت المصادقة. تحقق من صلاحية مفتاح API وانتهائها وتنسيق ترويسة المصادقة. |
20001 | FORBIDDEN | 403 | الوصول مرفوض أو الحساب مقيد. تحقق من صلاحيات الحساب وملكية المورد. |
30000 | NOT_FOUND | 404 | المسار أو النموذج أو المورد غير موجود. طابق مسار نقطة النهاية وmodel ومعرف المهمة مع الموارد الظاهرة لمفتاح API الحالي. |
30001 | CONFLICT | 409 | تتعارض العملية مع حالة المورد الحالية. اقرأ حالته الحالية قبل تعديل العملية؛ وتجنب الإرسالات المكررة. |
40000 | INSUFFICIENT_CREDIT | 402 | الرصيد غير كاف. تحقق من رصيدك واشحنه قبل الاستدعاء مجددا. |
40001 | RATE_LIMIT | 429 | تصل الطلبات بوتيرة مرتفعة جدا. قلل معدل الطلبات وأخر إعادة المحاولات. |
40002 | CONCURRENCY_LIMIT | 429 | عدد كبير جدا من الطلبات يعمل بالتزامن. قلل التزامن وانتظر انتهاء الطلبات القائمة. |
50000 | PROVIDER_ERROR | 502 | فشل استدعاء المزود أو لم يعد نتيجة صحيحة. تحقق من إنتاج نتيجة قبل التفكير في محاولات محدودة. |
50001 | SERVICE_UNAVAILABLE | 503 | الخدمة غير متاحة مؤقتا. أعد المحاولة لاحقا ضمن حدود؛ واجمع معلومات التشخيص إذا استمر الإخفاق. |
50002 | GATEWAY_TIMEOUT | 504 | انتهت مهلة المعالجة. قد تكون النتيجة غير مؤكدة؛ تحقق من حدوث التنفيذ قبل إعادة المحاولة. |
50003 | INTERNAL_ERROR | 500 | حدث خطأ خادم غير مصنف. استخدم محاولات محدودة؛ واجمع معلومات التشخيص إذا استمر الإخفاق. |
لا يمكن التمييز بصورة موثوقة بين حدود المعدل وحدود التزامن من HTTP 429 وحده. ميز بينهما فقط عند توفر رمز خطأ رقمي صريح. تحقق من معرفات النماذج في قائمة النماذج؛ ولا تعد كتابة قيم model بنفسك.
اقرأ الأخطاء بحسب البروتوكول
تعرض الأمثلة أدناه بنيات شائعة تولدها المنصة، وليس تنسيقا واحدا مضمونا لكل إخفاق. قد تعيد طبقات معالجة مختلفة إخفاقات المصادقة، وقد تحتفظ استجابات المزود الممررة ببنياتها ورموزها النصية أو أنواعها. حدد بنية الاستجابة الفعلية قبل تحليلها. وإذا كانت غير معروفة، فاحفظ الحقول الأصلية وحالة HTTP بدلا من فرض تحويل.
واجهات API الأصلية للمنصة
اقرأ عادة error.code وerror.message. قد يغيب requestId.
{
"success": false,
"error": {
"code": 10000,
"message": "Bad request"
},
"requestId": "req_example"
}قد تستخدم بعض الأخطاء code وmessage على المستوى الأعلى. ينبغي للعملاء استيعاب هذا الاختلاف وألا يعدوا غياب كائن error دليلا على النجاح. قد تخلو استجابات التحقق من المعاملات أيضا من رمز خطأ رقمي. تعامل مع الرمز المفقود بوصفه مجهولا بدلا من اختلاقه.
واجهات API المتوافقة مع OpenAI
تستخدم الأخطاء الشائعة التي تولدها المنصة code وmessage وtype على المستوى الأعلى؛ ولا تكون بالضرورة داخل error.
{
"code": 40000,
"message": "Insufficient credit",
"type": "api_error"
}type فئة بروتوكول؛ وcode هو رمز الخطأ الرقمي للمنصة في هذه البنية. لا يحدد api_error وحده ملاءمة إعادة المحاولة. قد تتضمن أخطاء البث والاستجابات الممررة من المزود كائن error متداخلا؛ عالج استجابة البروتوكول الفعلية. راجع واجهة Chat Completions وواجهة Responses.
واجهات API المتوافقة مع Claude
في البنية الشائعة، تكون قيمة type على المستوى الأعلى هي error، والفئة المحددة هي error.type، والوصف هو error.message. لا تتضمن هذه البنية code رقميا للمنصة. لا تختلقه.
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "max_tokens must be a positive safe integer"
}
}تولد المنصة محليا أنواع أخطاء Claude التالية. هذا ليس تعدادا شاملا لأنواع أخطاء المزود.
error.type | مطابقة HTTP المحلية | ما يجب فحصه |
|---|---|---|
invalid_request_error | 400 | تحقق من تنسيق الطلب ومعاملاته. |
authentication_error | 401 | تحقق من بيانات اعتماد المصادقة. |
api_error | حالات HTTP الأخرى | خطأ API عام؛ افحص حالة HTTP الفعلية والوصف. ليس بالضرورة قابلا لإعادة المحاولة. |
راجع واجهة Claude Messages.
أخطاء بأسلوب Gemini
عندما تتلقى استجابة بأسلوب Gemini، اقرأ error.code وerror.message وerror.status. هنا، status فئة نصية، وليست حالة HTTP أو حالة مهمة غير متزامنة.
{
"error": {
"code": 10000,
"message": "Bad request",
"status": "INVALID_ARGUMENT"
}
}تستخدم الأخطاء التي تولدها المنصة بهذه البنية قيم code الرقمية للمنصة. مطابقة status النصية المحلية أدناه؛ وليست تعدادا لجميع حالات المزود.
error.status | مطابقة HTTP المحلية | ما يجب فحصه |
|---|---|---|
UNAUTHENTICATED | 401 | تحقق من بيانات اعتماد المصادقة. |
RESOURCE_EXHAUSTED | 402 / 429 | تحقق من الرصيد أو حدود الاستخدام؛ فالنص وحده لا يميز بينهما. |
PERMISSION_DENIED | 403 | تحقق من الصلاحيات وملكية المورد. |
NOT_FOUND | 404 | تحقق من المسار أو النموذج أو المورد. |
UNAVAILABLE | 503 | الخدمة غير متاحة مؤقتا. |
INTERNAL | >= 500، باستثناء 503 | خطأ خادم؛ وتستخدم 504 هذه القيمة أيضا. |
INVALID_ARGUMENT | حالات HTTP الأخرى | تحقق من حالة HTTP الفعلية والطلب؛ وتستخدم 409 هذه القيمة أيضا. |
تكون الأولوية لـ503 وتستخدم UNAVAILABLE، وليس INTERNAL. قد تستخدم استجابات المزود دلالات مختلفة لـcode وstatus. لا تطبق جدول رموز أخطاء المنصة على كل رمز Gemini رقمي.
أعد المحاولة بأمان
| الحالة | الإجراء المقترح |
|---|---|
400 / 401 / 402 / 403 / 404 / 409 / 422 | أصلح الطلب أو بيانات الاعتماد أو الرصيد أو الصلاحيات أو حالة المورد أولا. لا تكرر إرسال الطلب نفسه دون تغيير. أرسل مفاتيح API في الترويسات فقط، وليس في معاملات استعلام URL مطلقا. |
429 | قلل المعدل والتزامن، ثم انتظر قبل إعادة المحاولة. مجرد زيادة عدد المحاولات يزيد عادة شدة التقييد. |
500 / 502 / 503 / 504 | قيم خطر التنفيذ المكرر أولا، ثم استخدم تأخيرا أسيا محدودا مع تفاوت عشوائي، مثلا 3 محاولات كحد أقصى مع حد إجمالي للانتظار. |
| انقطاع الشبكة أو انتهاء مهلة العميل | عدم تلقي نتيجة لا يعني أن الخادم لم ينفذ الطلب. ضع النتيجة في حالة مجهولة بدلا من إعلان الإخفاق أو إنشاء طلب آخر فورا. |
احترم ترويسة Retry-After الصحيحة عند وجودها. لا تفترض وجودها في كل خطأ. قد تؤدي إعادة طلب توليد غير ثابت الأثر تلقائيا إلى تنفيذه مجددا واحتساب رسوم إضافية. لا تعد هذه الصفحة بدعم عام لمفاتيح منع التكرار؛ وإضافة Idempotency-Key بنفسك لا تضمن إزالة التكرار.
إذا كان لديك jobId بالفعل، فاستعلم عن تلك المهمة قبل إنشاء أخرى. وإذا لم يكن لديك jobId وكانت النتيجة غير مؤكدة، فاحفظ معرف الطلب والطابع الزمني للتحقيق.
البث والمهام غير المتزامنة
طلبات SSE
بعد بدء SSE، قد تبقى حالة HTTP هي 200 بينما يبلغ إخفاق لاحق عبر حدث خطأ أو حمولة داخل البث. حلل الأحداث والبيانات للبروتوكول المختار وتحقق من الاكتمال الطبيعي. عند خطأ أو انقطاع غير متوقع، لا تعتبر النص أو الصور الجزئية نتيجة ناجحة مكتملة. تختلف أسماء الأحداث والحمولات بين نقاط النهاية. لا تفحص حقل error ثابتا واحدا فقط، ولا تستخدم «تلقي أي نص» شرطا للنجاح.
المهام غير المتزامنة
تعني استجابة الإنشاء التي تتضمن data.jobId قبول الطلب، وليس اكتمال التوليد. وتعني استجابة HTTP الناجحة عند الاستعلام عن مهمة نجاح الاستعلام. يجب مع ذلك فحص data.status للمهمة:
PENDINGوCONNECTوPROCESSING: واصل الاستطلاع كما توضح وثائق المهام.COMPLETED: اقرأoutputResult.FAILEDوCANCELLED: أوقف الاستطلاع واحفظ معرف المهمة ومعلومات الاستجابة المنقحة للتحقيق.
قد تظهر تفاصيل الإخفاق في data.outputResult.error. هذا الحقل اختياري وغير مضمون لكل مهمة فاشلة. استخدم Jobs فقط عندما تعيد استجابة الإنشاء jobId صراحة. لا تطبق استطلاع المهام على نقاط النهاية التي تعيد النتائج مباشرة عبر JSON أو SSE.
التشخيص للمستخدمين ومساعدي الذكاء الاصطناعي
قدم المعلومات المنقحة التالية إلى الدعم أو مساعد ذكاء اصطناعي. استخدم unknown للحقول الغائبة؛ واستخدم unknown لحالة HTTP إذا لم تتلق استجابة HTTP. احفظ مسارات الحقول وأنواع القيم الأصلية، مثلا error.code: 10000 (number) أو error.code: "invalid_api_key" (string). لا تحول code النصي تلقائيا إلى رمز رقمي للمنصة ولا تختلق الحقول المفقودة من message أو حالة HTTP أو أسماء النماذج.
time_with_timezone: unknown
method: unknown
path_without_query: unknown
model: unknown
stream: unknown
http_status: unknown
error_code_path_value_and_type: unknown
error_type_path_and_value: unknown
protocol_status_path_and_value: unknown
sanitized_message: unknown
request_id_from_body_or_X-Request-ID: unknown
job_id: unknown
job_status: unknown
retry_after: unknown
retry_count_and_delays: unknown
received_partial_output: unknownاقرأ requestId من جسم الاستجابة أو ترويسة الاستجابة X-Request-ID عند توفرها. أبق jobId سلسلة نصية لتجنب فقدان الدقة مع الأعداد الطويلة. قدم الحد الأدنى من معاملات الطلب المنقحة فقط. أزل مفاتيح API والرموز وملفات الارتباط وترويسات المصادقة الكاملة والمعلومات الشخصية والتعليمات الخاصة ومحتويات ملفات الإدخال. أزل معاملات استعلام URL وعناوين المدخلات أو المخرجات التي تتضمن توقيعات أو بيانات اعتماد وصول. لا تلصق سجلات الطلبات كاملة دون مراجعتها.
ينبغي لمساعدي الذكاء الاصطناعي التمييز بين الحقول الملاحظة والأسباب المحتملة وتحديد المعلومات المفقودة. لا يجوز اعتبار نقص الأدلة إثباتا لنجاح طلب أو عدم تنفيذه أو عدم ترتب رسوم عليه.