الانتقال إلى محتوى الصفحة
الوثائق
وثائق Make Agent Fast

النطاقات والأخطاء

امنح أقل قدر من الصلاحيات، وتعامل مع كل رمز خطأ ثابت في واجهة API العامة.

نظرة سريعة

امنح أقل قدر من الصلاحيات، وتعامل مع كل رمز خطأ ثابت في واجهة API العامة.

مسار طلبات APIمفتاح محدد النطاق ← مورد بإصدار ← استجابة موقّعة
تطبيق / SDKمفتاح Bearermaf_live_…/api/v1/…الموردJSON
33 نطاقًارموز ثابتةمعرّفات الطلبات

تتطلب كل عملية في واجهة API العامة نطاقًا صريحًا واحدًا. وإذا كانت بيانات الاعتماد صالحة لكنها لا تملك هذا النطاق، فستتلقى الخطأ 403 insufficient_scope؛ ولا تتم ترقيتها أبدًا بصمت إلى صلاحيات أوسع.

مرجع النطاقات#

النطاقما يتيحه
account:readقراءة الحساب المصادَق عليه والخطة والاستحقاقات وملخص المحفظة
tickets:readقراءة تذاكر الدعم ورسائلها
tickets:writeتحديث التذاكر وتعيين أعضاء الفريق وإضافة ملاحظات داخلية أو ردود للعملاء
team:readقراءة أعضاء الفريق والدعوات المعلّقة وأحداث التدقيق المسموح بها
team:writeإنشاء الدعوات أو إلغاؤها وإدارة أدوار أعضاء الفريق من غير المالكين
integrations:readفحص عمليات تثبيت GitHub App والمستودعات المصرّح بها
integrations:writeإعداد تغييرات التكامل وإنشاء طلبات سحب مسودة
sites:readعرض المواقع واسترجاعها
sites:writeإنشاء المواقع وتحديثها ونشرها وإلغاء نشرها وحذفها
agents:readقراءة إعدادات الـ agent
agents:writeتحديث سلوك الـ agent ولغته وصوته وإعدادات التضمين
knowledge:readعرض مصادر المعرفة والأسئلة الشائعة
knowledge:writeإنشاء مصادر المعرفة والأسئلة الشائعة وتحديثها وحذفها
conversations:readعرض المحادثات واسترجاع رسائلها
conversations:writeتولّي محادثة: الرد على الزائر باسم النشاط التجاري، وإيقاف الـ agent مؤقتًا فيها، وإعادتها إليه
leads:readعرض الـ leads الذين تم جمعهم
leads:writeإنشاء الـ leads وتحديثهم وتأهيلهم وقبولهم في مسار الفرص
pipeline:readقراءة المراحل والحسابات والفرص والأنشطة والإسناد وحالة مزامنة CRM
pipeline:writeضبط المراحل؛ وإنشاء الفرص والحسابات أو تحديثها؛ واستيراد نتائج CRM أو إعادة محاولتها
analytics:readقراءة أحداث تحليلات الموقع
connectors:readعرض حالة الـ connectors دون إرجاع الأسرار
connectors:writeإنشاء الـ connectors وتحديثها وتفعيلها وتعطيلها وإزالتها
domains:readأُزيل. يُحتفظ به لأغراض التوافق فقط؛ إذ تعيد كل مسارات /domains الخطأ 409 لأن النطاقات المخصصة غير متاحة
domains:writeأُزيل. يُحتفظ به لأغراض التوافق فقط؛ إذ تعيد كل مسارات /domains الخطأ 409
broadcasts:readعرض الرسائل الجماعية وحالة التسليم
broadcasts:writeإنشاء المسودات ووضع إرسال رسالة جماعية في قائمة الانتظار
notifications:readعرض إشعارات المالك
notifications:writeتعليم الإشعارات كمقروءة أو غير مقروءة
monetization:readعرض منتجات تحقيق الدخل
monetization:writeإنشاء المنتجات وتحديثها وتفعيلها وإلغاء تفعيلها وحذفها
usage:readقراءة أحداث الاستخدام المقاس
webhooks:readعرض نقاط نهاية webhook وحالة التسليم
webhooks:writeإنشاء نقاط نهاية webhook وحذفها

استخدم نطاقات القراءة لمهام إعداد التقارير. وأضف نطاق الكتابة فقط عندما ينفّذ التكامل هذا التعديل فعلًا. فعلى سبيل المثال، يحتاج تصدير الـ leads عادةً إلى sites:read وleads:read، لا إلى sites:write أو agents:write.

أخطاء النطاقات#

{
  "error": {
    "code": "insufficient_scope",
    "message": "The API key does not grant the required scope.",
    "details": { "required": ["sites:write"] },
    "request_id": "6c0b2f2e-..."
  }
}

