إنتقل إلى المحتوى الرئيسي

الأخطاء

كل خطأ من الواجهة البرمجية العامة لمجيب يستخدم نفس الظرف. تفرّع على code (ثابت، إضافي إلى الأبد) — لا تفرّع أبداً على message (مقروء بشرياً، قد يُعاد صياغته دون إشعار).

كيف تبدو استجابة الخطأ؟

{
"error": {
"type": "validation_error",
"code": "invalid_from_phone",
"message": "The 'from' field must be an E.164 phone number...",
"param": "from",
"correlation_id": "req_01KQ..."
}
}
الحقلحاضر دائماً؟الغرض
typeنعمتصنيف ثابت لكتل catch
codeنعمسبب محدّد ثابت — تفرّع على هذا
messageنعممقروء بشرياً؛ لا تستخدم كمفتاح أبداً
correlation_idنعممعرّف تتبّع لسجلاتنا — اقتبس في تذاكر الدعم
حقول إضافيةأحياناًسياق لكل خطأ (مثل param، available_phones، original_correlation_id)

ما أنواع الخطأ؟

مجموعة صغيرة وثابتة من التصنيفات. إضافية إلى الأبد — قد تظهر أنواع جديدة، لن يُحذَف أي قائم:

typeHTTP المعتاد
authentication_error401
permission_error403
validation_error422
idempotency_error409 / 422
rate_limit_error429
quota_error402
not_found_error404
upstream_error503
internal_error500

ما الكتالوج الكامل للرموز؟

الرموز enum ثابت. رموز جديدة تظهر دون إشعار؛ لا شيء قائم سيُعاد تسميته أو غرضه.

codeHTTPالمعنى
invalid_api_key401مفتاح مفقود، مشوّه، غير معروف، أو ملغى. صحّح رأس Authorization.
revoked_api_key401المفتاح أُلغي من لوحة التحكم. أنشئ واحداً جديداً.
expired_api_key401المفتاح تجاوز تاريخ انتهائه. أنشئ واحداً جديداً.
insufficient_scope403المفتاح يفتقر للنطاق المطلوب (الاستجابة تحوي required_scope).
agent_not_authorized403المفتاح مقيّد بوكلاء معيّنين وهذا ليس منهم.
invalid_agent_id422agent_id ليس UUID صالحاً.
invalid_phone_number422to ليس رقم E.164 صالحاً.
invalid_from_phone422from ليس رقم E.164 صالحاً.
from_phone_not_found_for_agent422from مكوَّن جيداً لكن لا يطابق أي اتصال واتساب نشط على الوكيل (الاستجابة تحوي available_phones).
invalid_template_name422template.name مفقود أو فارغ.
invalid_request_body422حقل مطلوب مفقود أو من النوع الخاطئ (الاستجابة تحوي param تُسمي الحقل المخطئ).
idempotency_key_in_progress409نفس المفتاح + الجسم لا يزال يُعالَج. أعد المحاولة بعد Retry-After.
idempotency_key_in_use_with_different_params422نفس المفتاح استُخدم سابقاً بجسم مختلف (الاستجابة تحوي original_correlation_id).
rate_limit_exceeded429حد المعدّل لكل مفتاح تم بلوغه. تراجع وأعد بعد Retry-After.
message_limit_exceeded402(مستقبلي) حد رسائل الاشتراك تم بلوغه.
message_not_found404GET /v1/whatsapp/messages/{id} — المعرّف غير موجود أو ينتمي لمنظمة أخرى.
endpoint_not_found404المسار لا يُطابق أي نقطة /v1/. تحقّق من الأخطاء الإملائية.
whatsapp_unavailable503واجهة WhatsApp Cloud من ميتا غير متاحة. أعد بتراجع متصاعد.
internal_server_error500مشكلتنا. أعد بتراجع متصاعد؛ إن استمرّت، أرسل لنا correlation_id.

ما حالات HTTP التي قد تُعيدها الواجهة؟

الحالةالمعنى
200نجاح متزامن (مثل استعلام الحالة)
201مورد أُنشئ
202مقبول للمعالجة غير المتزامنة (مثل رسالة في طابور الإرسال)
400طلب مشوَّه (JSON غير صالح)
401فشل التوثيق
402(مستقبلي) تجاوز الحصة
403فشل الصلاحيات (نطاق، قائمة الوكلاء)
404مورد غير موجود
409تعارض (مفتاح إعادة قيد التنفيذ)
422خطأ تحقق
429تجاوز حد المعدّل
500خطأ داخلي
503منصة في المصب غير متاحة

كيف أستخدم correlation_id؟

احفظه عند كل خطأ. عند تواصلك مع الدعم، الصق correlation_id من الاستجابة الفاشلة — يمكننا تتبّع دورة حياة الطلب الكاملة في سجلاتنا في ثوانٍ.

يمكنك أيضاً إرسال معرّف تتبّع خاص بك وسنحترمه:

curl ... -H "X-Correlation-ID: my-app-trace-abc123"

حتى 128 حرفاً، أبجدية رقمية مع _-. نُعيده في رأس الاستجابة X-Correlation-ID ونُضمِّنه في أي ظرف خطأ. إن لم ترسل واحداً، نُولِّد req_<26-char ULID>.

أسئلة شائعة

لماذا يُغطي invalid_api_key كل هذه الحالات الفرعية؟

رمز واحد يُبسّط منطق العميل — يحتاج كودك فرعاً واحداً فقط لـ"فشل التوثيق". حقل message يُميّز للبشر أثناء التصحيح، لكن لا ينبغي أن تتفرّع على النص. عامل أي invalid_api_key كـ"صحّح المفتاح وأعد".

هل ستضيف رموز خطأ جديدة لاحقاً؟

نعم. قد تظهر قيم code جديدة دون إشعار مع إضافة الميزات. اجعل عبارات switch/match افتراضياً آمنة — تراجع إلى "خطأ غير معروف، سجّل وأظهر للمستخدم".

ماذا عن أخطاء على مستوى الحقول مع حقول غير صالحة متعدّدة؟

حالياً، تُعيد الواجهة أول خطأ تحقق تواجهه. قد نُضيف شكلاً أغنى متعدّد الأخطاء لاحقاً كتغيير إضافي (حقل اختياري جديد على الظرف، لا يستبدل الحقول القائمة). الآن، صحّح خطأ واحداً في كل مرة.

ما original_correlation_id؟

يُعاد على idempotency_key_in_use_with_different_params. يُشير إلى معرّف التتبّع للطلب الذي ادّعى مفتاح الإعادة أصلاً، حتى تجد ذلك الطلب السابق في سجلات تطبيقك.

ما available_phones؟

يُعاد على from_phone_not_found_for_agent. يُدرج كل رقم واتساب نشط على الوكيل بصيغة E.164، حتى تُصحّح قيمة from الخاصة بك دون استعلام آخر لاكتشاف ما هو صالح.