العودة إلى الوثائق

الترقيم والتصفية والأخطاء وحدود المعدل

كيف تُرقَّم القوائم، وكيف تُرفض الطلبات، وما معنى كل رمز حالة، وماذا تفعل عند تقييد المعدل.

آخر مراجعة: 2026-08-23

الترقيم

كل نقطة طرفية للقوائم تقبل page وpage_size وتعيد المغلّف نفسه. ‏total هو عدد كل ما يطابق عوامل التصفية لا حجم هذه الصفحة - فعدد الصفحات هو Math.ceil(total / page_size).

المعاملالافتراضيالمدى
page1من 1 فما فوق
page_size25من 1 إلى 200 (تُقصّ القيم الأكبر ولا تُرفض)
bash·صفحة واحدة
curl -sS "https://your-host/api/v1/crm/contacts?page=2&page_size=100" \
  -H "Authorization: Bearer $CLIENTO_TOKEN"
json·مغلّف القائمة
{
  "items": [ { "id": 4182, "display_name": "Sara Ahmadi", "…": "…" } ],
  "page": 2,
  "page_size": 100,
  "total": 3417
}

التصفية والبحث

‏q بحث نصّي حر في الحقول التي يبحث فيها الإنسان - الأسماء والبريد والشركة. وما عداه معاملات استعلام صريحة، وكل مجموعة توثّق معاملاتها في مستند OpenAPI.

bash·بحث وتصفية
# Free-text
curl -sS "https://your-host/api/v1/crm/contacts?q=ahmadi" \
  -H "Authorization: Bearer $CLIENTO_TOKEN"

# Typed filters (tasks)
curl -sS "https://your-host/api/v1/crm/tasks?status=open&priority=high&overdue=true" \
  -H "Authorization: Bearer $CLIENTO_TOKEN"

المعامل غير المعروف يُتجاهل ولا يُرفض - فالخطأ المطبعي يعيد نتائج غير مُصفّاة بدل خطأ. راجع أسماء المعاملات في مستند OpenAPI حين يبدو أن مرشِّحًا لا يفعل شيئًا.

مغلّف الخطأ

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

json·الشكل
{
  "error": "validation_error",
  "message": "Invalid payload",
  "details": { "email": ["Not a valid email address."] }
}
  • ‏`error` - رمز آلي مستقر. تفرّع عليه وعرِّب عليه.
  • ‏`message` - نص تشخيصي بالإنجليزية للمطوِّر. لا تعرضه للمستخدم النهائي ولا تطابق عليه؛ فقد تتغيّر صياغته.
  • ‏`details` - بنية تختلف بحسب الخطأ: أخطاء الحقول للتحقق، وrequired لرفض الصلاحية، وreason لقاعدة عمل، وretry_after للتقييد. وقد تكون null.

رموز الحالة

الرمزerrorالمعنى وما ينبغي فعله
200-نجحت القراءة أو التحديث.
201-أُنشئ. الجسم هو السجل الجديد.
204-حُذف. بلا جسم.
400validation_error أو رمز قاعدةالحمولة خاطئة. details تسمّي الحقول؛ ولمخالفة قاعدة عمل (مثل payment_amount_not_positive) رمزها الخاص. لا تُعِد الإرسال دون تغيير.
401unauthorizedاعتماد مفقود أو منتهٍ أو مُبطَل. جدِّد مرة واحدة ثم توقّف.
403forbiddenمُصادَق عليه لكن غير مسموح. details.required تسمّي الرموز.
404not_foundلا يوجد سجل كهذا - أو سجل لا يحقّ لك رؤيته. الجوابان متطابقان عمدًا.
409conflict أو رمز قاعدةقاعدة تفرّد أو حالة. لقواعد المالية والمبيعات وإدارة العملاء والتذاكر رموزها الخاصة (مثل invoice_has_payments وpayment_exceeds_due) مع الأرقام في details؛ وفي غيرها يبيّن details.reason أيّها. إن لم تعرف الرمز فاعتمد على حالة HTTP.
429rate_limitedمُقيَّد. انتظر Retry-After ثم أعد المحاولة.
5xxinternal_errorعطل عندنا. أعد المحاولة بتراجع تدريجي؛ وقد يكون الطلب طُبِّق أو لا.

حدود المعدل

النقاط الحسّاسة - تسجيل الدخول، ورموز بوابة العملاء لمرة واحدة، وإرسال النماذج العامة، وصفحات الفواتير العامة، وردود الدفع - مُقيَّدة لكل مُنادٍ. أما عمليات CRUD المُصادَق عليها فغير مُقيَّدة افتراضيًا، لكن مشغّل مساحة العمل قد يضبط حدودًا، فالعميل الحسن التصرّف يعالج 429 على أي حال.

http·استجابة مُقيَّدة
HTTP/1.1 429 Too Many Requests
Retry-After: 42
Content-Type: application/json

{
  "error": "rate_limited",
  "message": "Too many requests",
  "details": { "retry_after": 42 }
}
  • التزم بـRetry-After (بالثواني). هو جواب الخادم نفسه - والانتظار الأقصر يُرفض مجددًا.
  • تراجَع أُسّيًّا مع عشوائية عند 5xx. فالفاصل الثابت يحوّل انقطاعًا قصيرًا إلى تدافع لحظة التعافي.
  • أعِد GET وDELETE بحرية - فهما مُتماثلا الأثر. أما POST فانظر القسم التالي.

تماثل الأثر (Idempotency)

لا توجد ترويسة Idempotency-Key عامة. حيث يكون التكرار ضارًّا، تحمل النقطة الطرفية هويّة تماثلها في الجسم وتجعلها مطلوبة لا اختيارية - فالهوية بيد العميل، لأن العميل وحده يعرف أن هذه إعادة محاولة.

النقطة الطرفيةالهويةالسلوك عند التكرار
POST /chat/conversations/{id}/messagesclient_message_idيعيد الرسالة الموجودة بـ200 بدل 201
POST /chat/conversations/supportالمُنادي نفسهيصل إلى المحادثة نفسها
تسليم Webhook (وارد إليك)delivery_idراجع دليل الـ Webhooks - التسليم «مرة واحدة على الأقل»

في النقاط التي لا تملك حقل تماثل، فإن POST الذي تنتهي مهلته مجهول النتيجة. لا تُعِد الإرسال عشوائيًا: اقرأ الحالة بـGET مُصفّى على شيء تتحكم فيه أنت - مرجع خارجي خزّنته على السجل - وأنشئ فقط إن كان غائبًا فعلًا.

تحتاج مساعدة تقنية؟

إن لم تجد إجابة سؤالك هنا، تواصل مع فريقنا.

تواصل معنا
الترقيم والتصفية والأخطاء وحدود المعدل · Cliento Pro