دليل فريق التطوير

إنصاف × Velents — توثيق الـ API

كل الـ endpoints التي توفرها Velents لإنصاف، والـ webhook الصادر من الـ chat widget، وتكامل صفحة لاستخراج المستندات — مع إمكانية تجربة كل طلب مباشرة.

0. الأساسيات المشتركة (للـ endpoints من 1 إلى 5)

Base URL: https://inbound-api-gateway.velents.ai

Headers: x-velents-api-key: {clientId}|{secret} و Content-Type: application/json

لكل environment (test / staging / production) key منفصلة.

طريقة التشغيل: sync أو async

  • •الـ endpoints من 1 إلى 4 تعمل sync أو async.
  • •بدون webhook: يبقى الاتصال مفتوحاً وترجع النتيجة بـ 200.
  • •مع webhook: يرجع الرد فوراً بـ 202، وتُرسل النتيجة POST على الـ URL.
الحقلالنوعالشرح
webhookstring (URL)إن وُجد يُنفّذ الطلب async.
webhook_headersobjectheaders إضافية مع الـ delivery (مثلاً token للـ receiver).
webhook_bodyobjectحقول إضافية تُدمج في الـ body على top level (مثلاً reference id).
async responses
// 202 — الرد الفوري
{ "status": "accepted", "event": "<event>", "message": "Processing started. The result will be delivered to the provided webhook." }

// delivery — نجاح
{ "event": "<event>", "status": "success", "request": { ...الطلب الأصلي }, "data": { ...نفس body الـ 200 } }

// delivery — فشل
{ "event": "<event>", "status": "error", "request": { ...الطلب الأصلي },
  "retry": { "retryable": true, "method": "POST", "endpoint": "/api/insaf/...", "message": "..." } }
  • •قيم event: insaf-knowledge-answer أو insaf-violation-classification أو insaf-description-refinement أو insaf-complaint-recommendation.
  • •بعد الـ 202 يصل الفشل على الـ webhook فقط، ودون تفاصيل الخطأ الداخلي.
  • •في الـ async، إذا كان الفشل مؤقتاً (408 أو 429 أو 5xx) يُعاد الطلب تلقائياً مرة بعد 15 ثانية قبل إرسال الفشل.
  • •لإعادة المحاولة: أرسل طلباً جديداً على نفس الـ gateway URL الذي استدعيته (retry.endpoint فيه المسار الداخلي /api/insaf/...) وأضف webhook و webhook_headers و webhook_body. إذا كانت retryable = false فلا تُعد نفس الطلب.
  • •في webhook_headers يُحذف Content-Type وأي header يبدأ بـ x-velents-. وفي webhook_body تُحذف المفاتيح event و status و request و data و retry.

أخطاء مشتركة

StatusCodeالسبب
400INVALID_INPUTحقل ناقص أو خاطئ؛ الـ message تحدده. {"error":"Validation Error","message":"...","code":"INVALID_INPUT"}
401missing / malformed / invalid API keyمشكلة في x-velents-api-key.
401MISSING_CLIENTMissing gateway client identity — الطلب لم يمر عبر الـ gateway.
403route not allowedالـ key غير مفعّل عليها هذا الـ endpoint.
403UNKNOWN_INSAF_CLIENTالـ key غير مرتبطة بأي environment من environments إنصاف.
429rate limit exceededانتظر وأعد المحاولة.
500 / 502 / 503{status, event, retry}الخدمة غير متاحة مؤقتاً؛ أعد المحاولة إذا كانت retry.retryable = true.
  • •الـ code في جدول أخطاء كل endpoint للتوضيح فقط. أخطاء 400 و 401 و 403 وحدها تحتوي code في الـ body. أي فشل وقت التنفيذ (500 / 502 / 503) يرجع {status, event, retry} دون code، فاعتمد على HTTP status و retry.retryable.
  • •ثوابت: كل response فيه apiProcessingDuration (بالثواني) و apiProcessingDurationFormatted (MM:SS). كل حقول الـ response بصيغة camelCase.