أضف النطاق الناقص إلى المفتاح من الإعدادات ← المطوّر ← تعديل، أو أنشئ مفتاحًا بديلًا وحدّث السر المخزَّن على الخادم. يغيّر التعديل اسم المفتاح ونطاقاته في مكانه؛ أما تاريخ انتهاء صلاحيته والرمز المميّز فيبقيان كما هما. لا يمكن تعديل المفاتيح الصادرة عبر OAuth؛ أعد ربط التطبيق لتغيير ما مُنح من صلاحيات.

غلاف الخطأ#

تستخدم جميع أخطاء API البنية العليا نفسها:

type ApiError = {
  error: {
    code: string;
    message: string;
    details?: unknown;
    request_id: string;
  };
};

اعتمد في المعالجة على error.code لا على message الإنجليزية، فقد تتحسن الرسائل دون تغيير الإصدار. سجّل error.request_id وترويسة الاستجابة x-request-id مع اسم العملية والحالة ورقم محاولة إعادة الطلب، لكن لا تسجّل أبدًا ترويسة التفويض أو أسرار الطلب.

مرجع الحالات والرموز#

HTTPالرمز الثابتالمعنىالاستجابة المعتادة
400invalid_requestفشل التحقق من الصحة أو أن أحد الحقول غير مدعومصحّح الحقول الواردة في details؛ ولا تعِد المحاولة بالمدخلات نفسها
400invalid_jsonالجسم ليس كائن JSON أو يحتوي على JSON غير صالحأرسل كائن JSON صالحًا واحدًا
401authentication_requiredترويسة Bearer مفقودةأرفق بيانات اعتماد من جهة الخادم
401invalid_api_keyالمفتاح غير صالح أو منتهي الصلاحية أو ملغى، أو لم يعد مالكه موجودًااستبدل المفتاح أو دوّره
403subscription_requiredلا يملك المالك خطة مدفوعة نشطةاستعد الاشتراك قبل إعادة المحاولة
403insufficient_scopeتفتقر بيانات الاعتماد إلى نطاق العمليةأنشئ بيانات اعتماد بديلة بأقل قدر من الصلاحيات
403account_pausedوصول API متوقف مؤقتًا للحساباستأنف وصول API أو تواصل مع مالك الحساب
404not_foundلم يُعثر على نقطة النهاية أو المورد المملوكتحقق من المسار ومن المعرّف التابع للمستأجر
409conflictحالة المورد الحالية تمنع تنفيذ الإجراءاقرأ الحالة الحالية قبل إعادة المحاولة
413payload_too_largeجسم JSON يتجاوز حد الطلب البالغ 256 KBأرسل جسمًا أصغر؛ وقسّم المحتوى الكبير على عدة طلبات
415invalid_requestجسم التعديل ليس application/jsonأرسل Content-Type: application/json
429rate_limit_exceededاستُنفدت حصة الدقيقة الواحدة في خطة المفتاحانتظر حسب Retry-After وأضف تأخيرًا عشوائيًا (jitter)
500internal_errorتعذّر إكمال الطلبأعد محاولة العملية الآمنة أو القابلة للتكرار دون أثر جانبي، وأبلغ عن معرّف الطلب
503outcome_unknownربما اكتمل التعديل، لكن تعذّر تسجيل نتيجته؛ وقيمة details.retryable هي falseلا تعِد المحاولة. اقرأ المورد لمعرفة ما إذا كان التغيير قد حدث؛ ويستمر مفتاح idempotency نفسه في إرجاع هذه النتيجة

قد تعيد الموارد الواقعة خارج حساب مالك بيانات الاعتماد الخطأ 404 بدلًا من الكشف عمّا إذا كان معرّف يخص مستأجرًا آخر موجودًا.

تفاصيل التحقق من الصحة#

يعيد التحقق من الحقول مسارات يمكن عرضها بجانب عناصر النموذج لديك:

{
  "error": {
    "code": "invalid_request",
    "message": "Request validation failed.",
    "details": [
      { "path": "content.headline", "message": "String must contain at least 1 character(s)" }
    ],
    "request_id": "6c0b2f2e-..."
  }
}

يجب أن تكون أجسام التعديل كائنات JSON. وتُرفض المصفوفات والأجسام الفارغة وبيانات النماذج وJSON المرسل بنوع محتوى نصي.

قرارات إعادة المحاولة#

  • أعد محاولة 429 بعد عدد الثواني المحدد في Retry-After.
  • أعد محاولة 500 فقط في عمليات القراءة الآمنة أو عمليات الكتابة المحمية بالمفتاح Idempotency-Key نفسه.
  • أعد محاولة 409 الخاص بـ idempotency قيد التنفيذ بعد المدة الواردة في الترويسة Retry-After: 2.
  • لا تعِد محاولة 503 outcome_unknown بشكل أعمى. تحقق من المورد أولًا؛ ولا تستخدم مفتاح idempotency جديدًا إلا بعد التأكد من أن التغيير لم يحدث.
  • لا تعِد محاولة 400 أو 401 أو 403 أو 404 أو 413 أو تعارض الحالة إلا بعد تغيّر السبب.

راجع حدود المعدل لمعرفة سلوك التراجع، ومرجع API لمعرفة النطاق المطلوب لكل عملية.