mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-31 19:49:22 +00:00
Compare commits
2 Commits
main
...
fix/nl2sql
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
338662201f | ||
|
|
7f6367a21c |
2
.github/security.md
vendored
2
.github/security.md
vendored
@@ -12,4 +12,4 @@ Please submit reports through one of the following channels:
|
||||
|
||||
- **Please do not** disclose vulnerabilities via public GitHub issues, pull requests,
|
||||
or social media
|
||||
- Reports submitted via channels other than the methods above will not be reviewed and will be dismissed
|
||||
- Reports submitted via channels other than this Bugcrowd submission email will not be reviewed and will be dismissed
|
||||
|
||||
15216
docs/docs.json
15216
docs/docs.json
File diff suppressed because it is too large
Load Diff
@@ -4,27 +4,6 @@ description: "تحديثات المنتج والتحسينات وإصلاحات
|
||||
icon: "clock"
|
||||
mode: "wide"
|
||||
---
|
||||
<Update label="31 يوليو 2026">
|
||||
## v1.15.10
|
||||
|
||||
[عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.10)
|
||||
|
||||
## ما الذي تغير
|
||||
|
||||
### الميزات
|
||||
- جمع أحداث استخدام المهارات
|
||||
|
||||
### الوثائق
|
||||
- إزالة وثائق AMP التي تم نقلها
|
||||
- تحديث إرشادات الإبلاغ عن الأمان
|
||||
- لقطة وتغيير السجل للإصدار v1.15.9
|
||||
|
||||
## المساهمون
|
||||
|
||||
@gvieira, @joaomdmoura, @theCyberTech
|
||||
|
||||
</Update>
|
||||
|
||||
<Update label="29 يوليو 2026">
|
||||
## v1.15.9
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ def log_request(context):
|
||||
### CrewAI Enterprise
|
||||
أسهل طريقة لنشر تدفقك هي استخدام CrewAI Enterprise. تتعامل مع البنية التحتية والمصادقة والمراقبة نيابة عنك.
|
||||
|
||||
راجع [دليل النشر](https://docs-platform.crewai.com/platform/ar/guides/deploy-to-amp) للبدء.
|
||||
راجع [دليل النشر](/ar/enterprise/guides/deploy-to-amp) للبدء.
|
||||
|
||||
```bash
|
||||
crewai deploy create
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "راقب أتمتاتك"
|
||||
description: "راقب صحة الأسطول واستهلاك LLM وسلوك كل أتمتة من تبويب Automations."
|
||||
sidebarTitle: "المراقبة"
|
||||
icon: "gauge"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Info>
|
||||
**تنقل وثائق ACP (إصدار تجريبي)**
|
||||
|
||||
- [نظرة عامة](/ar/enterprise/features/agent-control-plane/overview)
|
||||
- **المراقبة** *(أنت هنا)*
|
||||
- [السياسات](/edge/ar/enterprise/features/agent-control-plane/policies)
|
||||
</Info>
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
تبويب **Automations** هو عرض العمليات للقراءة فقط في [Agent Control Plane](/ar/enterprise/features/agent-control-plane/overview). يجمع بين بطاقتَي مقاييس و sankey تفاعلي وجدولين فرعيين — **Automations** و **Consumption** — يمكنك البحث والتصفية والفرز فيهما.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
تحترم جميع المخططات والجداول مُحدّد **آخر 24 ساعة / الأسبوع الماضي / آخر 30 يوماً** في أعلى اليمين. تقارن قيم الفرق النافذة المختارة بالنافذة السابقة بنفس الطول.
|
||||
|
||||
<Note>
|
||||
تعرض الصفوف بيانات فقط لعمليات النشر على **crewAI v1.13 أو أحدث** — تظهر عمليات النشر الأقدم في لافتة *"We've detected N other automations that we can't display"* أسفل sankey ولا تساهم بأي مقاييس حتى يتم تحديثها وإعادة نشرها. راجع [نظرة عامة — المتطلبات](/ar/enterprise/features/agent-control-plane/overview#المتطلبات).
|
||||
</Note>
|
||||
|
||||
## لوحة المعلومات
|
||||
|
||||
يحتوي رأس الصفحة على بطاقتَي مقاييس و sankey تفاعلي. النقر على أي من البطاقتين يبدّل sankey بين وضعَين:
|
||||
|
||||
- **وضع الصحة** — `إجمالي الأتمتات → حِزم الحالة (Critical / Warning / Healthy)`. انقر على حِزمة لتصفية جدول Automations إلى عمليات النشر تلك فقط.
|
||||
- **وضع الاستهلاك** — `مزودو النماذج → الأتمتات → التكلفة الإجمالية`. انقر على مزود لتصفية جدول Consumption إلى ذلك المزود.
|
||||
|
||||
| البطاقة | ما تعرضه |
|
||||
|------|---------------|
|
||||
| **Automations** | الأتمتات `active` (والعدد الإجمالي)، إجمالي `errors` في النافذة، `active executions` الحالية (والإجمالي في النافذة)، مع الفرق مقابل الفترة السابقة. |
|
||||
| **Consumption** | إجمالي `cost` و `tokens used`، مع فرق التكلفة مقابل الفترة السابقة. |
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## جدول Automations
|
||||
|
||||
التبويب الفرعي **Automations** هو تفصيل صحة الأسطول لكل deployment. كل صف هو crew أو flow منشور.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
| العمود | ما يعرضه |
|
||||
|--------|---------------|
|
||||
| **Automation** | اسم الـ deployment وأي وسوم مُسنَدة إليه (مثل `production`، `financial`). |
|
||||
| **Last execution** | الوقت المنقضي منذ آخر تنفيذ. |
|
||||
| **Health Status Breakdown** | شريط مكدّس بنسب `Critical` / `Warning` / `Healthy` لعمليات التنفيذ في النافذة. |
|
||||
| **Executions with Errors** | إجمالي عمليات التنفيذ الفاشلة في النافذة. |
|
||||
| **PII detection applied** | `Yes` إذا كان هناك تكوين PII لكل deployment أو [سياسة PII](/edge/ar/enterprise/features/agent-control-plane/policies) مطابِقة نشطة. |
|
||||
| **Executions** | إجمالي عمليات التنفيذ في النافذة. |
|
||||
| **Last updated** | متى أُعيد نشر الـ deployment آخر مرة. |
|
||||
| **Crew Version** | إصدار `crewai` الذي يُبلِّغ عنه الـ deployment. يشير أيقونة المعلومات بجانب الإصدارات الأقل من `1.13` إلى صفوف لا يمكنها المساهمة بالمقاييس. |
|
||||
|
||||
ابحث بالاسم، صفِّ حسب `Status` (`Healthy` / `Warning` / `Critical`)، وافرز بأي رأس عمود. انقر على اسم الـ deployment لفتح **لوحة الأتمتة**.
|
||||
|
||||
## جدول Consumption
|
||||
|
||||
التبويب الفرعي **Consumption** هو تفصيل إنفاق LLM واستخدام الرموز لكل deployment.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
| العمود | ما يعرضه |
|
||||
|--------|---------------|
|
||||
| **Automation** | اسم الـ deployment. |
|
||||
| **Last execution** | الوقت المنقضي منذ آخر تنفيذ. |
|
||||
| **Tokens used** | صف واحد لكل مزود LLM تستخدمه هذه الأتمتة، مع الفرق مقابل الفترة السابقة. |
|
||||
| **Cost** | التكلفة لكل مزود LLM، مع الفرق مقابل الفترة السابقة. |
|
||||
| **Total cost** | المجموع عبر جميع المزودين، مع الفرق. |
|
||||
| **Executions** | إجمالي عمليات التنفيذ في النافذة. |
|
||||
| **Last updated** | متى أُعيد نشر الـ deployment آخر مرة. |
|
||||
| **Crew Version** | إصدار `crewai` الذي يُبلِّغ عنه الـ deployment. |
|
||||
|
||||
صفِّ حسب **LLM provider** وافرز حسب `Cost` أو `Executions` أو `Last run`.
|
||||
|
||||
<Info>
|
||||
**عادة ما تعني الخلايا الفارغة (`—` أو `$0.00`) أن الـ deployment أدنى من crewAI v1.13.** في اللقطة أعلاه، تظهر *Automation F* (`1.7.0`) و *Automation I* (`1.12.2`) فارغة في الرموز والتكلفة — لا تزال عمليات التنفيذ تعمل، لكنها لا تُصدِر التليمتري على مستوى المزود الذي يُغذِّي هذا الجدول. حدّث هذه الـ crews وأعد نشرها لبدء جمع بيانات الاستهلاك.
|
||||
</Info>
|
||||
|
||||
## ذو صلة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Agent Control Plane — نظرة عامة" icon="book-open" href="/ar/enterprise/features/agent-control-plane/overview">
|
||||
ما هو ACP، المتطلبات، مستويات الخطط، و RBAC.
|
||||
</Card>
|
||||
<Card title="Agent Control Plane — السياسات" icon="shield-check" href="/edge/ar/enterprise/features/agent-control-plane/policies">
|
||||
طبّق سياسات PII Redaction على مستوى المؤسسة عبر العديد من الأتمتات.
|
||||
</Card>
|
||||
<Card title="Traces" icon="timeline" href="/ar/enterprise/features/traces">
|
||||
تعمّق في تنفيذ واحد لرؤية تفكير الوكيل واستدعاءات الأدوات واستخدام الرموز.
|
||||
</Card>
|
||||
<Card title="النشر إلى AMP" icon="rocket" href="/ar/enterprise/guides/deploy-to-amp">
|
||||
انشر crew على إصدار crewAI يدعم Agent Control Plane.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تفسير المقاييس داخل Agent Control Plane.
|
||||
</Card>
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
title: نظرة عامة على Agent Control Plane
|
||||
description: "مركز عمليات موحّد للأتمتات الجارية — صحة الأسطول واستهلاك LLM والسياسات على مستوى المؤسسة في مكان واحد."
|
||||
sidebarTitle: نظرة عامة
|
||||
icon: "book-open"
|
||||
---
|
||||
|
||||
<Info>
|
||||
**تنقل وثائق ACP (إصدار تجريبي)**
|
||||
|
||||
- **نظرة عامة** *(أنت هنا)*
|
||||
- [المراقبة](/ar/enterprise/features/agent-control-plane/monitoring)
|
||||
- [السياسات](/edge/ar/enterprise/features/agent-control-plane/policies)
|
||||
</Info>
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
**Agent Control Plane** (ACP) هو مركز العمليات لكل ما يعمل لديك على CrewAI AMP. إنها شاشة واحدة — مقسّمة إلى تبويبَي **Automations** و **Policies** — تمنح فريقك القدرة على:
|
||||
|
||||
- مراقبة **حالة (الصحة)** كل أتمتة حيّة (crew أو flow) بتفصيل `Critical` / `Warning` / `Healthy` وعدد عمليات التنفيذ.
|
||||
- تتبع **استهلاك LLM** — الرموز (tokens) والتكلفة — لكل أتمتة ولكل مزود ولكل نموذج، مع الفرق مقابل الفترة السابقة.
|
||||
- التعمّق في أي أتمتة منفردة أو مزود نماذج لرؤية المخططات الزمنية وتفصيل البيانات لكل مزود.
|
||||
- تطبيق **سياسات (Policies)** على مستوى المؤسسة (اليوم: PII Redaction) عبر العديد من الأتمتات دفعة واحدة بدلاً من تعديل كل deployment على حدة.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
<Note>
|
||||
Agent Control Plane مُوسوم حالياً بـ **Beta** في CrewAI Platform.
|
||||
</Note>
|
||||
|
||||
يجيب التبويبان عن سؤالَين مختلفَين:
|
||||
|
||||
- **Automations** — *"كيف يتصرف أسطولي الآن، وكم يكلّفني؟"* راجع [المراقبة](/ar/enterprise/features/agent-control-plane/monitoring).
|
||||
- **Policies** — *"كيف أفرض سياسة (مثل PII redaction) عبر العديد من عمليات النشر دون إعادة نشر كل واحدة؟"* راجع [السياسات](/edge/ar/enterprise/features/agent-control-plane/policies).
|
||||
|
||||
## المتطلبات
|
||||
|
||||
<Warning>
|
||||
يُشترط **crewAI v1.13 أو أحدث** ليتمكن أي أتمتة من تعبئة أي بيانات على هذه الصفحة — تمر بيانات الصحة وعمليات التنفيذ والأخطاء والرموز والتكلفة عبر التليمتري الذي تم تفعيله في `crewai==1.13`. تظهر عمليات النشر الأقدم في لافتة *"We've detected N other automations that we can't display"* ولا تساهم بأي صفوف حتى يتم تحديثها وإعادة نشرها.
|
||||
</Warning>
|
||||
|
||||
<Warning>
|
||||
يُشترط **خطة Enterprise أو Ultra** لإنشاء أو تعديل [السياسات](/edge/ar/enterprise/features/agent-control-plane/policies). يمكن للمؤسسات على الخطط الأدنى فتح تبويب Policies وعرض السياسات الموجودة، ولكن يُعرض المحرر للقراءة فقط مع شارة قفل "Enterprise" والتنبيه *"PII Redaction policies require an Enterprise plan."*. المراقبة (تبويب Automations) متاحة في جميع الخطط حيث يكون هذا الميزة مفعّلة.
|
||||
</Warning>
|
||||
|
||||
- يجب أن تكون ميزة **Agent Control Plane** مفعّلة لمؤسستك. إن لم ترها في الشريط الجانبي، اطلب من مالك الحساب تفعيلها.
|
||||
- داخل ACP، يحكم [RBAC](/ar/enterprise/features/rbac) الوصول: `read` للعرض في لوحة المعلومات والسياسات، و`manage` لإنشاء وتعديل وتشغيل/إيقاف وحذف السياسات.
|
||||
- يمكن ضبط نطاق جميع المخططات والجداول إلى **آخر 24 ساعة** أو **الأسبوع الماضي** أو **آخر 30 يوماً** عبر مُحدّد الوقت في أعلى اليمين. تقارن قيم الفرق (`↑ 8 vs yesterday`, `↓ $20.57 vs yesterday` وغيرها) النافذة المختارة بالنافذة السابقة بنفس الطول.
|
||||
|
||||
## ما يمكنك فعله هنا
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="المراقبة" icon="gauge" href="/ar/enterprise/features/agent-control-plane/monitoring">
|
||||
راقب صحة الأسطول وإنفاق LLM عبر بطاقات المقاييس و sankey التفاعلي وجداول لكل أتمتة ولوحات جانبية للتعمق في أي أتمتة أو مزود.
|
||||
</Card>
|
||||
<Card title="السياسات" icon="shield-check" href="/edge/ar/enterprise/features/agent-control-plane/policies">
|
||||
طبّق سياسات PII Redaction على مستوى المؤسسة بنطاق محدد بالأدوات والوسوم. تسري التغييرات في التنفيذ التالي — دون الحاجة لإعادة نشر.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## ذو صلة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Traces" icon="timeline" href="/ar/enterprise/features/traces">
|
||||
تعمّق في تنفيذ واحد لرؤية تفكير الوكيل واستدعاءات الأدوات واستخدام الرموز.
|
||||
</Card>
|
||||
<Card title="RBAC" icon="users" href="/ar/enterprise/features/rbac">
|
||||
أدِر من يمكنه قراءة Agent Control Plane ومن يمكنه تعديل السياسات.
|
||||
</Card>
|
||||
<Card title="PII Redaction للـ Traces" icon="lock" href="/ar/enterprise/features/pii-trace-redactions">
|
||||
كتالوج الكيانات وضبط PII لكل deployment التي تستند إليها السياسات.
|
||||
</Card>
|
||||
<Card title="النشر إلى AMP" icon="rocket" href="/ar/enterprise/guides/deploy-to-amp">
|
||||
انشر crew على إصدار crewAI يدعم Agent Control Plane.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تفسير المقاييس أو تصميم السياسات.
|
||||
</Card>
|
||||
@@ -0,0 +1,122 @@
|
||||
---
|
||||
title: "إعداد السياسات"
|
||||
description: "طبّق سياسات على مستوى المؤسسة عبر العديد من الأتمتات من مكان واحد."
|
||||
sidebarTitle: "السياسات"
|
||||
icon: "shield-check"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Info>
|
||||
**تنقل وثائق ACP (إصدار تجريبي)**
|
||||
|
||||
- [نظرة عامة](/ar/enterprise/features/agent-control-plane/overview)
|
||||
- [المراقبة](/ar/enterprise/features/agent-control-plane/monitoring)
|
||||
- **السياسات** *(أنت هنا)*
|
||||
</Info>
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
تتيح لك السياسات تطبيق سياسات — اليوم: **PII Redaction** — عبر العديد من الأتمتات دفعة واحدة، بدلاً من ضبط كل deployment على حدة. افتح تبويب **Policies** في [Agent Control Plane](/ar/enterprise/features/agent-control-plane/overview) لإدارتها.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
تعرض كل بطاقة سياسة الاسم والوصف و**النطاق (scope)** الذي تنطبق عليه السياسة (الأدوات والوسوم المختارة) وعدد **الأتمتات المُفعَّلة** — عمليات النشر التي تطابق النطاق حالياً. يقوم المُفتاح على اليمين بتشغيل السياسة أو إيقافها دون حذفها.
|
||||
|
||||
## المتطلبات
|
||||
|
||||
<Warning>
|
||||
يُشترط **خطة Enterprise أو Ultra** لإنشاء أو تعديل سياسات PII Redaction. يمكن للمؤسسات على الخطط الأدنى فتح تبويب Policies وعرض السياسات الموجودة، ولكن يُعرض المحرر للقراءة فقط مع شارة قفل "Enterprise" والتنبيه *"PII Redaction policies require an Enterprise plan."* — تواصل مع مالك حسابك أو المبيعات للترقية.
|
||||
</Warning>
|
||||
|
||||
- يجب أن تكون ميزة **Agent Control Plane** مفعّلة لمؤسستك. راجع [نظرة عامة — المتطلبات](/ar/enterprise/features/agent-control-plane/overview#المتطلبات).
|
||||
- تحتاج إلى صلاحية `manage` ضمن [RBAC](/ar/enterprise/features/rbac) على Agent Control Plane لإنشاء وتعديل وتشغيل/إيقاف وحذف السياسات. صلاحية `read` كافية لعرضها.
|
||||
- تُسجَّل جميع تغييرات السياسات بإصدارات للتدقيق.
|
||||
|
||||
## أنواع السياسات المتاحة
|
||||
|
||||
| النوع | ما تفعله |
|
||||
|------|---------------|
|
||||
| **PII Redaction** | تطبّق PII redaction على عمليات التنفيذ لكل أتمتة مطابِقة، باستخدام نفس كتالوج الكيانات و recognizers المخصصة الموثَّقة في [PII Redaction للـ Traces](/ar/enterprise/features/pii-trace-redactions). |
|
||||
|
||||
سيتم إضافة أنواع سياسات أخرى مع الوقت.
|
||||
|
||||
## إنشاء سياسة
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/acp-policies-new-side-panel.png" alt="لوحة تعديل سياسة جانبية بالشروط ونوع قناع PII" width="450" />
|
||||
</Frame>
|
||||
|
||||
<Steps>
|
||||
<Step title="افتح المحرر">
|
||||
انقر على **+ Create new** في أعلى يمين تبويب Policies، أو على **View Details** في بطاقة سياسة موجودة.
|
||||
</Step>
|
||||
|
||||
<Step title="سَمِّ السياسة وصِفها">
|
||||
أعطِ السياسة اسماً واضحاً (مثل *Mask PII (CC)*) ووصفاً يشرح متى تنطبق. يظهر كلاهما على بطاقة السياسة وفي مودال Engaged Automations.
|
||||
</Step>
|
||||
|
||||
<Step title="اختر النوع">
|
||||
اليوم **PII Redaction** فقط متاحة.
|
||||
</Step>
|
||||
|
||||
<Step title="حدّد الشروط">
|
||||
تحدد الشروط الأتمتات التي تنخرط معها السياسة. كلاهما اختياري ويستخدم دلالات **مساواة المجموعات (set-equality)**:
|
||||
|
||||
- **Tools** — تنخرط فقط الأتمتات التي تتطابق مجموعة أدواتها **تطابقاً تامّاً** مع الأدوات المختارة. اختر من تطبيقات Studio و MCPs والأدوات مفتوحة المصدر وأدوات سجل Tool Repository.
|
||||
- **Automations** — تنخرط فقط الأتمتات التي تتطابق مجموعة وسومها **تطابقاً تامّاً** مع الوسوم المختارة.
|
||||
|
||||
ترك مُحدِّد فارغ يعني "بدون تصفية على هذا البعد". ترك كليهما فارغَين يعني أن السياسة تنطبق على **كل** أتمتة في المؤسسة.
|
||||
</Step>
|
||||
|
||||
<Step title="اضبط جدول PII Mask Type">
|
||||
حدّد كل نوع كيان تريد تغطيته واختر **Mask** (يستبدل بتسمية الكيان مثل `<CREDIT_CARD>`) أو **Redact** (يحذف النص المطابِق بالكامل). راجع [PII Redaction للـ Traces](/ar/enterprise/features/pii-trace-redactions) للاطلاع على كتالوج الكيانات الكامل وكيفية إضافة recognizers مخصصة على مستوى المؤسسة.
|
||||
</Step>
|
||||
|
||||
<Step title="احفظ">
|
||||
تنطبق السياسة على عمليات التنفيذ **المستقبلية** لكل أتمتة مُفعَّلة بمجرد الحفظ. لا حاجة لإعادة النشر.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## الأتمتات المُفعَّلة
|
||||
|
||||
انقر على **Engaged N automations** في أي بطاقة سياسة لرؤية أي عمليات النشر تطابقها السياسة حالياً بالضبط، إلى جانب آخر تنفيذ لكل منها.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
هذه هي أسرع طريقة للتحقق من نطاق سياسة قبل تمكينها — على سبيل المثال، للتأكد من أن سياسة محدَّدة بنطاق وسم `production` لا تطابق عن طريق الخطأ deployment تجريبي.
|
||||
|
||||
## سياسات على مستوى المؤسسة مقابل إعدادات لكل deployment
|
||||
|
||||
يمكن ضبط PII Redaction في مكانين:
|
||||
|
||||
- **لكل deployment** — ضمن **Settings → PII Protection** على كل deployment على حدة ([الدليل](/ar/enterprise/features/pii-trace-redactions))
|
||||
- **على مستوى المؤسسة** — كسياسة في هذه الصفحة
|
||||
|
||||
عندما يتطابق نطاق سياسة مُفعَّلة على مستوى المؤسسة مع deployment، يُجاوز تكوين الكيانات الخاص بالسياسة **إعدادات PII المملوكة من قبل الـ deployment** لعمليات تنفيذ ذلك الـ deployment — تصبح السياسة المصدر الوحيد للحقيقة طالما هي مرتبطة. عطّل السياسة أو فُكَّ ارتباطها (أو غيِّر نطاقها بحيث لا تتطابق بعد الآن) ويعود الـ deployment إلى إعدادات PII Protection الخاصة به.
|
||||
|
||||
فضّل السياسات على مستوى المؤسسة عندما تريد فرض سياسة متسقة عبر العديد من عمليات النشر؛ احتفظ بالضبط لكل deployment للاستثناءات الفردية.
|
||||
|
||||
## ذو صلة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Agent Control Plane — نظرة عامة" icon="book-open" href="/ar/enterprise/features/agent-control-plane/overview">
|
||||
ما هو ACP، المتطلبات، مستويات الخطط، و RBAC.
|
||||
</Card>
|
||||
<Card title="Agent Control Plane — المراقبة" icon="gauge" href="/ar/enterprise/features/agent-control-plane/monitoring">
|
||||
راقب الأتمتات واستهلاك LLM عبر أسطولك.
|
||||
</Card>
|
||||
<Card title="PII Redaction للـ Traces" icon="lock" href="/ar/enterprise/features/pii-trace-redactions">
|
||||
كتالوج الكيانات، recognizers المخصصة، والضبط لكل deployment.
|
||||
</Card>
|
||||
<Card title="RBAC" icon="users" href="/ar/enterprise/features/rbac">
|
||||
أدِر من يمكنه إنشاء أو تعديل السياسات.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تصميم سياسات لمؤسستك.
|
||||
</Card>
|
||||
155
docs/edge/ar/enterprise/features/agent-repositories.mdx
Normal file
155
docs/edge/ar/enterprise/features/agent-repositories.mdx
Normal file
@@ -0,0 +1,155 @@
|
||||
---
|
||||
title: 'مستودعات الوكلاء'
|
||||
description: 'تعرّف على كيفية استخدام مستودعات الوكلاء لمشاركة وإعادة استخدام وكلائك عبر الفرق والمشاريع'
|
||||
icon: 'people-group'
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
تتيح مستودعات الوكلاء لمستخدمي المؤسسات تخزين ومشاركة وإعادة استخدام تعريفات الوكلاء عبر الفرق والمشاريع. تُمكّن هذه الميزة المؤسسات من الاحتفاظ بمكتبة مركزية من الوكلاء الموحدين، مما يعزز الاتساق ويقلل من ازدواجية الجهود.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## فوائد مستودعات الوكلاء
|
||||
|
||||
- **التوحيد**: الحفاظ على تعريفات وكلاء متسقة عبر مؤسستك
|
||||
- **إعادة الاستخدام**: إنشاء وكيل مرة واحدة واستخدامه في أطقم ومشاريع متعددة
|
||||
- **الحوكمة**: تطبيق سياسات على مستوى المؤسسة لتهيئات الوكلاء
|
||||
- **التعاون**: تمكين الفرق من المشاركة والبناء على عمل بعضهم البعض
|
||||
|
||||
## إنشاء واستخدام مستودعات الوكلاء
|
||||
|
||||
1. يجب أن يكون لديك حساب في CrewAI، جرّب [الخطة المجانية](https://app.crewai.com).
|
||||
2. أنشئ وكلاء بأدوار وأهداف محددة لسير عملك.
|
||||
3. هيّئ الأدوات والقدرات لكل مساعد متخصص.
|
||||
4. انشر الوكلاء عبر المشاريع من خلال الواجهة المرئية أو تكامل API.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
|
||||
### تحميل الوكلاء من المستودعات
|
||||
|
||||
يمكنك تحميل الوكلاء من المستودعات في الكود باستخدام معامل `from_repository` للتشغيل محليًا:
|
||||
|
||||
```python
|
||||
from crewai import Agent
|
||||
|
||||
# إنشاء وكيل بتحميله من مستودع
|
||||
# يتم تحميل الوكيل بجميع إعداداته المحددة مسبقًا
|
||||
researcher = Agent(
|
||||
from_repository="market-research-agent"
|
||||
)
|
||||
```
|
||||
|
||||
### تجاوز إعدادات المستودع
|
||||
|
||||
يمكنك تجاوز إعدادات محددة من المستودع بتوفيرها في التهيئة:
|
||||
|
||||
```python
|
||||
researcher = Agent(
|
||||
from_repository="market-research-agent",
|
||||
goal="Research the latest trends in AI development", # تجاوز هدف المستودع
|
||||
verbose=True # إضافة إعداد غير موجود في المستودع
|
||||
)
|
||||
```
|
||||
|
||||
### مثال: إنشاء طاقم مع وكلاء المستودع
|
||||
|
||||
```python
|
||||
from crewai import Crew, Agent, Task
|
||||
|
||||
# تحميل الوكلاء من المستودعات
|
||||
researcher = Agent(
|
||||
from_repository="market-research-agent"
|
||||
)
|
||||
|
||||
writer = Agent(
|
||||
from_repository="content-writer-agent"
|
||||
)
|
||||
|
||||
# إنشاء المهام
|
||||
research_task = Task(
|
||||
description="Research the latest trends in AI",
|
||||
agent=researcher
|
||||
)
|
||||
|
||||
writing_task = Task(
|
||||
description="Write a comprehensive report based on the research",
|
||||
agent=writer
|
||||
)
|
||||
|
||||
# إنشاء الطاقم
|
||||
crew = Crew(
|
||||
agents=[researcher, writer],
|
||||
tasks=[research_task, writing_task],
|
||||
verbose=True
|
||||
)
|
||||
|
||||
# تشغيل الطاقم
|
||||
result = crew.kickoff()
|
||||
```
|
||||
|
||||
### مثال: استخدام `kickoff()` مع وكلاء المستودع
|
||||
|
||||
يمكنك أيضًا استخدام وكلاء المستودع مباشرة مع طريقة `kickoff()` للتفاعلات الأبسط:
|
||||
|
||||
```python
|
||||
from crewai import Agent
|
||||
from pydantic import BaseModel
|
||||
from typing import List
|
||||
|
||||
# تعريف تنسيق مخرجات منظم
|
||||
class MarketAnalysis(BaseModel):
|
||||
key_trends: List[str]
|
||||
opportunities: List[str]
|
||||
recommendation: str
|
||||
|
||||
# تحميل وكيل من المستودع
|
||||
analyst = Agent(
|
||||
from_repository="market-analyst-agent",
|
||||
verbose=True
|
||||
)
|
||||
|
||||
# الحصول على استجابة حرة
|
||||
result = analyst.kickoff("Analyze the AI market in 2025")
|
||||
print(result.raw) # الوصول إلى الاستجابة الخام
|
||||
|
||||
# الحصول على مخرجات منظمة
|
||||
structured_result = analyst.kickoff(
|
||||
"Provide a structured analysis of the AI market in 2025",
|
||||
response_format=MarketAnalysis
|
||||
)
|
||||
|
||||
# الوصول إلى البيانات المنظمة
|
||||
print(f"Key Trends: {structured_result.pydantic.key_trends}")
|
||||
print(f"Recommendation: {structured_result.pydantic.recommendation}")
|
||||
```
|
||||
|
||||
## أفضل الممارسات
|
||||
|
||||
1. **اصطلاح التسمية**: استخدم أسماء واضحة ووصفية لوكلاء المستودع
|
||||
2. **التوثيق**: أدرج أوصافًا شاملة لكل وكيل
|
||||
3. **إدارة الأدوات**: تأكد من توفر الأدوات المشار إليها بواسطة وكلاء المستودع في بيئتك
|
||||
4. **التحكم في الوصول**: أدر الصلاحيات لضمان أن أعضاء الفريق المصرّح لهم فقط يمكنهم تعديل وكلاء المستودع
|
||||
|
||||
## إدارة المؤسسة
|
||||
|
||||
للتبديل بين المؤسسات أو عرض مؤسستك الحالية، استخدم واجهة سطر أوامر CrewAI:
|
||||
|
||||
```bash
|
||||
# عرض المؤسسة الحالية
|
||||
crewai org current
|
||||
|
||||
# التبديل إلى مؤسسة مختلفة
|
||||
crewai org switch <org_id>
|
||||
|
||||
# عرض جميع المؤسسات المتاحة
|
||||
crewai org list
|
||||
```
|
||||
|
||||
<Note>
|
||||
عند تحميل الوكلاء من المستودعات، يجب أن تكون مصادقًا ومتحولًا إلى المؤسسة الصحيحة. إذا تلقيت أخطاء، تحقق من حالة المصادقة وإعدادات المؤسسة باستخدام أوامر CLI أعلاه.
|
||||
</Note>
|
||||
104
docs/edge/ar/enterprise/features/automations.mdx
Normal file
104
docs/edge/ar/enterprise/features/automations.mdx
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
title: الأتمتة
|
||||
description: "إدارة ونشر ومراقبة أطقمك المباشرة (الأتمتة) في مكان واحد."
|
||||
icon: "rocket"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
الأتمتة هي مركز العمليات المباشرة لأطقمك المنشورة. استخدمها للنشر من GitHub أو ملف ZIP، وإدارة متغيرات البيئة، وإعادة النشر عند الحاجة، ومراقبة حالة كل أتمتة.
|
||||
|
||||
<Frame>
|
||||

|
||||
|
||||
</Frame>
|
||||
|
||||
## طرق النشر
|
||||
|
||||
### النشر من GitHub
|
||||
|
||||
استخدم هذا للمشاريع ذات التحكم في الإصدارات والنشر المستمر.
|
||||
|
||||
<Steps>
|
||||
<Step title="ربط GitHub">
|
||||
انقر على <b>Configure GitHub</b> وصرّح بالوصول.
|
||||
</Step>
|
||||
<Step title="اختيار المستودع والفرع">
|
||||
اختر <b>المستودع</b> و<b>الفرع</b> الذي تريد النشر منه.
|
||||
</Step>
|
||||
<Step title="تفعيل النشر التلقائي (اختياري)">
|
||||
فعّل <b>النشر التلقائي للالتزامات الجديدة</b> لإرسال التحديثات مع كل دفع.
|
||||
</Step>
|
||||
<Step title="إضافة متغيرات البيئة">
|
||||
أضف المتغيرات السرية فرديًا أو استخدم <b>العرض الجماعي</b> لمتغيرات متعددة.
|
||||
</Step>
|
||||
<Step title="النشر">
|
||||
انقر على <b>Deploy</b> لإنشاء الأتمتة المباشرة.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### النشر من ZIP
|
||||
|
||||
انشر بسرعة بدون Git — ارفع حزمة مضغوطة من مشروعك.
|
||||
|
||||
<Steps>
|
||||
<Step title="اختيار الملف">
|
||||
اختر أرشيف ZIP من جهازك.
|
||||
</Step>
|
||||
<Step title="إضافة متغيرات البيئة">
|
||||
وفّر أي متغيرات أو مفاتيح مطلوبة.
|
||||
</Step>
|
||||
<Step title="النشر">
|
||||
انقر على <b>Deploy</b> لإنشاء الأتمتة المباشرة.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## لوحة تحكم الأتمتة
|
||||
|
||||
يعرض الجدول جميع الأتمتة المباشرة مع التفاصيل الرئيسية:
|
||||
|
||||
- **CREW**: اسم الأتمتة
|
||||
- **STATUS**: متصل / فشل / قيد التنفيذ
|
||||
- **URL**: نقطة نهاية التشغيل/الحالة
|
||||
- **TOKEN**: رمز الأتمتة
|
||||
- **ACTIONS**: إعادة النشر، الحذف، والمزيد
|
||||
|
||||
استخدم عناصر التحكم في أعلى اليمين للتصفية والبحث:
|
||||
|
||||
- البحث بالاسم
|
||||
- التصفية حسب <b>الحالة</b>
|
||||
- التصفية حسب <b>المصدر</b> (GitHub / Studio / ZIP)
|
||||
|
||||
بعد النشر، يمكنك عرض تفاصيل الأتمتة واستخدام القائمة المنسدلة **الخيارات** لـ `الدردشة مع هذا الطاقم`، `تصدير مكون React` و`التصدير كـ MCP`.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## أفضل الممارسات
|
||||
|
||||
- فضّل نشر GitHub للتحكم في الإصدارات وCI/CD
|
||||
- استخدم إعادة النشر للتقدم بعد تحديثات الكود أو التهيئة أو اضبطه على النشر التلقائي مع كل دفع
|
||||
|
||||
## ذات صلة
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="نشر طاقم" href="/ar/enterprise/guides/deploy-to-amp" icon="rocket">
|
||||
انشر طاقمًا من GitHub أو ملف ZIP.
|
||||
</Card>
|
||||
<Card title="مشغلات الأتمتة" href="/ar/enterprise/guides/automation-triggers" icon="trigger">
|
||||
شغّل الأتمتة عبر webhooks أو API.
|
||||
</Card>
|
||||
<Card title="أتمتة Webhook" href="/ar/enterprise/guides/webhook-automation" icon="webhook">
|
||||
بث الأحداث والتحديثات في الوقت الفعلي إلى أنظمتك.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
88
docs/edge/ar/enterprise/features/crew-studio.mdx
Normal file
88
docs/edge/ar/enterprise/features/crew-studio.mdx
Normal file
@@ -0,0 +1,88 @@
|
||||
---
|
||||
title: استوديو الطاقم
|
||||
description: "إنشاء أتمتة جديدة بمساعدة الذكاء الاصطناعي ومحرر مرئي واختبار متكامل."
|
||||
icon: "pencil"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
استوديو الطاقم هو مساحة عمل تفاعلية بمساعدة الذكاء الاصطناعي لإنشاء أتمتة جديدة من الصفر باستخدام اللغة الطبيعية ومحرر سير عمل مرئي.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## الإنشاء المبني على الأوامر النصية
|
||||
|
||||
- صِف الأتمتة التي تريدها؛ يقوم الذكاء الاصطناعي بإنشاء الوكلاء والمهام والأدوات.
|
||||
- استخدم الإدخال الصوتي عبر أيقونة الميكروفون إذا فضّلت ذلك.
|
||||
- ابدأ من أوامر مدمجة لحالات الاستخدام الشائعة.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## المحرر المرئي
|
||||
|
||||
يعكس اللوح سير العمل كعُقد وأسهم مع ثلاث لوحات داعمة تتيح لك تهيئة سير العمل بسهولة بدون كتابة كود؛ ما يُعرف بـ "**البرمجة الحدسية لوكلاء الذكاء الاصطناعي**".
|
||||
|
||||
يمكنك استخدام وظيفة السحب والإفلات لإضافة الوكلاء والمهام والأدوات إلى اللوح أو استخدام قسم الدردشة لبناء الوكلاء. يتشارك كلا النهجين الحالة ويمكن استخدامهما بالتبادل.
|
||||
|
||||
- **أفكار AI (يسار)**: الاستدلال المتدفق أثناء تصميم سير العمل
|
||||
- **اللوح (المركز)**: الوكلاء والمهام كعقد متصلة
|
||||
- **الموارد (يمين)**: مكونات السحب والإفلات (وكلاء، مهام، أدوات)
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## التنفيذ والتصحيح
|
||||
|
||||
انتقل إلى عرض <b>التنفيذ</b> لتشغيل سير العمل ومراقبته:
|
||||
|
||||
- الجدول الزمني للأحداث
|
||||
- سجلات مفصلة (التفاصيل، الرسائل، البيانات الخام)
|
||||
- اختبارات محلية قبل النشر
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## النشر والتصدير
|
||||
|
||||
- <b>انشر</b> لنشر أتمتة مباشرة
|
||||
- <b>حمّل</b> المصدر كملف ZIP للتطوير المحلي أو التخصيص
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
بعد النشر، يمكنك عرض تفاصيل الأتمتة واستخدام القائمة المنسدلة **الخيارات** لـ `الدردشة مع هذا الطاقم`، `تصدير مكون React` و`التصدير كـ MCP`.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## أفضل الممارسات
|
||||
|
||||
- كرر بسرعة في الاستوديو؛ انشر فقط عندما يكون مستقرًا
|
||||
- اقصر الأدوات على الحد الأدنى من الصلاحيات المطلوبة
|
||||
- استخدم التتبعات للتحقق من السلوك والأداء
|
||||
|
||||
## ذات صلة
|
||||
|
||||
<CardGroup cols={4}>
|
||||
<Card title="تفعيل استوديو الطاقم" href="/ar/enterprise/guides/enable-crew-studio" icon="palette">
|
||||
تفعيل استوديو الطاقم.
|
||||
</Card>
|
||||
<Card title="بناء طاقم" href="/ar/enterprise/guides/build-crew" icon="paintbrush">
|
||||
بناء طاقم.
|
||||
</Card>
|
||||
<Card title="نشر طاقم" href="/ar/enterprise/guides/deploy-to-amp" icon="rocket">
|
||||
نشر طاقم من GitHub أو ملف ZIP.
|
||||
</Card>
|
||||
<Card title="تصدير مكون React" href="/ar/enterprise/guides/react-component-export" icon="download">
|
||||
تصدير مكون React.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
558
docs/edge/ar/enterprise/features/flow-hitl-management.mdx
Normal file
558
docs/edge/ar/enterprise/features/flow-hitl-management.mdx
Normal file
@@ -0,0 +1,558 @@
|
||||
---
|
||||
title: "إدارة HITL للتدفقات"
|
||||
description: "مراجعة بشرية بمستوى المؤسسات للتدفقات مع إشعارات البريد الإلكتروني أولاً وقواعد التوجيه وإمكانيات الاستجابة التلقائية"
|
||||
icon: "users-gear"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Note>
|
||||
تتطلب ميزات إدارة Flow HITL مزيّن `@human_feedback`، المتاح في **CrewAI الإصدار 1.8.0 أو أحدث**. تنطبق هذه الميزات تحديدًا على **التدفقات (Flows)**، وليس الأطقم (Crews).
|
||||
</Note>
|
||||
|
||||
يوفر CrewAI Enterprise نظامًا شاملًا لإدارة الإنسان في الحلقة (HITL) للتدفقات يحوّل سير عمل الذكاء الاصطناعي إلى عمليات تعاونية بين الإنسان والذكاء الاصطناعي. تستخدم المنصة **بنية البريد الإلكتروني أولاً** التي تمكّن أي شخص لديه عنوان بريد إلكتروني من الرد على طلبات المراجعة — بدون الحاجة لحساب على المنصة.
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="تصميم البريد الإلكتروني أولاً" icon="envelope">
|
||||
يمكن للمستجيبين الرد مباشرة على رسائل الإشعار لتقديم الملاحظات
|
||||
</Card>
|
||||
<Card title="توجيه مرن" icon="route">
|
||||
توجيه الطلبات إلى بريد إلكتروني محدد بناءً على أنماط الطرق أو حالة التدفق
|
||||
</Card>
|
||||
<Card title="استجابة تلقائية" icon="clock">
|
||||
تهيئة استجابات احتياطية تلقائية عندما لا يرد أي شخص في الوقت المحدد
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
### الفوائد الرئيسية
|
||||
|
||||
- **نموذج ذهني بسيط**: عناوين البريد الإلكتروني عالمية؛ لا حاجة لإدارة مستخدمين أو أدوار المنصة
|
||||
- **مستجيبون خارجيون**: يمكن لأي شخص لديه بريد إلكتروني الرد، حتى غير مستخدمي المنصة
|
||||
- **تعيين ديناميكي**: سحب بريد المعيّن مباشرة من حالة التدفق (مثل `sales_rep_email`)
|
||||
- **تهيئة مخفضة**: إعدادات أقل للتهيئة، وقت أسرع للقيمة
|
||||
- **البريد الإلكتروني كقناة رئيسية**: يفضل معظم المستخدمين الرد عبر البريد الإلكتروني بدلاً من تسجيل الدخول إلى لوحة التحكم
|
||||
|
||||
## إعداد نقاط المراجعة البشرية في التدفقات
|
||||
|
||||
هيّئ نقاط تفتيش المراجعة البشرية داخل تدفقاتك باستخدام مزيّن `@human_feedback`. عندما يصل التنفيذ إلى نقطة مراجعة، يتوقف النظام ويُخطر المعيّن عبر البريد الإلكتروني وينتظر الاستجابة.
|
||||
|
||||
```python
|
||||
from crewai.flow.flow import Flow, start, listen, or_
|
||||
from crewai.flow.human_feedback import human_feedback, HumanFeedbackResult
|
||||
|
||||
class ContentApprovalFlow(Flow):
|
||||
@start()
|
||||
def generate_content(self):
|
||||
return "Generated marketing copy for Q1 campaign..."
|
||||
|
||||
@human_feedback(
|
||||
message="Please review this content for brand compliance:",
|
||||
emit=["approved", "rejected", "needs_revision"],
|
||||
)
|
||||
@listen(or_("generate_content", "needs_revision"))
|
||||
def review_content(self):
|
||||
return "Marketing copy for review..."
|
||||
|
||||
@listen("approved")
|
||||
def publish_content(self, result: HumanFeedbackResult):
|
||||
print(f"Publishing approved content. Reviewer notes: {result.feedback}")
|
||||
|
||||
@listen("rejected")
|
||||
def archive_content(self, result: HumanFeedbackResult):
|
||||
print(f"Content rejected. Reason: {result.feedback}")
|
||||
```
|
||||
|
||||
للحصول على تفاصيل التنفيذ الكاملة، راجع دليل [التغذية الراجعة البشرية في التدفقات](/ar/learn/human-feedback-in-flows).
|
||||
|
||||
### معاملات المزيّن
|
||||
|
||||
| المعامل | النوع | الوصف |
|
||||
|-----------|------|-------------|
|
||||
| `message` | `str` | الرسالة المعروضة للمراجع البشري |
|
||||
| `emit` | `list[str]` | خيارات الاستجابة الصالحة (تُعرض كأزرار في الواجهة) |
|
||||
|
||||
## تهيئة المنصة
|
||||
|
||||
الوصول إلى تهيئة HITL من: **النشر** ← **الإعدادات** ← **تهيئة الإنسان في الحلقة**
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/hitl-settings-overview.png" alt="HITL Configuration Settings" />
|
||||
</Frame>
|
||||
|
||||
### إشعارات البريد الإلكتروني
|
||||
|
||||
تبديل لتفعيل أو تعطيل إشعارات البريد الإلكتروني لطلبات HITL.
|
||||
|
||||
| الإعداد | الافتراضي | الوصف |
|
||||
|---------|---------|-------------|
|
||||
| إشعارات البريد الإلكتروني | مفعّل | إرسال رسائل عند طلب الملاحظات |
|
||||
|
||||
<Note>
|
||||
عند التعطيل، يجب على المستجيبين استخدام واجهة لوحة التحكم أو يجب تهيئة webhooks لأنظمة إشعارات مخصصة.
|
||||
</Note>
|
||||
|
||||
### هدف SLA
|
||||
|
||||
تعيين وقت استجابة مستهدف لأغراض التتبع والمقاييس.
|
||||
|
||||
| الإعداد | الوصف |
|
||||
|---------|-------------|
|
||||
| هدف SLA (دقائق) | وقت الاستجابة المستهدف. يُستخدم لمقاييس لوحة التحكم وتتبع SLA |
|
||||
|
||||
اتركه فارغًا لتعطيل تتبع SLA.
|
||||
|
||||
## إشعارات واستجابات البريد الإلكتروني
|
||||
|
||||
يستخدم نظام HITL بنية البريد الإلكتروني أولاً حيث يمكن للمستجيبين الرد مباشرة على رسائل الإشعار.
|
||||
|
||||
### كيف تعمل استجابات البريد الإلكتروني
|
||||
|
||||
<Steps>
|
||||
<Step title="إرسال الإشعار">
|
||||
عند إنشاء طلب HITL، يُرسل بريد إلكتروني إلى المستجيب المعيّن مع محتوى المراجعة والسياق.
|
||||
</Step>
|
||||
<Step title="عنوان الرد">
|
||||
يتضمن البريد عنوان رد خاص مع رمز موقّع للمصادقة.
|
||||
</Step>
|
||||
<Step title="رد المستخدم">
|
||||
يرد المستجيب ببساطة على البريد بملاحظاته — بدون حاجة لتسجيل الدخول.
|
||||
</Step>
|
||||
<Step title="التحقق من الرمز">
|
||||
تستقبل المنصة الرد، وتتحقق من الرمز الموقّع، وتطابق بريد المرسل.
|
||||
</Step>
|
||||
<Step title="استئناف التدفق">
|
||||
تُسجل الملاحظات ويستمر التدفق مع مدخلات الإنسان.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### تنسيق الاستجابة
|
||||
|
||||
يمكن للمستجيبين الرد بـ:
|
||||
|
||||
- **خيار emit**: إذا تطابق الرد مع خيار `emit` (مثل "approved")، يُستخدم مباشرة
|
||||
- **نص حر**: أي نص استجابة يُمرر إلى التدفق كملاحظات
|
||||
- **نص عادي**: يُستخدم السطر الأول من نص الرد كملاحظات
|
||||
|
||||
### رسائل التأكيد
|
||||
|
||||
بعد معالجة الرد، يستلم المستجيب رسالة تأكيد تشير إلى ما إذا تم إرسال الملاحظات بنجاح أو حدث خطأ.
|
||||
|
||||
### أمان رمز البريد
|
||||
|
||||
- الرموز موقّعة تشفيريًا للأمان
|
||||
- تنتهي صلاحية الرموز بعد 7 أيام
|
||||
- يجب أن يتطابق بريد المرسل مع البريد المصرّح به في الرمز
|
||||
- تُرسل رسائل تأكيد/خطأ بعد المعالجة
|
||||
|
||||
## قواعد التوجيه
|
||||
|
||||
توجيه طلبات HITL إلى عناوين بريد إلكتروني محددة بناءً على أنماط الطرق.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/hitl-settings-routing-rules.png" alt="HITL Routing Rules Configuration" />
|
||||
</Frame>
|
||||
|
||||
### هيكل القاعدة
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Approvals to Finance",
|
||||
"match": {
|
||||
"method_name": "approve_*"
|
||||
},
|
||||
"assign_to_email": "finance@company.com",
|
||||
"assign_from_input": "manager_email"
|
||||
}
|
||||
```
|
||||
|
||||
### أنماط المطابقة
|
||||
|
||||
| النمط | الوصف | مثال المطابقة |
|
||||
|---------|-------------|---------------|
|
||||
| `approve_*` | حرف بدل (أي أحرف) | `approve_payment`، `approve_vendor` |
|
||||
| `review_?` | حرف واحد | `review_a`، `review_1` |
|
||||
| `validate_payment` | مطابقة تامة | `validate_payment` فقط |
|
||||
|
||||
### أولوية التعيين
|
||||
|
||||
1. **تعيين ديناميكي** (`assign_from_input`): إذا تم تهيئته، يسحب البريد من حالة التدفق
|
||||
2. **بريد ثابت** (`assign_to_email`): يرجع إلى البريد المهيأ
|
||||
3. **منشئ النشر**: إذا لم تتطابق أي قاعدة، يُستخدم بريد منشئ النشر
|
||||
|
||||
### مثال التعيين الديناميكي
|
||||
|
||||
إذا كانت حالة تدفقك تحتوي على `{"sales_rep_email": "alice@company.com"}`، هيّئ:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Route to Sales Rep",
|
||||
"match": {
|
||||
"method_name": "review_*"
|
||||
},
|
||||
"assign_from_input": "sales_rep_email"
|
||||
}
|
||||
```
|
||||
|
||||
سيتم تعيين الطلب إلى `alice@company.com` تلقائيًا.
|
||||
|
||||
<Tip>
|
||||
**حالة استخدام**: اسحب المعيّن من CRM أو قاعدة البيانات أو خطوة تدفق سابقة لتوجيه المراجعات ديناميكيًا إلى الشخص المناسب.
|
||||
</Tip>
|
||||
|
||||
## الاستجابة التلقائية
|
||||
|
||||
الاستجابة تلقائيًا لطلبات HITL إذا لم يستجب أي شخص خلال المهلة المحددة. يضمن هذا عدم تعليق التدفقات إلى أجل غير مسمى.
|
||||
|
||||
### التهيئة
|
||||
|
||||
| الإعداد | الوصف |
|
||||
|---------|-------------|
|
||||
| مفعّل | تبديل لتفعيل الاستجابة التلقائية |
|
||||
| المهلة (دقائق) | الوقت المنتظر قبل الاستجابة التلقائية |
|
||||
| النتيجة الافتراضية | قيمة الاستجابة (يجب أن تطابق خيار `emit`) |
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/hitl-settings-auto-respond.png" alt="HITL Auto-Response Configuration" />
|
||||
</Frame>
|
||||
|
||||
### حالات الاستخدام
|
||||
|
||||
- **الامتثال لـ SLA**: ضمان عدم تعليق التدفقات إلى أجل غير مسمى
|
||||
- **الموافقة الافتراضية**: الموافقة التلقائية على الطلبات منخفضة المخاطر بعد انتهاء المهلة
|
||||
- **التراجع السلس**: المتابعة بافتراضي آمن عندما يكون المراجعون غير متاحين
|
||||
|
||||
<Warning>
|
||||
استخدم الاستجابة التلقائية بحذر. فعّلها فقط للمراجعات غير الحرجة حيث تكون الاستجابة الافتراضية مقبولة.
|
||||
</Warning>
|
||||
|
||||
## عملية المراجعة
|
||||
|
||||
### واجهة لوحة التحكم
|
||||
|
||||
توفر واجهة مراجعة HITL تجربة نظيفة ومركّزة للمراجعين:
|
||||
|
||||
- **عرض Markdown**: تنسيق غني لمحتوى المراجعة مع تمييز الصيغة
|
||||
- **لوحة السياق**: عرض حالة التدفق وتاريخ التنفيذ والمعلومات ذات الصلة
|
||||
- **إدخال الملاحظات**: تقديم ملاحظات وتعليقات مفصلة مع قرارك
|
||||
- **إجراءات سريعة**: أزرار خيارات emit بنقرة واحدة مع تعليقات اختيارية
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/hitl-list-pending-feedbacks.png" alt="HITL Pending Requests List" />
|
||||
</Frame>
|
||||
|
||||
### طرق الاستجابة
|
||||
|
||||
يمكن للمراجعين الاستجابة عبر ثلاث قنوات:
|
||||
|
||||
| الطريقة | الوصف |
|
||||
|--------|-------------|
|
||||
| **الرد عبر البريد** | الرد مباشرة على رسالة الإشعار |
|
||||
| **لوحة التحكم** | استخدام واجهة لوحة تحكم المؤسسة |
|
||||
| **API/Webhook** | استجابة برمجية عبر API |
|
||||
|
||||
### السجل ومسار التدقيق
|
||||
|
||||
يتم تتبع كل تفاعل HITL بجدول زمني كامل:
|
||||
|
||||
- سجل القرارات (موافقة/رفض/مراجعة)
|
||||
- هوية المراجع والطابع الزمني
|
||||
- الملاحظات والتعليقات المقدمة
|
||||
- طريقة الاستجابة (بريد/لوحة تحكم/API)
|
||||
- مقاييس وقت الاستجابة
|
||||
|
||||
## التحليلات والمراقبة
|
||||
|
||||
تتبع أداء HITL مع تحليلات شاملة.
|
||||
|
||||
### لوحة تحكم الأداء
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/hitl-metrics.png" alt="HITL Metrics Dashboard" />
|
||||
</Frame>
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="أوقات الاستجابة" icon="stopwatch">
|
||||
مراقبة متوسط وميديان أوقات الاستجابة حسب المراجع أو التدفق.
|
||||
</Card>
|
||||
<Card title="اتجاهات الحجم" icon="chart-bar">
|
||||
تحليل أنماط حجم المراجعة لتحسين قدرة الفريق.
|
||||
</Card>
|
||||
<Card title="توزيع القرارات" icon="chart-pie">
|
||||
عرض معدلات الموافقة/الرفض عبر أنواع المراجعة المختلفة.
|
||||
</Card>
|
||||
<Card title="تتبع SLA" icon="chart-line">
|
||||
تتبع نسبة المراجعات المكتملة ضمن أهداف SLA.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
### التدقيق والامتثال
|
||||
|
||||
إمكانيات تدقيق جاهزة للمؤسسات للمتطلبات التنظيمية:
|
||||
|
||||
- سجل قرارات كامل مع الطوابع الزمنية
|
||||
- التحقق من هوية المراجع
|
||||
- سجلات تدقيق غير قابلة للتغيير
|
||||
- إمكانيات التصدير لتقارير الامتثال
|
||||
|
||||
## حالات الاستخدام الشائعة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="المراجعات الأمنية" icon="shield-halved">
|
||||
**حالة الاستخدام**: أتمتة استبيانات الأمان الداخلية مع التحقق البشري
|
||||
|
||||
- يولّد الذكاء الاصطناعي الردود على الاستبيانات الأمنية
|
||||
- يراجع فريق الأمن ويتحقق من الدقة عبر البريد الإلكتروني
|
||||
- يتم تجميع الردود المعتمدة في التقديم النهائي
|
||||
- مسار تدقيق كامل للامتثال
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="الموافقة على المحتوى" icon="file-lines">
|
||||
**حالة الاستخدام**: محتوى تسويقي يتطلب مراجعة قانونية/العلامة التجارية
|
||||
|
||||
- يولّد الذكاء الاصطناعي نصوص تسويقية أو محتوى وسائل التواصل
|
||||
- التوجيه إلى بريد فريق العلامة التجارية لمراجعة النبرة/الأسلوب
|
||||
- النشر التلقائي عند الموافقة
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="الموافقات المالية" icon="money-bill">
|
||||
**حالة الاستخدام**: تقارير النفقات، شروط العقود، تخصيصات الميزانية
|
||||
|
||||
- يعالج الذكاء الاصطناعي مسبقًا ويصنف الطلبات المالية
|
||||
- التوجيه بناءً على عتبات المبالغ باستخدام التعيين الديناميكي
|
||||
- الحفاظ على مسار تدقيق كامل للامتثال المالي
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="التعيين الديناميكي من CRM" icon="database">
|
||||
**حالة الاستخدام**: توجيه المراجعات إلى مالكي الحسابات من CRM
|
||||
|
||||
- يجلب التدفق بريد مالك الحساب من CRM
|
||||
- تخزين البريد في حالة التدفق (مثل `account_owner_email`)
|
||||
- استخدام `assign_from_input` للتوجيه إلى الشخص المناسب تلقائيًا
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="ضمان الجودة" icon="magnifying-glass">
|
||||
**حالة الاستخدام**: التحقق من مخرجات الذكاء الاصطناعي قبل التسليم للعميل
|
||||
|
||||
- يولّد الذكاء الاصطناعي محتوى أو ردود موجهة للعميل
|
||||
- يراجع فريق ضمان الجودة عبر إشعار البريد الإلكتروني
|
||||
- حلقات الملاحظات تحسّن أداء الذكاء الاصطناعي بمرور الوقت
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## واجهة Webhooks API
|
||||
|
||||
عندما تتوقف تدفقاتك للملاحظات البشرية، يمكنك تهيئة webhooks لإرسال بيانات الطلب إلى تطبيقك. يتيح هذا:
|
||||
|
||||
- بناء واجهات موافقة مخصصة
|
||||
- التكامل مع الأدوات الداخلية (Jira، ServiceNow، لوحات تحكم مخصصة)
|
||||
- توجيه الموافقات إلى أنظمة طرف ثالث
|
||||
- إشعارات تطبيقات الجوال
|
||||
- أنظمة القرار المؤتمتة
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/hitl-settings-webhook.png" alt="HITL Webhook Configuration" />
|
||||
</Frame>
|
||||
|
||||
### تهيئة Webhooks
|
||||
|
||||
<Steps>
|
||||
<Step title="الانتقال إلى الإعدادات">
|
||||
اذهب إلى **النشر** ← **الإعدادات** ← **الإنسان في الحلقة**
|
||||
</Step>
|
||||
<Step title="توسيع قسم Webhooks">
|
||||
انقر لتوسيع تهيئة **Webhooks**
|
||||
</Step>
|
||||
<Step title="إضافة عنوان Webhook">
|
||||
أدخل عنوان webhook الخاص بك (يجب أن يكون HTTPS في الإنتاج)
|
||||
</Step>
|
||||
<Step title="حفظ التهيئة">
|
||||
انقر على **حفظ التهيئة** للتفعيل
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
يمكنك تهيئة webhooks متعددة. يستقبل كل webhook نشط جميع أحداث HITL.
|
||||
|
||||
### أحداث Webhook
|
||||
|
||||
ستستقبل نقطة النهاية طلبات HTTP POST لهذه الأحداث:
|
||||
|
||||
| نوع الحدث | متى يُطلق |
|
||||
|------------|----------------|
|
||||
| `new_request` | يتوقف تدفق ويطلب ملاحظات بشرية |
|
||||
|
||||
### حمولة Webhook
|
||||
|
||||
تستقبل جميع webhooks حمولة JSON بهذا الهيكل:
|
||||
|
||||
```json
|
||||
{
|
||||
"event": "new_request",
|
||||
"request": {
|
||||
"id": "550e8400-e29b-41d4-a716-446655440000",
|
||||
"flow_id": "flow_abc123",
|
||||
"method_name": "review_article",
|
||||
"message": "Please review this article for publication.",
|
||||
"emit_options": ["approved", "rejected", "request_changes"],
|
||||
"state": {
|
||||
"article_id": 12345,
|
||||
"author": "john@example.com",
|
||||
"category": "technology"
|
||||
},
|
||||
"metadata": {},
|
||||
"created_at": "2026-01-14T12:00:00Z"
|
||||
},
|
||||
"deployment": {
|
||||
"id": 456,
|
||||
"name": "Content Review Flow",
|
||||
"organization_id": 789
|
||||
},
|
||||
"callback_url": "https://api.crewai.com/...",
|
||||
"assigned_to_email": "reviewer@company.com"
|
||||
}
|
||||
```
|
||||
|
||||
### الرد على الطلبات
|
||||
|
||||
لإرسال الملاحظات، **أرسل POST إلى `callback_url`** المضمّن في حمولة webhook.
|
||||
|
||||
```http
|
||||
POST {callback_url}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"feedback": "Approved. Great article!",
|
||||
"source": "my_custom_app"
|
||||
}
|
||||
```
|
||||
|
||||
### الأمان
|
||||
|
||||
<Info>
|
||||
جميع طلبات webhook موقّعة تشفيريًا باستخدام HMAC-SHA256 لضمان الأصالة ومنع التلاعب.
|
||||
</Info>
|
||||
|
||||
#### أمان Webhook
|
||||
|
||||
- **توقيعات HMAC-SHA256**: يتضمن كل webhook توقيعًا تشفيريًا
|
||||
- **أسرار لكل webhook**: لكل webhook سر توقيع فريد
|
||||
- **مشفرة أثناء التخزين**: أسرار التوقيع مشفرة في قاعدة البيانات
|
||||
- **التحقق من الطابع الزمني**: يمنع هجمات الإعادة
|
||||
|
||||
#### ترويسات التوقيع
|
||||
|
||||
يتضمن كل طلب webhook هذه الترويسات:
|
||||
|
||||
| الترويسة | الوصف |
|
||||
|--------|-------------|
|
||||
| `X-Signature` | توقيع HMAC-SHA256: `sha256=<hex_digest>` |
|
||||
| `X-Timestamp` | الطابع الزمني Unix عند توقيع الطلب |
|
||||
|
||||
#### التحقق
|
||||
|
||||
تحقق بحساب:
|
||||
|
||||
```python
|
||||
import hmac
|
||||
import hashlib
|
||||
|
||||
expected = hmac.new(
|
||||
signing_secret.encode(),
|
||||
f"{timestamp}.{payload}".encode(),
|
||||
hashlib.sha256
|
||||
).hexdigest()
|
||||
|
||||
if hmac.compare_digest(expected, signature):
|
||||
# توقيع صالح
|
||||
```
|
||||
|
||||
### معالجة الأخطاء
|
||||
|
||||
يجب أن تعيد نقطة نهاية webhook كود حالة 2xx لتأكيد الاستلام:
|
||||
|
||||
| استجابتك | سلوكنا |
|
||||
|---------------|--------------|
|
||||
| 2xx | تم تسليم Webhook بنجاح |
|
||||
| 4xx/5xx | مسجل كفشل، بدون إعادة محاولة |
|
||||
| مهلة (30 ثانية) | مسجل كفشل، بدون إعادة محاولة |
|
||||
|
||||
## الأمان والتحكم في الوصول المبني على الأدوار
|
||||
|
||||
### الوصول إلى لوحة التحكم
|
||||
|
||||
يُتحكم في وصول HITL على مستوى النشر:
|
||||
|
||||
| الصلاحية | القدرة |
|
||||
|------------|------------|
|
||||
| `manage_human_feedback` | تهيئة إعدادات HITL، عرض جميع الطلبات |
|
||||
| `respond_to_human_feedback` | الرد على الطلبات، عرض الطلبات المعيّنة |
|
||||
|
||||
### تصريح استجابة البريد الإلكتروني
|
||||
|
||||
للردود عبر البريد:
|
||||
1. يشفّر رمز الرد البريد المصرّح به
|
||||
2. يجب أن يتطابق بريد المرسل مع بريد الرمز
|
||||
3. يجب ألا يكون الرمز منتهي الصلاحية (7 أيام افتراضيًا)
|
||||
4. يجب أن يكون الطلب لا يزال معلقًا
|
||||
|
||||
### مسار التدقيق
|
||||
|
||||
يتم تسجيل جميع إجراءات HITL:
|
||||
- إنشاء الطلب
|
||||
- تغييرات التعيين
|
||||
- إرسال الاستجابة (مع المصدر: لوحة تحكم/بريد/API)
|
||||
- حالة استئناف التدفق
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### عدم إرسال الرسائل
|
||||
|
||||
1. تحقق من تفعيل "إشعارات البريد الإلكتروني" في التهيئة
|
||||
2. تحقق من مطابقة قواعد التوجيه لاسم الطريقة
|
||||
3. تحقق من صلاحية بريد المعيّن
|
||||
4. تحقق من احتياطي منشئ النشر إذا لم تتطابق أي قواعد توجيه
|
||||
|
||||
### عدم معالجة ردود البريد
|
||||
|
||||
1. تحقق من عدم انتهاء صلاحية الرمز (7 أيام افتراضيًا)
|
||||
2. تحقق من مطابقة بريد المرسل للبريد المعيّن
|
||||
3. تأكد من أن الطلب لا يزال معلقًا (لم يتم الرد عليه بعد)
|
||||
|
||||
### عدم استئناف التدفق
|
||||
|
||||
1. تحقق من حالة الطلب في لوحة التحكم
|
||||
2. تحقق من إمكانية الوصول إلى callback URL
|
||||
3. تأكد من أن النشر لا يزال قيد التشغيل
|
||||
|
||||
## أفضل الممارسات
|
||||
|
||||
<Tip>
|
||||
**ابدأ ببساطة**: ابدأ بإشعارات البريد الإلكتروني لمنشئ النشر، ثم أضف قواعد التوجيه مع نضوج سير عملك.
|
||||
</Tip>
|
||||
|
||||
1. **استخدم التعيين الديناميكي**: اسحب عناوين بريد المعيّنين من حالة التدفق للتوجيه المرن.
|
||||
|
||||
2. **هيّئ الاستجابة التلقائية**: أعد استجابة احتياطية للمراجعات غير الحرجة لمنع تعليق التدفقات.
|
||||
|
||||
3. **راقب أوقات الاستجابة**: استخدم التحليلات لتحديد الاختناقات وتحسين عملية المراجعة.
|
||||
|
||||
4. **اجعل رسائل المراجعة واضحة**: اكتب رسائل واضحة وقابلة للتنفيذ في مزيّن `@human_feedback`.
|
||||
|
||||
5. **اختبر تدفق البريد**: أرسل طلبات اختبار للتحقق من تسليم البريد قبل الانتقال للإنتاج.
|
||||
|
||||
## الموارد ذات الصلة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="التغذية الراجعة البشرية في التدفقات" icon="code" href="/ar/learn/human-feedback-in-flows">
|
||||
دليل التنفيذ لمزيّن `@human_feedback`
|
||||
</Card>
|
||||
<Card title="دليل سير عمل Flow HITL" icon="route" href="/ar/enterprise/guides/human-in-the-loop">
|
||||
دليل خطوة بخطوة لإعداد سير عمل HITL
|
||||
</Card>
|
||||
<Card title="تهيئة RBAC" icon="shield-check" href="/ar/enterprise/features/rbac">
|
||||
تهيئة التحكم في الوصول المبني على الأدوار لمؤسستك
|
||||
</Card>
|
||||
<Card title="بث Webhook" icon="bolt" href="/ar/enterprise/features/webhook-streaming">
|
||||
إعداد إشعارات الأحداث في الوقت الفعلي
|
||||
</Card>
|
||||
</CardGroup>
|
||||
251
docs/edge/ar/enterprise/features/hallucination-guardrail.mdx
Normal file
251
docs/edge/ar/enterprise/features/hallucination-guardrail.mdx
Normal file
@@ -0,0 +1,251 @@
|
||||
---
|
||||
title: حاجز الهلوسة
|
||||
description: "منع واكتشاف هلوسات الذكاء الاصطناعي في مهام CrewAI"
|
||||
icon: "shield-check"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
حاجز الهلوسة هو ميزة مؤسسية تتحقق من المحتوى المولّد بالذكاء الاصطناعي لضمان أنه مبني على الحقائق ولا يحتوي على هلوسات. يحلل مخرجات المهام مقابل سياق مرجعي ويوفر ملاحظات مفصلة عند اكتشاف محتوى محتمل الهلوسة.
|
||||
|
||||
## ما هي الهلوسات؟
|
||||
|
||||
تحدث هلوسات الذكاء الاصطناعي عندما تولّد نماذج اللغة محتوى يبدو معقولاً لكنه غير صحيح من الناحية الواقعية أو غير مدعوم بالسياق المقدم. يساعد حاجز الهلوسة في منع هذه المشكلات من خلال:
|
||||
|
||||
- مقارنة المخرجات مع السياق المرجعي
|
||||
- تقييم الأمانة للمادة المصدرية
|
||||
- توفير ملاحظات مفصلة حول المحتوى المشكل
|
||||
- دعم عتبات مخصصة لصرامة التحقق
|
||||
|
||||
## الاستخدام الأساسي
|
||||
|
||||
### إعداد الحاجز
|
||||
|
||||
```python
|
||||
from crewai.tasks.hallucination_guardrail import HallucinationGuardrail
|
||||
from crewai import LLM
|
||||
|
||||
# الاستخدام الأساسي - سيستخدم expected_output للمهمة كسياق
|
||||
guardrail = HallucinationGuardrail(
|
||||
llm=LLM(model="gpt-4o-mini")
|
||||
)
|
||||
|
||||
# مع سياق مرجعي صريح
|
||||
context_guardrail = HallucinationGuardrail(
|
||||
context="AI helps with various tasks including analysis and generation.",
|
||||
llm=LLM(model="gpt-4o-mini")
|
||||
)
|
||||
```
|
||||
|
||||
### الإضافة إلى المهام
|
||||
|
||||
```python
|
||||
from crewai import Task
|
||||
|
||||
# إنشاء مهمتك مع الحاجز
|
||||
task = Task(
|
||||
description="Write a summary about AI capabilities",
|
||||
expected_output="A factual summary based on the provided context",
|
||||
agent=my_agent,
|
||||
guardrail=guardrail # إضافة الحاجز للتحقق من المخرجات
|
||||
)
|
||||
```
|
||||
|
||||
## التهيئة المتقدمة
|
||||
|
||||
### التحقق بعتبة مخصصة
|
||||
|
||||
للتحقق الأكثر صرامة، يمكنك تعيين عتبة أمانة مخصصة (مقياس 0-10):
|
||||
|
||||
```python
|
||||
# حاجز صارم يتطلب درجة أمانة عالية
|
||||
strict_guardrail = HallucinationGuardrail(
|
||||
context="Quantum computing uses qubits that exist in superposition states.",
|
||||
llm=LLM(model="gpt-4o-mini"),
|
||||
threshold=8.0 # يتطلب درجة >= 8 لاجتياز التحقق
|
||||
)
|
||||
```
|
||||
|
||||
### تضمين سياق استجابة الأدوات
|
||||
|
||||
عندما تستخدم مهمتك أدوات، يمكنك تضمين استجابات الأدوات لتحقق أكثر دقة:
|
||||
|
||||
```python
|
||||
# حاجز مع سياق استجابة الأدوات
|
||||
weather_guardrail = HallucinationGuardrail(
|
||||
context="Current weather information for the requested location",
|
||||
llm=LLM(model="gpt-4o-mini"),
|
||||
tool_response="Weather API returned: Temperature 22°C, Humidity 65%, Clear skies"
|
||||
)
|
||||
```
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
### عملية التحقق
|
||||
|
||||
1. **تحليل السياق**: يقارن الحاجز مخرجات المهمة مع السياق المرجعي المقدم
|
||||
2. **تسجيل الأمانة**: يستخدم مقيّمًا داخليًا لتعيين درجة أمانة (0-10)
|
||||
3. **تحديد الحكم**: يحدد ما إذا كان المحتوى أمينًا أو يحتوي على هلوسات
|
||||
4. **التحقق من العتبة**: إذا تم تعيين عتبة مخصصة، يتحقق مقابل تلك الدرجة
|
||||
5. **توليد الملاحظات**: يوفر أسبابًا مفصلة عند فشل التحقق
|
||||
|
||||
### منطق التحقق
|
||||
|
||||
- **الوضع الافتراضي**: يستخدم التحقق المبني على الحكم (FAITHFUL مقابل HALLUCINATED)
|
||||
- **وضع العتبة**: يتطلب أن تلبي درجة الأمانة العتبة المحددة أو تتجاوزها
|
||||
- **معالجة الأخطاء**: يتعامل بسلاسة مع أخطاء التقييم ويوفر ملاحظات إعلامية
|
||||
|
||||
## نتائج الحاجز
|
||||
|
||||
يعيد الحاجز نتائج منظمة تشير إلى حالة التحقق:
|
||||
|
||||
```python
|
||||
# مثال على هيكل نتيجة الحاجز
|
||||
{
|
||||
"valid": False,
|
||||
"feedback": "Content appears to be hallucinated (score: 4.2/10, verdict: HALLUCINATED). The output contains information not supported by the provided context."
|
||||
}
|
||||
```
|
||||
|
||||
### خصائص النتيجة
|
||||
|
||||
- **valid**: قيمة منطقية تشير إلى ما إذا اجتازت المخرجات التحقق
|
||||
- **feedback**: شرح مفصل عند فشل التحقق، يتضمن:
|
||||
- درجة الأمانة
|
||||
- تصنيف الحكم
|
||||
- أسباب محددة للفشل
|
||||
|
||||
## التكامل مع نظام المهام
|
||||
|
||||
### التحقق التلقائي
|
||||
|
||||
عند إضافة حاجز إلى مهمة، يتحقق تلقائيًا من المخرجات قبل اعتبار المهمة مكتملة:
|
||||
|
||||
```python
|
||||
# تدفق التحقق من مخرجات المهمة
|
||||
task_output = agent.execute_task(task)
|
||||
validation_result = guardrail(task_output)
|
||||
|
||||
if validation_result.valid:
|
||||
# المهمة تكتمل بنجاح
|
||||
return task_output
|
||||
else:
|
||||
# المهمة تفشل مع ملاحظات التحقق
|
||||
raise ValidationError(validation_result.feedback)
|
||||
```
|
||||
|
||||
### تتبع الأحداث
|
||||
|
||||
يتكامل الحاجز مع نظام أحداث CrewAI لتوفير المراقبة:
|
||||
|
||||
- **بدء التحقق**: عند بدء تقييم الحاجز
|
||||
- **اكتمال التحقق**: عند انتهاء التقييم بالنتائج
|
||||
- **فشل التحقق**: عند حدوث أخطاء تقنية أثناء التقييم
|
||||
|
||||
## أفضل الممارسات
|
||||
|
||||
### إرشادات السياق
|
||||
|
||||
<Steps>
|
||||
<Step title="توفير سياق شامل">
|
||||
أدرج جميع المعلومات الواقعية ذات الصلة التي يجب أن يبني عليها الذكاء الاصطناعي مخرجاته:
|
||||
|
||||
```python
|
||||
context = """
|
||||
Company XYZ was founded in 2020 and specializes in renewable energy solutions.
|
||||
They have 150 employees and generated $50M revenue in 2023.
|
||||
Their main products include solar panels and wind turbines.
|
||||
"""
|
||||
```
|
||||
</Step>
|
||||
|
||||
<Step title="الحفاظ على صلة السياق">
|
||||
أدرج فقط المعلومات المرتبطة مباشرة بالمهمة لتجنب الارتباك:
|
||||
|
||||
```python
|
||||
# جيد: سياق مركّز
|
||||
context = "The current weather in New York is 18°C with light rain."
|
||||
|
||||
# تجنب: معلومات غير ذات صلة
|
||||
context = "The weather is 18°C. The city has 8 million people. Traffic is heavy."
|
||||
```
|
||||
</Step>
|
||||
|
||||
<Step title="تحديث السياق بانتظام">
|
||||
تأكد من أن السياق المرجعي يعكس معلومات حالية ودقيقة.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### اختيار العتبة
|
||||
|
||||
<Steps>
|
||||
<Step title="البدء بالتحقق الافتراضي">
|
||||
ابدأ بدون عتبات مخصصة لفهم الأداء الأساسي.
|
||||
</Step>
|
||||
|
||||
<Step title="الضبط بناءً على المتطلبات">
|
||||
- **محتوى عالي الأهمية**: استخدم عتبة 8-10 للدقة القصوى
|
||||
- **محتوى عام**: استخدم عتبة 6-7 للتحقق المتوازن
|
||||
- **محتوى إبداعي**: استخدم عتبة 4-5 أو التحقق الافتراضي المبني على الحكم
|
||||
</Step>
|
||||
|
||||
<Step title="المراقبة والتكرار">
|
||||
تتبع نتائج التحقق واضبط العتبات بناءً على الإيجابيات/السلبيات الكاذبة.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## اعتبارات الأداء
|
||||
|
||||
### التأثير على زمن التنفيذ
|
||||
|
||||
- **عبء التحقق**: يضيف كل حاجز حوالي 1-3 ثوانٍ لكل مهمة
|
||||
- **كفاءة LLM**: اختر نماذج فعالة للتقييم (مثل gpt-4o-mini)
|
||||
|
||||
### تحسين التكلفة
|
||||
|
||||
- **اختيار النموذج**: استخدم نماذج أصغر وفعالة لتقييم الحاجز
|
||||
- **حجم السياق**: اجعل السياق المرجعي موجزًا لكن شاملًا
|
||||
- **التخزين المؤقت**: فكّر في تخزين نتائج التحقق مؤقتًا للمحتوى المتكرر
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
<Accordion title="فشل التحقق دائمًا">
|
||||
**الأسباب المحتملة:**
|
||||
- السياق مقيّد جدًا أو غير مرتبط بمخرجات المهمة
|
||||
- العتبة معينة عالية جدًا لنوع المحتوى
|
||||
- السياق المرجعي يحتوي على معلومات قديمة
|
||||
|
||||
**الحلول:**
|
||||
- مراجعة وتحديث السياق ليتطابق مع متطلبات المهمة
|
||||
- خفض العتبة أو استخدام التحقق الافتراضي المبني على الحكم
|
||||
- التأكد من أن السياق حالي ودقيق
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="إيجابيات كاذبة (محتوى صالح يُعلّم كغير صالح)">
|
||||
**الأسباب المحتملة:**
|
||||
- العتبة عالية جدًا للمهام الإبداعية أو التفسيرية
|
||||
- السياق لا يغطي جميع الجوانب الصالحة للمخرجات
|
||||
- نموذج التقييم محافظ بشكل مفرط
|
||||
|
||||
**الحلول:**
|
||||
- خفض العتبة أو استخدام التحقق الافتراضي
|
||||
- توسيع السياق ليشمل محتوى مقبول أوسع
|
||||
- الاختبار مع نماذج تقييم مختلفة
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="أخطاء التقييم">
|
||||
**الأسباب المحتملة:**
|
||||
- مشكلات في الاتصال بالشبكة
|
||||
- نموذج LLM غير متاح أو محدود المعدل
|
||||
- مخرجات مهمة أو سياق غير صالح
|
||||
|
||||
**الحلول:**
|
||||
- التحقق من الاتصال بالشبكة وحالة خدمة LLM
|
||||
- تنفيذ منطق إعادة المحاولة للأعطال المؤقتة
|
||||
- التحقق من تنسيق مخرجات المهمة قبل تقييم الحاجز
|
||||
</Accordion>
|
||||
|
||||
<Card title="هل تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تهيئة حاجز الهلوسة أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
45
docs/edge/ar/enterprise/features/marketplace.mdx
Normal file
45
docs/edge/ar/enterprise/features/marketplace.mdx
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: السوق
|
||||
description: "اكتشف وثبّت وأدِر الأصول القابلة لإعادة الاستخدام لطواقم مؤسستك."
|
||||
icon: "store"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يوفر السوق واجهة منظمة لاكتشاف عمليات التكامل والأدوات الداخلية والأصول القابلة لإعادة الاستخدام التي تسرّع تطوير الطواقم.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## قابلية الاكتشاف
|
||||
|
||||
- تصفح حسب الفئة والقدرة
|
||||
- ابحث عن الأصول بالاسم أو الكلمة المفتاحية
|
||||
|
||||
## التثبيت والتفعيل
|
||||
|
||||
- تثبيت بنقرة واحدة للأصول المعتمدة
|
||||
- تفعيل أو تعطيل لكل طاقم حسب الحاجة
|
||||
- تهيئة متغيرات البيئة والنطاقات المطلوبة
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
يمكنك أيضاً تنزيل القوالب مباشرة من السوق بالنقر على زر `Download` لاستخدامها محلياً أو تعديلها حسب احتياجاتك.
|
||||
|
||||
## ذو صلة
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="الأدوات والتكاملات" href="/ar/enterprise/features/tools-and-integrations" icon="wrench">
|
||||
اربط التطبيقات الخارجية وأدِر الأدوات الداخلية التي يمكن لوكلائك استخدامها.
|
||||
</Card>
|
||||
<Card title="مستودع الأدوات" href="/ar/enterprise/guides/tool-repository#tool-repository" icon="toolbox">
|
||||
انشر وثبّت الأدوات لتعزيز قدرات طواقمك.
|
||||
</Card>
|
||||
<Card title="مستودع الوكلاء" href="/ar/enterprise/features/agent-repositories" icon="people-group">
|
||||
خزّن وشارك وأعد استخدام تعريفات الوكلاء عبر الفرق والمشاريع.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
82
docs/edge/ar/enterprise/features/merged-step-card.mdx
Normal file
82
docs/edge/ar/enterprise/features/merged-step-card.mdx
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
title: بطاقة واحدة لكل خطوة
|
||||
description: "كل خطوة على لوحة Studio هي بطاقة واحدة تجمع بين المهمة والوكيل الذي ينفّذها."
|
||||
icon: "layer-group"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
على لوحة Studio، تُمثَّل كل خطوة عمل بـ **بطاقة واحدة**. تجمع البطاقة بين عنصرين كانا في السابق في عُقد منفصلة:
|
||||
|
||||
- **المهمة** — ماذا تفعل (الاسم، الوصف، المخرجات المتوقعة، وتنسيق الاستجابة).
|
||||
- **الوكيل** — من ينفّذها (الوكيل المُعيَّن ونموذجه وأدواته).
|
||||
|
||||
الوكيل ليس مشاركًا مستقلاً في سير العمل لديك — بل هو سمة من سمات المهمة: *أي وكيل ينفّذ هذا العمل.* وضع المهمة والوكيل في بطاقة واحدة يجعل هذه العلاقة واضحة، ويحوّل أتمتتك إلى سلسلة واحدة من وحدات العمل من اليسار إلى اليمين يسهل قراءتها بنظرة واحدة.
|
||||
|
||||
<Frame caption="بطاقة واحدة لكل خطوة: المهمة مع ملخص للوكيل المُعيَّن في التذييل.">
|
||||

|
||||
</Frame>
|
||||
|
||||
## على اللوحة
|
||||
|
||||
تعرض كل بطاقة مطوية ما يلي:
|
||||
|
||||
- **اسم المهمة ووصفها** في الأعلى.
|
||||
- **تذييل يلخّص الوكيل المُعيَّن** — الصورة الرمزية والاسم والنموذج والأدوات.
|
||||
|
||||
لا توجد عقدة وكيل منفصلة ولا حافة عمودية من الوكيل ← المهمة. تتصل خطواتك مباشرةً ببعضها البعض بالترتيب الذي تُنفَّذ به.
|
||||
|
||||
## في المحرّر
|
||||
|
||||
افتح بطاقة لتحريرها. العرض الموسّع هو البطاقة نفسها في حالة مفصّلة — وليس شاشة مختلفة — منظّمة في قسمين موسومين بوضوح.
|
||||
|
||||
<Frame caption="المحرّر الموسّع: قسم المهمة مفتوح، والوكيل ملخّص أسفله.">
|
||||

|
||||
</Frame>
|
||||
|
||||
### المهمة — ماذا تفعل
|
||||
|
||||
مفتوحة افتراضيًا، لأنها ما تحرّره عادةً:
|
||||
|
||||
- **الاسم**
|
||||
- **الوصف**
|
||||
- **المخرجات المتوقعة**
|
||||
- **تنسيق الاستجابة** — يظهر هنا لأنه يتحكم تحديدًا في ما تقرأه الخطوات اللاحقة (مثل التوجيه) من هذه الخطوة.
|
||||
|
||||
### الوكيل — من ينفّذها
|
||||
|
||||
يُعرض الوكيل المُعيَّن كملخّص — **الاسم والنموذج والأدوات في سطر واحد**. ويُحفَظ إعداده الأعمق خلف قسمين قابلين للطي:
|
||||
|
||||
- **الدور والهدف والخلفية**
|
||||
- **إعدادات الوكيل** — الاستدلال، الحد الأقصى لمحاولات الاستدلال، السماح بالتفويض، الحد الأقصى للتكرارات، وإعدادات LLM.
|
||||
|
||||
<Tip>
|
||||
الإعداد الكامل للوكيل — الدور، الهدف، الخلفية، النموذج، الأدوات، إعدادات LLM، وكامل كتلة إعدادات الوكيل — موجود خلف القسمين القابلين للطي **الدور والهدف والخلفية** و**إعدادات الوكيل**، منظّمًا حسب عدد مرّات تحريرك له.
|
||||
</Tip>
|
||||
|
||||
## التبديل مقابل تحرير الوكيل
|
||||
|
||||
هناك طريقتان متمايزتان للتعامل مع الوكيل في البطاقة، وكل منهما تؤدي وظيفة مختلفة:
|
||||
|
||||
- **التبديل (Swap)** يعيد تعيين *أي* وكيل ينفّذ هذه المهمة. استخدم عنصر التحكم **تبديل** لاختيار وكيل مختلف من هذا المشروع، أو اختيار واحد من مستودع الوكلاء، أو إنشاء وكيل جديد. هذا مقصور على نطاق المهمة.
|
||||
- **تحرير** الوكيل — بفتح **الدور والهدف والخلفية** أو **إعدادات الوكيل** — يغيّر الوكيل *نفسه*.
|
||||
|
||||
<Frame caption="التبديل يغيّر الوكيل الذي ينفّذ المهمة.">
|
||||

|
||||
</Frame>
|
||||
|
||||
<Warning>
|
||||
**الوكلاء قابلون لإعادة الاستخدام ومشتركون.** يمكن للوكيل نفسه تنفيذ أكثر من مهمة عبر مشروعك. تحرير دور الوكيل أو خلفيته أو إعداداته يحدّث ذلك الوكيل **في كل مكان يُستخدم فيه** — وليس فقط في البطاقة التي فتحتها. إذا أردت تطبيق تغيير على خطوة واحدة فقط، فقم **بالتبديل** إلى وكيل مختلف بدلاً من تحرير الوكيل المشترك.
|
||||
</Warning>
|
||||
|
||||
## ذات صلة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Crew Studio" href="/ar/enterprise/features/crew-studio" icon="pencil">
|
||||
أنشئ الأتمتة بمساعدة الذكاء الاصطناعي ومحرّر مرئي.
|
||||
</Card>
|
||||
<Card title="مستودعات الوكلاء" href="/ar/enterprise/features/agent-repositories" icon="users">
|
||||
إدارة الوكلاء وإعادة استخدامهم عبر أتمتتك.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
342
docs/edge/ar/enterprise/features/pii-trace-redactions.mdx
Normal file
342
docs/edge/ar/enterprise/features/pii-trace-redactions.mdx
Normal file
@@ -0,0 +1,342 @@
|
||||
---
|
||||
title: إخفاء البيانات الشخصية في التتبعات
|
||||
description: "إخفاء البيانات الحساسة تلقائياً من تتبعات تنفيذ الطواقم والتدفقات"
|
||||
icon: "lock"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
إخفاء البيانات الشخصية (PII Redaction) هو ميزة في CrewAI AMP تكتشف تلقائياً وتُقنّع معلومات التعريف الشخصية (PII) في تتبعات تنفيذ الطواقم والتدفقات. يضمن ذلك عدم كشف البيانات الحساسة مثل أرقام بطاقات الائتمان وأرقام الضمان الاجتماعي وعناوين البريد الإلكتروني والأسماء في تتبعات CrewAI AMP. يمكنك أيضاً إنشاء مُعرّفات مخصصة لحماية البيانات الخاصة بمؤسستك.
|
||||
|
||||
|
||||
<Info>
|
||||
إخفاء البيانات الشخصية متاح في خطة Enterprise.
|
||||
يجب أن يكون إصدار النشر 1.8.0 أو أعلى.
|
||||
</Info>
|
||||
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
|
||||
## أهمية إخفاء البيانات الشخصية
|
||||
|
||||
عند تشغيل وكلاء الذكاء الاصطناعي في بيئة الإنتاج، غالباً ما تمر معلومات حساسة عبر طواقمك:
|
||||
|
||||
- بيانات العملاء من تكاملات CRM
|
||||
- معلومات مالية من معالجات الدفع
|
||||
- تفاصيل شخصية من إرسالات النماذج
|
||||
- بيانات الموظفين الداخلية
|
||||
|
||||
بدون إخفاء مناسب، تظهر هذه البيانات في التتبعات، مما يجعل الامتثال للوائح مثل GDPR وHIPAA وPCI-DSS أمراً صعباً. يحل إخفاء البيانات الشخصية هذه المشكلة عن طريق إقناع البيانات الحساسة تلقائياً قبل تخزينها في التتبعات.
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
1. **الاكتشاف** - مسح بيانات أحداث التتبع بحثاً عن أنماط PII المعروفة
|
||||
2. **التصنيف** - تحديد نوع البيانات الحساسة (بطاقة ائتمان، SSN، بريد إلكتروني، إلخ.)
|
||||
3. **الإقناع/الإخفاء** - استبدال البيانات الحساسة بقيم مُقنّعة بناءً على تهيئتك
|
||||
|
||||
```
|
||||
Original: "Contact john.doe@company.com or call 555-123-4567"
|
||||
Redacted: "Contact <EMAIL_ADDRESS> or call <PHONE_NUMBER>"
|
||||
```
|
||||
|
||||
## تفعيل إخفاء البيانات الشخصية
|
||||
|
||||
<Info>
|
||||
يجب أن تكون على خطة Enterprise وأن يكون إصدار النشر 1.8.0 أو أعلى لاستخدام هذه الميزة.
|
||||
</Info>
|
||||
|
||||
<Steps>
|
||||
<Step title="الانتقال إلى إعدادات الطاقم">
|
||||
في لوحة تحكم CrewAI AMP، اختر طاقمك المنشور وانتقل إلى أحد عمليات النشر/الأتمتة، ثم انتقل إلى **Settings** → **PII Protection**.
|
||||
</Step>
|
||||
|
||||
<Step title="تفعيل حماية البيانات الشخصية">
|
||||
فعّل **PII Redaction for Traces**. سيؤدي ذلك إلى تفعيل المسح والإخفاء التلقائي لبيانات التتبع.
|
||||
|
||||
<Info>
|
||||
تحتاج إلى تفعيل إخفاء البيانات الشخصية يدوياً لكل عملية نشر.
|
||||
</Info>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="تهيئة أنواع الكيانات">
|
||||
اختر أنواع البيانات الشخصية التي تريد اكتشافها وإخفاءها. يمكن تفعيل أو تعطيل كل كيان بشكل فردي.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="الحفظ">
|
||||
احفظ تهيئتك. سيكون إخفاء البيانات الشخصية نشطاً في جميع عمليات تنفيذ الطاقم اللاحقة، دون الحاجة لإعادة النشر.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## أنواع الكيانات المدعومة
|
||||
|
||||
يدعم CrewAI أنواع كيانات PII التالية، منظمة حسب الفئة.
|
||||
|
||||
### الكيانات العالمية
|
||||
|
||||
| الكيان | الوصف | مثال |
|
||||
|--------|-------|------|
|
||||
| `CREDIT_CARD` | أرقام بطاقات الائتمان/الخصم | "4111-1111-1111-1111" |
|
||||
| `CRYPTO` | عناوين محافظ العملات الرقمية | "bc1qxy2kgd..." |
|
||||
| `DATE_TIME` | التواريخ والأوقات | "January 15, 2024" |
|
||||
| `EMAIL_ADDRESS` | عناوين البريد الإلكتروني | "john@example.com" |
|
||||
| `IBAN_CODE` | أرقام الحسابات المصرفية الدولية | "DE89 3704 0044 0532 0130 00" |
|
||||
| `IP_ADDRESS` | عناوين IPv4 وIPv6 | "192.168.1.1" |
|
||||
| `LOCATION` | المواقع الجغرافية | "New York City" |
|
||||
| `MEDICAL_LICENSE` | أرقام التراخيص الطبية | "MD12345" |
|
||||
| `NRP` | الجنسيات أو المجموعات الدينية أو السياسية | - |
|
||||
| `PERSON` | الأسماء الشخصية | "John Doe" |
|
||||
| `PHONE_NUMBER` | أرقام الهواتف بتنسيقات مختلفة | "+1 (555) 123-4567" |
|
||||
| `URL` | عناوين URL | "https://example.com" |
|
||||
|
||||
### كيانات خاصة بالولايات المتحدة
|
||||
|
||||
| الكيان | الوصف | مثال |
|
||||
|--------|-------|------|
|
||||
| `US_BANK_NUMBER` | أرقام الحسابات المصرفية الأمريكية | "1234567890" |
|
||||
| `US_DRIVER_LICENSE` | أرقام رخص القيادة الأمريكية | "D1234567" |
|
||||
| `US_ITIN` | رقم تعريف دافع الضرائب الفردي | "900-70-0000" |
|
||||
| `US_PASSPORT` | أرقام جوازات السفر الأمريكية | "123456789" |
|
||||
| `US_SSN` | أرقام الضمان الاجتماعي | "123-45-6789" |
|
||||
|
||||
## إجراءات الإخفاء
|
||||
|
||||
لكل كيان مُفعّل، يمكنك تهيئة كيفية إخفاء البيانات:
|
||||
|
||||
| الإجراء | الوصف | مثال على المخرجات |
|
||||
|---------|-------|-------------------|
|
||||
| `mask` | الاستبدال بتسمية نوع الكيان | `<CREDIT_CARD>` |
|
||||
| `redact` | إزالة النص بالكامل | *(فارغ)* |
|
||||
|
||||
## المُعرّفات المخصصة
|
||||
|
||||
بالإضافة إلى الكيانات المدمجة، يمكنك إنشاء **مُعرّفات مخصصة** لاكتشاف أنماط PII الخاصة بمؤسستك.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### أنواع المُعرّفات
|
||||
|
||||
لديك خياران للمُعرّفات المخصصة:
|
||||
|
||||
| النوع | الأفضل لـ | مثال على حالة الاستخدام |
|
||||
|-------|-----------|------------------------|
|
||||
| **قائم على النمط (Regex)** | بيانات منظمة بتنسيقات متوقعة | مبالغ الرواتب، معرّفات الموظفين، رموز المشاريع |
|
||||
| **قائمة الحظر (Deny-list)** | مطابقة النصوص بالضبط | أسماء الشركات، الأسماء الرمزية الداخلية، مصطلحات محددة |
|
||||
|
||||
### إنشاء مُعرّف مخصص
|
||||
|
||||
<Steps>
|
||||
<Step title="الانتقال إلى المُعرّفات المخصصة">
|
||||
انتقل إلى **Settings** → **Organization** → **Add Recognizer** في إعدادات مؤسستك.
|
||||
</Step>
|
||||
|
||||
<Step title="تهيئة المُعرّف">
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
هيّئ الحقول التالية:
|
||||
- **Name**: اسم وصفي للمُعرّف
|
||||
- **Entity Type**: تسمية الكيان التي ستظهر في المخرجات المُخفاة (مثل `EMPLOYEE_ID`، `SALARY`)
|
||||
- **Type**: اختر بين Regex Pattern أو Deny List
|
||||
- **Pattern/Values**: نمط Regex أو قائمة نصوص للمطابقة
|
||||
- **Confidence Threshold**: الحد الأدنى للنتيجة (0.0-1.0) المطلوبة لتفعيل الإخفاء عند المطابقة. القيم الأعلى (مثل 0.8) تقلل الإيجابيات الخاطئة لكن قد تفوّت بعض المطابقات. القيم الأقل (مثل 0.5) تلتقط المزيد من المطابقات لكن قد تُفرط في الإخفاء. القيمة الافتراضية هي 0.8.
|
||||
- **Context Words** (اختياري): كلمات تزيد ثقة الاكتشاف عند وجودها بالقرب
|
||||
</Step>
|
||||
|
||||
<Step title="الحفظ">
|
||||
احفظ المُعرّف. سيكون متاحاً للتفعيل في عمليات النشر الخاصة بك.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### فهم أنواع الكيانات
|
||||
|
||||
يحدد **Entity Type** كيفية ظهور المحتوى المُطابق في التتبعات المُخفاة:
|
||||
|
||||
```
|
||||
Entity Type: SALARY
|
||||
Pattern: salary:\s*\$\s*\d+
|
||||
Input: "Employee salary: $50,000"
|
||||
Output: "Employee <SALARY>"
|
||||
```
|
||||
|
||||
### استخدام كلمات السياق
|
||||
|
||||
تحسّن كلمات السياق الدقة عن طريق زيادة الثقة عند ظهور مصطلحات محددة بالقرب من النمط المُطابق:
|
||||
|
||||
```
|
||||
Context Words: "project", "code", "internal"
|
||||
Entity Type: PROJECT_CODE
|
||||
Pattern: PRJ-\d{4}
|
||||
```
|
||||
|
||||
عندما تظهر كلمة "project" أو "code" بالقرب من "PRJ-1234"، يكون لدى المُعرّف ثقة أعلى بأنها مطابقة حقيقية، مما يقلل الإيجابيات الخاطئة.
|
||||
|
||||
|
||||
## عرض التتبعات المُخفاة
|
||||
|
||||
بمجرد تفعيل إخفاء البيانات الشخصية، ستعرض تتبعاتك قيماً مُخفاة بدلاً من البيانات الحساسة:
|
||||
|
||||
```
|
||||
Task Output: "Customer <PERSON> placed order #12345.
|
||||
Contact email: <EMAIL_ADDRESS>, phone: <PHONE_NUMBER>.
|
||||
Payment processed for card ending in <CREDIT_CARD>."
|
||||
```
|
||||
|
||||
القيم المُخفاة مُعلّمة بوضوح بأقواس زاوية وتسمية نوع الكيان (مثل `<EMAIL_ADDRESS>`)، مما يسهّل فهم البيانات التي تمت حمايتها مع السماح لك بتصحيح الأخطاء ومراقبة سلوك الطاقم.
|
||||
|
||||
|
||||
|
||||
## أفضل الممارسات
|
||||
|
||||
### اعتبارات الأداء
|
||||
|
||||
<Steps>
|
||||
<Step title="فعّل الكيانات المطلوبة فقط">
|
||||
كل كيان مُفعّل يضيف عبء معالجة. فعّل فقط الكيانات ذات الصلة ببياناتك.
|
||||
</Step>
|
||||
|
||||
<Step title="استخدم أنماطاً محددة">
|
||||
للمُعرّفات المخصصة، استخدم أنماطاً محددة لتقليل الإيجابيات الخاطئة وتحسين الأداء. أنماط Regex هي الأفضل عند تحديد أنماط معينة في التتبعات مثل الرواتب ومعرّفات الموظفين ورموز المشاريع وغيرها. مُعرّفات قائمة الحظر هي الأفضل عند تحديد نصوص بعينها في التتبعات مثل أسماء الشركات والأسماء الرمزية الداخلية وغيرها.
|
||||
</Step>
|
||||
|
||||
<Step title="استفد من كلمات السياق">
|
||||
تحسّن كلمات السياق الدقة عن طريق تفعيل الاكتشاف فقط عندما يتطابق النص المحيط.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
<Accordion title="البيانات الشخصية لا تُخفى">
|
||||
**الأسباب المحتملة:**
|
||||
- نوع الكيان غير مُفعّل في التهيئة
|
||||
- النمط لا يتطابق مع تنسيق البيانات
|
||||
- المُعرّف المخصص يحتوي على أخطاء في الصياغة
|
||||
|
||||
**الحلول:**
|
||||
- تحقق من أن الكيان مُفعّل في Settings → Security
|
||||
- اختبر أنماط Regex مع بيانات نموذجية
|
||||
- تحقق من السجلات بحثاً عن أخطاء التهيئة
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="إخفاء بيانات أكثر من اللازم">
|
||||
**الأسباب المحتملة:**
|
||||
- أنواع كيانات واسعة جداً مُفعّلة (مثل `DATE_TIME` تلتقط التواريخ في كل مكان)
|
||||
- أنماط المُعرّف المخصص عامة جداً
|
||||
|
||||
**الحلول:**
|
||||
- عطّل الكيانات التي تسبب إيجابيات خاطئة
|
||||
- اجعل الأنماط المخصصة أكثر تحديداً
|
||||
- أضف كلمات سياق لتحسين الدقة
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="مشاكل الأداء">
|
||||
**الأسباب المحتملة:**
|
||||
- عدد كبير جداً من الكيانات المُفعّلة
|
||||
- الكيانات القائمة على NLP (مثل `PERSON` و`LOCATION` و`NRP`) مكلفة حسابياً لأنها تستخدم نماذج تعلم الآلة
|
||||
|
||||
**الحلول:**
|
||||
- فعّل فقط الكيانات التي تحتاجها فعلاً
|
||||
- فكّر في استخدام بدائل قائمة على الأنماط حيثما أمكن
|
||||
- راقب أوقات معالجة التتبعات في لوحة التحكم
|
||||
</Accordion>
|
||||
|
||||
---
|
||||
|
||||
## مثال عملي: مطابقة نمط الراتب
|
||||
|
||||
يوضح هذا المثال كيفية إنشاء مُعرّف مخصص لاكتشاف وإقناع معلومات الرواتب في تتبعاتك.
|
||||
|
||||
### حالة الاستخدام
|
||||
|
||||
يعالج طاقمك بيانات موظفين أو بيانات مالية تتضمن معلومات رواتب بتنسيقات مثل:
|
||||
- `salary: $50,000`
|
||||
- `salary: $125,000.00`
|
||||
- `salary:$1,500.50`
|
||||
|
||||
تريد إقناع هذه القيم تلقائياً لحماية بيانات التعويضات الحساسة.
|
||||
|
||||
### التهيئة
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
| الحقل | القيمة |
|
||||
|-------|--------|
|
||||
| **Name** | `SALARY` |
|
||||
| **Entity Type** | `SALARY` |
|
||||
| **Type** | Regex Pattern |
|
||||
| **Regex Pattern** | `salary:\s*\$\s*\d{1,3}(,\d{3})*(\.\d{2})?` |
|
||||
| **Action** | Mask |
|
||||
| **Confidence Threshold** | `0.8` |
|
||||
| **Context Words** | `salary, compensation, pay, wage, income` |
|
||||
|
||||
### تحليل نمط Regex
|
||||
|
||||
| مكون النمط | المعنى |
|
||||
|------------|--------|
|
||||
| `salary:` | يطابق النص الحرفي "salary:" |
|
||||
| `\s*` | يطابق صفر أو أكثر من أحرف المسافات البيضاء |
|
||||
| `\$` | يطابق علامة الدولار (مُهرّبة) |
|
||||
| `\s*` | يطابق صفر أو أكثر من أحرف المسافات البيضاء بعد $ |
|
||||
| `\d{1,3}` | يطابق 1-3 أرقام (مثل "1"، "50"، "125") |
|
||||
| `(,\d{3})*` | يطابق الآلاف المفصولة بفواصل (مثل ",000"، ",500,000") |
|
||||
| `(\.\d{2})?` | يطابق اختيارياً السنتات (مثل ".00"، ".50") |
|
||||
|
||||
### أمثلة على النتائج
|
||||
|
||||
```
|
||||
Original: "Employee record shows salary: $125,000.00 annually"
|
||||
Redacted: "Employee record shows <SALARY> annually"
|
||||
|
||||
Original: "Base salary:$50,000 with bonus potential"
|
||||
Redacted: "Base <SALARY> with bonus potential"
|
||||
```
|
||||
|
||||
<Tip>
|
||||
إضافة كلمات سياق مثل "salary" و"compensation" و"pay" و"wage" و"income" تساعد في زيادة ثقة الاكتشاف عند ظهور هذه المصطلحات بالقرب من النمط المُطابق، مما يقلل الإيجابيات الخاطئة.
|
||||
</Tip>
|
||||
|
||||
### تفعيل المُعرّف لعمليات النشر
|
||||
|
||||
<Warning>
|
||||
إنشاء مُعرّف مخصص على مستوى المؤسسة لا يفعّله تلقائياً لعمليات النشر. يجب عليك تفعيل كل مُعرّف يدوياً لكل عملية نشر تريد تطبيقه عليها.
|
||||
</Warning>
|
||||
|
||||
بعد إنشاء المُعرّف المخصص، فعّله لكل عملية نشر:
|
||||
|
||||
<Steps>
|
||||
<Step title="الانتقال إلى عملية النشر">
|
||||
انتقل إلى عملية النشر/الأتمتة وافتح **Settings** → **PII Protection**.
|
||||
</Step>
|
||||
|
||||
<Step title="اختيار المُعرّفات المخصصة">
|
||||
تحت **Mask Recognizers**، سترى المُعرّفات المحددة على مستوى مؤسستك. حدد المربع بجانب المُعرّفات التي تريد تفعيلها.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="حفظ التهيئة">
|
||||
احفظ تغييراتك. سيكون المُعرّف نشطاً في جميع عمليات التنفيذ اللاحقة لعملية النشر هذه.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Info>
|
||||
كرر هذه العملية لكل عملية نشر تحتاج فيها إلى المُعرّف المخصص. يمنحك ذلك تحكماً دقيقاً في المُعرّفات النشطة في البيئات المختلفة (مثل بيئة التطوير مقابل بيئة الإنتاج).
|
||||
</Info>
|
||||
256
docs/edge/ar/enterprise/features/rbac.mdx
Normal file
256
docs/edge/ar/enterprise/features/rbac.mdx
Normal file
@@ -0,0 +1,256 @@
|
||||
---
|
||||
title: "التحكم في الوصول القائم على الأدوار (RBAC)"
|
||||
description: "تحكم في الوصول إلى الطواقم والأدوات والبيانات باستخدام الأدوار والنطاقات والصلاحيات الدقيقة."
|
||||
icon: "shield"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يتيح RBAC في CrewAI AMP إدارة وصول آمنة وقابلة للتوسع من خلال طبقتين:
|
||||
|
||||
1. **صلاحيات الميزات** — تتحكم في ما يمكن لكل دور القيام به عبر المنصة (إدارة، قراءة، أو بدون وصول)
|
||||
2. **صلاحيات على مستوى الكيان** — وصول دقيق للأتمتات الفردية ومتغيرات البيئة واتصالات LLM ومستودعات Git
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/users_and_roles.png" alt="نظرة عامة على RBAC في CrewAI AMP" />
|
||||
</Frame>
|
||||
|
||||
## المستخدمون والأدوار
|
||||
|
||||
يُعيَّن لكل عضو في مساحة عمل CrewAI دور يحدد صلاحيات الوصول عبر الميزات المختلفة.
|
||||
|
||||
يمكنك:
|
||||
|
||||
- استخدام الأدوار المحددة مسبقاً (Owner، Member)
|
||||
- إنشاء أدوار مخصصة مصممة لصلاحيات محددة
|
||||
- تعيين الأدوار في أي وقت عبر لوحة الإعدادات
|
||||
|
||||
يمكنك تهيئة المستخدمين والأدوار في Settings → Roles.
|
||||
|
||||
<Steps>
|
||||
<Step title="فتح إعدادات الأدوار">
|
||||
انتقل إلى <b>Settings → Roles</b> في CrewAI AMP.
|
||||
</Step>
|
||||
<Step title="اختيار نوع الدور">
|
||||
استخدم دوراً محدداً مسبقاً (<b>Owner</b>، <b>Member</b>) أو انقر على{" "}
|
||||
<b>Create role</b> لتحديد دور مخصص.
|
||||
</Step>
|
||||
<Step title="التعيين للأعضاء">
|
||||
اختر المستخدمين وعيّن لهم الدور. يمكنك تغيير ذلك في أي وقت.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### الأدوار المحددة مسبقاً
|
||||
|
||||
| الدور | الوصف |
|
||||
| :---------- | :-------------------------------------------------------------------- |
|
||||
| **Owner** | وصول كامل لجميع الميزات والإعدادات. لا يمكن تقييده. |
|
||||
| **Member** | وصول للقراءة لمعظم الميزات، وصول إدارة لمتغيرات البيئة واتصالات LLM ومشاريع Studio. لا يمكنه تعديل إعدادات المؤسسة أو الإعدادات الافتراضية. |
|
||||
|
||||
### ملخص التهيئة
|
||||
|
||||
| المجال | مكان التهيئة | الخيارات |
|
||||
| :-------------------- | :--------------------------------- | :-------------------------------------- |
|
||||
| المستخدمون والأدوار | Settings → Roles | محددة مسبقاً: Owner، Member؛ أدوار مخصصة |
|
||||
| رؤية الأتمتة | Automation → Settings → Visibility | خاص؛ قائمة بيضاء للمستخدمين/الأدوار |
|
||||
|
||||
---
|
||||
|
||||
## مصفوفة صلاحيات الميزات
|
||||
|
||||
لكل دور مستوى صلاحية لكل منطقة ميزة. المستويات الثلاثة هي:
|
||||
|
||||
- **إدارة (Manage)** — وصول كامل للقراءة/الكتابة (إنشاء، تعديل، حذف)
|
||||
- **قراءة (Read)** — وصول للعرض فقط
|
||||
- **بدون وصول (No access)** — الميزة مخفية/غير قابلة للوصول
|
||||
|
||||
| الميزة | Owner | Member (افتراضي) | المستويات المتاحة | الوصف |
|
||||
| :------------------------ | :------ | :--------------- | :--------------------------------- | :-------------------------------------------------------------- |
|
||||
| `usage_dashboards` | Manage | Read | Manage / Read / No access | عرض مقاييس وتحليلات الاستخدام |
|
||||
| `crews_dashboards` | Manage | Read | Manage / Read / No access | عرض لوحات النشر والوصول إلى تفاصيل الأتمتة |
|
||||
| `invitations` | Manage | Read | Manage / Read / No access | دعوة أعضاء جدد إلى المؤسسة |
|
||||
| `training_ui` | Manage | Read | Manage / Read / No access | الوصول إلى واجهات التدريب/الضبط الدقيق |
|
||||
| `tools` | Manage | Read | Manage / Read / No access | إنشاء وإدارة الأدوات |
|
||||
| `agents` | Manage | Read | Manage / Read / No access | إنشاء وإدارة الوكلاء |
|
||||
| `environment_variables` | Manage | Manage | Manage / No access | إنشاء وإدارة متغيرات البيئة |
|
||||
| `llm_connections` | Manage | Manage | Manage / No access | تهيئة اتصالات مزودي LLM |
|
||||
| `default_settings` | Manage | No access | Manage / No access | تعديل الإعدادات الافتراضية على مستوى المؤسسة |
|
||||
| `organization_settings` | Manage | No access | Manage / No access | إدارة الفوترة والخطط وتهيئة المؤسسة |
|
||||
| `studio_projects` | Manage | Manage | Manage / No access | إنشاء وتعديل المشاريع في Studio |
|
||||
|
||||
<Tip>
|
||||
عند إنشاء دور مخصص، يمكن ضبط معظم الميزات على **Manage** أو **Read** أو **No access**. ومع ذلك، فإن `environment_variables` و`llm_connections` و`default_settings` و`organization_settings` و`studio_projects` تدعم فقط **Manage** أو **No access** — لا يوجد خيار للقراءة فقط لهذه الميزات.
|
||||
</Tip>
|
||||
|
||||
---
|
||||
|
||||
## النشر من GitHub أو Zip
|
||||
|
||||
من أكثر أسئلة RBAC شيوعاً: _"ما الصلاحيات التي يحتاجها عضو الفريق للنشر؟"_
|
||||
|
||||
### النشر من GitHub
|
||||
|
||||
لنشر أتمتة من مستودع GitHub، يحتاج المستخدم إلى:
|
||||
|
||||
1. **`crews_dashboards`**: على الأقل `Read` — مطلوب للوصول إلى لوحة الأتمتات حيث يتم إنشاء عمليات النشر
|
||||
2. **الوصول إلى مستودع Git** (إذا كان RBAC على مستوى الكيان لمستودعات Git مفعلاً): يجب منح دور المستخدم الوصول إلى مستودع Git المحدد عبر صلاحيات مستوى الكيان
|
||||
3. **`studio_projects`: `Manage`** — إذا كان يبني الطاقم في Studio قبل النشر
|
||||
|
||||
### النشر من Zip
|
||||
|
||||
لنشر أتمتة من ملف Zip، يحتاج المستخدم إلى:
|
||||
|
||||
1. **`crews_dashboards`**: على الأقل `Read` — مطلوب للوصول إلى لوحة الأتمتات
|
||||
2. **تفعيل نشر Zip**: يجب ألا تكون المؤسسة قد عطلت نشر Zip في إعدادات المؤسسة
|
||||
|
||||
### مرجع سريع: الحد الأدنى من الصلاحيات للنشر
|
||||
|
||||
| الإجراء | صلاحيات الميزات المطلوبة | متطلبات إضافية |
|
||||
| :------------------- | :----------------------------------- | :----------------------------------------------- |
|
||||
| النشر من GitHub | `crews_dashboards: Read` | وصول كيان مستودع Git (إذا كان Git RBAC مفعلاً) |
|
||||
| النشر من Zip | `crews_dashboards: Read` | يجب تفعيل نشر Zip على مستوى المؤسسة |
|
||||
| البناء في Studio | `studio_projects: Manage` | — |
|
||||
| تهيئة مفاتيح LLM | `llm_connections: Manage` | — |
|
||||
| ضبط متغيرات البيئة | `environment_variables: Manage` | وصول مستوى الكيان (إذا كان RBAC الكيان مفعلاً) |
|
||||
|
||||
---
|
||||
|
||||
## التحكم في الوصول على مستوى الأتمتة (صلاحيات الكيان)
|
||||
|
||||
بالإضافة إلى الأدوار على مستوى المؤسسة، يدعم CrewAI صلاحيات دقيقة على مستوى الكيان تقيد الوصول إلى موارد فردية.
|
||||
|
||||
### رؤية الأتمتة
|
||||
|
||||
تدعم الأتمتات إعدادات رؤية تقيد الوصول حسب المستخدم أو الدور. هذا مفيد لـ:
|
||||
|
||||
- الحفاظ على خصوصية الأتمتات الحساسة أو التجريبية
|
||||
- إدارة الرؤية عبر الفرق الكبيرة أو المتعاونين الخارجيين
|
||||
- اختبار الأتمتات في سياقات معزولة
|
||||
|
||||
يمكن تهيئة عمليات النشر كخاصة، مما يعني أن المستخدمين والأدوار المدرجين في القائمة البيضاء فقط سيتمكنون من التفاعل معها.
|
||||
|
||||
يمكنك تهيئة التحكم في الوصول على مستوى الأتمتة في Automation → Settings → علامة تبويب Visibility.
|
||||
|
||||
<Steps>
|
||||
<Step title="فتح علامة تبويب الرؤية">
|
||||
انتقل إلى <b>Automation → Settings → Visibility</b>.
|
||||
</Step>
|
||||
<Step title="ضبط الرؤية">
|
||||
اختر <b>Private</b> لتقييد الوصول. يحتفظ مالك المؤسسة دائماً
|
||||
بالوصول.
|
||||
</Step>
|
||||
<Step title="القائمة البيضاء للوصول">
|
||||
أضف مستخدمين وأدواراً محددة مسموح لهم بالعرض والتشغيل والوصول
|
||||
إلى السجلات/المقاييس/الإعدادات.
|
||||
</Step>
|
||||
<Step title="الحفظ والتحقق">
|
||||
احفظ التغييرات، ثم تأكد من أن المستخدمين غير المدرجين في القائمة البيضاء لا يمكنهم عرض أو تشغيل
|
||||
الأتمتة.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### الرؤية الخاصة: نتائج الوصول
|
||||
|
||||
| الإجراء | المالك | مستخدم/دور في القائمة البيضاء | غير مدرج في القائمة البيضاء |
|
||||
| :--------------------------- | :---- | :---------------------------- | :-------------------------- |
|
||||
| عرض الأتمتة | ✓ | ✓ | ✗ |
|
||||
| تشغيل الأتمتة/API | ✓ | ✓ | ✗ |
|
||||
| الوصول إلى السجلات/المقاييس/الإعدادات | ✓ | ✓ | ✗ |
|
||||
|
||||
<Tip>
|
||||
يتمتع مالك المؤسسة دائماً بالوصول. في الوضع الخاص، يمكن فقط للمستخدمين
|
||||
والأدوار المدرجين في القائمة البيضاء العرض والتشغيل والوصول إلى السجلات/المقاييس/الإعدادات.
|
||||
</Tip>
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/visibility.png" alt="إعدادات رؤية الأتمتة في CrewAI AMP" />
|
||||
</Frame>
|
||||
|
||||
### أنواع صلاحيات النشر
|
||||
|
||||
عند منح وصول على مستوى الكيان لأتمتة محددة، يمكنك تعيين أنواع الصلاحيات التالية:
|
||||
|
||||
| الصلاحية | ما تسمح به |
|
||||
| :------------------- | :-------------------------------------------------- |
|
||||
| `run` | تنفيذ الأتمتة واستخدام API الخاص بها |
|
||||
| `traces` | عرض تتبعات التنفيذ والسجلات |
|
||||
| `manage_settings` | تعديل، إعادة نشر، استرجاع، أو حذف الأتمتة |
|
||||
| `human_in_the_loop` | الرد على طلبات الإنسان في الحلقة (HITL) |
|
||||
| `full_access` | جميع ما سبق |
|
||||
|
||||
### RBAC على مستوى الكيان لموارد أخرى
|
||||
|
||||
عند تفعيل RBAC على مستوى الكيان، يمكن أيضاً التحكم في الوصول لهذه الموارد حسب المستخدم أو الدور:
|
||||
|
||||
| المورد | يتم التحكم فيه بواسطة | الوصف |
|
||||
| :-------------------- | :--------------------------------- | :------------------------------------------------------------- |
|
||||
| متغيرات البيئة | علامة ميزة RBAC الكيان | تقييد أي الأدوار/المستخدمين يمكنهم عرض أو إدارة متغيرات بيئة محددة |
|
||||
| اتصالات LLM | علامة ميزة RBAC الكيان | تقييد الوصول لتهيئات مزودي LLM محددة |
|
||||
| مستودعات Git | إعداد RBAC لمستودعات Git بالمؤسسة | تقييد أي الأدوار/المستخدمين يمكنهم الوصول لمستودعات متصلة محددة |
|
||||
|
||||
---
|
||||
|
||||
## أنماط الأدوار الشائعة
|
||||
|
||||
بينما يأتي CrewAI بدوري Owner وMember، تستفيد معظم الفرق من إنشاء أدوار مخصصة. إليك الأنماط الشائعة:
|
||||
|
||||
### دور المطور
|
||||
|
||||
دور لأعضاء الفريق الذين يبنون وينشرون الأتمتات لكن لا يديرون إعدادات المؤسسة.
|
||||
|
||||
| الميزة | الصلاحية |
|
||||
| :------------------------ | :---------- |
|
||||
| `usage_dashboards` | Read |
|
||||
| `crews_dashboards` | Manage |
|
||||
| `invitations` | Read |
|
||||
| `training_ui` | Read |
|
||||
| `tools` | Manage |
|
||||
| `agents` | Manage |
|
||||
| `environment_variables` | Manage |
|
||||
| `llm_connections` | Manage |
|
||||
| `default_settings` | No access |
|
||||
| `organization_settings` | No access |
|
||||
| `studio_projects` | Manage |
|
||||
|
||||
### دور المشاهد / أصحاب المصلحة
|
||||
|
||||
دور للمعنيين غير التقنيين الذين يحتاجون لمراقبة الأتمتات وعرض النتائج.
|
||||
|
||||
| الميزة | الصلاحية |
|
||||
| :------------------------ | :---------- |
|
||||
| `usage_dashboards` | Read |
|
||||
| `crews_dashboards` | Read |
|
||||
| `invitations` | No access |
|
||||
| `training_ui` | Read |
|
||||
| `tools` | Read |
|
||||
| `agents` | Read |
|
||||
| `environment_variables` | No access |
|
||||
| `llm_connections` | No access |
|
||||
| `default_settings` | No access |
|
||||
| `organization_settings` | No access |
|
||||
| `studio_projects` | No access |
|
||||
|
||||
### دور مسؤول العمليات / المنصة
|
||||
|
||||
دور لمشغلي المنصة الذين يديرون إعدادات البنية التحتية لكن قد لا يبنون الوكلاء.
|
||||
|
||||
| الميزة | الصلاحية |
|
||||
| :------------------------ | :---------- |
|
||||
| `usage_dashboards` | Manage |
|
||||
| `crews_dashboards` | Manage |
|
||||
| `invitations` | Manage |
|
||||
| `training_ui` | Read |
|
||||
| `tools` | Read |
|
||||
| `agents` | Read |
|
||||
| `environment_variables` | Manage |
|
||||
| `llm_connections` | Manage |
|
||||
| `default_settings` | Manage |
|
||||
| `organization_settings` | Read |
|
||||
| `studio_projects` | No access |
|
||||
|
||||
---
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في أسئلة RBAC.
|
||||
</Card>
|
||||
@@ -0,0 +1,321 @@
|
||||
---
|
||||
title: AWS Workload Identity (اتحاد OIDC)
|
||||
description: تكوين AWS Secrets Manager عبر Workload Identity للوصول إلى الأسرار بشكل مراعٍ للتدوير وبدون بيانات اعتماد
|
||||
sidebarTitle: بـ Workload Identity
|
||||
icon: "id-badge"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يُكوِّن هذا الدليل AWS Secrets Manager كمزود أسرار باستخدام **Workload Identity Federation**: تُصدر CrewAI Platform رموز OIDC قصيرة الأمد، وتُبادلها للحصول على بيانات اعتماد AWS عبر STS، وتقرأ أسرارك — دون تخزين أي مفتاح وصول AWS طويل الأمد في أي مكان.
|
||||
|
||||
<Note>
|
||||
**لماذا هذا المسار:** تُحَلّ الأسرار وقت تنفيذ الأتمتة، لذا **تنتشر القيم المُدوَّرة إلى الإطلاق التالي بدون إعادة نشر**. إن كنت تحتاج فقط بيانات اعتماد ثابتة ولا تهتم بانتشار التدوير، راجع الدليل الأبسط [AWS — المفاتيح الثابتة / AssumeRole](/ar/enterprise/features/secrets-manager/aws).
|
||||
</Note>
|
||||
|
||||
### كيف يعمل وقت التشغيل
|
||||
|
||||
1. يطلب عامل النشر JWT OIDC طازج من CrewAI Platform.
|
||||
2. يستدعي العامل `sts:AssumeRoleWithWebIdentity` على دور IAM الذي ستُعدّه أدناه، مُقدِّماً الـ JWT.
|
||||
3. تتحقق AWS STS من الـ JWT مقابل مُصدر OIDC العام لـ CrewAI Platform (لذا يجب أن يكون تنصيب منصتك قابلاً للوصول من AWS)، ثم تُعيد بيانات اعتماد AWS قصيرة الأمد.
|
||||
4. يستخدم العامل تلك البيانات لاستدعاء `secretsmanager:GetSecretValue`.
|
||||
5. تُحقن القيمة المجلوبة كقيمة لمتغير البيئة لإطلاق الأتمتة ذاك.
|
||||
|
||||
تُخزَّن رموز موضوع OIDC مؤقتاً لنحو ساعة لتفادي إعادة الإصدار في كل إطلاق. تُجلب قيم الأسرار طازجة في كل إطلاق بغض النظر عن حالة ذاكرة OIDC المؤقتة، وهذا ما يجعل هذا المسار مراعياً للتدوير.
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<Note>
|
||||
قبل البدء، تأكد من امتلاكك:
|
||||
|
||||
- يجب أن تتضمن صورة حاوية الأتمتة إصدار CrewAI runtime رقم `1.14.5` أو أحدث.
|
||||
- حساب AWS لديه إذن إنشاء مزوّدي OIDC وأدوار وسياسات IAM.
|
||||
- منطقة AWS التي تعيش (أو ستعيش) فيها أسرارك، مثلاً `us-east-1`.
|
||||
- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذني `workload_identity_configs: manage` و `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
|
||||
- **UUID مؤسسة CrewAI الخاصة بك.** يمكنك العثور عليه في صفحة إعدادات المؤسسة في CrewAI Platform — تُربط سياسة الثقة في الخطوة 3 دور IAM بهذه المؤسسة تحديداً.
|
||||
- **يجب أن يكون تنصيب CrewAI Platform قابلاً للوصول من AWS عبر HTTPS** ليتمكّن AWS STS من جلب وثيقة اكتشاف OIDC و JWKS أثناء التحقق من الرمز. تأكد مع مسؤول المنصة من أن المضيف متاح عبر الإنترنت (أو أن AWS يمكنه الوصول إليه شبكياً عبر VPC peering أو ما يعادله).
|
||||
</Note>
|
||||
|
||||
## الخطوة 1 — العثور على عنوان مُصدر OIDC لـ CrewAI Platform
|
||||
|
||||
ينشر تنصيب CrewAI Platform وثيقة اكتشاف OpenID Connect على `https://<your-platform-host>/.well-known/openid-configuration`. الحقل `issuer` في تلك الوثيقة هو الرابط الذي ستُسجِّله AWS كمزود OIDC موثوق.
|
||||
|
||||
افتح الرابط في المتصفح (مع استبدال `<your-platform-host>` بمضيفك الفعلي، مثلاً `app.crewai.com`):
|
||||
|
||||
```
|
||||
https://<your-platform-host>/.well-known/openid-configuration
|
||||
```
|
||||
|
||||
ينبغي أن ترى JSON يحتوي على:
|
||||
|
||||
```json
|
||||
{
|
||||
"issuer": "https://<your-platform-host>",
|
||||
"jwks_uri": "https://<your-platform-host>/oauth2/jwks",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
سجّل القيمة الدقيقة لـ `issuer` — ستستخدمها في الخطوة 3.
|
||||
|
||||
<Tip>
|
||||
إذا أعاد الرابط 404 أو 503، اتصل بمسؤول المنصة. يتطلب مُصدر OIDC تكوين مفتاح توقيع خاص وقت التنصيب. راجع دليل تنصيب المنصة لتكوين `OIDC_PRIVATE_KEY` و `OIDC_ISSUER`.
|
||||
</Tip>
|
||||
|
||||
## الخطوة 2 — تسجيل CrewAI Platform كمزود هوية OIDC في IAM
|
||||
|
||||
افتح [وحدة تحكم IAM ← Identity providers](https://console.aws.amazon.com/iam/home#/identity_providers) وانقر على **Add provider**.
|
||||
|
||||
- **Provider type:** OpenID Connect.
|
||||
- **Provider URL:** قيمة `issuer` من الخطوة 1 (مثلاً `https://app.crewai.com`).
|
||||
- **Audience:** `sts.amazonaws.com`
|
||||
|
||||
انقر على **Add provider**.
|
||||
|
||||
أو عبر CLI:
|
||||
|
||||
```bash
|
||||
aws iam create-open-id-connect-provider \
|
||||
--url "https://<your-platform-host>" \
|
||||
--client-id-list "sts.amazonaws.com" \
|
||||
--thumbprint-list "$(echo | openssl s_client -servername <your-platform-host> -connect <your-platform-host>:443 2>/dev/null | openssl x509 -fingerprint -noout -sha1 | cut -d= -f2 | tr -d ':')"
|
||||
```
|
||||
|
||||
انسخ **OpenIDConnectProviderArn** من المخرجات (أو ARN المزود من الوحدة). ستستخدمه في الخطوة 3.
|
||||
|
||||
<Note>
|
||||
لا تتحقق AWS فعلياً من بصمة الإبهام لاستدعاءات STS WebIdentity — فهي دائماً تُعيد جلب JWKS وقت التحقق — لكن واجهة الـ API تتطلب وجود الحقل.
|
||||
</Note>
|
||||
|
||||
{/* SCREENSHOT: AWS IAM "Add identity provider" form filled with the Platform issuer URL and audience sts.amazonaws.com → /images/secrets-manager/aws-wi/01-add-oidc-provider.png */}
|
||||
{/* SCREENSHOT: Provider detail page showing the provider's ARN → /images/secrets-manager/aws-wi/02-oidc-provider-arn.png */}
|
||||
|
||||
## الخطوة 3 — إنشاء دور IAM
|
||||
|
||||
احفظ كـ `trust-policy.json`، مع استبدال `<YOUR_ACCOUNT_ID>` و `<your-platform-host>` (مضيف المُصدر **بدون** `https://` أو `http://`، مثلاً `app.crewai.com`) و `<YOUR_CREWAI_ORG_UUID>` (من المتطلبات المسبقة):
|
||||
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Principal": {
|
||||
"Federated": "arn:aws:iam::<YOUR_ACCOUNT_ID>:oidc-provider/<your-platform-host>"
|
||||
},
|
||||
"Action": "sts:AssumeRoleWithWebIdentity",
|
||||
"Condition": {
|
||||
"StringEquals": {
|
||||
"<your-platform-host>:aud": "sts.amazonaws.com",
|
||||
"<your-platform-host>:sub": "organization:<YOUR_CREWAI_ORG_UUID>"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
أنشئ الدور:
|
||||
|
||||
```bash
|
||||
aws iam create-role \
|
||||
--role-name crewai-secrets-reader \
|
||||
--assume-role-policy-document file://trust-policy.json
|
||||
```
|
||||
|
||||
انسخ **Role Arn** من المخرجات — هذا هو `aws_role_arn` الخاص بك. ستلصقه في CrewAI Platform في الخطوة 6.
|
||||
|
||||
<Tip>
|
||||
يحدّد الشرطان نطاق الثقة بدقة: يقيّد `aud` افتراض الدور إلى الرموز ذات جمهور AWS STS، ويقصر `sub` الاتحاد على مؤسسة CrewAI محددة — تُقبل فقط الرموز المُصدَرة لأتمتات تلك المؤسسة. تُعيّن CrewAI Platform كلا الادّعاءين دائماً على رموز AWS workload identity.
|
||||
</Tip>
|
||||
|
||||
{/* SCREENSHOT: IAM "Create role" with Web Identity trust type, federated provider selector pointing at the CrewAI Platform OIDC provider → /images/secrets-manager/aws-wi/03-create-role-trust.png */}
|
||||
|
||||
## الخطوة 4 — إنشاء وإرفاق سياسة IAM لوصول Secrets Manager + KMS
|
||||
|
||||
احفظ كـ `secrets-policy.json`، مع استبدال العناصر النائبة بمعرّف حسابك ومنطقتك وبادئة اسم السر و ARN(s) مفاتيح KMS التي تُشفّر تلك الأسرار:
|
||||
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Sid": "SecretsManagerListForUI",
|
||||
"Effect": "Allow",
|
||||
"Action": "secretsmanager:ListSecrets",
|
||||
"Resource": "*"
|
||||
},
|
||||
{
|
||||
"Sid": "SecretsManagerRead",
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"secretsmanager:GetSecretValue"
|
||||
],
|
||||
"Resource": "arn:aws:secretsmanager:<REGION>:<YOUR_ACCOUNT_ID>:secret:<SECRET_NAME_PREFIX>-*"
|
||||
},
|
||||
{
|
||||
"Sid": "KMSDecrypt",
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"kms:Decrypt"
|
||||
],
|
||||
"Resource": "arn:aws:kms:<REGION>:<YOUR_ACCOUNT_ID>:key/<KMS_KEY_ID>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
تُشغّل `SecretsManagerListForUI` ميزة **الاقتراح التلقائي لاسم السر** في نموذج متغيرات البيئة وزر **Test Connection** على بيانات الاعتماد. يقبل `secretsmanager:ListSecrets` فقط `Resource: "*"` — فهو محصور على مستوى الحساب في طبقة IAM.
|
||||
|
||||
أرفق السياسة بالدور إما عبر CLI (سياسة مضمنة، أبسط) أو واجهة الوحدة؛ للبيئات التي تعيد استخدام نفس الأذونات عبر أدوار متعددة، استخدم علامة التبويب **Managed policy** لسياسة مُسمّاة قابلة لإعادة الاستخدام.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="سياسة مضمنة (CLI)">
|
||||
```bash
|
||||
aws iam put-role-policy \
|
||||
--role-name crewai-secrets-reader \
|
||||
--policy-name SecretsManagerRead \
|
||||
--policy-document file://secrets-policy.json
|
||||
```
|
||||
|
||||
يُرفق هذا السياسة **مضمنةً** بالدور. السياسات المضمنة مرتبطة بالدور ولا يمكن إعادة استخدامها على أدوار أخرى.
|
||||
</Tab>
|
||||
|
||||
<Tab title="سياسة مُدارة (CLI، قابلة لإعادة الاستخدام)">
|
||||
```bash
|
||||
POLICY_ARN=$(aws iam create-policy \
|
||||
--policy-name CrewAISecretsReader \
|
||||
--policy-document file://secrets-policy.json \
|
||||
--query 'Policy.Arn' --output text)
|
||||
|
||||
aws iam attach-role-policy \
|
||||
--role-name crewai-secrets-reader \
|
||||
--policy-arn "$POLICY_ARN"
|
||||
```
|
||||
|
||||
السياسة المُدارة هي مورد IAM مستقل يمكنك إرفاقه بأدوار متعددة.
|
||||
</Tab>
|
||||
|
||||
<Tab title="وحدة التحكم (UI)">
|
||||
1. افتح [وحدة تحكم IAM ← Roles](https://console.aws.amazon.com/iam/home#/roles) واختر **crewai-secrets-reader**.
|
||||
2. في علامة التبويب **Permissions**، انقر على **Add permissions** ← **Create inline policy**.
|
||||
3. بدّل إلى محرر **JSON** والصق محتوى `secrets-policy.json`.
|
||||
4. انقر على **Next**، أعطِ السياسة اسماً (مثلاً `SecretsManagerRead`)، وانقر على **Create policy**.
|
||||
|
||||
لإنشاء سياسة مُدارة قابلة لإعادة الاستخدام بدلاً من ذلك، استخدم **IAM ← Policies ← Create policy** ثم أرفقها بالدور من علامة التبويب **Permissions** الخاصة بالدور.
|
||||
|
||||
{/* SCREENSHOT: IAM Role detail → Permissions → Create inline policy with JSON editor → /images/secrets-manager/aws-wi/03b-attach-inline-policy.png */}
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## الخطوة 5 — إنشاء سر واحد على الأقل في AWS
|
||||
|
||||
إذا لم يكن لديك سر للاختبار، أنشئ واحداً الآن:
|
||||
|
||||
```bash
|
||||
aws secretsmanager create-secret \
|
||||
--region <REGION> \
|
||||
--name crewai-test-keyword \
|
||||
--secret-string "hello from aws"
|
||||
```
|
||||
|
||||
أو عبر [وحدة تحكم AWS Secrets Manager](https://console.aws.amazon.com/secretsmanager/) ← **Store a new secret**.
|
||||
|
||||
{/* SCREENSHOT: AWS Secrets Manager "Store a new secret" page with a sample value → /images/secrets-manager/aws-wi/04-create-secret.png */}
|
||||
|
||||
## الخطوة 6 — إضافة تكوين Workload Identity في CrewAI Platform
|
||||
|
||||
في CrewAI Platform، انتقل إلى **Settings** ← **Workload Identity** وانقر على **Add Workload Identity Config**.
|
||||
|
||||
{/* SCREENSHOT: Sidebar highlighting Settings → Workload Identity → /images/secrets-manager/aws-wi/05-amp-settings-wi-nav.png */}
|
||||
{/* SCREENSHOT: Empty state of Workload Identity page with "Add Workload Identity Config" button → /images/secrets-manager/aws-wi/06-amp-wi-empty-state.png */}
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `aws-prod`.
|
||||
- **Cloud Provider:** `AWS`.
|
||||
- **AWS Role ARN:** **Role Arn** من الخطوة 3.
|
||||
- **AWS Region:** المنطقة التي تعيش فيها أسرارك، مثلاً `us-east-1`.
|
||||
- (اختياري) حدّد **Set as default for AWS** إذا كنت ترغب في أن يكون تكوين WI هذا هو الافتراضي المُحدَّد عند إنشاء بيانات اعتماد سر مدعومة بـ AWS.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Workload Identity Config" form with AWS, role ARN, and region filled in → /images/secrets-manager/aws-wi/07-amp-add-wi-config-aws.png */}
|
||||
{/* SCREENSHOT: Workload Identity list showing the new AWS row with "(default)" badge if applicable → /images/secrets-manager/aws-wi/08-amp-wi-list-with-aws.png */}
|
||||
|
||||
## الخطوة 7 — إضافة بيانات اعتماد مزود أسرار مرتبطة بتكوين WI
|
||||
|
||||
انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `aws-prod-wi`.
|
||||
- **Provider:** `AWS Secrets Manager`.
|
||||
- **Authentication Method:** `Workload Identity` (بدلاً من المفاتيح الثابتة / AssumeRole).
|
||||
- **Workload Identity Configuration:** اختر التكوين الذي أنشأته في الخطوة 6 (مثلاً `aws-prod`).
|
||||
- (اختياري) حدّد **Set as default credential for this provider**.
|
||||
|
||||
سيطلب النموذج فقط **AWS Region** ضمن Workload Identity — حقول بيانات الاعتماد الثابتة (Access Key ID و Secret Access Key و Role ARN و External ID) مخفية عمداً لأنها لا تنطبق على هذا المسار؛ يأتي ARN الدور من تكوين WI المرتبط.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + Workload Identity + WI config dropdown selected → /images/secrets-manager/aws-wi/09-amp-add-credential-aws-wi.png */}
|
||||
|
||||
## الخطوة 8 — اختبار الاتصال
|
||||
|
||||
بعد حفظ بيانات الاعتماد، انقر على **Test Connection**. لبيانات اعتماد workload-identity، يتحقق هذا من مصافحة OIDC: تُصدر CrewAI Platform JWT، وتبادله مع AWS STS عبر `sts:AssumeRoleWithWebIdentity`، وتؤكد أن بيانات الاعتماد الناتجة يمكنها استدعاء `sts:GetCallerIdentity` مقابل الدور المُفترَض. نتيجة خضراء تعني أن ارتباط الاتحاد سليم.
|
||||
|
||||
نجاح Test Connection يُثبت أن سياسة الثقة وتسجيل مزود OIDC وشرط الجمهور موصولة جميعها بشكل صحيح. لا يُثبت ذلك أن IAM لكل سر صحيح — يُمارَس `secretsmanager:GetSecretValue` على ARN سر محدد بشكل منفصل عندما يُحَلّ متغير بيئة عند الإطلاق. راجع [استكشاف الأخطاء](#troubleshooting) لأنماط فشل المصافحة.
|
||||
|
||||
## الخطوة 9 — الإشارة إلى السر في متغير بيئة
|
||||
|
||||
الآن أَشِر إلى السر على أتمتة، تماماً كما تفعل مع أي متغير بيئة مدعوم بمدير أسرار. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) لحقول النموذج والسلوك.
|
||||
|
||||
الفرق الوحيد بين متغيرات البيئة المدعومة بـ WI والمدعومة بمفاتيح ثابتة هو **متى** يُقرأ السر:
|
||||
|
||||
- **مدعوم بـ WI:** تُقرأ قيمة السر طازجة في كل إطلاق أتمتة.
|
||||
- **مدعوم بمفاتيح ثابتة:** تُقرأ قيمة السر وقت النشر وتُدمج في صورة النشر.
|
||||
|
||||
## الخطوة 10 — التحقق من التدوير
|
||||
|
||||
بعد تشغيل عملية النشر، دوّر السر في AWS:
|
||||
|
||||
```bash
|
||||
aws secretsmanager update-secret \
|
||||
--region <REGION> \
|
||||
--secret-id crewai-test-keyword \
|
||||
--secret-string "rotated value"
|
||||
```
|
||||
|
||||
أطلق إطلاق أتمتة جديداً. ستكون بيئة الإطلاق ترى `"rotated value"` — بدون إعادة نشر ولا إعادة تشغيل عامل ولا انتظار TTL.
|
||||
|
||||
للتأكد في السجلات (إذا كان لديك وصول إلى العامل)، ابحث عن:
|
||||
|
||||
```
|
||||
Workload identity config '<id>' (aws): N secret(s) resolved
|
||||
```
|
||||
|
||||
يظهر هذا السطر لكل إطلاق ويُشير إلى استدعاء `GetSecretValue` طازج مقابل AWS.
|
||||
|
||||
## استكشاف الأخطاء
|
||||
|
||||
| العَرَض | السبب المحتمل |
|
||||
|---|---|
|
||||
| يفشل Test Connection بخطأ مصافحة | رُفض استدعاء `sts:AssumeRoleWithWebIdentity`. تحقق من أن ARN الكيان الموحَّد في سياسة الثقة يشير إلى `oidc-provider/<your-platform-host>` (المضيف **بدون** `https://` أو `http://` وبدون شرطة مائلة لاحقة)، وأن شرط الجمهور هو بالضبط `sts.amazonaws.com`، وأن شرط `sub` يطابق UUID مؤسسة CrewAI الخاصة بك، وأن رابط اكتشاف OIDC للمنصة قابل للوصول من AWS عبر الإنترنت العام. |
|
||||
| `InvalidIdentityToken: Couldn't retrieve verification key from your identity provider` | لا يمكن لـ AWS STS الوصول إلى مضيف CrewAI Platform لجلب JWKS. تأكد من أن المضيف متاح عبر الإنترنت من AWS، وأن رابط اكتشاف OIDC يُعيد 200، وأن نقطة نهاية JWKS قابلة للوصول. |
|
||||
| `AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity` | عدم تطابق سياسة الثقة. تحقق من الخطوة 3 من جديد: يجب أن يتضمن ARN الكيان الموحَّد `oidc-provider/<your-platform-host>` (المضيف **بدون** `https://` أو `http://` وبدون شرطة مائلة لاحقة)، ويجب أن يكون شرط الجمهور بالضبط `sts.amazonaws.com`، وأن يساوي شرط `sub` بالضبط `organization:<YOUR_CREWAI_ORG_UUID>`. |
|
||||
| يُظهر الاقتراح التلقائي لاسم السر `AccessDenied: secretsmanager:ListSecrets` | يفتقد الدور إلى `secretsmanager:ListSecrets` مع `Resource: "*"`. أضف بيان `SecretsManagerListForUI` من الخطوة 4. |
|
||||
| يفشل الإطلاق في حلّ سر رغم نجاح Test Connection | ارتباط WI سليم، لكن IAM المحصور بالمورد مفقود على السر الفاشل. راجع أذونات `secretsmanager:GetSecretValue` و `kms:Decrypt` للدور على ARN ذلك السر بعينه ومفتاح KMS الخاص به. |
|
||||
| `RegionDisabledException` / لم يُعثر على أسرار | لا تطابق المنطقة في تكوين Workload Identity المكان الفعلي للسر. تحقق من الخطوة 6 من جديد. |
|
||||
| لا تُلتقط القيمة المُدوَّرة في الإطلاق التالي | تأكد من أن متغير البيئة على الأتمتة يشير إلى بيانات اعتماد مدعومة بـ Workload Identity (وليس بيانات اعتماد بمفاتيح ثابتة). يدمج المسار الثابت القيم في صورة النشر. |
|
||||
|
||||
### روابط مرجعية
|
||||
|
||||
- AWS: [Creating OpenID Connect (OIDC) identity providers](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html)
|
||||
- AWS: [Configuring a role for OpenID Connect federation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc_relying-party.html)
|
||||
- AWS: [STS:AssumeRoleWithWebIdentity API reference](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
- [استخدام الأسرار في متغيرات البيئة وإدارة الأذونات](/ar/enterprise/features/secrets-manager/usage)
|
||||
- للتنوع متعدد السحاب، راجع أيضاً [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity) و [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity).
|
||||
295
docs/edge/ar/enterprise/features/secrets-manager/aws.mdx
Normal file
295
docs/edge/ar/enterprise/features/secrets-manager/aws.mdx
Normal file
@@ -0,0 +1,295 @@
|
||||
---
|
||||
title: AWS Secrets Manager (بيانات اعتماد ثابتة)
|
||||
description: تكوين AWS Secrets Manager كمزود أسرار لـ CrewAI Platform باستخدام مفاتيح الوصول الثابتة أو AssumeRole
|
||||
sidebarTitle: ببيانات اعتماد ثابتة
|
||||
icon: "key"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يأخذك هذا الدليل عبر تكوين AWS Secrets Manager كمزود أسرار لمؤسستك على CrewAI Platform، باستخدام **بيانات الاعتماد الثابتة** (مفاتيح الوصول، اختيارياً مع AssumeRole). بنهاية الدليل، ستتمكن CrewAI Platform من قراءة الأسرار المخزّنة في حساب AWS الخاص بك وحقنها كقيم متغيرات بيئة وقت التشغيل.
|
||||
|
||||
<Note>
|
||||
يغطي هذا الدليل مسار **بيانات الاعتماد الثابتة** — تُحَلّ الأسرار وقت النشر وتُدمج في صورة النشر. تتطلب القيم المُدوَّرة إعادة نشر. إذا أردت أسراراً مراعية للتدوير تُحدَّث في كل إطلاق أتمتة (بدون إعادة نشر)، راجع [AWS Workload Identity (اتحاد OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity).
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
يغطي هذا الدليل التكوين من جانب AWS وإعداد بيانات الاعتماد في CrewAI Platform. للإشارة بعدها إلى سر من متغير بيئة، راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage).
|
||||
</Note>
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<Note>
|
||||
قبل البدء، تأكد من امتلاكك:
|
||||
|
||||
- حساب AWS لديه إذن إنشاء مستخدمي IAM وسياسات يديرها العميل و(اختيارياً) أدوار IAM.
|
||||
- منطقة AWS التي تعيش (أو ستعيش) فيها أسرارك، مثلاً `us-east-1`.
|
||||
- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذن `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
|
||||
</Note>
|
||||
|
||||
## اختر طريقة المصادقة
|
||||
|
||||
تدعم CrewAI Platform طريقتين لمصادقة المنصة مع AWS Secrets Manager. اختر واحدة قبل أن تبدأ — تختلف الخطوات أدناه بناءً على اختيارك.
|
||||
|
||||
| الطريقة | متى تُستخدم | المقايضات |
|
||||
|---|---|---|
|
||||
| **مفاتيح الوصول الثابتة** | البداية، عمليات نشر بحساب واحد | أبسط إعداد؛ يجب تدوير مفاتيح الوصول يدوياً |
|
||||
| **AssumeRole** | عبر الحسابات، تشديد الإنتاج | بيانات اعتماد قصيرة الأمد؛ يدعم External ID؛ يتطلب دور IAM إضافي |
|
||||
|
||||
تستخدم بقية هذا الدليل علامات تبويب في الخطوات 3–5 لتتمكن من اتباع المسار المطابق لاختيارك.
|
||||
|
||||
## الخطوة 1 — إنشاء مستخدم IAM
|
||||
|
||||
افتح [وحدة تحكم IAM](https://console.aws.amazon.com/iam/)، انتقل إلى **Users**، ثم انقر على **Create user**.
|
||||
|
||||
- الاسم المقترح: `crewai-secrets-reader`.
|
||||
- اترك **Provide user access to the AWS Management Console** بدون تحديد — هذا الكيان تستخدمه CrewAI Platform برمجياً، وليس البشر.
|
||||
- انقر على **Next**.
|
||||
|
||||
في صفحة **Set permissions**، اترك الاختيار الافتراضي. ستُرفق السياسة في الخطوة 3.
|
||||
|
||||
انقر على **Next**، راجع، وانقر على **Create user**.
|
||||
|
||||
للتفاصيل الكاملة، راجع وثائق AWS: [Create an IAM user in your AWS account](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html).
|
||||
|
||||
{/* SCREENSHOT: AWS IAM "Create user" form filled with name "crewai-secrets-reader" → /images/secrets-manager/aws/01-create-iam-user.png */}
|
||||
|
||||
## الخطوة 2 — إنشاء سياسة IAM
|
||||
|
||||
تحتاج CrewAI Platform إلى وصول للقراءة فقط إلى AWS Secrets Manager وإذن لفك تشفير الأسرار عبر KMS. أنشئ سياسة يديرها العميل بـ JSON التالي.
|
||||
|
||||
في وحدة تحكم IAM، انتقل إلى **Policies**، ثم انقر على **Create policy**.
|
||||
|
||||
اختر علامة التبويب **JSON** واستبدل المحتوى بـ:
|
||||
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Sid": "SecretsManagerRead",
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"secretsmanager:ListSecrets",
|
||||
"secretsmanager:GetSecretValue",
|
||||
"secretsmanager:DescribeSecret"
|
||||
],
|
||||
"Resource": "*"
|
||||
},
|
||||
{
|
||||
"Sid": "KMSDecrypt",
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"kms:DescribeKey",
|
||||
"kms:Decrypt"
|
||||
],
|
||||
"Resource": "*"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
انقر على **Next**، ثم في صفحة **Review and create**:
|
||||
|
||||
- **Policy name:** `CrewAISecretsManagerRead`
|
||||
- **Description (optional):** `Read-only access to AWS Secrets Manager for CrewAI Platform`
|
||||
|
||||
انقر على **Create policy**.
|
||||
|
||||
<Tip>
|
||||
تمنح السياسة أعلاه `*` على `Resource` للبساطة. في الإنتاج، حدّد نطاق `Resource` إلى ARNs الخاصة بالأسرار التي يجب على CrewAI Platform الوصول إليها، وحدّد نطاق `kms:Decrypt` إلى ARNs مفاتيح KMS التي تُشفّر تلك الأسرار. راجع [إرشادات AWS حول أقل الامتيازات](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html).
|
||||
</Tip>
|
||||
|
||||
{/* SCREENSHOT: AWS IAM "Create policy" → JSON tab with the policy above pasted → /images/secrets-manager/aws/02-create-policy-json-editor.png */}
|
||||
{/* SCREENSHOT: AWS IAM "Review and create policy" page with name "CrewAISecretsManagerRead" → /images/secrets-manager/aws/03-policy-review-and-create.png */}
|
||||
|
||||
## الخطوة 3 — إرفاق السياسة
|
||||
|
||||
<Tabs>
|
||||
<Tab title="مفاتيح الوصول الثابتة">
|
||||
1. في وحدة تحكم IAM، انتقل إلى **Users** وانقر على المستخدم الذي أنشأته في الخطوة 1.
|
||||
2. في علامة التبويب **Permissions**، انقر على **Add permissions** ← **Attach policies directly**.
|
||||
3. ابحث عن `CrewAISecretsManagerRead`، حدّدها، وانقر على **Next**.
|
||||
4. انقر على **Add permissions**.
|
||||
|
||||
{/* SCREENSHOT: "Add permissions" → "Attach policies directly" with CrewAISecretsManagerRead selected → /images/secrets-manager/aws/04a-attach-policy-to-user.png */}
|
||||
</Tab>
|
||||
|
||||
<Tab title="AssumeRole">
|
||||
مع AssumeRole، تُرفَق السياسة بـ **دور** IAM منفصل (وليس مباشرة بالمستخدم). يحتاج المستخدم من الخطوة 1 فقط إلى إذن لاستدعاء `sts:AssumeRole` على ذلك الدور.
|
||||
|
||||
**إنشاء الدور:**
|
||||
|
||||
1. في وحدة تحكم IAM، انتقل إلى **Roles** وانقر على **Create role**.
|
||||
2. **Trusted entity type:** AWS account. اختر **This account** (أو **Another AWS account** لإعدادات عبر الحسابات، ثم أدخل معرّف حساب AWS الذي يستضيف مستخدم IAM من الخطوة 1).
|
||||
3. (موصى به) حدّد **Require external ID** وأدخل قيمة تُولّدها بنفسك — هذا سر مشترك ستلصقه في CrewAI Platform في الخطوة 5.
|
||||
4. انقر على **Next**.
|
||||
5. أرفق سياسة `CrewAISecretsManagerRead`.
|
||||
6. انقر على **Next**، سمِّ الدور `CrewAISecretsManagerRole`، وانقر على **Create role**.
|
||||
|
||||
**اسمح لمستخدم IAM بافتراض الدور:**
|
||||
|
||||
1. افتح الدور الذي أنشأته للتو وانسخ **ARN** الخاص به.
|
||||
2. في وحدة تحكم IAM، انتقل إلى **Users**، انقر على المستخدم من الخطوة 1، وفي علامة التبويب **Permissions** انقر على **Add permissions** ← **Create inline policy**.
|
||||
3. في علامة التبويب **JSON**، الصق ما يلي (استبدل `ROLE_ARN_FROM_ABOVE`):
|
||||
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": "sts:AssumeRole",
|
||||
"Resource": "ROLE_ARN_FROM_ABOVE"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
4. سمِّ السياسة `CrewAIAssumeSecretsRole` وانقر على **Create policy**.
|
||||
|
||||
{/* SCREENSHOT: IAM "Create role" trust policy step with External ID checkbox enabled → /images/secrets-manager/aws/04b-create-role-trust-policy.png */}
|
||||
{/* SCREENSHOT: Inline sts:AssumeRole policy attached to the IAM user → /images/secrets-manager/aws/04c-attach-assumerole-on-user.png */}
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## الخطوة 4 — الحصول على بيانات الاعتماد
|
||||
|
||||
<Tabs>
|
||||
<Tab title="مفاتيح الوصول الثابتة">
|
||||
1. في وحدة تحكم IAM، افتح المستخدم من الخطوة 1.
|
||||
2. انقر على علامة التبويب **Security credentials**.
|
||||
3. تحت **Access keys**، انقر على **Create access key**.
|
||||
4. اختر **Application running outside AWS** (أو **Other**) كحالة استخدام. انقر على **Next**.
|
||||
5. (اختياري) أضف وسماً وصفياً. انقر على **Create access key**.
|
||||
6. انقر على **Show** للكشف عن مفتاح الوصول السري، ثم انسخ كلاً من **Access key ID** و **Secret access key**، أو انقر على **Download .csv file**.
|
||||
|
||||
<Warning>
|
||||
يظهر مفتاح الوصول السري مرة واحدة فقط. إذا أغلقت هذه الصفحة دون نسخه، فستحتاج إلى حذف المفتاح وإنشاء واحد جديد.
|
||||
</Warning>
|
||||
|
||||
للتفاصيل الكاملة، راجع وثائق AWS: [Manage access keys for IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html).
|
||||
|
||||
{/* SCREENSHOT: Access key use-case selector ("Application running outside AWS") → /images/secrets-manager/aws/05a-create-access-key-use-case.png */}
|
||||
{/* SCREENSHOT: "Retrieve access keys" page with Show/Download buttons → /images/secrets-manager/aws/06a-retrieve-access-keys.png */}
|
||||
</Tab>
|
||||
|
||||
<Tab title="AssumeRole">
|
||||
حتى مع AssumeRole، لا تزال CrewAI Platform تحتاج إلى مفتاح وصول لمستخدم IAM — فهي تستخدم تلك المفاتيح كهوية المتصل لتنفيذ استدعاء `sts:AssumeRole`.
|
||||
|
||||
1. أنشئ مفتاح وصول للمستخدم تماماً كما هو موضح في علامة التبويب **مفاتيح الوصول الثابتة** أعلاه.
|
||||
2. افتح الدور الذي أنشأته في الخطوة 3 وانسخ:
|
||||
- **Role ARN** (من ملخص الدور).
|
||||
- **External ID** الذي كوّنته (إن وُجد) — قد عيّنته بنفسك في الخطوة 3، فتأكد من أنه بحوزتك.
|
||||
|
||||
{/* SCREENSHOT: IAM role detail page showing Role ARN → /images/secrets-manager/aws/05b-role-arn-detail.png */}
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## الخطوة 5 — إضافة بيانات الاعتماد في CrewAI Platform
|
||||
|
||||
في CrewAI Platform، انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
|
||||
|
||||
{/* SCREENSHOT: Sidebar/nav highlighting Settings → Secret Provider Credentials → /images/secrets-manager/usage/01-amp-settings-nav.png */}
|
||||
{/* SCREENSHOT: Empty state of Secret Provider Credentials page with "Add Credential" button → /images/secrets-manager/usage/02-amp-credentials-empty-state.png */}
|
||||
|
||||
<Tabs>
|
||||
<Tab title="مفاتيح الوصول الثابتة">
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `aws-prod`.
|
||||
- **Provider:** `AWS Secrets Manager`.
|
||||
- **Region:** منطقة AWS التي تعيش فيها أسرارك، مثلاً `us-east-1`. يجب أن تطابق منطقة الأسرار التي تريد قراءتها.
|
||||
- **Access Key ID:** القيمة من الخطوة 4.
|
||||
- **Secret Access Key:** القيمة من الخطوة 4.
|
||||
- (اختياري) حدّد **Set as default credential for this provider**. تُستخدم بيانات الاعتماد الافتراضية بواسطة متغيرات البيئة التي تشير إلى أسرار AWS بدون تحديد بيانات اعتماد صراحةً.
|
||||
|
||||
اترك **Role ARN** و **External ID** فارغين.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + static access keys filled in → /images/secrets-manager/usage/03a-amp-add-credential-form-aws-static.png */}
|
||||
</Tab>
|
||||
|
||||
<Tab title="AssumeRole">
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `aws-prod-assumerole`.
|
||||
- **Provider:** `AWS Secrets Manager`.
|
||||
- **Region:** منطقة AWS التي تعيش فيها أسرارك.
|
||||
- **Access Key ID:** مفتاح وصول مستخدم IAM من الخطوة 4 (يُستخدم لاستدعاء STS).
|
||||
- **Secret Access Key:** مفتاح الوصول السري لمستخدم IAM من الخطوة 4.
|
||||
- **Role ARN:** Role ARN الذي نسخته في الخطوة 4.
|
||||
- **External ID:** External ID الذي عيّنته على سياسة الثقة الخاصة بالدور (احذفه إن لم يوجد).
|
||||
- (اختياري) حدّد **Set as default credential for this provider**.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + AssumeRole fields filled in → /images/secrets-manager/usage/03b-amp-add-credential-form-aws-assumerole.png */}
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Note>
|
||||
**كيف تتصرف الطريقتان وقت التشغيل:**
|
||||
|
||||
- مع **مفاتيح الوصول الثابتة** فقط، تستدعي CrewAI Platform AWS Secrets Manager مباشرةً باستخدام المفاتيح التي قدّمتها.
|
||||
- عند تعيين **Role ARN**، تستدعي CrewAI Platform أولاً `sts:AssumeRole` بمفاتيح الوصول المقدَّمة (و External ID إن كان مكوَّناً)، ثم تستخدم بيانات الاعتماد قصيرة الأمد التي تُعيدها STS لقراءة أسرارك.
|
||||
</Note>
|
||||
|
||||
{/* SCREENSHOT: Credentials list showing the new AWS row, with "(default)" badge if applicable → /images/secrets-manager/usage/04-amp-credential-created.png */}
|
||||
|
||||
## الخطوة 6 — إنشاء سر واحد على الأقل في AWS
|
||||
|
||||
إذا لم يكن لديك بالفعل أسرار في AWS Secrets Manager، أنشئ واحداً الآن لتتمكن من التحقق من الاتصال في الخطوة 7.
|
||||
|
||||
في [وحدة تحكم AWS Secrets Manager](https://console.aws.amazon.com/secretsmanager/)، انقر على **Store a new secret**.
|
||||
|
||||
- **Secret type:** اختر **Other type of secret**.
|
||||
- **Key/value pairs** — إما:
|
||||
- إدخال زوج أو أكثر من مفتاح/قيمة (موصى به للأسرار المهيكلة)، أو
|
||||
- استخدام علامة التبويب **Plaintext** لقيمة نصية واحدة.
|
||||
- **Encryption key:** استخدم `aws/secretsmanager` (المفتاح الذي يديره AWS) ما لم تكن لديك متطلبات محددة لمفتاح KMS.
|
||||
|
||||
انقر على **Next**، ثم أدخل:
|
||||
|
||||
- **Secret name:** اسم فريد، مثلاً `crewai/openai-api-key`.
|
||||
- **Description (optional):** ملاحظة قصيرة عن غرض السر.
|
||||
|
||||
انقر على **Next** عبر خطوات التدوير والمراجعة، ثم انقر على **Store**.
|
||||
|
||||
<Note>
|
||||
**صيغة الإشارة بمفتاح JSON.** إذا خزّنت سراً بأزواج مفتاح/قيمة متعددة (كائن JSON)، يمكن لـ CrewAI Platform استخراج حقل محدد باستخدام صيغة `secret-name#json_key` في إشارات متغيرات البيئة. على سبيل المثال، يمكن الإشارة إلى سر باسم `database-credentials` بـ `{"username": "...", "password": "..."}` باسم `database-credentials#password`. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) للتفاصيل.
|
||||
</Note>
|
||||
|
||||
للتفاصيل الكاملة، راجع وثائق AWS: [Create an AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).
|
||||
|
||||
{/* SCREENSHOT: AWS Secrets Manager "Choose secret type" page → /images/secrets-manager/aws/07-create-secret-store-type.png */}
|
||||
{/* SCREENSHOT: AWS Secrets Manager "Configure secret" page with name and description → /images/secrets-manager/aws/08-create-secret-name.png */}
|
||||
|
||||
## الخطوة 7 — اختبار الاتصال
|
||||
|
||||
عُد إلى CrewAI Platform، في صفحة **Secret Provider Credentials**، اعثر على بيانات الاعتماد التي أنشأتها للتو وانقر على **Test Connection**.
|
||||
|
||||
تؤكد رسالة نجاح أن CrewAI Platform يمكنها المصادقة مع AWS وقراءة الأسرار من حسابك.
|
||||
|
||||
{/* SCREENSHOT: Success toast after clicking "Test Connection" → /images/secrets-manager/usage/05-amp-test-connection-success.png */}
|
||||
|
||||
إذا فشل الاختبار، تحقق من الأسباب الأكثر شيوعاً:
|
||||
|
||||
| العَرَض | السبب المحتمل |
|
||||
|---|---|
|
||||
| `AccessDenied` على `secretsmanager:ListSecrets` | السياسة غير مُرفقة، أو المستخدم خاطئ. تحقق من الخطوة 3 من جديد. |
|
||||
| `AccessDenied` على `kms:Decrypt` | بيان `KMSDecrypt` مفقود، أو أن أسرارك تستخدم مفتاح KMS يديره العميل لا يغطّيه `Resource: "*"`. |
|
||||
| `InvalidClientTokenId` / `SignatureDoesNotMatch` | معرّف مفتاح الوصول أو مفتاح الوصول السري خاطئ. تحقق من الخطوتين 4 و 5 من جديد. |
|
||||
| `RegionDisabledException` / لم يُعثر على أسرار | لا تطابق **Region** الخاصة ببيانات الاعتماد المكان الفعلي لأسرارك. |
|
||||
| `AccessDenied` على `sts:AssumeRole` (AssumeRole فقط) | سياسة `sts:AssumeRole` المضمنة مفقودة على مستخدم IAM، أو لا تسمح سياسة الثقة الخاصة بالدور بهذا الكيان، أو لا يتطابق External ID. |
|
||||
| ينجح الاختبار فوراً بعد إنشاء مستخدم IAM، لكنه يفشل في المرة التالية | تستغرق بيانات اعتماد IAM أحياناً دقيقة أو دقيقتين للانتشار عالمياً. أعد المحاولة. |
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
الآن وقد اتصلت AWS، توجّه إلى [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage) من أجل:
|
||||
|
||||
- منح أعضاء المؤسسة الأذونات الصحيحة لاستخدام (أو إدارة) مدير الأسرار.
|
||||
- الإشارة إلى أسرار AWS الخاصة بك من متغيرات بيئة CrewAI Platform.
|
||||
|
||||
إذا كنت تريد أسراراً **مراعية للتدوير** تنتشر دون إعادة نشر، انتقل إلى [AWS Workload Identity (اتحاد OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity) — نفس مخزن الأسرار، بدون بيانات اعتماد ثابتة، وتُجلب الأسرار في كل إطلاق.
|
||||
@@ -0,0 +1,275 @@
|
||||
---
|
||||
title: Azure Workload Identity Federation
|
||||
description: تكوين Azure Key Vault عبر Microsoft Entra Workload Identity Federation للوصول إلى الأسرار بشكل مراعٍ للتدوير وبدون بيانات اعتماد
|
||||
sidebarTitle: بـ Workload Identity
|
||||
icon: "id-badge"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يُكوِّن هذا الدليل Azure Key Vault كمزود أسرار باستخدام **Microsoft Entra Workload Identity Federation**: تُصدر CrewAI Platform رموز OIDC قصيرة الأمد، وتُبادلها للحصول على رمز وصول Entra عبر منصة هوية Microsoft، وتقرأ أسرارك — دون تخزين أي سر عميل في أي مكان.
|
||||
|
||||
<Note>
|
||||
**لماذا هذا المسار:** تُحَلّ الأسرار وقت تنفيذ الأتمتة، لذا **تنتشر القيم المُدوَّرة إلى الإطلاق التالي بدون إعادة نشر**. إن كنت تحتاج فقط بيانات اعتماد ثابتة، راجع الدليل الأبسط [Azure Key Vault — سر العميل](/ar/enterprise/features/secrets-manager/azure).
|
||||
</Note>
|
||||
|
||||
### كيف يعمل وقت التشغيل
|
||||
|
||||
1. يطلب عامل النشر JWT OIDC طازج من CrewAI Platform.
|
||||
2. يُقدّم العامل الـ JWT إلى Microsoft Entra على `https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token` كـ `client_assertion` (`urn:ietf:params:oauth:client-assertion-type:jwt-bearer`)، مع الإشارة إلى App Registration الذي يطابق **Federated Identity Credential** الخاص به مُصدر الـ JWT وموضوعه.
|
||||
3. تتحقق Entra من الـ JWT مقابل وثيقة اكتشاف OIDC و JWKS لمنصتك، ثم تُعيد رمز وصول قصير الأمد محصور بـ `https://vault.azure.net/.default`.
|
||||
4. يستدعي العامل Azure Key Vault لقراءة السر.
|
||||
5. تُحقن القيمة المجلوبة كقيمة لمتغير البيئة لإطلاق الأتمتة ذاك.
|
||||
|
||||
تُخزَّن رموز موضوع OIDC مؤقتاً لنحو ساعة لتفادي إعادة الإصدار في كل إطلاق. تُجلب قيم الأسرار طازجة في كل إطلاق بغض النظر عن حالة ذاكرة OIDC المؤقتة، وهذا ما يجعل هذا المسار مراعياً للتدوير.
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<Note>
|
||||
قبل البدء، تأكد من امتلاكك:
|
||||
|
||||
- يجب أن تتضمن صورة حاوية الأتمتة إصدار CrewAI runtime رقم `1.14.5` أو أحدث.
|
||||
- اشتراك Azure ومستأجر Microsoft Entra يمكنك إدارته.
|
||||
- إذن في المستأجر لإنشاء App Registrations وإضافة Federated Identity Credentials.
|
||||
- Key Vault يستخدم **Azure RBAC** للترخيص (وليس النموذج القديم لسياسة الوصول).
|
||||
- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذني `workload_identity_configs: manage` و `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
|
||||
- **يجب أن يكون تنصيب CrewAI Platform قابلاً للوصول من Microsoft Entra عبر HTTPS** ليتمكّن Entra من جلب وثيقة اكتشاف OIDC و JWKS أثناء التحقق من الرمز. تأكد مع مسؤول المنصة من أن المضيف متاح عبر الإنترنت.
|
||||
</Note>
|
||||
|
||||
## الخطوة 1 — العثور على عنوان مُصدر OIDC لـ CrewAI Platform
|
||||
|
||||
ينشر تنصيب CrewAI Platform وثيقة اكتشاف OpenID Connect على `https://<your-platform-host>/.well-known/openid-configuration`. الحقل `issuer` هناك هو الرابط الذي ستُسجِّله Microsoft Entra كمُصدر اتحاد موثوق.
|
||||
|
||||
افتح الرابط في المتصفح:
|
||||
|
||||
```
|
||||
https://<your-platform-host>/.well-known/openid-configuration
|
||||
```
|
||||
|
||||
ينبغي أن ترى JSON يحتوي على:
|
||||
|
||||
```json
|
||||
{
|
||||
"issuer": "https://<your-platform-host>",
|
||||
"jwks_uri": "https://<your-platform-host>/oauth2/jwks",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
سجّل القيمة الدقيقة لـ `issuer` — ستستخدمها في الخطوة 3.
|
||||
|
||||
<Tip>
|
||||
إذا أعاد الرابط 404 أو 503، اتصل بمسؤول المنصة. يتطلب مُصدر OIDC تكوين مفتاح توقيع خاص وقت التنصيب. راجع دليل تنصيب المنصة لتكوين `OIDC_PRIVATE_KEY` و `OIDC_ISSUER`.
|
||||
</Tip>
|
||||
|
||||
## الخطوة 2 — إنشاء App Registration
|
||||
|
||||
في [بوابة Microsoft Entra](https://entra.microsoft.com)، انتقل إلى **App registrations** وانقر على **New registration**.
|
||||
|
||||
- **Name:** `crewai-secrets-reader`
|
||||
- **Supported account types:** `Accounts in this organizational directory only (Single tenant)`.
|
||||
- اترك **Redirect URI** فارغاً.
|
||||
|
||||
انقر على **Register**. سجّل **Application (client) ID** و **Directory (tenant) ID** في لوحة نظرة عامة التطبيق — ستستخدمها في الخطوة 6.
|
||||
|
||||
{/* SCREENSHOT: Azure portal "Register an application" form with name "crewai-secrets-reader" → /images/secrets-manager/azure-wi/01-register-app.png */}
|
||||
|
||||
## الخطوة 3 — إضافة Federated Identity Credential
|
||||
|
||||
يُخبر Federated Identity Credential Microsoft Entra: *ثِق برموز JWT المُصدَرة من هذا المُصدر، بهذا الموضوع، عندما تُقدَّم كتأكيد عميل لهذا App Registration.*
|
||||
|
||||
في App Registration، انتقل إلى **Certificates & secrets** ← **Federated credentials** ← **Add credential**.
|
||||
|
||||
- **Federated credential scenario:** `Other issuer`.
|
||||
- **Issuer:** رابط مُصدر CrewAI Platform من الخطوة 1، مثلاً `https://<your-platform-host>`.
|
||||
- **Subject identifier:** `organization:<YOUR_CREWAI_ORG_UUID>` — قيمة ادّعاء `sub` في JWT بالضبط. اعثر على UUID مؤسستك في إعدادات مؤسسة CrewAI Platform. يقصر هذا الاتحاد على مؤسسة CrewAI محددة — تُقبل فقط الرموز المُصدَرة لأتمتات تلك المؤسسة.
|
||||
- **Name:** أي تسمية وصفية، مثلاً `crewai-org-prod`.
|
||||
- **Audience:** `api://AzureADTokenExchange`. هذا هو الجمهور الثابت الذي تتطلبه Microsoft Entra للبيانات الموحَّدة، وهو ما تُعيّنه CrewAI Platform في ادّعاء `aud` في JWT.
|
||||
|
||||
انقر على **Add**.
|
||||
|
||||
<Tip>
|
||||
**العزل لكل مؤسسة.** يقيّد معرّف الموضوع (`organization:<UUID>`) Federated Identity Credential لرموز مؤسسة CrewAI محددة. إذا كان من المفترض أن تتشارك مؤسسات CrewAI متعددة App Registration واحداً، أضف Federated Identity Credential لكل مؤسسة (كل منها بـ UUID المؤسسة).
|
||||
</Tip>
|
||||
|
||||
للتفاصيل الكاملة، راجع وثائق Microsoft: [Configure a federated identity credential on an app](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-create-trust).
|
||||
|
||||
{/* SCREENSHOT: "Add credential" panel with scenario = "Other issuer", issuer URL, subject "organization:<uuid>", audience "api://AzureADTokenExchange" → /images/secrets-manager/azure-wi/02-add-federated-credential.png */}
|
||||
|
||||
## الخطوة 4 — منح App Registration وصولاً إلى Key Vault
|
||||
|
||||
امنح App Registration دور **Key Vault Secrets User** على الخزنة المستهدفة — نفس الدور الذي تستخدمه لمسار بيانات الاعتماد الثابتة. استخدم إما على مستوى الخزنة (أبسط) أو لكل سر (أقل الامتيازات).
|
||||
|
||||
<Tabs>
|
||||
<Tab title="على مستوى الخزنة (أبسط)">
|
||||
```bash
|
||||
az role assignment create \
|
||||
--assignee <APPLICATION_CLIENT_ID> \
|
||||
--role "Key Vault Secrets User" \
|
||||
--scope $(az keyvault show --name <VAULT_NAME> --query id -o tsv)
|
||||
```
|
||||
|
||||
يمنح النطاق على مستوى الخزنة إذن `secrets/list` الذي يعتمد عليه **الاقتراح التلقائي لاسم السر** في نموذج متغير البيئة لـ CrewAI Platform. اختر هذه التبويبة إذا أردت أن يعمل الاقتراح التلقائي.
|
||||
|
||||
{/* SCREENSHOT: Key Vault "Add role assignment" panel with "Key Vault Secrets User" and the App Registration selected → /images/secrets-manager/azure-wi/03-grant-vault-rbac.png */}
|
||||
</Tab>
|
||||
|
||||
<Tab title="لكل سر (أقل الامتيازات)">
|
||||
```bash
|
||||
az role assignment create \
|
||||
--assignee <APPLICATION_CLIENT_ID> \
|
||||
--role "Key Vault Secrets User" \
|
||||
--scope $(az keyvault secret show --vault-name <VAULT_NAME> --name <SECRET_NAME> --query id -o tsv)
|
||||
```
|
||||
|
||||
تُعطّل الارتباطات لكل سر **الاقتراح التلقائي لاسم السر** في نموذج متغير البيئة لـ CrewAI Platform (يتطلب الاقتراح التلقائي `secrets/list`، وهو محصور بنطاق الخزنة فقط). اكتب اسم السر الكامل بدلاً من ذلك.
|
||||
|
||||
{/* SCREENSHOT: Per-secret IAM panel with the App Registration assigned **Key Vault Secrets User** at the secret resource scope → /images/secrets-manager/azure-wi/04-per-secret-rbac.png */}
|
||||
</Tab>
|
||||
|
||||
<Tab title="البوابة (UI)">
|
||||
لتعيين **على مستوى الخزنة**:
|
||||
|
||||
1. افتح Key Vault الخاص بك في بوابة Azure.
|
||||
2. انقر على **Access control (IAM)** ← **Add** ← **Add role assignment**.
|
||||
3. اختر الدور **Key Vault Secrets User** ← **Next**.
|
||||
4. انقر على **Select members**، ابحث عن App Registration `crewai-secrets-reader`، انقر على **Select**.
|
||||
5. انقر على **Review + assign**.
|
||||
|
||||
لتعيين **لكل سر**، استخدم نفس التدفق لكن ابدأ من **Objects** ← **Secrets** ← اختر السر ← لوحة **Access control (IAM)** الخاصة به. تُعطّل الارتباطات لكل سر الاقتراح التلقائي (راجع تبويبة لكل سر أعلاه).
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## الخطوة 5 — إنشاء سر واحد على الأقل في Key Vault
|
||||
|
||||
إذا لم يكن لديك سر للاختبار، أنشئ واحداً عبر Azure CLI:
|
||||
|
||||
```bash
|
||||
az keyvault secret set \
|
||||
--vault-name <VAULT_NAME> \
|
||||
--name openai-api-key \
|
||||
--value "sk-your-actual-key"
|
||||
```
|
||||
|
||||
أو عبر بوابة Azure:
|
||||
|
||||
1. افتح Key Vault الخاص بك وانتقل إلى **Objects** ← **Secrets**.
|
||||
2. انقر على **Generate/Import**.
|
||||
3. **Upload options:** `Manual`. **Name:** اسم السر (مثلاً `openai-api-key`). **Secret value:** الصق القيمة.
|
||||
4. انقر على **Create**.
|
||||
|
||||
<Note>
|
||||
**اصطلاحات اسم السر.** لا يمكن أن تحتوي أسماء أسرار Azure Key Vault على شرطات سفلية. تُحوّل CrewAI Platform تلقائياً الشرطات السفلية إلى شرطات عند استدعاء Azure (مثلاً، `db_password` تُرسل كـ `db-password`)، لذا يمكنك الاحتفاظ بأسماء متغيرات بيئة بنمط الشرطة السفلية — لكن السر الأساسي في Key Vault يجب أن يستخدم الشرطات.
|
||||
</Note>
|
||||
|
||||
## الخطوة 6 — إضافة تكوين Workload Identity في CrewAI Platform
|
||||
|
||||
في CrewAI Platform، انتقل إلى **Settings** ← **Workload Identity** وانقر على **Add Workload Identity Config**.
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `azure-prod`.
|
||||
- **Cloud Provider:** `Azure`.
|
||||
- **Tenant ID:** **Directory (tenant) ID** الخاص بـ Microsoft Entra من الخطوة 2.
|
||||
- **Client ID:** **Application (client) ID** الخاص بـ App Registration من الخطوة 2.
|
||||
- (اختياري) حدّد **Set as default for Azure** إذا كنت ترغب في أن يكون هذا هو تكوين WI الافتراضي المُحدَّد عند إنشاء بيانات اعتماد سر مدعومة بـ Azure.
|
||||
|
||||
**Audience** ثابت على `api://AzureADTokenExchange` — تتطلب Microsoft Entra هذا الجمهور بالضبط للبيانات الموحَّدة، لذا لا يظهر حقل Audience في النموذج.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Workload Identity Config" form with Azure, tenant ID, client ID populated → /images/secrets-manager/azure-wi/05-amp-add-wi-config-azure.png */}
|
||||
{/* SCREENSHOT: Workload Identity list showing AWS, GCP, and Azure rows → /images/secrets-manager/azure-wi/06-amp-wi-list-with-azure.png */}
|
||||
|
||||
## الخطوة 7 — إضافة بيانات اعتماد مزود أسرار مرتبطة بتكوين WI
|
||||
|
||||
انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `azure-prod-wi`.
|
||||
- **Provider:** `Azure Key Vault`.
|
||||
- **Authentication Method:** `Workload Identity`.
|
||||
- **Workload Identity Configuration:** اختر التكوين الذي أنشأته في الخطوة 6.
|
||||
- **Key Vault URL:** اسم مضيف DNS للخزنة، مثلاً `https://my-vault.vault.azure.net`.
|
||||
- (اختياري) حدّد **Set as default credential for this provider**.
|
||||
|
||||
سيطلب النموذج فقط **Key Vault URL** ضمن Workload Identity — حقول بيانات الاعتماد الثابتة (Tenant ID و Client ID و Client Secret) مخفية عمداً لأنها لا تنطبق على هذا المسار؛ يأتي المستأجر والعميل من تكوين WI المرتبط.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
<Tip>
|
||||
**App Registration واحد، خزائن متعددة.** يعيش Key Vault URL على بيانات الاعتماد، وليس على تكوين WI. لذا يمكن لـ App Registration واحد (وتكوين WI واحد) خدمة عدة Key Vaults — فقط أنشئ بيانات اعتماد مزود أسرار واحدة لكل خزنة، جميعها مرتبطة بنفس تكوين WI.
|
||||
</Tip>
|
||||
|
||||
{/* SCREENSHOT: "Add Secret Provider Credential" form with Azure + Workload Identity + WI config dropdown + vault URL → /images/secrets-manager/azure-wi/07-amp-add-credential-azure-wi.png */}
|
||||
|
||||
## الخطوة 8 — اختبار الاتصال
|
||||
|
||||
بعد حفظ بيانات الاعتماد، انقر على **Test Connection**. لبيانات اعتماد workload-identity، يتحقق هذا من مصافحة OIDC: تُصدر CrewAI Platform JWT، وتُقدّمه إلى Microsoft Entra كـ `client_assertion` موحَّد، وتؤكد أن Entra تُعيد رمز وصول محصور بالخزنة. نتيجة خضراء تعني أن ارتباط الاتحاد سليم.
|
||||
|
||||
نجاح Test Connection يُثبت أن مُصدر Federated Identity Credential وموضوعه وجمهوره كلها متطابقة، وأن App Registration قابل للوصول. لا يُثبت ذلك أن RBAC لكل سر في Key Vault صحيح — يُمارَس `getSecret` على سر محدد بشكل منفصل عندما يُحَلّ متغير بيئة عند الإطلاق. راجع [استكشاف الأخطاء](#troubleshooting) لأنماط فشل المصافحة.
|
||||
|
||||
## الخطوة 9 — الإشارة إلى السر في متغير بيئة
|
||||
|
||||
أَشِر إلى السر على أتمتة، تماماً كما تفعل مع أي متغير بيئة مدعوم بمدير أسرار. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) لحقول النموذج والسلوك.
|
||||
|
||||
## الخطوة 10 — التحقق من التدوير
|
||||
|
||||
بعد تشغيل عملية النشر، دوّر السر في Key Vault:
|
||||
|
||||
```bash
|
||||
az keyvault secret set \
|
||||
--vault-name <VAULT_NAME> \
|
||||
--name openai-api-key \
|
||||
--value "rotated value"
|
||||
```
|
||||
|
||||
أطلق إطلاق أتمتة جديداً. ستكون بيئة الإطلاق ترى `"rotated value"` — بدون إعادة نشر ولا إعادة تشغيل عامل ولا انتظار TTL.
|
||||
|
||||
للتأكد في سجلات العامل، ابحث عن:
|
||||
|
||||
```
|
||||
Workload identity config '<id>' (azure): N secret(s) resolved
|
||||
```
|
||||
|
||||
يظهر هذا السطر لكل إطلاق ويُشير إلى استدعاء `getSecret` طازج مقابل Azure Key Vault.
|
||||
|
||||
للتحقق من البداية إلى النهاية باستخدام البصمة، راجع [التحقق من التدوير من البداية إلى النهاية](/ar/enterprise/features/secrets-manager/verify-rotation).
|
||||
|
||||
## استكشاف الأخطاء
|
||||
|
||||
| العَرَض | السبب المحتمل |
|
||||
|---|---|
|
||||
| يفشل Test Connection بخطأ مصافحة | رفضت Microsoft Entra `client_assertion` الموحَّد. تحقق من أن **Issuer** في Federated Identity Credential يطابق قيمة `issuer` للمنصة بالضبط، وأن **Subject** هو `organization:<your-org-uuid>` (يطابق ادّعاء `sub` في JWT)، وأن **Audience** هو `api://AzureADTokenExchange`، وأن رابط اكتشاف OIDC للمنصة قابل للوصول من Entra عبر الإنترنت العام. |
|
||||
| `AADSTS70021: No matching federated identity record found for presented assertion` | لا يتطابق **Issuer** + **Subject** + **Audience** في Federated Identity Credential مع الـ JWT بالضبط. تحقق من الخطوة 3 من جديد: يجب أن يكون الموضوع `organization:<your-org-uuid>` (يطابق ادّعاء `sub` في JWT)، ويجب أن يكون الجمهور `api://AzureADTokenExchange`. |
|
||||
| `AADSTS700024: Client assertion is not within its valid time range` | ساعة مضيف CrewAI Platform منحرفة بشكل كبير عن الوقت الحقيقي. تحقق من NTP على المضيف. |
|
||||
| `AADSTS50013: Assertion failed signature validation` | لم تستطع Microsoft Entra التحقق من توقيع الـ JWT. تأكد من أن `https://<your-platform-host>/oauth2/jwks` قابل للوصول من الإنترنت العام ويُقدّم JWKS صالحاً. |
|
||||
| يُظهر الاقتراح التلقائي لاسم السر `Forbidden — does not have permission to perform action 'Microsoft.KeyVault/vaults/secrets/.../list'` | دور **Key Vault Secrets User** الخاص بـ App Registration محصور بسر واحد. امنح الدور على نطاق الخزنة ليُسمح بإجراء `list` في مستوى البيانات. راجع الخطوة 4. |
|
||||
| يفشل الإطلاق في حلّ سر رغم نجاح Test Connection | ارتباط WI سليم، لكن RBAC لكل سر في Key Vault مفقود على السر الفاشل. راجع **Key Vault Secrets User** على ذلك السر تحديداً (أو وسّع تعيين الدور إلى نطاق الخزنة). |
|
||||
| `Forbidden — request was not authorized` (الخزنة تستخدم سياسات الوصول القديمة) | لم يتم تحويل الخزنة إلى Azure RBAC. ضمن **Access configuration** للخزنة، عيّن نموذج الإذن إلى **Azure role-based access control** وأعد منح الدور من الخطوة 4. |
|
||||
| `azure_vault_url is required for Azure secret resolution` (سجلات العامل) | تفتقد بيانات اعتماد مزود الأسرار إلى **Key Vault URL**. تحقق من الخطوة 7 من جديد. |
|
||||
| لا تُلتقط القيمة المُدوَّرة في الإطلاق التالي | تأكد من أن متغير البيئة على الأتمتة يشير إلى بيانات اعتماد مدعومة بـ Workload Identity (وليس بيانات اعتماد بمفاتيح ثابتة). يدمج المسار الثابت القيم في صورة النشر. |
|
||||
|
||||
### روابط مرجعية
|
||||
|
||||
- Microsoft: [Microsoft Entra Workload Identity Federation overview](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation)
|
||||
- Microsoft: [Configure a federated identity credential on an app](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-create-trust)
|
||||
- Microsoft: [Azure Key Vault RBAC guide](https://learn.microsoft.com/en-us/azure/key-vault/general/rbac-guide)
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
- [استخدام الأسرار في متغيرات البيئة وإدارة الأذونات](/ar/enterprise/features/secrets-manager/usage)
|
||||
- للتنوع متعدد السحاب، إعداد ما يعادله لـ AWS موجود في [AWS Workload Identity (اتحاد OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity) وما يعادله لـ GCP في [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity).
|
||||
|
||||
## مرجع لقطات الشاشة
|
||||
|
||||
تُربط العناصر النائبة أعلاه بـ:
|
||||
|
||||
- `01-register-app.png` — نموذج "Register an application" في بوابة Azure مع `crewai-secrets-reader`.
|
||||
- `02-add-federated-credential.png` — App Registration ← Certificates & secrets ← Federated credentials ← Add credential، مع **Other issuer**، رابط مُصدر المنصة، الموضوع `organization:<uuid>`، الجمهور `api://AzureADTokenExchange`.
|
||||
- `03-grant-vault-rbac.png` — Key Vault ← Access control (IAM) ← Add role assignment، مع **Key Vault Secrets User** و App Registration المختار.
|
||||
- `04-per-secret-rbac.png` — نفس النموذج لكن في نطاق IAM سر واحد (مسار أقل الامتيازات البديل).
|
||||
- `05-amp-add-wi-config-azure.png` — نموذج "Add Workload Identity Config" في CrewAI Platform مع Cloud Provider = Azure و Tenant ID و Client ID مأهولين.
|
||||
- `06-amp-wi-list-with-azure.png` — صفحة قائمة Workload Identity بعد الإنشاء، تُظهر صفوفاً لـ AWS و GCP وتكوين Azure الجديد.
|
||||
- `07-amp-add-credential-azure-wi.png` — نموذج "Add Secret Provider Credential" مع Provider = Azure Key Vault، Auth = Workload Identity، تكوين WI المختار، و Key Vault URL مأهول.
|
||||
196
docs/edge/ar/enterprise/features/secrets-manager/azure.mdx
Normal file
196
docs/edge/ar/enterprise/features/secrets-manager/azure.mdx
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
title: Azure Key Vault
|
||||
description: تكوين Azure Key Vault كمزود أسرار لـ CrewAI Platform من البداية إلى النهاية
|
||||
sidebarTitle: ببيانات اعتماد ثابتة
|
||||
icon: "key"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يأخذك هذا الدليل عبر تكوين Azure Key Vault كمزود أسرار لمؤسستك على CrewAI Platform، باستخدام **App Registration في Microsoft Entra مع سر عميل**. بنهاية الدليل، ستتمكن CrewAI Platform من قراءة الأسرار المخزّنة في Azure Key Vault الخاص بك وحقنها كقيم متغيرات بيئة وقت التشغيل.
|
||||
|
||||
<Note>
|
||||
يغطي هذا الدليل مسار **بيانات الاعتماد الثابتة** — تُحَلّ الأسرار وقت النشر وتُدمج في صورة النشر. تتطلب القيم المُدوَّرة إعادة نشر. إذا أردت أسراراً مراعية للتدوير تُحدَّث في كل إطلاق أتمتة، راجع [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity).
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
يغطي هذا الدليل التكوين من جانب Azure وإعداد بيانات الاعتماد في CrewAI Platform. للإشارة بعدها إلى سر من متغير بيئة، راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage).
|
||||
</Note>
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<Note>
|
||||
قبل البدء، تأكد من امتلاكك:
|
||||
|
||||
- اشتراك Azure لديه إذن إنشاء App Registrations في Microsoft Entra ومنح تعيينات أدوار على موارد Key Vault.
|
||||
- Key Vault يستخدم **Azure RBAC** للترخيص (وليس النموذج القديم لسياسة الوصول). إذا كان الخزنة لا تزال تستخدم سياسات الوصول، فحوّلها إلى RBAC ضمن لوحة **Access configuration** للخزنة.
|
||||
- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذن `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
|
||||
</Note>
|
||||
|
||||
## الخطوة 1 — إنشاء App Registration
|
||||
|
||||
App Registration هي الهوية من جانب Microsoft Entra التي ستُصادق بها CrewAI Platform.
|
||||
|
||||
في [بوابة Microsoft Entra](https://entra.microsoft.com)، انتقل إلى **App registrations** وانقر على **New registration**.
|
||||
|
||||
- **Name:** `crewai-secrets-reader`
|
||||
- **Supported account types:** `Accounts in this organizational directory only (Single tenant)`.
|
||||
- اترك **Redirect URI** فارغاً.
|
||||
|
||||
انقر على **Register**. سجّل **Application (client) ID** و **Directory (tenant) ID** في لوحة نظرة عامة التطبيق — ستلصق كليهما في CrewAI Platform في الخطوة 4.
|
||||
|
||||
للتفاصيل الكاملة، راجع وثائق Microsoft: [Register an application with the Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app).
|
||||
|
||||
{/* SCREENSHOT: Azure "Register an application" form with name "crewai-secrets-reader" → /images/secrets-manager/azure/01-register-app.png */}
|
||||
|
||||
## الخطوة 2 — إنشاء سر عميل
|
||||
|
||||
في App Registration، انتقل إلى **Certificates & secrets** ← **Client secrets** ← **New client secret**.
|
||||
|
||||
- **Description:** `crewai-platform`
|
||||
- **Expires:** اختر مدة تتطابق مع سياسة التدوير لديك (تحدّد Microsoft هذا بـ 24 شهراً كحد أقصى).
|
||||
|
||||
انقر على **Add**. انسخ عمود **Value** فوراً — لا يمكن إعادة عرضه أبداً بمجرد مغادرة الصفحة.
|
||||
|
||||
<Warning>
|
||||
أسرار العميل هي بيانات اعتماد ثابتة طويلة الأمد. خزّن القيمة بأمان (في مدير كلمات مرور أو مخزن أسرارك الخاص) ودوّرها قبل انتهاء الصلاحية. للقضاء على بيانات الاعتماد الثابتة تماماً، استخدم [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity) بدلاً من ذلك.
|
||||
</Warning>
|
||||
|
||||
{/* SCREENSHOT: "Client secrets" tab with the new secret row and the "Value" column highlighted → /images/secrets-manager/azure/02-create-client-secret.png */}
|
||||
|
||||
## الخطوة 3 — منح App Registration وصولاً إلى Key Vault
|
||||
|
||||
تحتاج CrewAI Platform إلى وصول قراءة للأسرار في Key Vault الخاص بك. استخدم أحد نطاقين — **على مستوى الخزنة** للبساطة، أو **لكل سر** لأقل الامتيازات.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="على مستوى الخزنة (أبسط)">
|
||||
في [وحدة تحكم Key Vault](https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.KeyVault%2Fvaults)، افتح الخزنة الهدف، ثم انتقل إلى **Access control (IAM)** ← **Add** ← **Add role assignment**.
|
||||
|
||||
- **Role:** **Key Vault Secrets User**
|
||||
- **Assign access to:** User, group, or service principal
|
||||
- **Members:** ابحث عن App Registration الخاص بك (`crewai-secrets-reader`) واختره.
|
||||
|
||||
انقر على **Review + assign**.
|
||||
|
||||
أو عبر Azure CLI:
|
||||
|
||||
```bash
|
||||
az role assignment create \
|
||||
--assignee <APPLICATION_CLIENT_ID> \
|
||||
--role "Key Vault Secrets User" \
|
||||
--scope $(az keyvault show --name <VAULT_NAME> --query id -o tsv)
|
||||
```
|
||||
|
||||
{/* SCREENSHOT: Key Vault "Add role assignment" panel with "Key Vault Secrets User" and the App Registration selected → /images/secrets-manager/azure/03-grant-vault-rbac.png */}
|
||||
</Tab>
|
||||
|
||||
<Tab title="لكل سر (أقل الامتيازات)">
|
||||
امنح الدور على مستوى سر فردي. كرّر لكل سر ينبغي أن تصل إليه CrewAI Platform:
|
||||
|
||||
```bash
|
||||
az role assignment create \
|
||||
--assignee <APPLICATION_CLIENT_ID> \
|
||||
--role "Key Vault Secrets User" \
|
||||
--scope $(az keyvault secret show --vault-name <VAULT_NAME> --name <SECRET_NAME> --query id -o tsv)
|
||||
```
|
||||
|
||||
{/* SCREENSHOT: Per-secret "Access control (IAM)" panel showing role assignment scoped to one secret → /images/secrets-manager/azure/04-per-secret-rbac.png */}
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Tip>
|
||||
يسمح دور **Key Vault Secrets User** بقراءة قيم الأسرار لكن ليس سرد جميع الأسرار في الخزنة. يستدعي الاقتراح التلقائي لاسم السر في CrewAI Platform أيضاً `list` — هذا الإذن مُضمَّن في الدور على نطاق الخزنة، لكن **ليس** على نطاق لكل سر. مع ارتباطات لكل سر، لن يقترح الإكمال التلقائي أسراراً؛ اكتب اسم السر الكامل بدلاً من ذلك.
|
||||
</Tip>
|
||||
|
||||
## الخطوة 4 — إضافة بيانات الاعتماد في CrewAI Platform
|
||||
|
||||
في CrewAI Platform، انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
|
||||
|
||||
{/* SCREENSHOT: Sidebar/nav highlighting Settings → Secret Provider Credentials → /images/secrets-manager/usage/01-amp-settings-nav.png */}
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `azure-prod`.
|
||||
- **Provider:** `Azure Key Vault`.
|
||||
- **Key Vault URL:** اسم مضيف DNS للخزنة، مثلاً `https://my-vault.vault.azure.net`.
|
||||
- **Tenant ID:** **Directory (tenant) ID** الخاص بـ Microsoft Entra من الخطوة 1.
|
||||
- **Client ID:** **Application (client) ID** الخاص بـ App Registration من الخطوة 1.
|
||||
- **Client Secret:** **Value** الذي نسخته في الخطوة 2.
|
||||
- (اختياري) حدّد **Set as default credential for this provider**. تُستخدم بيانات الاعتماد الافتراضية بواسطة متغيرات البيئة التي تشير إلى أسرار Azure بدون تحديد بيانات اعتماد صراحةً.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Secret Provider Credential" form with Azure fields filled in → /images/secrets-manager/azure/05-amp-add-credential-form-azure.png */}
|
||||
|
||||
## الخطوة 5 — إنشاء سر واحد على الأقل في Azure Key Vault
|
||||
|
||||
إذا لم يكن لديك بالفعل أسرار في Key Vault، أنشئ واحداً الآن لتتمكن من التحقق من الاتصال في الخطوة 6.
|
||||
|
||||
في وحدة تحكم Key Vault، انتقل إلى **Objects** ← **Secrets** ← **Generate/Import**.
|
||||
|
||||
- **Upload options:** `Manual`
|
||||
- **Name:** مثلاً `openai-api-key`
|
||||
- **Secret value:** الصق قيمة سرّك
|
||||
- اترك الباقي على القيم الافتراضية.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
أو عبر Azure CLI:
|
||||
|
||||
```bash
|
||||
az keyvault secret set \
|
||||
--vault-name <VAULT_NAME> \
|
||||
--name openai-api-key \
|
||||
--value "sk-your-actual-key"
|
||||
```
|
||||
|
||||
<Note>
|
||||
**اصطلاحات اسم السر.** لا يمكن أن تحتوي أسماء أسرار Azure Key Vault على شرطات سفلية. تُحوّل CrewAI Platform تلقائياً الشرطات السفلية إلى شرطات عند استدعاء Azure (مثلاً، `db_password` تُرسل كـ `db-password`)، لذا يمكنك الاحتفاظ بأسماء متغيرات بيئة بنمط الشرطة السفلية — لكن السر الأساسي في Key Vault يجب أن يستخدم الشرطات.
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
**صيغة الإشارة بمفتاح JSON.** يتعامل Key Vault مع قيم الأسرار كسلاسل معتمة. إذا حدث أن كانت قيمة سرّك كائن JSON، يمكن لـ CrewAI Platform استخراج حقل واحد باستخدام صيغة `secret-name#json_key` (مثلاً `database-credentials#password`). راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) للتفاصيل.
|
||||
</Note>
|
||||
|
||||
للتفاصيل الكاملة، راجع وثائق Microsoft: [Set and retrieve a secret](https://learn.microsoft.com/en-us/azure/key-vault/secrets/quick-create-cli).
|
||||
|
||||
{/* SCREENSHOT: Azure Key Vault "Create a secret" form with name and value → /images/secrets-manager/azure/06-create-secret.png */}
|
||||
|
||||
## الخطوة 6 — اختبار الاتصال
|
||||
|
||||
عُد إلى CrewAI Platform، في صفحة **Secret Provider Credentials**، اعثر على بيانات الاعتماد التي أنشأتها للتو وانقر على **Test Connection**.
|
||||
|
||||
تؤكد رسالة نجاح أن CrewAI Platform يمكنها المصادقة مع Microsoft Entra وقراءة الأسرار من خزنتك.
|
||||
|
||||
{/* SCREENSHOT: Success toast after clicking "Test Connection" on the Azure credential → /images/secrets-manager/azure/07-test-connection-success.png */}
|
||||
|
||||
إذا فشل الاختبار، تحقق من الأسباب الأكثر شيوعاً:
|
||||
|
||||
| العَرَض | السبب المحتمل |
|
||||
|---|---|
|
||||
| `AADSTS7000215: Invalid client secret provided` | **Client Secret** الملصوق خاطئ أو منتهي الصلاحية. أعد إنشاء السر (الخطوة 2) وحدّث بيانات الاعتماد. |
|
||||
| `AADSTS700016: Application not found in the directory` | لا يطابق **Tenant ID** أو **Client ID** الـ App Registration. تحقق من الخطوة 4 من جديد. |
|
||||
| `Forbidden — caller does not have permission` | يفتقد App Registration إلى دور **Key Vault Secrets User** على الخزنة (أو لكل سر). تحقق من الخطوة 3 من جديد. |
|
||||
| `Vault not found` / أخطاء DNS | **Key Vault URL** خاطئ، أو أن خزنتك لديها نقاط نهاية خاصة تمنع الوصول العام. تأكد من أن المضيف يستجيب لـ `curl https://<vault-name>.vault.azure.net/secrets?api-version=7.4`. |
|
||||
| `Forbidden — request was not authorized` (الخزنة تستخدم سياسات الوصول القديمة) | لم يتم تحويل الخزنة إلى Azure RBAC. ضمن **Access configuration** للخزنة، عيّن نموذج الإذن إلى **Azure role-based access control** وأعد منح الدور من الخطوة 3. |
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
الآن وقد اتصل Azure Key Vault، توجّه إلى [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage) من أجل:
|
||||
|
||||
- منح أعضاء المؤسسة الأذونات الصحيحة لاستخدام (أو إدارة) مدير الأسرار.
|
||||
- الإشارة إلى أسرار Azure الخاصة بك من متغيرات بيئة CrewAI Platform.
|
||||
|
||||
إذا كنت تريد أسراراً **مراعية للتدوير** تنتشر دون إعادة نشر، انتقل إلى [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity) — نفس الخزنة، بدون سر عميل للتدوير، وتُجلب الأسرار في كل إطلاق.
|
||||
|
||||
## مرجع لقطات الشاشة
|
||||
|
||||
تُربط العناصر النائبة أعلاه بـ:
|
||||
|
||||
- `01-register-app.png` — نموذج "Register an application" في بوابة Azure مع `crewai-secrets-reader`.
|
||||
- `02-create-client-secret.png` — App Registration ← Certificates & secrets ← Client secrets، مع صف السر المُنشأ حديثاً (عمود Value مُميَّز قبل تمويهه).
|
||||
- `03-grant-vault-rbac.png` — Key Vault ← Access control (IAM) ← Add role assignment، مع اختيار **Key Vault Secrets User** و App Registration كعضو.
|
||||
- `04-per-secret-rbac.png` — نفس اللوحة لكن بنطاق سر واحد (مسار أقل الامتيازات البديل).
|
||||
- `05-amp-add-credential-form-azure.png` — نموذج "Add Secret Provider Credential" في CrewAI Platform: Provider = Azure Key Vault، جميع الحقول الخمسة مأهولة.
|
||||
- `06-create-secret.png` — لوحة "Create a secret" في Azure Key Vault مع `openai-api-key` وقيمة ملصوقة.
|
||||
- `07-test-connection-success.png` — رسالة نجاح / حالة صف في CrewAI Platform بعد النقر على **Test Connection** على بيانات الاعتماد.
|
||||
@@ -0,0 +1,273 @@
|
||||
---
|
||||
title: GCP Workload Identity Federation
|
||||
description: تكوين Google Cloud Secret Manager عبر Workload Identity Federation للوصول إلى الأسرار بشكل مراعٍ للتدوير وبدون بيانات اعتماد
|
||||
sidebarTitle: بـ Workload Identity
|
||||
icon: "id-badge"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يُكوِّن هذا الدليل Google Cloud Secret Manager كمزود أسرار باستخدام **Workload Identity Federation**: تُصدر CrewAI Platform رموز OIDC قصيرة الأمد، وتُبادلها للحصول على بيانات اعتماد Google Cloud عبر خدمة Security Token Service، وتقرأ أسرارك — دون تخزين أي مفتاح حساب خدمة طويل الأمد في أي مكان.
|
||||
|
||||
<Note>
|
||||
**لماذا هذا المسار:** تُحَلّ الأسرار وقت تنفيذ الأتمتة، لذا **تنتشر القيم المُدوَّرة إلى الإطلاق التالي بدون إعادة نشر**. إن كنت تحتاج فقط بيانات اعتماد ثابتة، راجع الدليل الأبسط [GCP — مفتاح حساب الخدمة](/ar/enterprise/features/secrets-manager/gcp).
|
||||
</Note>
|
||||
|
||||
### كيف يعمل وقت التشغيل
|
||||
|
||||
1. يطلب عامل النشر JWT OIDC طازج من CrewAI Platform.
|
||||
2. يبادل العامل الـ JWT للحصول على بيانات اعتماد Google موحَّدة عبر [Security Token Service](https://cloud.google.com/iam/docs/reference/sts/rest)، مع الإشارة إلى Workload Identity Pool Provider الذي ستُعدّه أدناه.
|
||||
3. يستدعي العامل `secretmanager.googleapis.com:accessSecretVersion` لقراءة السر، باستخدام بيانات الاعتماد الموحَّدة مباشرةً (يمتلك الكيان الموحَّد `roles/secretmanager.secretAccessor` — راجع الخطوة 4).
|
||||
4. تُحقن القيمة المجلوبة كقيمة لمتغير البيئة لإطلاق الأتمتة ذاك.
|
||||
|
||||
تُخزَّن رموز موضوع OIDC مؤقتاً لنحو ساعة لتفادي إعادة الإصدار في كل إطلاق. تُجلب قيم الأسرار طازجة في كل إطلاق بغض النظر عن حالة ذاكرة OIDC المؤقتة، وهذا ما يجعل هذا المسار مراعياً للتدوير.
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<Note>
|
||||
قبل البدء، تأكد من امتلاكك:
|
||||
|
||||
- يجب أن تتضمن صورة حاوية الأتمتة إصدار CrewAI runtime رقم `1.14.5` أو أحدث.
|
||||
- مشروع Google Cloud مع تفعيل **Secret Manager API** و **Security Token Service API** و **IAM Credentials API**. فعّلها عبر الوحدة أو:
|
||||
|
||||
```bash
|
||||
gcloud services enable secretmanager.googleapis.com sts.googleapis.com iamcredentials.googleapis.com \
|
||||
--project=<YOUR_PROJECT_ID>
|
||||
```
|
||||
|
||||
- إذن في المشروع لإنشاء Workload Identity Pools وأدوار IAM وحسابات الخدمة و(إن لزم) الأسرار.
|
||||
- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذني `workload_identity_configs: manage` و `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
|
||||
- **يجب أن يكون تنصيب CrewAI Platform قابلاً للوصول من Google Cloud عبر HTTPS** ليتمكّن GCP STS من جلب وثيقة اكتشاف OIDC و JWKS أثناء التحقق من الرمز. تأكد مع مسؤول المنصة من أن المضيف متاح عبر الإنترنت.
|
||||
</Note>
|
||||
|
||||
## الخطوة 1 — العثور على عنوان مُصدر OIDC لـ CrewAI Platform
|
||||
|
||||
ينشر تنصيب CrewAI Platform وثيقة اكتشاف OpenID Connect على `https://<your-platform-host>/.well-known/openid-configuration`. الحقل `issuer` هناك هو الرابط الذي ستُسجِّله Google كمزود OIDC موثوق.
|
||||
|
||||
افتح الرابط في المتصفح:
|
||||
|
||||
```
|
||||
https://<your-platform-host>/.well-known/openid-configuration
|
||||
```
|
||||
|
||||
ينبغي أن ترى JSON يحتوي على:
|
||||
|
||||
```json
|
||||
{
|
||||
"issuer": "https://<your-platform-host>",
|
||||
"jwks_uri": "https://<your-platform-host>/oauth2/jwks",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
سجّل القيمة الدقيقة لـ `issuer` — ستستخدمها في الخطوة 3.
|
||||
|
||||
<Tip>
|
||||
إذا أعاد الرابط 404 أو 503، اتصل بمسؤول المنصة. يتطلب مُصدر OIDC تكوين مفتاح توقيع خاص وقت التنصيب. راجع دليل تنصيب المنصة لتكوين `OIDC_PRIVATE_KEY` و `OIDC_ISSUER`.
|
||||
</Tip>
|
||||
|
||||
## الخطوة 2 — إنشاء Workload Identity Pool
|
||||
|
||||
Workload Identity Pool هو حاوية من جانب Google Cloud للهويات الخارجية الموثوقة. ستُسجِّل CrewAI Platform كمزود داخل هذه الحوض.
|
||||
|
||||
```bash
|
||||
gcloud iam workload-identity-pools create crewai-pool \
|
||||
--project=<YOUR_PROJECT_ID> \
|
||||
--location=global \
|
||||
--display-name="CrewAI Platform"
|
||||
```
|
||||
|
||||
أو في [وحدة تحكم Workload Identity Pools](https://console.cloud.google.com/iam-admin/workload-identity-pools)، انقر على **Create Pool**.
|
||||
|
||||
{/* SCREENSHOT: GCP "Create Workload Identity Pool" form with name "crewai-pool" → /images/secrets-manager/gcp-wi/01-create-pool.png */}
|
||||
|
||||
## الخطوة 3 — إضافة CrewAI Platform كمزود OIDC في الحوض
|
||||
|
||||
```bash
|
||||
gcloud iam workload-identity-pools providers create-oidc crewai-provider \
|
||||
--project=<YOUR_PROJECT_ID> \
|
||||
--location=global \
|
||||
--workload-identity-pool=crewai-pool \
|
||||
--display-name="CrewAI Platform OIDC" \
|
||||
--issuer-uri="https://<your-platform-host>" \
|
||||
--attribute-mapping="google.subject=assertion.sub,attribute.organization=assertion.organization_id" \
|
||||
--attribute-condition="assertion.organization_id != ''"
|
||||
```
|
||||
|
||||
يُخبر `--attribute-mapping` Google كيفية ربط ادّعاءات JWT بسمات Google:
|
||||
- `google.subject` هو معرّف الكيان — نربطه بادّعاء `sub` في JWT، الذي تُعيّنه CrewAI Platform إلى `organization:<uuid>`.
|
||||
- `attribute.organization` هو سمة مخصصة — نربطها بادّعاء `organization_id` في JWT لتتمكّن من الإشارة إليها في ارتباطات IAM لاحقاً.
|
||||
|
||||
`--attribute-condition` هو فحص دفاع في العمق يرفض الرموز التي تفتقد لادّعاء `organization_id`.
|
||||
|
||||
احصل على **اسم مورد المزود** (ستحتاجه للجمهور وارتباطات IAM):
|
||||
|
||||
```bash
|
||||
gcloud iam workload-identity-pools providers describe crewai-provider \
|
||||
--project=<YOUR_PROJECT_ID> \
|
||||
--location=global \
|
||||
--workload-identity-pool=crewai-pool \
|
||||
--format="value(name)"
|
||||
```
|
||||
|
||||
يبدو الناتج هكذا:
|
||||
|
||||
```
|
||||
projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/crewai-pool/providers/crewai-provider
|
||||
```
|
||||
|
||||
هذه هي قيمة **Workload Identity Provider** الخاصة بك في CrewAI Platform في الخطوة 6. تحسب CrewAI Platform تلقائياً جمهور OIDC كـ `//iam.googleapis.com/<this-resource-name>` عند إصدار الرموز.
|
||||
|
||||
{/* SCREENSHOT: "Add provider to pool" form with OIDC selected, issuer URI, audience defaults, attribute mapping → /images/secrets-manager/gcp-wi/02-add-oidc-provider.png */}
|
||||
|
||||
## الخطوة 4 — منح الوصول إلى Secret Manager للكيان الموحَّد
|
||||
|
||||
اربط دوري Secret Manager كليهما على نطاق المشروع بالكيان الموحَّد — دور يُفعّل الاقتراح التلقائي لاسم السر في نموذج متغير البيئة، والآخر يسمح بقراءة قيم الأسرار عند إطلاق الأتمتة. كلاهما مطلوبان لتعمل الميزة من البداية إلى النهاية.
|
||||
|
||||
```bash
|
||||
PRINCIPAL_SET="principalSet://iam.googleapis.com/projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/crewai-pool/attribute.organization/<YOUR_CREWAI_ORG_UUID>"
|
||||
|
||||
# Required for the Secret Name autocomplete (calls secretmanager.secrets.list)
|
||||
gcloud projects add-iam-policy-binding <YOUR_PROJECT_ID> \
|
||||
--member="$PRINCIPAL_SET" \
|
||||
--role="roles/secretmanager.viewer"
|
||||
|
||||
# Required to read secret values at kickoff
|
||||
gcloud projects add-iam-policy-binding <YOUR_PROJECT_ID> \
|
||||
--member="$PRINCIPAL_SET" \
|
||||
--role="roles/secretmanager.secretAccessor"
|
||||
```
|
||||
|
||||
استبدل `<PROJECT_NUMBER>` برقم المشروع الرقمي (`gcloud projects describe <YOUR_PROJECT_ID> --format='value(projectNumber)'`) و `<YOUR_CREWAI_ORG_UUID>` بـ UUID مؤسسة CrewAI Platform التي يجب أن يُسمح لها بقراءة أسرارك. يمكنك العثور على UUID المؤسسة في واجهة المنصة في صفحة إعدادات المؤسسة، أو عبر الـ API. يقصر هذا الاتحاد على مؤسسة CrewAI محددة — تُقبل فقط الرموز المُصدَرة لأتمتات تلك المؤسسة.
|
||||
|
||||
أو عبر وحدة تحكم Google Cloud:
|
||||
|
||||
1. افتح **IAM & Admin** ← **IAM** لمشروعك.
|
||||
2. انقر على **GRANT ACCESS**.
|
||||
3. **New principals:** الصق سلسلة `principalSet://...attribute.organization/<YOUR_CREWAI_ORG_UUID>` الكاملة.
|
||||
4. عيّن الدور **Secret Manager Viewer** (`roles/secretmanager.viewer`).
|
||||
5. انقر على **SAVE**.
|
||||
6. انقر على **GRANT ACCESS** مرة أخرى وكرّر مع الدور **Secret Manager Secret Accessor** (`roles/secretmanager.secretAccessor`).
|
||||
|
||||
<Tip>
|
||||
**العزل لكل مؤسسة.** يقيّد النمط `principalSet://...attribute.organization/<UUID>` الوصول إلى رموز مؤسسة محددة. إذا كانت لديك مؤسسات CrewAI متعددة تتشارك مشروع Google Cloud واحد، كرّر كلا الارتباطين لكل مؤسسة بالـ UUID الصحيح — أو استخدم شرط سمة أقل تقييداً إن لم يكن العزل ضرورياً.
|
||||
</Tip>
|
||||
|
||||
<Tip>
|
||||
**تحديد نطاق `secretAccessor` لكل سر (اختياري).** إذا كنت تفضّل عدم منح `roles/secretmanager.secretAccessor` على نطاق المشروع، احذف الارتباط الثاني أعلاه واربط لكل سر بدلاً من ذلك:
|
||||
|
||||
```bash
|
||||
gcloud secrets add-iam-policy-binding <SECRET_NAME> \
|
||||
--member="$PRINCIPAL_SET" \
|
||||
--role="roles/secretmanager.secretAccessor" \
|
||||
--project=<YOUR_PROJECT_ID>
|
||||
```
|
||||
|
||||
أبقِ `roles/secretmanager.viewer` على نطاق المشروع في كلا الحالتين — `secretmanager.secrets.list` (الذي يعتمد عليه الاقتراح التلقائي) لا يمكن منحه لكل سر.
|
||||
</Tip>
|
||||
|
||||
## الخطوة 5 — إنشاء سر واحد على الأقل في GCP
|
||||
|
||||
إذا لم يكن لديك سر للاختبار، أنشئ واحداً عبر CLI `gcloud`:
|
||||
|
||||
```bash
|
||||
echo -n "hello from gcp" | gcloud secrets create crewai-test-keyword \
|
||||
--data-file=- \
|
||||
--project=<YOUR_PROJECT_ID> \
|
||||
--replication-policy=automatic
|
||||
```
|
||||
|
||||
أو عبر [وحدة تحكم Secret Manager](https://console.cloud.google.com/security/secret-manager):
|
||||
|
||||
1. افتح **Secret Manager** في مشروع GCP الخاص بك.
|
||||
2. انقر على **+ CREATE SECRET**.
|
||||
3. **Name:** `crewai-test-keyword`. **Secret value:** الصق قيمتك.
|
||||
4. انقر على **CREATE SECRET**.
|
||||
|
||||
## الخطوة 6 — إضافة تكوين Workload Identity في CrewAI Platform
|
||||
|
||||
في CrewAI Platform، انتقل إلى **Settings** ← **Workload Identity** وانقر على **Add Workload Identity Config**.
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `gcp-prod`.
|
||||
- **Cloud Provider:** `GCP`.
|
||||
- **Workload Identity Provider:** اسم مورد المزود من الخطوة 3، مثلاً `projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/crewai-pool/providers/crewai-provider`.
|
||||
- (اختياري) بدّل **Default Configuration** إذا كنت ترغب في أن يكون هذا هو تكوين WI الافتراضي المُحدَّد عند إنشاء بيانات اعتماد سر مدعومة بـ GCP.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Workload Identity Config" form with GCP and provider resource name → /images/secrets-manager/gcp-wi/03-amp-add-wi-config-gcp.png */}
|
||||
{/* SCREENSHOT: Workload Identity list showing both AWS and GCP rows → /images/secrets-manager/gcp-wi/04-amp-wi-list-with-gcp.png */}
|
||||
|
||||
## الخطوة 7 — إضافة بيانات اعتماد مزود أسرار مرتبطة بتكوين WI
|
||||
|
||||
انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `gcp-prod-wi`.
|
||||
- **Provider:** `Google Cloud Secret Manager`.
|
||||
- **Authentication Method:** `Workload Identity`.
|
||||
- **Workload Identity Configuration:** اختر التكوين الذي أنشأته في الخطوة 6.
|
||||
- **Project ID:** معرّف مشروع GCP الخاص بك (نفس المشروع الذي يملك الأسرار).
|
||||
- (اختياري) حدّد **Set as default credential for this provider**.
|
||||
|
||||
سيطلب النموذج فقط **Project ID** ضمن Workload Identity — حقل **Service Account JSON** مخفي عمداً لأنه لا ينطبق على هذا المسار؛ تأتي الهوية الموحَّدة من تكوين WI المرتبط.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Secret Provider Credential" form with GCP + Workload Identity + WI config dropdown → /images/secrets-manager/gcp-wi/05-amp-add-credential-gcp-wi.png */}
|
||||
|
||||
## الخطوة 8 — اختبار الاتصال
|
||||
|
||||
بعد حفظ بيانات الاعتماد، انقر على **Test Connection**. لبيانات اعتماد workload-identity، يتحقق هذا من مصافحة OIDC: تُصدر CrewAI Platform JWT وتبادله عبر Security Token Service للحصول على رمز وصول Google موحَّد. نتيجة خضراء تعني أن ارتباط الاتحاد سليم.
|
||||
|
||||
نجاح Test Connection يُثبت أن Workload Identity Pool ومزود OIDC وربط السمات وشرط السمة موصولة جميعها بشكل صحيح. لا يُثبت ذلك أن IAM في Secret Manager صحيح — يُمارَس `secretmanager.secrets.list` و `secretmanager.versions.access` بشكل منفصل عند تحميل الاقتراح التلقائي لاسم السر أو عندما يُحَلّ متغير بيئة عند الإطلاق. راجع [استكشاف الأخطاء](#troubleshooting) لأنماط فشل المصافحة.
|
||||
|
||||
## الخطوة 9 — الإشارة إلى السر في متغير بيئة
|
||||
|
||||
أَشِر إلى السر على أتمتة، تماماً كما تفعل مع أي متغير بيئة مدعوم بمدير أسرار. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) لحقول النموذج والسلوك.
|
||||
|
||||
## الخطوة 10 — التحقق من التدوير
|
||||
|
||||
بعد تشغيل عملية النشر، دوّر السر في GCP بإضافة إصدار جديد (يقرأ Secret Manager دائماً أحدث إصدار مفعَّل افتراضياً):
|
||||
|
||||
```bash
|
||||
echo -n "rotated value" | gcloud secrets versions add crewai-test-keyword \
|
||||
--data-file=- \
|
||||
--project=<YOUR_PROJECT_ID>
|
||||
```
|
||||
|
||||
أطلق إطلاق أتمتة جديداً. ستكون بيئة الإطلاق ترى `"rotated value"` — بدون إعادة نشر ولا إعادة تشغيل عامل ولا انتظار TTL.
|
||||
|
||||
للتأكد في سجلات العامل، ابحث عن:
|
||||
|
||||
```
|
||||
Workload identity config '<id>' (gcp): N secret(s) resolved
|
||||
```
|
||||
|
||||
يظهر هذا السطر لكل إطلاق ويُشير إلى استدعاء `accessSecretVersion` طازج مقابل GCP.
|
||||
|
||||
## استكشاف الأخطاء
|
||||
|
||||
| العَرَض | السبب المحتمل |
|
||||
|---|---|
|
||||
| يفشل Test Connection بخطأ مصافحة | رُفض تبادل رمز STS. تحقق من وجود Workload Identity Pool، وأن مُصدر مزود OIDC يطابق قيمة `issuer` للمنصة، وأن شرط السمة يقبل ادّعاءات JWT. تأكد من أن رابط اكتشاف OIDC للمنصة قابل للوصول من GCP عبر الإنترنت العام. |
|
||||
| `Could not refresh access token: invalid_target` | لا يطابق ادّعاء الجمهور الجمهور المتوقع لمزود Workload Identity. تُعيّن CrewAI Platform الجمهور تلقائياً؛ إذا خصّصته، فتأكد من أنه يطابق `//iam.googleapis.com/<provider-resource-name>`. |
|
||||
| `Failed to fetch JWKS from issuer` | لا يمكن لـ GCP STS الوصول إلى مضيف CrewAI Platform. تأكد من أن المضيف متاح عبر الإنترنت وأن `/.well-known/openid-configuration` يُعيد 200. |
|
||||
| `Attribute condition rejected token` | يتطلب شرط السمة لمزود OIDC (الخطوة 3) `organization_id`. تُعيّن CrewAI Platform هذا الادّعاء دائماً، لذا يعني هذا عادةً تكوين حوض/مزود خاطئاً. تحقق من شرط السمة للمزود من جديد. |
|
||||
| يُظهر الاقتراح التلقائي لاسم السر `PERMISSION_DENIED: secretmanager.secrets.list` | يفتقد الكيان الموحَّد إلى `roles/secretmanager.viewer` على نطاق المشروع. إذن `secretmanager.secrets.list` محصور بنطاق المشروع فقط ولا يمكن منحه لكل سر. راجع الخطوة 4. |
|
||||
| يفشل الإطلاق في حلّ سر رغم نجاح Test Connection | ارتباط WI سليم، لكن `secretmanager.versions.access` مفقود على السر الفاشل. راجع `roles/secretmanager.secretAccessor` (على نطاق المشروع، أو لكل سر إذا حدّدت النطاق بهذه الطريقة في الخطوة 4). |
|
||||
| لا تُلتقط القيمة المُدوَّرة في الإطلاق التالي | تأكد من أن متغير البيئة على الأتمتة يشير إلى بيانات اعتماد مدعومة بـ Workload Identity (وليس بيانات اعتماد بمفاتيح ثابتة). يدمج المسار الثابت القيم في صورة النشر. |
|
||||
|
||||
### روابط مرجعية
|
||||
|
||||
- GCP: [Workload Identity Federation overview](https://cloud.google.com/iam/docs/workload-identity-federation)
|
||||
- GCP: [Configure Workload Identity Federation with OIDC](https://cloud.google.com/iam/docs/workload-identity-federation-with-other-providers)
|
||||
- GCP: [Secret Manager IAM roles](https://cloud.google.com/secret-manager/docs/access-control)
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
- [استخدام الأسرار في متغيرات البيئة وإدارة الأذونات](/ar/enterprise/features/secrets-manager/usage)
|
||||
- للتنوع متعدد السحاب، راجع أيضاً [AWS Workload Identity (اتحاد OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity) و [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity).
|
||||
189
docs/edge/ar/enterprise/features/secrets-manager/gcp.mdx
Normal file
189
docs/edge/ar/enterprise/features/secrets-manager/gcp.mdx
Normal file
@@ -0,0 +1,189 @@
|
||||
---
|
||||
title: Google Cloud Secret Manager
|
||||
description: تكوين Google Cloud Secret Manager كمزود أسرار لـ CrewAI Platform من البداية إلى النهاية
|
||||
sidebarTitle: ببيانات اعتماد ثابتة
|
||||
icon: "key"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يأخذك هذا الدليل عبر تكوين Google Cloud Secret Manager كمزود أسرار لمؤسستك على CrewAI Platform، باستخدام **بيانات اعتماد حساب خدمة**. بنهاية الدليل، ستتمكن CrewAI Platform من قراءة الأسرار المخزّنة في مشروع Google Cloud الخاص بك وحقنها كقيم متغيرات بيئة وقت التشغيل.
|
||||
|
||||
<Note>
|
||||
يغطي هذا الدليل مسار **بيانات الاعتماد الثابتة** — تُحَلّ الأسرار وقت النشر وتُدمج في صورة النشر. تتطلب القيم المُدوَّرة إعادة نشر. إذا أردت أسراراً مراعية للتدوير تُحدَّث في كل إطلاق أتمتة، راجع [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity).
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
يغطي هذا الدليل التكوين من جانب GCP وإعداد بيانات الاعتماد في CrewAI Platform. للإشارة بعدها إلى سر من متغير بيئة، راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage).
|
||||
</Note>
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<Note>
|
||||
قبل البدء، تأكد من امتلاكك:
|
||||
|
||||
- مشروع Google Cloud مع تفعيل **Secret Manager API**. فعّله في [وحدة تحكم APIs & Services](https://console.cloud.google.com/apis/library/secretmanager.googleapis.com) أو عبر `gcloud`:
|
||||
|
||||
```bash
|
||||
gcloud services enable secretmanager.googleapis.com --project=YOUR_PROJECT_ID
|
||||
```
|
||||
|
||||
- إذن في المشروع لإنشاء حسابات خدمة ومنح أدوار IAM و(إن لزم) إنشاء الأسرار.
|
||||
- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذن `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
|
||||
</Note>
|
||||
|
||||
## الخطوة 1 — إنشاء حساب خدمة
|
||||
|
||||
حساب الخدمة هو الهوية من جانب GCP التي ستُصادق بها CrewAI Platform.
|
||||
|
||||
في [وحدة تحكم IAM & Admin ← Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts)، انقر على **Create Service Account**.
|
||||
|
||||
- **Service account name:** `crewai-secrets-reader`
|
||||
- **Service account ID:** يُملأ تلقائياً من الاسم (مثلاً `crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com`)
|
||||
- **Description (optional):** "Read-only access to Secret Manager for CrewAI Platform"
|
||||
|
||||
انقر على **Create and Continue**. تخطَّ المنح الاختيارية في هذه الشاشة — ستُرفق الدور في الخطوة 2. انقر على **Done**.
|
||||
|
||||
للتفاصيل الكاملة، راجع وثائق GCP: [Create service accounts](https://cloud.google.com/iam/docs/service-accounts-create).
|
||||
|
||||
{/* SCREENSHOT: GCP "Create service account" form with name "crewai-secrets-reader" → /images/secrets-manager/gcp/01-create-service-account.png */}
|
||||
|
||||
## الخطوة 2 — منح الوصول إلى Secret Manager
|
||||
|
||||
تحتاج CrewAI Platform إلى إذن لسرد وقراءة الأسرار في مشروعك. استخدم أحد نطاقين — **على مستوى المشروع** للبساطة، أو **لكل سر** لأقل الامتيازات.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="على مستوى المشروع (أبسط)">
|
||||
في [وحدة تحكم IAM](https://console.cloud.google.com/iam-admin/iam)، انقر على **Grant Access** و:
|
||||
|
||||
- **New principals:** بريد حساب الخدمة من الخطوة 1.
|
||||
- **Role:** **Secret Manager Secret Accessor** (`roles/secretmanager.secretAccessor`).
|
||||
|
||||
انقر على **Save**.
|
||||
|
||||
أو عبر `gcloud`:
|
||||
|
||||
```bash
|
||||
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
|
||||
--member="serviceAccount:crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
|
||||
--role="roles/secretmanager.secretAccessor"
|
||||
```
|
||||
|
||||
{/* SCREENSHOT: GCP IAM "Grant access" panel with the service account and Secret Manager Secret Accessor role → /images/secrets-manager/gcp/02-iam-grant-access.png */}
|
||||
</Tab>
|
||||
|
||||
<Tab title="لكل سر (أقل الامتيازات)">
|
||||
امنح الدور فقط على الأسرار المحددة التي ينبغي أن تصل إليها CrewAI Platform. كرّر لكل سر:
|
||||
|
||||
```bash
|
||||
gcloud secrets add-iam-policy-binding YOUR_SECRET_NAME \
|
||||
--member="serviceAccount:crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
|
||||
--role="roles/secretmanager.secretAccessor" \
|
||||
--project=YOUR_PROJECT_ID
|
||||
```
|
||||
|
||||
أو في الوحدة: افتح كل سر في [Secret Manager](https://console.cloud.google.com/security/secret-manager)، انقر على **Permissions** في اللوحة اليمنى، وامنح **Secret Manager Secret Accessor** لحساب الخدمة.
|
||||
|
||||
{/* SCREENSHOT: Per-secret "Permissions" panel in Secret Manager with the service account granted accessor role → /images/secrets-manager/gcp/03-per-secret-permissions.png */}
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Tip>
|
||||
يمنح دور `roles/secretmanager.secretAccessor` وصول قراءة فقط لقيم الأسرار. تستدعي CrewAI Platform أيضاً `secretmanager.secrets.list` لتجربة الاقتراح التلقائي في نموذج متغير البيئة — هذا الإذن مُضمَّن في الدور على نطاق المشروع، لكن **ليس** على نطاق لكل سر. مع ارتباطات لكل سر، لن يقترح الإكمال التلقائي أسراراً؛ ستحتاج إلى كتابة اسم السر الكامل.
|
||||
</Tip>
|
||||
|
||||
## الخطوة 3 — إنشاء مفتاح حساب الخدمة
|
||||
|
||||
افتح حساب الخدمة من الخطوة 1 في [وحدة تحكم IAM & Admin ← Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts).
|
||||
|
||||
- انقر على علامة التبويب **Keys**.
|
||||
- انقر على **Add Key** ← **Create new key**.
|
||||
- **Key type:** JSON.
|
||||
- انقر على **Create**. يُنزّل المتصفح ملف JSON — احتفظ به بأمان؛ لا يمكن إعادة تنزيله.
|
||||
|
||||
أو عبر `gcloud`:
|
||||
|
||||
```bash
|
||||
gcloud iam service-accounts keys create ./crewai-secrets-reader.json \
|
||||
--iam-account=crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com
|
||||
```
|
||||
|
||||
<Warning>
|
||||
مفتاح حساب الخدمة هو بيانات اعتماد ثابتة طويلة الأمد. خزّنه بأمان (في مدير كلمات مرور أو مخزن أسرارك الخاص) ودوّره بشكل منتظم. للقضاء على بيانات الاعتماد الثابتة تماماً، استخدم [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity) بدلاً من ذلك.
|
||||
</Warning>
|
||||
|
||||
{/* SCREENSHOT: Service account "Keys" tab with the "Create new key" → JSON option → /images/secrets-manager/gcp/04-create-service-account-key.png */}
|
||||
|
||||
## الخطوة 4 — إضافة بيانات الاعتماد في CrewAI Platform
|
||||
|
||||
في CrewAI Platform، انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
|
||||
|
||||
{/* SCREENSHOT: Sidebar/nav highlighting Settings → Secret Provider Credentials → /images/secrets-manager/usage/01-amp-settings-nav.png */}
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Name:** اسم وصفي، مثلاً `gcp-prod`.
|
||||
- **Provider:** `Google Cloud Secret Manager`.
|
||||
- **Project ID:** معرّف مشروع GCP الخاص بك (مثلاً `my-crewai-prod`).
|
||||
- **Service Account JSON:** الصق المحتوى الكامل لملف JSON الذي نزّلته في الخطوة 3.
|
||||
- (اختياري) حدّد **Set as default credential for this provider**. تُستخدم بيانات الاعتماد الافتراضية بواسطة متغيرات البيئة التي تشير إلى أسرار GCP بدون تحديد بيانات اعتماد صراحةً.
|
||||
|
||||
انقر على **Create**.
|
||||
|
||||
{/* SCREENSHOT: "Add Secret Provider Credential" form with GCP fields filled in → /images/secrets-manager/gcp/05-amp-add-credential-form-gcp.png */}
|
||||
|
||||
## الخطوة 5 — إنشاء سر واحد على الأقل في GCP
|
||||
|
||||
إذا لم يكن لديك بالفعل أسرار في GCP Secret Manager، أنشئ واحداً الآن لتتمكن من التحقق من الاتصال في الخطوة 6.
|
||||
|
||||
في [وحدة تحكم Secret Manager](https://console.cloud.google.com/security/secret-manager)، انقر على **Create secret**.
|
||||
|
||||
- **Name:** اسم فريد، مثلاً `openai-api-key`.
|
||||
- **Secret value:** إما لصق قيمة خام أو رفع ملف.
|
||||
- اترك إعدادات التدوير والتكرار وغيرها على القيم الافتراضية ما لم تكن لديك متطلبات محددة.
|
||||
|
||||
انقر على **Create secret**.
|
||||
|
||||
أو عبر `gcloud`:
|
||||
|
||||
```bash
|
||||
echo -n "sk-your-actual-key" | gcloud secrets create openai-api-key \
|
||||
--data-file=- \
|
||||
--project=YOUR_PROJECT_ID \
|
||||
--replication-policy=automatic
|
||||
```
|
||||
|
||||
<Note>
|
||||
**صيغة الإشارة بمفتاح JSON.** يتعامل GCP Secret Manager مع قيم الأسرار كبيانات معتمة. إذا حدث أن كانت قيمة سرّك سلسلة JSON، يمكن لـ CrewAI Platform استخراج حقل واحد باستخدام صيغة `secret-name#json_key` (مثلاً `database-credentials#password`). راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) للتفاصيل.
|
||||
</Note>
|
||||
|
||||
للتفاصيل الكاملة، راجع وثائق GCP: [Create a secret](https://cloud.google.com/secret-manager/docs/create-secret-quickstart).
|
||||
|
||||
{/* SCREENSHOT: GCP "Create secret" form with name and value → /images/secrets-manager/gcp/06-create-secret.png */}
|
||||
|
||||
## الخطوة 6 — اختبار الاتصال
|
||||
|
||||
عُد إلى CrewAI Platform، في صفحة **Secret Provider Credentials**، اعثر على بيانات الاعتماد التي أنشأتها للتو وانقر على **Test Connection**.
|
||||
|
||||
تؤكد رسالة نجاح أن CrewAI Platform يمكنها المصادقة مع GCP وقراءة الأسرار من مشروعك.
|
||||
|
||||
{/* SCREENSHOT: Success toast after clicking "Test Connection" on the GCP credential → /images/secrets-manager/gcp/07-test-connection-success.png */}
|
||||
|
||||
إذا فشل الاختبار، تحقق من الأسباب الأكثر شيوعاً:
|
||||
|
||||
| العَرَض | السبب المحتمل |
|
||||
|---|---|
|
||||
| `PERMISSION_DENIED` عند سرد الأسرار | يفتقد حساب الخدمة إلى `roles/secretmanager.secretAccessor`، أو حدّدت نطاقه لكل سر (لا يُمنح `list`). تحقق من الخطوة 2 من جديد. |
|
||||
| `PERMISSION_DENIED` على `secretmanager.secrets.access` | نفس ما سبق، لكن لسر محدد. تأكد من أن حساب الخدمة يمتلك دور accessor على السر المعني. |
|
||||
| `unauthorized_client` / `invalid_grant` | ملف Service Account JSON الملصوق غير صالح أو منتهي الصلاحية أو لحساب خدمة محذوف. أعد إنشاء المفتاح (الخطوة 3) والصقه من جديد. |
|
||||
| `Project ID does not match` | لا يطابق حقل Project ID في CrewAI Platform المشروع الذي يملك حساب الخدمة / الأسرار. تحقق من الخطوة 4 من جديد. |
|
||||
| `API not enabled` | Secret Manager API غير مفعَّل في المشروع. راجع المتطلبات المسبقة. |
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
الآن وقد اتصل GCP، توجّه إلى [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage) من أجل:
|
||||
|
||||
- منح أعضاء المؤسسة الأذونات الصحيحة لاستخدام (أو إدارة) مدير الأسرار.
|
||||
- الإشارة إلى أسرار GCP الخاصة بك من متغيرات بيئة CrewAI Platform.
|
||||
|
||||
إذا كنت تريد أسراراً **مراعية للتدوير** تنتشر دون إعادة نشر، انتقل إلى [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity) — نفس مخزن الأسرار، بدون بيانات اعتماد ثابتة، وتُجلب الأسرار في كل إطلاق.
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
title: نظرة عامة على مدير الأسرار
|
||||
description: ربط مخازن الأسرار الخارجية بمنصة CrewAI Platform والإشارة إلى الأسرار المُدارة من متغيرات البيئة
|
||||
sidebarTitle: نظرة عامة
|
||||
icon: "book-open"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
تُتيح ميزة مدير الأسرار لمؤسستك ربط مخزن أسرار خارجي — AWS Secrets Manager أو Google Cloud Secret Manager أو Azure Key Vault — والإشارة إلى تلك الأسرار مباشرةً من متغيرات البيئة على الأتمتات والطواقم لديك. بدلاً من لصق قيم نصية صريحة في المنصة، فإنك تخزّن مجموعة واحدة من بيانات الاعتماد لكل مزود وتُشير إلى الأسرار بالاسم.
|
||||
|
||||
يمنحك هذا:
|
||||
|
||||
- **تخزين مركزي** — إدارة الأسرار في مزوّدك بدلاً من تعديل إعدادات CrewAI Platform. لا تحتفظ CrewAI Platform بأي نسخة نصية صريحة من قيمة السر.
|
||||
- **تقليل التعرّض** — لا تظهر القيم الحساسة أبداً كنص صريح في إعدادات CrewAI Platform.
|
||||
- **قابلية تدقيق سحابية المنشأ** — يسجّل سجل التدقيق الخاص بمزوّدك كل قراءة لسر.
|
||||
|
||||
<Note>
|
||||
يتطلب مدير الأسرار (مساران: بيانات الاعتماد الثابتة و Workload Identity) إصدار CrewAI runtime رقم `1.14.5` أو أحدث في صورة حاوية الأتمتة.
|
||||
</Note>
|
||||
|
||||
## مساران: بيانات اعتماد ثابتة مقابل Workload Identity
|
||||
|
||||
هناك طريقتان لربط CrewAI Platform بمخزن أسرار السحابة لديك. **يختلفان اختلافاً كبيراً في سلوك التدوير**، لذا اختر بناءً على مدى تكرار تدوير أسرارك ومدى صرامة وضعك الأمني.
|
||||
|
||||
| الجانب | بيانات الاعتماد الثابتة | Workload Identity (اتحاد OIDC) |
|
||||
|---|---|---|
|
||||
| **المصادقة** | مفاتيح وصول / ملف JSON لحساب خدمة طويلة الأمد مخزّنة في CrewAI Platform | رموز قصيرة الأمد تُصدر لكل عملية عامل؛ لا تُخزَّن بيانات اعتماد ثابتة في أي مكان |
|
||||
| **انتشار التدوير** | تُحَلّ وقت النشر و**تُدمج في صورة حاوية النشر** — تتطلب القيم المُدوَّرة إعادة نشر | تُحَلّ **وقت تنفيذ الأتمتة** — تنتشر القيم المُدوَّرة إلى الإطلاق التالي بدون إعادة نشر |
|
||||
| **جهد الإعداد** | أقل — لصق المفاتيح / رفع ملف JSON لحساب الخدمة | أعلى — تسجيل CrewAI Platform كمزود OIDC في سحابتك وتكوين سياسات الثقة |
|
||||
| **الأنسب لـ** | البداية، الأسرار قليلة التدوير، عمليات نشر بحساب واحد | الإنتاج، الأسرار كثيرة التدوير، البيئات التي تحكمها الامتثال وتمنع بيانات الاعتماد طويلة الأمد |
|
||||
|
||||
<Note>
|
||||
**يستخدم كلا المسارين نفس تدفق الواجهة** للإشارة إلى الأسرار في متغيرات البيئة (راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage)). الفرق بالكامل في كيفية مصادقة المنصة لسحابتك ومتى تقرأ قيمة السر.
|
||||
</Note>
|
||||
|
||||
### اختر دليل الإعداد الخاص بك
|
||||
|
||||
| المزود | بيانات الاعتماد الثابتة | Workload Identity |
|
||||
|---|---|---|
|
||||
| AWS Secrets Manager | [AWS — المفاتيح الثابتة / AssumeRole](/ar/enterprise/features/secrets-manager/aws) | [AWS — Workload Identity (OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity) |
|
||||
| Google Cloud Secret Manager | [GCP — مفتاح حساب الخدمة](/ar/enterprise/features/secrets-manager/gcp) | [GCP — Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity) |
|
||||
| Azure Key Vault | [Azure — السر المُعرَّف للعميل](/ar/enterprise/features/secrets-manager/azure) | [Azure — Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity) |
|
||||
|
||||
<Note>
|
||||
واجهتا مدير الأسرار و Workload Identity مُوسومتان حالياً بـ **Beta** في CrewAI Platform.
|
||||
</Note>
|
||||
|
||||
## كيف تتلاءم الأجزاء معاً
|
||||
|
||||
إعداد مدير الأسرار هو تدفق من ثلاث خطوات يشمل كلاً من مزود السحابة و CrewAI Platform:
|
||||
|
||||
1. **يُكوِّن المسؤول بيانات اعتماد المزود.** هذا هو العمل من جانب السحابة — ويختلف العمل اعتماداً على المسار (بيانات الاعتماد الثابتة أو Workload Identity) الذي تختاره. تغطي أدلة المزودين هذا من البداية إلى النهاية.
|
||||
2. **يُشير المسؤول (أو عضو مصرَّح له) إلى سر في متغير بيئة.** من صفحة متغيرات البيئة، يختار المستخدم بيانات اعتماد المزود ويُحدّد اسم السر. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables).
|
||||
3. **تتلقى الأتمتة القيمة المحلولة وقت التشغيل.** عندما يعمل طاقم أو أتمتة، تجلب CrewAI Platform السر من مزوّدك وتحقنه كقيمة لمتغير البيئة. مع Workload Identity، يحدث هذا الجلب في كل إطلاق (مراعٍ للتدوير). مع بيانات الاعتماد الثابتة، يحدث الجلب وقت النشر وتُدمج القيمة في صورة النشر.
|
||||
|
||||
## الرؤية والنطاق
|
||||
|
||||
<Note>
|
||||
تتّبع متغيرات البيئة المدعومة بـ WI نفس نموذج الإسناد الذي تتّبعه متغيرات البيئة العادية: لا تحلّ الأتمتة سوى متغيرات البيئة المدعومة بـ WI المُسنَدة إليها صراحةً. أَسنِد متغير WI إلى أتمتة من صفحة متغيرات البيئة الخاصة بتلك الأتمتة؛ المتغيرات المُعرَّفة على مستوى المنظمة أو في مشروع Studio لا تُحلّ عند الإطلاق حتى تُسنِدها.
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
تُشغَّل مرحلة جلب الأسرار في كل إطلاق، لكنها لا تقوم بعمل فعلي إلا حين تكون هناك متغيرات بيئة مدعومة بـ WI مُسنَدة إلى النشر. لكل متغير مُسنَد، يُحلّ وقت التشغيل القيمة من مزوّدك السحابي في كل إطلاق لـ crew أو flow أو training أو test أو checkpoint-restore ويكتبها في بيئة العملية. عند عدم وجود أي متغير مُسنَد، تكون المرحلة بلا أثر (no-op). وإلا فإن التكلفة تتناسب مع عدد المتغيرات المُسنَدة: تأخّر إضافي بسيط لكل إطلاق بالإضافة إلى إدخال واحد في سجل تدقيق السحابة لكل متغير.
|
||||
</Note>
|
||||
|
||||
<Warning>
|
||||
على مستوى *تكوينات* Workload Identity، لا يزال النطاق اليوم عاماً على مستوى المنظمة. تُهيَّأ كل أتمتة في المنظمة استناداً إلى جميع تكوينات Workload Identity التي سجّلتها المنظمة، ولا يمكنك اليوم ربط تكوين Workload Identity محدد بأتمتة بعينها. تحديد نطاق Workload Identity لكل أتمتة موجود في خارطة الطريق. حتى ذلك الحين، سجِّل فقط تكوينات Workload Identity التي يحقّ لكل أتمتة في منظمتك استخدامها.
|
||||
</Warning>
|
||||
|
||||
## الأذونات
|
||||
|
||||
تتحكم ميزتان في CrewAI Platform بالوصول إلى مدير الأسرار:
|
||||
|
||||
- `secret_providers` — تتحكم بمن يستطيع عرض أو إدارة بيانات اعتماد المزودين.
|
||||
- `environment_variables` — تتحكم بمن يستطيع إنشاء وتحرير متغيرات البيئة (بما فيها تلك التي تُشير إلى أسرار).
|
||||
|
||||
تتحكم ميزة ثالثة بإعداد Workload Identity:
|
||||
|
||||
- `workload_identity_configs` — تتحكم بمن يستطيع عرض أو إدارة تكوينات Workload Identity. مطلوبة فقط إذا كنت تستخدم مسار Workload Identity.
|
||||
|
||||
يتمتع المالكون دائماً بالوصول الكامل. لا يحصل الأعضاء على وصول إلى `secret_providers` أو `workload_identity_configs` افتراضياً ويجب منحهم الإذن عبر دور مخصص. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac) للحصول على المصفوفة الكاملة والتعليمات خطوة بخطوة.
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
اختر مسارك:
|
||||
|
||||
- **بيانات الاعتماد الثابتة** (أبسط، تتطلب إعادة نشر عند التدوير):
|
||||
- [تكوين AWS Secrets Manager](/ar/enterprise/features/secrets-manager/aws)
|
||||
- [تكوين Google Cloud Secret Manager](/ar/enterprise/features/secrets-manager/gcp)
|
||||
- [تكوين Azure Key Vault](/ar/enterprise/features/secrets-manager/azure)
|
||||
- **Workload Identity** (مراعٍ للتدوير، بدون إعادة نشر):
|
||||
- [تكوين AWS Workload Identity](/ar/enterprise/features/secrets-manager/aws-workload-identity)
|
||||
- [تكوين GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity)
|
||||
- [تكوين Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity)
|
||||
- ثم: [استخدام الأسرار في متغيرات البيئة وإدارة الأذونات](/ar/enterprise/features/secrets-manager/usage)
|
||||
137
docs/edge/ar/enterprise/features/secrets-manager/usage.mdx
Normal file
137
docs/edge/ar/enterprise/features/secrets-manager/usage.mdx
Normal file
@@ -0,0 +1,137 @@
|
||||
---
|
||||
title: استخدام مدير الأسرار
|
||||
description: إدارة الأذونات والإشارة إلى الأسرار المُدارة من متغيرات البيئة في CrewAI Platform
|
||||
sidebarTitle: الاستخدام والأذونات
|
||||
icon: "list-check"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
هذا الدليل محايد تجاه المزود. يفترض أنك (أو مسؤول آخر) قد كوّنت بالفعل بيانات اعتماد واحدة على الأقل لمزود أسرار. اختر دليل الإعداد الخاص بك بناءً على المسار الذي تريده:
|
||||
|
||||
- بيانات الاعتماد الثابتة: [AWS](/ar/enterprise/features/secrets-manager/aws) · [GCP](/ar/enterprise/features/secrets-manager/gcp)
|
||||
- Workload Identity (مراعٍ للتدوير): [AWS](/ar/enterprise/features/secrets-manager/aws-workload-identity) · [GCP](/ar/enterprise/features/secrets-manager/gcp-workload-identity)
|
||||
|
||||
استخدم هذا الدليل من أجل:
|
||||
|
||||
- منح الأذونات الصحيحة لأعضاء المؤسسة.
|
||||
- الإشارة إلى الأسرار من متغيرات البيئة على أتمتاتك.
|
||||
- التحقق من أن كل شيء يُحَلّ بشكل صحيح وقت التشغيل.
|
||||
|
||||
## الأذونات (RBAC)
|
||||
|
||||
ثلاث ميزات في CrewAI Platform ذات صلة عند العمل مع مدير الأسرار:
|
||||
|
||||
- `secret_providers` — تتحكم بالوصول إلى صفحة **بيانات اعتماد مزود الأسرار**.
|
||||
- `workload_identity_configs` — تتحكم بالوصول إلى صفحة **Workload Identity** (ذات صلة فقط إذا كنت تستخدم مسار WI).
|
||||
- `environment_variables` — تتحكم بمن يستطيع إنشاء أو تحرير متغيرات البيئة.
|
||||
|
||||
لكل ميزة مستويا إجراء: `read` و `manage`. منح `manage` يستلزم تلقائياً `read`.
|
||||
|
||||
### ما يجب منحه
|
||||
|
||||
| الهدف | `secret_providers` | `workload_identity_configs` | `environment_variables` |
|
||||
|---|---|---|---|
|
||||
| استخدام بيانات اعتماد ثابتة موجودة في متغيرات البيئة (بدون تعديل المزود) | `read` | — | `manage` |
|
||||
| إنشاء أو تحرير أو حذف بيانات الاعتماد الثابتة | `manage` | — | `manage` |
|
||||
| استخدام بيانات اعتماد مدعومة بـ Workload Identity موجودة في متغيرات البيئة | `read` | — | `manage` |
|
||||
| إنشاء أو تحرير أو حذف تكوينات Workload Identity (وبيانات الاعتماد التي تشير إليها) | `manage` | `manage` | `manage` |
|
||||
|
||||
<Note>
|
||||
يتمتع **المالكون** تلقائياً بالوصول الكامل إلى كل ميزة. يستبعد دور **العضو** الافتراضي عمداً `secret_providers` و `workload_identity_configs` — يجب على المسؤولين تضمين الأعضاء صراحةً عبر دور مخصص.
|
||||
</Note>
|
||||
|
||||
### كيفية التعيين
|
||||
|
||||
1. في CrewAI Platform، انتقل إلى **Settings** ← **Roles**. من هذه الصفحة يمكنك إنشاء أدوار جديدة وتحرير أذونات كل دور وتعيين الأدوار للأعضاء الحاليين في المؤسسة.
|
||||
|
||||
{/* SCREENSHOT: Sidebar highlighting Settings → Roles → /images/secrets-manager/usage/06-amp-settings-roles-nav.png */}
|
||||
{/* SCREENSHOT: Roles list page with "Create Role" button visible → /images/secrets-manager/usage/07-amp-roles-list.png */}
|
||||
|
||||
2. انقر على **Create Role** لإنشاء دور جديد، أو افتح دوراً موجوداً لتحرير أذوناته.
|
||||
|
||||
3. في محرر أذونات الدور، بدّل الميزات ذات الصلة وفق الجدول أعلاه:
|
||||
|
||||
- `secret_providers`: اختر **read** إذا كان هذا الدور يحتاج فقط إلى استخدام بيانات الاعتماد الموجودة، أو **manage** إذا كان ينبغي أن يكون قادراً أيضاً على إنشاء بيانات الاعتماد وتحريرها وحذفها.
|
||||
- `environment_variables`: اختر **manage** ليتمكن الدور من إنشاء متغيرات بيئة تُشير إلى الأسرار.
|
||||
|
||||
{/* SCREENSHOT: Role editor showing the secret_providers feature with read/manage toggles → /images/secrets-manager/usage/08-amp-role-editor-secret-providers-toggles.png */}
|
||||
{/* SCREENSHOT: Role editor showing environment_variables toggles → /images/secrets-manager/usage/09-amp-role-editor-env-vars-toggles.png */}
|
||||
|
||||
4. احفظ الدور.
|
||||
|
||||
5. عيّن الدور للأعضاء ذوي الصلة من نفس صفحة Roles (أو قائمة أعضاء المؤسسة).
|
||||
|
||||
{/* SCREENSHOT: Member assignment screen where the new role is applied to a user → /images/secrets-manager/usage/10-amp-assign-role-to-member.png */}
|
||||
|
||||
## الإشارة إلى الأسرار في متغيرات البيئة
|
||||
|
||||
بمجرد وجود بيانات اعتماد للمزود وامتلاك دورك للأذونات الصحيحة، يمكنك الإشارة إلى الأسرار المُدارة من أي متغير بيئة.
|
||||
|
||||
في CrewAI Platform، انتقل إلى **Environment Variables** وانقر على **Add Environment Variables**.
|
||||
|
||||
{/* SCREENSHOT: Environment Variables empty state with "Add" button → /images/secrets-manager/usage/11-amp-env-vars-empty.png */}
|
||||
|
||||
املأ النموذج:
|
||||
|
||||
- **Key** — اسم متغير البيئة. يجب أن يبدأ بحرف أو شرطة سفلية ويحتوي فقط على حروف وأرقام وشرطات سفلية. عادةً بأحرف كبيرة، مثل `OPENAI_API_KEY`.
|
||||
|
||||
- **Value Source** — اختر من أين تأتي القيمة:
|
||||
- **Direct Value** — قيمة نصية صريحة تكتبها. استخدم هذا عندما لا ترغب في إشراك مزود.
|
||||
- **Use AWS default** (أو ما يعادله لمزوّدك) — تستخدم بيانات الاعتماد المُعلَّمة حالياً كافتراضية لذلك النوع من المزود.
|
||||
- **بيانات اعتماد مُسمَّاة محددة** — اختر بيانات الاعتماد بالاسم. استخدم هذا إذا كانت لديك بيانات اعتماد متعددة لنفس المزود (مثلاً `aws-prod` و `aws-staging`) وتريد اختيار واحدة صراحةً.
|
||||
|
||||
{/* SCREENSHOT: Env var form with the "Value Source" dropdown open, showing "AWS default" + named credentials → /images/secrets-manager/usage/12-amp-env-var-form-source-selector.png */}
|
||||
|
||||
- **Secret Name** — اسم السر في مزوّدك. بمجرد اختيار بيانات الاعتماد، يُقدّم هذا الحقل اقتراحاً تلقائياً: ابدأ بالكتابة، وتستعلم CrewAI Platform مزوّدك عن أسماء الأسرار المطابقة.
|
||||
|
||||
استخدم الصيغة `secret-name#json_key` لاستخراج حقل واحد من سر مهيكل (JSON). على سبيل المثال، عند وجود سر `database-credentials` بقيمة `{"username": "...", "password": "..."}`، أَشِر إلى `database-credentials#password` لحقن كلمة المرور فقط.
|
||||
|
||||
{/* SCREENSHOT: Env var form with the secret name autocomplete dropdown showing live results → /images/secrets-manager/usage/13-amp-env-var-form-secret-name-autocomplete.png */}
|
||||
|
||||
<Note>
|
||||
**ملاحظة Azure Key Vault:** لا يمكن أن تحتوي أسماء أسرار Azure على شرطات سفلية. تُحوّل CrewAI Platform تلقائياً الشرطات السفلية في حقل **Secret Name** إلى شرطات عند استدعاء Azure (مثلاً، `db_password` تُرسل كـ `db-password`).
|
||||
</Note>
|
||||
|
||||
انقر على **Create** لحفظ المتغير.
|
||||
|
||||
{/* SCREENSHOT: Env var list with the new variable showing masked value and a "secret" indicator → /images/secrets-manager/usage/14-amp-env-var-created.png */}
|
||||
|
||||
<Tip>
|
||||
عند تحرير متغير بيئة موجود، يحافظ ترك حقل **Value** فارغاً على القيمة الحالية. هذا مقصود — فهو يتيح لك تغيير حقول أخرى (مثل اسم السر أو بيانات الاعتماد) دون إعادة إدخال القيمة.
|
||||
</Tip>
|
||||
|
||||
## التحقق من العمل
|
||||
|
||||
للتحقق من البداية إلى النهاية:
|
||||
|
||||
1. أَشِر إلى متغير البيئة على أتمتة أو طاقم أو عملية نشر تماماً كما تفعل مع أي متغير بيئة آخر.
|
||||
2. انشر الأتمتة.
|
||||
3. أطلق تشغيلاً وتأكد من اكتماله بنجاح.
|
||||
|
||||
### يعتمد سلوك التدوير على مسار بيانات الاعتماد
|
||||
|
||||
| مسار بيانات الاعتماد | متى يُقرأ السر | ما يتطلبه التدوير |
|
||||
|---|---|---|
|
||||
| **بيانات الاعتماد الثابتة** (مفاتيح AWS، ملف JSON لحساب خدمة GCP) | **وقت النشر** — تُدمج القيمة في صورة النشر | إعادة نشر الأتمتة بعد تدوير السر |
|
||||
| **Workload Identity** (اتحاد OIDC، AWS أو GCP) | **في كل إطلاق أتمتة** — تُجلب القيمة طازجة من سحابتك | لا شيء — يرى الإطلاق التالي بعد التدوير القيمة الجديدة |
|
||||
|
||||
<Note>
|
||||
**إذا كنت تحتاج أسراراً مراعية للتدوير** (بدون إعادة نشر عند التدوير)، استخدم مسار Workload Identity: [AWS WI](/ar/enterprise/features/secrets-manager/aws-workload-identity) أو [GCP WI](/ar/enterprise/features/secrets-manager/gcp-workload-identity). المقايضة هي مزيد من جهد الإعداد مقدماً (تسجيل CrewAI Platform كمزود OIDC في سحابتك) ولكن عمليات أبسط على المدى الطويل.
|
||||
</Note>
|
||||
|
||||
إذا فشل النشر أو التشغيل بخطأ متعلق بسرك، تحقق من الأسباب الأكثر شيوعاً:
|
||||
|
||||
| العَرَض | السبب المحتمل |
|
||||
|---|---|
|
||||
| `no credential found` | يُشير متغير البيئة إلى مزود ولكن لم تُحدَّد بيانات اعتماد بعينها، ولا توجد بيانات اعتماد افتراضية مُعيّنة لذلك النوع من المزود. إما اختر بيانات اعتماد صراحةً على المتغير، أو علِّم بيانات اعتماد كافتراضية على صفحة **Secret Provider Credentials**. |
|
||||
| `secret not found` | خطأ مطبعي في **Secret Name**، أو أن السر غير موجود في حساب/منطقة المزود التي تشير إليها بيانات الاعتماد. تحقق من كليهما. |
|
||||
| تعمل الأتمتة بالقيمة القديمة بعد التدوير (مسار بيانات الاعتماد الثابتة) | القيمة السابقة مدمجة في صورة حاوية النشر. أعد نشر الأتمتة لاستيعاب القيمة المُدوَّرة. لتجنّب ذلك تماماً، حوّل بيانات الاعتماد إلى مسار Workload Identity. |
|
||||
| تعمل الأتمتة بالقيمة القديمة بعد التدوير (مسار Workload Identity) | تأكد من أن متغير البيئة يُشير إلى بيانات اعتماد مدعومة بـ WI (وليس مفاتيح ثابتة). مع WI، ينبغي أن يرى الإطلاق التالي بعد التدوير القيمة الجديدة. إن لم يحدث ذلك، تحقق من أن السر قد تم تحديثه فعلاً في سحابتك (مثلاً، `aws secretsmanager get-secret-value`). |
|
||||
| `JSON key not found` | عند استخدام `secret-name#json_key`، يجب أن يكون السر الأساسي كائن JSON صالحاً يحتوي على ذلك المفتاح. تحقق بقراءة السر مباشرة في مزوّدك. |
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
- [العودة إلى نظرة عامة على مدير الأسرار](/ar/enterprise/features/secrets-manager/overview)
|
||||
- بيانات الاعتماد الثابتة: [AWS](/ar/enterprise/features/secrets-manager/aws) · [GCP](/ar/enterprise/features/secrets-manager/gcp)
|
||||
- Workload Identity (مراعٍ للتدوير): [AWS](/ar/enterprise/features/secrets-manager/aws-workload-identity) · [GCP](/ar/enterprise/features/secrets-manager/gcp-workload-identity)
|
||||
@@ -0,0 +1,261 @@
|
||||
---
|
||||
title: التحقق من التدوير
|
||||
description: مثال طاقم مستقل يُثبت أن تدوير الأسرار ينتشر إلى عمليات النشر الجارية دون إعادة نشر.
|
||||
sidebarTitle: التحقق من التدوير
|
||||
icon: "arrows-rotate"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يوضّح لك هذا الدليل كيفية التحقق من أن **السر المُدوَّر في مزود السحابة لديك يُلتقط في أول إطلاق أتمتة لاحق** — بدون إعادة نشر ولا إعادة تشغيل عامل. هذا ذو صلة فقط عندما تكون قد كوّنت بيانات اعتماد مدعومة بـ Workload Identity ([AWS](/ar/enterprise/features/secrets-manager/aws-workload-identity)، [GCP](/ar/enterprise/features/secrets-manager/gcp-workload-identity)، [Azure](/ar/enterprise/features/secrets-manager/azure-workload-identity)). تتطلب عمليات نشر بيانات الاعتماد الثابتة إعادة نشر بعد التدوير؛ ليس هناك ما يجب التحقق منه هنا.
|
||||
|
||||
تستخدم الوصفة أدناه طاقماً صغيراً مستقلاً بأداة واحدة ووكيل واحد ومهمة واحدة. لا يُشير موجه الطاقم أبداً إلى قيمة السر — بدلاً من ذلك، تقرأ أداة القيمة من `os.environ` وتُفيد ببصمة SHA-256 لما تراه. دوّر السر في مزود السحابة، أطلق مرة أخرى، وتتغير البصمة.
|
||||
|
||||
<Note>
|
||||
لماذا بصمة وليس القيمة الخام؟ وضع الأسرار الخام في إخراج LLM وسجلات التتبع هو متجه تسرب. البصمة كافية لتأكيد "أن القيمة تغيّرت" دون كتابة القيمة الفعلية في أي مكان يمكن رصده.
|
||||
</Note>
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
قبل تشغيل هذا التحقق:
|
||||
|
||||
- بيانات اعتماد مزود أسرار مدعومة بـ WI مكوَّنة ([AWS](/ar/enterprise/features/secrets-manager/aws-workload-identity)، [GCP](/ar/enterprise/features/secrets-manager/gcp-workload-identity)، [Azure](/ar/enterprise/features/secrets-manager/azure-workload-identity)).
|
||||
- متغير بيئة على عملية النشر بـ `Secret = true`، المفتاح `API_KEY` (أو أي اسم تفضّله — اضبط الأداة أدناه لتطابقه)، يُشير إلى سر في مزود السحابة.
|
||||
- طريقة لتحديث قيمة السر في مزود السحابة (وصول CLI أو وحدة تحكم السحابة).
|
||||
- طريقة لإطلاق عملية النشر عبر HTTP (curl أو Postman أو علامة التبويب **Run** في CrewAI Platform).
|
||||
|
||||
## الخطوة 1 — هيكلة طاقم التحقق
|
||||
|
||||
أنشئ مشروع crew كلاسيكيًا لأن هذا المثال يربط أداة Python عبر `crew.py`:
|
||||
|
||||
```bash
|
||||
crewai create crew rotation_verifier --classic --skip_provider
|
||||
cd rotation_verifier
|
||||
```
|
||||
|
||||
## الخطوة 2 — إضافة أداة صدى بيانات الاعتماد
|
||||
|
||||
استبدل `src/rotation_verifier/tools/custom_tool.py` بأداة تقرأ متغير البيئة المدعوم بسر وتُعيد بصمة:
|
||||
|
||||
```python src/rotation_verifier/tools/credential_echo_tool.py
|
||||
"""Tool that verifies a runtime-injected secret without leaking the value.
|
||||
|
||||
Reads the secret-backed env var (populated by the workload-identity
|
||||
secrets manager at kickoff time) and returns a stable fingerprint. Never
|
||||
echo raw credential values into LLM output or logs in production code —
|
||||
the fingerprint alone is sufficient to confirm rotation worked.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import os
|
||||
|
||||
from crewai.tools import BaseTool
|
||||
|
||||
|
||||
# Match the deployment environment variable's `key` field.
|
||||
ENV_VAR_NAME = "API_KEY"
|
||||
|
||||
|
||||
class CredentialEchoTool(BaseTool):
|
||||
name: str = "credential_echo"
|
||||
description: str = (
|
||||
"Read the API credential from the worker's environment and return a "
|
||||
"fingerprint summary. Use this exactly once when asked to verify the "
|
||||
"current credential. Takes no arguments."
|
||||
)
|
||||
|
||||
def _run(self) -> str:
|
||||
value = os.environ.get(ENV_VAR_NAME)
|
||||
if not value:
|
||||
return (
|
||||
f"ERROR: {ENV_VAR_NAME} env var is not set. The workload-"
|
||||
"identity secret fetch did not run, or the deployment is "
|
||||
"missing the secret-backed env var."
|
||||
)
|
||||
fingerprint = hashlib.sha256(value.encode()).hexdigest()[:12]
|
||||
return f"Authenticated. credential.fingerprint=sha256:{fingerprint}"
|
||||
```
|
||||
|
||||
## الخطوة 3 — استبدال تكوينات الوكيل والمهمة الافتراضية
|
||||
|
||||
يضم الطاقم وكيلاً واحداً ومهمة واحدة — كلاهما بأوصاف **لا تذكر أبداً** قيمة السر، لذا تبقى مفاتيح المهام مستقرة عبر عمليات التدوير.
|
||||
|
||||
```yaml src/rotation_verifier/config/agents.yaml
|
||||
credential_checker:
|
||||
role: >
|
||||
Credential Verifier
|
||||
goal: >
|
||||
Confirm that the workload-identity-backed secret reached this worker
|
||||
process and report a fingerprint of the current value.
|
||||
backstory: >
|
||||
You are a no-nonsense reliability engineer responsible for verifying
|
||||
that secrets fetched at runtime via workload identity are present
|
||||
and fresh. You always use the credential_echo tool exactly once and
|
||||
report the result verbatim — you never make up values.
|
||||
```
|
||||
|
||||
```yaml src/rotation_verifier/config/tasks.yaml
|
||||
verify_credential_task:
|
||||
description: >
|
||||
Use the credential_echo tool to read the runtime-injected credential
|
||||
and produce a one-line confirmation. The current year is {current_year}
|
||||
(use it only in the timestamp; do not transform the credential output).
|
||||
expected_output: >
|
||||
A single line in the form:
|
||||
"[{current_year}] <credential_echo tool's exact output>"
|
||||
agent: credential_checker
|
||||
```
|
||||
|
||||
## الخطوة 4 — توصيل فئة الطاقم
|
||||
|
||||
```python src/rotation_verifier/crew.py
|
||||
from crewai import Agent, Crew, Process, Task
|
||||
from crewai.project import CrewBase, agent, crew, task
|
||||
from crewai.agents.agent_builder.base_agent import BaseAgent
|
||||
|
||||
from rotation_verifier.tools.credential_echo_tool import CredentialEchoTool
|
||||
|
||||
|
||||
@CrewBase
|
||||
class RotationVerifierCrew():
|
||||
"""Single-task crew that verifies a workload-identity-backed secret
|
||||
was successfully fetched at runtime.
|
||||
|
||||
Rotate the underlying secret in the cloud provider, kickoff again, and
|
||||
the credential fingerprint in the agent's report changes — without any
|
||||
re-deploy, worker restart, or input change. The crew prompt itself
|
||||
never references the secret value.
|
||||
"""
|
||||
|
||||
agents: list[BaseAgent]
|
||||
tasks: list[Task]
|
||||
|
||||
@agent
|
||||
def credential_checker(self) -> Agent:
|
||||
return Agent(
|
||||
config=self.agents_config["credential_checker"],
|
||||
tools=[CredentialEchoTool()],
|
||||
verbose=True,
|
||||
)
|
||||
|
||||
@task
|
||||
def verify_credential_task(self) -> Task:
|
||||
return Task(config=self.tasks_config["verify_credential_task"])
|
||||
|
||||
@crew
|
||||
def crew(self) -> Crew:
|
||||
return Crew(
|
||||
agents=self.agents,
|
||||
tasks=self.tasks,
|
||||
process=Process.sequential,
|
||||
verbose=True,
|
||||
)
|
||||
```
|
||||
|
||||
## الخطوة 5 — نشر الطاقم وتكوين متغير بيئة السر
|
||||
|
||||
انشر هذا الطاقم على CrewAI Platform تماماً كما تنشر أي طاقم آخر. ثم على صفحة **Environment Variables** الخاصة بعملية النشر:
|
||||
|
||||
- **Key:** `API_KEY` (يجب أن يطابق `ENV_VAR_NAME` في الأداة)
|
||||
- **Value Source:** بيانات الاعتماد المدعومة بـ WI التي أعدّتها في [AWS WI](/ar/enterprise/features/secrets-manager/aws-workload-identity) أو [GCP WI](/ar/enterprise/features/secrets-manager/gcp-workload-identity)
|
||||
- **Secret Name:** اسم السر في Secret Manager الخاص بمزود السحابة لديك
|
||||
|
||||
{/* SCREENSHOT: Environment Variables form with key=API_KEY, secret-backed value source selected, secret name filled → /images/secrets-manager/verify-rotation/01-env-var-form.png */}
|
||||
|
||||
## الخطوة 6 — تشغيل الإطلاق الأول
|
||||
|
||||
استبدل `<DEPLOYMENT_AUTH_TOKEN>` و `<DEPLOYMENT_HOST>` بالقيم من علامة التبويب **Run** الخاصة بعملية النشر.
|
||||
|
||||
```bash
|
||||
curl -m 60 \
|
||||
-H "Authorization: Bearer <DEPLOYMENT_AUTH_TOKEN>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-X POST https://<DEPLOYMENT_HOST>/kickoff \
|
||||
-d '{"inputs":{"current_year":"2026"}}'
|
||||
```
|
||||
|
||||
عندما يكتمل الإطلاق (بضع ثوان)، تحقق من إخراج الوكيل. سترى:
|
||||
|
||||
```
|
||||
[2026] Authenticated. credential.fingerprint=sha256:004421b993c9
|
||||
```
|
||||
|
||||
سجّل البصمة. هذا التجزئة مرتبط بشكل فريد بأي قيمة سر موجودة حالياً في مزود السحابة لديك.
|
||||
|
||||
## الخطوة 7 — تدوير السر في مزود السحابة
|
||||
|
||||
<Tabs>
|
||||
<Tab title="AWS">
|
||||
```bash
|
||||
aws secretsmanager update-secret \
|
||||
--region <REGION> \
|
||||
--secret-id <SECRET_NAME> \
|
||||
--secret-string "rotated value"
|
||||
```
|
||||
</Tab>
|
||||
|
||||
<Tab title="GCP">
|
||||
أضف إصداراً جديداً (يقرأ Secret Manager دائماً `latest`):
|
||||
|
||||
```bash
|
||||
echo -n "rotated value" | gcloud secrets versions add <SECRET_NAME> \
|
||||
--data-file=- \
|
||||
--project=<YOUR_PROJECT_ID>
|
||||
```
|
||||
</Tab>
|
||||
|
||||
<Tab title="Azure">
|
||||
```bash
|
||||
az keyvault secret set \
|
||||
--vault-name <VAULT_NAME> \
|
||||
--name <SECRET_NAME> \
|
||||
--value "rotated value"
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## الخطوة 8 — تشغيل إطلاق ثانٍ والمقارنة
|
||||
|
||||
```bash
|
||||
curl -m 60 \
|
||||
-H "Authorization: Bearer <DEPLOYMENT_AUTH_TOKEN>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-X POST https://<DEPLOYMENT_HOST>/kickoff \
|
||||
-d '{"inputs":{"current_year":"2026"}}'
|
||||
```
|
||||
|
||||
يُظهر إخراج الوكيل الآن **بصمة مختلفة**:
|
||||
|
||||
```
|
||||
[2026] Authenticated. credential.fingerprint=sha256:e2fc89848f72
|
||||
```
|
||||
|
||||
يُثبت هذا أن التدوير التُقط بواسطة عملية النشر الجارية دون إعادة نشر ولا إعادة تشغيل عامل ولا أي إجراء آخر من قِبل المشغّل.
|
||||
|
||||
## ما يتحقق منه هذا — وما لا يتحقق منه
|
||||
|
||||
**يتحقق من:**
|
||||
- يعمل إصدار رمز OIDC الخاص بـ WI من CrewAI Platform.
|
||||
- تقبل الثقة من جانب السحابة (مزود IAM OIDC لـ AWS، Workload Identity Pool لـ GCP، Federated Identity Credential لـ Azure) الرمز.
|
||||
- تمتلك الهوية من جانب السحابة (IAM Role / حساب خدمة GCP / Entra App Registration) وصولاً لقراءة السر.
|
||||
- تصل قيمة السر إلى `os.environ` لعملية العامل وقت الإطلاق.
|
||||
- تنتشر عمليات التدوير اللاحقة إلى الإطلاق التالي.
|
||||
|
||||
**لا يتحقق من:**
|
||||
- أن طواقم الإنتاج الفعلية لديك تتعامل مع التدوير بسلاسة — مثلاً، المهام طويلة الأمد التي تقرأ متغير البيئة مرة واحدة عند البدء ستستمر في استخدام القيمة القديمة حتى تنتهي المهمة. خطّط وفقاً لذلك: اقرأ الأسرار عند نقطة الاستخدام، وليس عند استيراد الوحدة.
|
||||
|
||||
## لماذا لا نُشير إلى السر مباشرةً في الموجه؟
|
||||
|
||||
سيضع عرض توضيحي يبدو أبسط قيمة السر مباشرةً في وصف مهمة (مثلاً، "البحث عن `{api_key}`") ويتفحص الموجه. **لا تفعل ذلك.** لسببين:
|
||||
|
||||
1. **يُسرّب السر إلى تتبعات استدعاء LLM والسجلات من جانب المزود.** يمكن لأي شخص لديه وصول للتتبعات قراءته.
|
||||
2. **يُغيّر وصف المهمة في كل إطلاق.** تُحدّد CrewAI Platform المهام بتجزئة MD5 للوصف؛ القيمة المُدوَّرة تعني أن التجزئة تتغير لكل إطلاق، مما يكسر ربط المهمة من وقت النشر إلى وقت التشغيل. العَرَض: تُسجَّل سجلات المهام كـ `pending_run` إلى الأبد، أو تُسجَّل بعض مهام طاقم متعدد المهام فقط.
|
||||
|
||||
يتجاوز النمط القائم على الأداة في هذا الدليل كلتا المشكلتين: الموجه ثابت، تقرأ الأداة متغير البيئة وقت التشغيل، وتصل فقط بصمة القيمة إلى LLM.
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
- [العودة إلى نظرة عامة على مدير الأسرار](/ar/enterprise/features/secrets-manager/overview)
|
||||
- بمجرد التحقق، أَسقط طاقم التحقق. يجب أن تتبع الطواقم الفعلية النمط نفسه: الوصول إلى الأسرار عبر `os.environ` داخل أداة، وعدم استبدالها أبداً في الموجهات.
|
||||
123
docs/edge/ar/enterprise/features/studio-flows.mdx
Normal file
123
docs/edge/ar/enterprise/features/studio-flows.mdx
Normal file
@@ -0,0 +1,123 @@
|
||||
---
|
||||
title: التدفقات في الاستوديو
|
||||
description: "أنشئ سير عمل يعتمد على الأحداث يجمع بين التحكم الحتمي خطوة بخطوة والذكاء الوكيلي — دون كتابة أي كود."
|
||||
icon: "diagram-project"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Info>
|
||||
**الطرح جارٍ حاليًا**: يجري طرح التدفقات في الاستوديو تدريجيًا خلال أسبوع 20 يوليو 2026. إذا لم يظهر لك خيار Flows في الاستوديو بعد، فهذا يعني أن الميزة لم تصل إلى مؤسستك بعد — عاود التحقق قريبًا.
|
||||
</Info>
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يدعم الاستوديو الآن إنشاء **التدفقات (Flows)** إلى جانب فرق Crew. التدفقات هي سير عمل يعتمد على الأحداث تتحكم فيه بدقة في الخطوات التي تُنفَّذ وترتيبها وشروط تنفيذها — بينما تُفوِّض العمل الذكي داخل كل خطوة إلى وكلاء الذكاء الاصطناعي.
|
||||
|
||||
لإنشاء تدفق، افتح الاستوديو وصف الأتمتة التي تريدها، ثم اختر **Flows** من المحدد بجوار مربع الإدخال.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## لماذا التدفقات؟
|
||||
|
||||
فرق Crew ممتازة عندما تريد أن يتعاون فريق من الوكلاء بشكل مستقل نحو هدف. لكن كثيرًا من الأتمتة الواقعية يحتاج إلى قدر أكبر من القابلية للتنبؤ: اجلب هذه البيانات أولًا، ثم لخصها، ثم انشر النتيجة — في كل مرة وبنفس الترتيب.
|
||||
|
||||
تمنحك التدفقات الأمرين معًا:
|
||||
|
||||
- **الحتمية حيث تهم**: تُنفَّذ الخطوات وفق تسلسل محدد وتفرعات صريحة، فتكون عمليات التشغيل قابلة للتنبؤ والتكرار وسهلة التصحيح.
|
||||
- **الذكاء حيث تحتاجه**: كل خطوة يشغّلها وكيل (أو فريق Crew كامل)، لذا يستفيد العمل داخل الخطوة — التلخيص والتقييم والصياغة واتخاذ القرار — من قدرات الاستدلال الكاملة للنموذج اللغوي.
|
||||
|
||||
هذا المزيج هو ما يجعل التدفقات مناسبة للأتمتة في بيئات الإنتاج: البنية مضمونة، والاستقلالية محصورة في الخطوات التي تحتاجها.
|
||||
|
||||
## إنشاء تدفق
|
||||
|
||||
صف ما تريده بلغة طبيعية وسيصمم مساعد الاستوديو (Studio Assistant) التدفق لك — بإنشاء الخطوات وربطها ببعضها وتهيئة الوكلاء وتكاملات التطبيقات التي تحتاجها كل خطوة. تعرض اللوحة (Canvas) على اليمين سير العمل الناتج كعُقد متصلة، ويمكنك مواصلة التحسين عبر المحادثة أو تعديل أي عقدة مباشرة.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
عندما تكون جاهزًا، استخدم **Run** لاختبار التدفق من البداية إلى النهاية، وافحص النتائج في تبويبي **Output** و**Traces**، ثم نفّذ **Deploy** عندما يستقر. يمكنك أيضًا مشاركة المشروع عبر **Share** أو تنزيل الكود المصدري عبر **Download**.
|
||||
|
||||
## أنواع العُقد
|
||||
|
||||
تتكون التدفقات من ثلاثة أنواع أساسية من العُقد. كل عقدة هي خطوة في سير العمل، ويمكنك المزج بينها بحرية.
|
||||
|
||||
### الوكيل المنفرد (Single Agent)
|
||||
|
||||
تُشغِّل عقدة Single Agent وكيلًا واحدًا لمهمة واحدة مركزة — وهي مثالية للخطوات محددة النطاق مثل جلب البيانات من تكامل، أو تحويل المحتوى، أو نشر رسالة.
|
||||
|
||||
عند النقر على عقدة الوكيل تُفتح تهيئتها الكاملة:
|
||||
|
||||
- **Task**: ما ينبغي أن تنجزه هذه الخطوة والمخرجات التي يجب أن تنتجها
|
||||
- **Profile**: دور الوكيل وهدفه وخلفيته
|
||||
- **Model**: النموذج اللغوي الذي يشغّل الوكيل
|
||||
- **Apps**: التكاملات التي يمكن للوكيل استخدامها (مثل Linear وSlack وHubSpot)
|
||||
- **Runtime Controls**: خيارات التخطيط قبل التنفيذ والتفويض والذاكرة
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### فرق Crew
|
||||
|
||||
تُضمِّن عقدة Crew فريقًا كاملًا — عدة وكلاء يتعاونون عبر عدة مهام — كخطوة واحدة في تدفقك. استخدمها عندما تكون الخطوة أكبر من أن يتولاها وكيل واحد، مثل تجميع البيانات وتلخيصها حسب الفريق ثم تنسيق النتيجة للتسليم.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
يكشف فتح عقدة Crew عن بنيتها الداخلية: المهام التي تؤديها، والوكلاء المعيّنين لكل مهمة، والتطبيقات التي يستخدمونها. يعمل الفريق بشكل مستقل داخل الخطوة، ثم يسلّم مخرجاته إلى العقدة التالية في التدفق.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
هذا هو نمط الحتمية مع الذكاء الوكيلي عمليًا: يضمن التدفق *متى* يعمل الفريق، بينما يضيف الفريق ذكاءً تعاونيًا إلى *كيفية* إنجاز العمل.
|
||||
|
||||
### الموجِّه (Router)
|
||||
|
||||
تُفرِّع عقدة Router التدفق بناءً على شروط، بحيث تسلك النتائج المختلفة مسارات مختلفة. على سبيل المثال، يمكن لتدفق توجيه العملاء المحتملين تقييم العملاء الواردين ثم توجيه ذوي الجودة العالية إلى خطوة إسناد المبيعات، مع تسجيل البقية للمتابعة والرعاية لاحقًا.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
الموجِّهات هي ما يجعل التدفقات معتمدة على الأحداث فعليًا: يتعامل سير العمل نفسه مع كل الحالات، لكن كل عملية تشغيل تتبع فقط الفرع الذي تستدعيه بياناتها — بلا خطوات مهدرة ولا غموض حول ما سيحدث تاليًا.
|
||||
|
||||
## المزامنة مع مستودع الوكلاء
|
||||
|
||||
لا يلزم أن يبقى الوكلاء الذين تنشئهم في التدفقات حبيسي مشروع واحد. تتضمن كل عقدة وكيل زر **Publish to Agent Repository** الذي يحفظ الوكيل — بدوره وهدفه وخلفيته ونموذجه وتهيئته — في [مستودع الوكلاء](/ar/enterprise/features/agent-repositories) الخاص بمؤسستك.
|
||||
|
||||
يعمل هذا في الاتجاهين:
|
||||
|
||||
- **النشر**: رقِّ وكيلًا حسّنته داخل تدفق إلى المستودع ليتمكن باقي الفرق والمشاريع من إعادة استخدامه.
|
||||
- **السحب**: أدخِل وكيلًا موجودًا من المستودع إلى تدفق جديد بدلًا من إعادة بنائه من الصفر.
|
||||
|
||||
ولأن وكلاء المستودع متزامنون عبر مؤسستك كلها، فإن أي تحسين على وكيل مشترك يعود بالنفع على كل تدفق يستخدمه — مما يحافظ على سلوك وكلاء متسق وخاضع للحوكمة وخالٍ من ازدواجية الجهد.
|
||||
|
||||
## أفضل الممارسات
|
||||
|
||||
- **اختر التدفق** عندما يكون للأتمتة تسلسل واضح أو منطق تفرّع؛ واختر Crew عندما يكون الطريق إلى الهدف مفتوحًا.
|
||||
- **أبقِ مهام الوكلاء مركزة** — عقدة Single Agent بوصف مهمة محكم أكثر موثوقية من وكيل مطلوب منه ثلاثة أشياء.
|
||||
- **استخدم الموجّهات لمعالجة كل حالة صراحةً**، بما في ذلك مسار "عدم فعل شيء" (مثل تسجيل العملاء المتجاوزين)، حتى تكون كل عمليات التشغيل محسوبة بالكامل.
|
||||
- **انشر الوكلاء المستقرين في مستودع الوكلاء** لتبني مؤسستك مكتبة مشتركة بدلًا من نسخ متوازية لمرة واحدة.
|
||||
- **اختبر عبر Run وافحص Traces** قبل النشر لاكتشاف مشكلات التكامل أو الموجِّهات النصية مبكرًا.
|
||||
|
||||
## ذات صلة
|
||||
|
||||
<CardGroup cols={4}>
|
||||
<Card title="استوديو الطاقم" href="/ar/enterprise/features/crew-studio" icon="pencil">
|
||||
أنشئ فرق Crew في الاستوديو.
|
||||
</Card>
|
||||
<Card title="مستودعات الوكلاء" href="/ar/enterprise/features/agent-repositories" icon="people-group">
|
||||
شارك الوكلاء وأعد استخدامهم عبر مؤسستك.
|
||||
</Card>
|
||||
<Card title="مفاهيم التدفقات" href="/ar/concepts/flows" icon="diagram-project">
|
||||
تعرّف على كيفية عمل التدفقات في إطار عمل CrewAI.
|
||||
</Card>
|
||||
<Card title="الأدوات والتكاملات" href="/ar/enterprise/features/tools-and-integrations" icon="plug">
|
||||
اربط التطبيقات التي يستخدمها وكلاؤك.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
261
docs/edge/ar/enterprise/features/tools-and-integrations.mdx
Normal file
261
docs/edge/ar/enterprise/features/tools-and-integrations.mdx
Normal file
@@ -0,0 +1,261 @@
|
||||
---
|
||||
title: الأدوات والتكاملات
|
||||
description: "اربط التطبيقات الخارجية وأدِر الأدوات الداخلية التي يمكن لوكلائك استخدامها."
|
||||
icon: "wrench"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
الأدوات والتكاملات هي المركز الرئيسي لربط تطبيقات الجهات الخارجية وإدارة الأدوات الداخلية التي يمكن لوكلائك استخدامها أثناء التشغيل.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## استكشاف
|
||||
|
||||
<Tabs>
|
||||
<Tab title="التكاملات" icon="plug">
|
||||
|
||||
## تطبيقات الوكلاء (التكاملات)
|
||||
|
||||
اربط تطبيقات المؤسسات (مثل Gmail وGoogle Drive وHubSpot وSlack) عبر OAuth لتمكين إجراءات الوكلاء.
|
||||
|
||||
{" "}
|
||||
<Steps>
|
||||
<Step title="الاتصال">
|
||||
انقر على <b>Connect</b> في أحد التطبيقات وأكمل عملية OAuth.
|
||||
</Step>
|
||||
<Step title="التهيئة">
|
||||
عدّل اختيارياً النطاقات والمشغلات وتوفر الإجراءات.
|
||||
</Step>
|
||||
<Step title="الاستخدام في الوكلاء">
|
||||
تصبح الخدمات المتصلة متاحة كأدوات لوكلائك.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
{" "}
|
||||
<Frame></Frame>
|
||||
|
||||
### ربط حسابك
|
||||
|
||||
1. انتقل إلى <Link href="https://app.crewai.com/crewai_plus/connectors">Integrations</Link>
|
||||
2. انقر على <b>Connect</b> في الخدمة المطلوبة
|
||||
3. أكمل تدفق OAuth وامنح النطاقات
|
||||
4. انسخ رمز Enterprise من <Link href="https://app.crewai.com/crewai_plus/settings/integrations">Integration Settings</Link>
|
||||
|
||||
{" "}
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### تثبيت أدوات التكامل
|
||||
|
||||
لاستخدام التكاملات محلياً، تحتاج إلى تثبيت أحدث حزمة `crewai-tools`.
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### إعداد متغيرات البيئة
|
||||
|
||||
{" "}
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])` يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز Enterprise الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
### مثال على الاستخدام
|
||||
|
||||
{" "}
|
||||
<Tip>
|
||||
استخدم النهج المبسط الجديد لدمج تطبيقات المؤسسات. ما عليك سوى تحديد
|
||||
التطبيق وإجراءاته مباشرة في تهيئة Agent.
|
||||
</Tip>
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Gmail capabilities
|
||||
email_agent = Agent(
|
||||
role="Email Manager",
|
||||
goal="Manage and organize email communications",
|
||||
backstory="An AI assistant specialized in email management and communication.",
|
||||
apps=['gmail', 'gmail/send_email'] # Using canonical name 'gmail'
|
||||
)
|
||||
|
||||
# Task to send an email
|
||||
email_task = Task(
|
||||
description="Draft and send a follow-up email to john@example.com about the project update",
|
||||
agent=email_agent,
|
||||
expected_output="Confirmation that email was sent successfully"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[email_agent],
|
||||
tasks=[email_task]
|
||||
)
|
||||
|
||||
# Run the crew
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية الأدوات
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with specific Gmail actions only
|
||||
gmail_agent = Agent(
|
||||
role="Gmail Manager",
|
||||
goal="Manage gmail communications and notifications",
|
||||
backstory="An AI assistant that helps coordinate gmail communications.",
|
||||
apps=['gmail/fetch_emails'] # Using canonical name with specific action
|
||||
)
|
||||
|
||||
notification_task = Task(
|
||||
description="Find the email from john@example.com",
|
||||
agent=gmail_agent,
|
||||
expected_output="Email found from john@example.com"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[gmail_agent],
|
||||
tasks=[notification_task]
|
||||
)
|
||||
```
|
||||
|
||||
في الطاقم المنشور، يمكنك تحديد الإجراءات المتاحة لكل تكامل من صفحة إعدادات الخدمة.
|
||||
|
||||
{" "}
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### عمليات النشر المحددة النطاق (مؤسسات متعددة المستخدمين)
|
||||
|
||||
يمكنك تحديد نطاق كل تكامل لمستخدم معين. على سبيل المثال، طاقم يتصل بـ Google يمكنه استخدام حساب Gmail لمستخدم محدد.
|
||||
|
||||
{" "}
|
||||
<Tip>مفيد عندما تحتاج فرق/مستخدمون مختلفون للحفاظ على فصل الوصول إلى البيانات.</Tip>
|
||||
|
||||
استخدم `user_bearer_token` لتحديد نطاق المصادقة للمستخدم الطالب. إذا لم يكن المستخدم مسجل الدخول، فلن يستخدم الطاقم التكاملات المتصلة. وإلا فسيعود إلى رمز الحامل الافتراضي المهيأ لعملية النشر.
|
||||
|
||||
{" "}
|
||||
<Frame></Frame>
|
||||
|
||||
{" "}
|
||||
<div id="catalog"></div>
|
||||
### الكتالوج
|
||||
|
||||
#### الاتصالات والتعاون
|
||||
|
||||
- Gmail — إدارة الرسائل الإلكترونية والمسودات
|
||||
- Slack — إشعارات وتنبيهات مساحة العمل
|
||||
- Microsoft — تكامل Office 365 وTeams
|
||||
|
||||
#### إدارة المشاريع
|
||||
|
||||
- Jira — تتبع المشكلات وإدارة المشاريع
|
||||
- ClickUp — إدارة المهام والإنتاجية
|
||||
- Asana — تنسيق مهام ومشاريع الفريق
|
||||
- Notion — إدارة الصفحات وقواعد البيانات
|
||||
- Linear — تتبع مشاريع البرمجيات والأخطاء
|
||||
- GitHub — إدارة المستودعات والمشكلات
|
||||
|
||||
#### إدارة علاقات العملاء
|
||||
|
||||
- Salesforce — إدارة حسابات وفرص CRM
|
||||
- HubSpot — إدارة خط أنابيب المبيعات وجهات الاتصال
|
||||
- Zendesk — إدارة تذاكر دعم العملاء
|
||||
|
||||
#### الأعمال والمالية
|
||||
|
||||
- Stripe — معالجة المدفوعات وإدارة العملاء
|
||||
- Shopify — إدارة متجر ومنتجات التجارة الإلكترونية
|
||||
|
||||
#### الإنتاجية والتخزين
|
||||
|
||||
- Google Sheets — مزامنة بيانات جداول البيانات
|
||||
- Google Calendar — إدارة الأحداث والجداول
|
||||
- Box — تخزين الملفات وإدارة المستندات
|
||||
|
||||
...والمزيد قادم!
|
||||
|
||||
</Tab>
|
||||
<Tab title="الأدوات الداخلية" icon="toolbox">
|
||||
|
||||
## الأدوات الداخلية
|
||||
|
||||
أنشئ أدوات مخصصة محلياً، وانشرها في مستودع أدوات CrewAI AMP واستخدمها في وكلائك.
|
||||
|
||||
{" "}
|
||||
<Tip>
|
||||
قبل تشغيل الأوامر أدناه، تأكد من تسجيل الدخول إلى حساب CrewAI AMP
|
||||
بتشغيل هذا الأمر: ```bash crewai login ```
|
||||
</Tip>
|
||||
|
||||
{" "}
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
{" "}
|
||||
<Steps>
|
||||
<Step title="الإنشاء">
|
||||
أنشئ أداة جديدة محلياً. ```bash crewai tool create your-tool ```
|
||||
</Step>
|
||||
<Step title="النشر">
|
||||
انشر الأداة في مستودع أدوات CrewAI AMP. ```bash crewai tool
|
||||
publish ```
|
||||
</Step>
|
||||
<Step title="التثبيت">
|
||||
ثبّت الأداة من مستودع أدوات CrewAI AMP. ```bash crewai tool
|
||||
install your-tool ```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
الإدارة:
|
||||
|
||||
- الاسم والوصف
|
||||
- الرؤية (خاص / عام)
|
||||
- متغيرات البيئة المطلوبة
|
||||
- سجل الإصدارات والتنزيلات
|
||||
- وصول الفرق والأدوار
|
||||
|
||||
{" "}
|
||||
<Frame></Frame>
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## ذو صلة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card
|
||||
title="مستودع الأدوات"
|
||||
href="/ar/enterprise/guides/tool-repository#tool-repository"
|
||||
icon="toolbox"
|
||||
>
|
||||
أنشئ وانشر وأدِر إصدارات الأدوات المخصصة لمؤسستك.
|
||||
</Card>
|
||||
<Card
|
||||
title="أتمتة Webhook"
|
||||
href="/ar/enterprise/guides/webhook-automation"
|
||||
icon="bolt"
|
||||
>
|
||||
أتمت سير العمل وتكامل مع المنصات والخدمات الخارجية.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
148
docs/edge/ar/enterprise/features/traces.mdx
Normal file
148
docs/edge/ar/enterprise/features/traces.mdx
Normal file
@@ -0,0 +1,148 @@
|
||||
---
|
||||
title: التتبعات
|
||||
description: "استخدام التتبعات لمراقبة طواقمك"
|
||||
icon: "timeline"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
توفر التتبعات رؤية شاملة لعمليات تنفيذ طواقمك، مما يساعدك على مراقبة الأداء وتصحيح الأخطاء وتحسين سير عمل وكلاء الذكاء الاصطناعي.
|
||||
|
||||
## ما هي التتبعات؟
|
||||
|
||||
التتبعات في CrewAI AMP هي سجلات تنفيذ مفصلة تلتقط كل جانب من جوانب عمل طاقمك، من المدخلات الأولية إلى المخرجات النهائية. تسجل:
|
||||
|
||||
- أفكار الوكلاء واستدلالاتهم
|
||||
- تفاصيل تنفيذ المهام
|
||||
- استخدام الأدوات ومخرجاتها
|
||||
- مقاييس استهلاك الرموز
|
||||
- أوقات التنفيذ
|
||||
- تقديرات التكلفة
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
## الوصول إلى التتبعات
|
||||
|
||||
<Steps>
|
||||
<Step title="الانتقال إلى علامة تبويب التتبعات">
|
||||
في لوحة تحكم CrewAI AMP، انقر على **Traces** لعرض جميع سجلات التنفيذ.
|
||||
</Step>
|
||||
|
||||
<Step title="اختيار عملية تنفيذ">
|
||||
سترى قائمة بجميع عمليات تنفيذ الطاقم، مرتبة حسب التاريخ. انقر على أي عملية تنفيذ لعرض تتبعها المفصل.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## فهم واجهة التتبع
|
||||
|
||||
تنقسم واجهة التتبع إلى عدة أقسام، يقدم كل منها رؤى مختلفة حول تنفيذ طاقمك:
|
||||
|
||||
### 1. ملخص التنفيذ
|
||||
|
||||
يعرض القسم العلوي مقاييس عالية المستوى حول التنفيذ:
|
||||
|
||||
- **إجمالي الرموز**: عدد الرموز المستهلكة عبر جميع المهام
|
||||
- **رموز الطلب**: الرموز المستخدمة في الطلبات إلى LLM
|
||||
- **رموز الإكمال**: الرموز المُنشأة في استجابات LLM
|
||||
- **الطلبات**: عدد استدعاءات API المُجراة
|
||||
- **وقت التنفيذ**: المدة الإجمالية لتشغيل الطاقم
|
||||
- **التكلفة المقدرة**: التكلفة التقريبية بناءً على استخدام الرموز
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
### 2. المهام والوكلاء
|
||||
|
||||
يعرض هذا القسم جميع المهام والوكلاء الذين كانوا جزءاً من تنفيذ الطاقم:
|
||||
|
||||
- اسم المهمة وتعيين الوكيل
|
||||
- الوكلاء ونماذج LLM المستخدمة لكل مهمة
|
||||
- الحالة (مكتملة/فاشلة)
|
||||
- وقت التنفيذ الفردي للمهمة
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
### 3. المخرجات النهائية
|
||||
|
||||
يعرض النتيجة النهائية التي أنتجها الطاقم بعد اكتمال جميع المهام.
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
### 4. الجدول الزمني للتنفيذ
|
||||
|
||||
تمثيل مرئي لوقت بدء وانتهاء كل مهمة، يساعدك على تحديد نقاط الاختناق أو أنماط التنفيذ المتوازي.
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
### 5. عرض المهمة المفصل
|
||||
|
||||
عند النقر على مهمة محددة في الجدول الزمني أو قائمة المهام، سترى:
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
- **مفتاح المهمة**: معرّف فريد للمهمة
|
||||
- **معرّف المهمة**: معرّف تقني في النظام
|
||||
- **الحالة**: الحالة الحالية (مكتملة/قيد التشغيل/فاشلة)
|
||||
- **الوكيل**: الوكيل الذي نفّذ المهمة
|
||||
- **LLM**: نموذج اللغة المستخدم لهذه المهمة
|
||||
- **وقت البدء/الانتهاء**: متى بدأت المهمة واكتملت
|
||||
- **وقت التنفيذ**: مدة هذه المهمة المحددة
|
||||
- **وصف المهمة**: ما طُلب من الوكيل تنفيذه
|
||||
- **المخرجات المتوقعة**: تنسيق المخرجات المطلوب
|
||||
- **المدخلات**: أي مدخلات مقدمة لهذه المهمة من مهام سابقة
|
||||
- **المخرجات**: النتيجة الفعلية التي أنتجها الوكيل
|
||||
|
||||
## استخدام التتبعات لتصحيح الأخطاء
|
||||
|
||||
التتبعات لا تقدر بثمن لاستكشاف المشكلات في طواقمك:
|
||||
|
||||
<Steps>
|
||||
<Step title="تحديد نقاط الفشل">
|
||||
عندما لا ينتج تنفيذ الطاقم النتائج المتوقعة، افحص التتبع لمعرفة أين حدث الخطأ. ابحث عن:
|
||||
|
||||
- المهام الفاشلة
|
||||
- قرارات الوكيل غير المتوقعة
|
||||
- أخطاء استخدام الأدوات
|
||||
- التعليمات المُساء فهمها
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="تحسين الأداء">
|
||||
استخدم مقاييس التنفيذ لتحديد نقاط اختناق الأداء:
|
||||
|
||||
- المهام التي استغرقت وقتاً أطول من المتوقع
|
||||
- الاستخدام المفرط للرموز
|
||||
- عمليات الأدوات المكررة
|
||||
- استدعاءات API غير الضرورية
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="تحسين كفاءة التكلفة">
|
||||
حلل استخدام الرموز وتقديرات التكلفة لتحسين كفاءة طاقمك:
|
||||
|
||||
- فكّر في استخدام نماذج أصغر للمهام الأبسط
|
||||
- صقل الطلبات لتكون أكثر إيجازاً
|
||||
- خزّن المعلومات المُوصول إليها بشكل متكرر مؤقتاً
|
||||
- نظّم المهام لتقليل العمليات المكررة
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## الأداء والتجميع
|
||||
|
||||
يجمّع CrewAI تحميلات التتبع لتقليل العبء في عمليات التشغيل ذات الحجم الكبير:
|
||||
|
||||
- يقوم TraceBatchManager بتخزين الأحداث مؤقتاً وإرسالها في دفعات عبر عميل Plus API
|
||||
- يقلل حركة الشبكة ويحسّن الموثوقية في الاتصالات غير المستقرة
|
||||
- يُفعّل تلقائياً في مستمع التتبع الافتراضي؛ لا حاجة لتهيئة
|
||||
|
||||
يوفر ذلك تتبعاً أكثر استقراراً تحت الحمل مع الحفاظ على بيانات القياس المفصلة للمهام/الوكلاء.
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تحليل التتبعات أو أي ميزات أخرى في
|
||||
CrewAI AMP.
|
||||
</Card>
|
||||
172
docs/edge/ar/enterprise/features/webhook-streaming.mdx
Normal file
172
docs/edge/ar/enterprise/features/webhook-streaming.mdx
Normal file
@@ -0,0 +1,172 @@
|
||||
---
|
||||
title: بث Webhook
|
||||
description: "استخدام بث Webhook لإرسال الأحداث إلى webhook الخاص بك"
|
||||
icon: "webhook"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يتيح لك بث أحداث Enterprise تلقي تحديثات webhook في الوقت الفعلي حول طواقمك وتدفقاتك المنشورة على CrewAI AMP، مثل استدعاءات النماذج واستخدام الأدوات وخطوات التدفق.
|
||||
|
||||
## الاستخدام
|
||||
|
||||
عند استخدام Kickoff API، أضف كائن `webhooks` إلى طلبك، على سبيل المثال:
|
||||
|
||||
```json
|
||||
{
|
||||
"inputs": { "foo": "bar" },
|
||||
"webhooks": {
|
||||
"events": ["crew_kickoff_started", "llm_call_started"],
|
||||
"url": "https://your.endpoint/webhook",
|
||||
"realtime": false,
|
||||
"authentication": {
|
||||
"strategy": "bearer",
|
||||
"token": "my-secret-token"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا تم تعيين `realtime` إلى `true`، يتم تسليم كل حدث بشكل فردي وفوري، على حساب أداء الطاقم/التدفق.
|
||||
|
||||
## تنسيق Webhook
|
||||
|
||||
يرسل كل webhook قائمة بالأحداث:
|
||||
|
||||
```json
|
||||
{
|
||||
"events": [
|
||||
{
|
||||
"id": "event-id",
|
||||
"execution_id": "crew-run-id",
|
||||
"timestamp": "2025-02-16T10:58:44.965Z",
|
||||
"type": "llm_call_started",
|
||||
"data": {
|
||||
"model": "gpt-4",
|
||||
"messages": [
|
||||
{ "role": "system", "content": "You are an assistant." },
|
||||
{ "role": "user", "content": "Summarize this article." }
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
يختلف هيكل كائن `data` حسب نوع الحدث. راجع [قائمة الأحداث](https://github.com/crewAIInc/crewAI/tree/main/lib/crewai/src/crewai/events/types) على GitHub.
|
||||
|
||||
نظراً لأن الطلبات تُرسل عبر HTTP، لا يمكن ضمان ترتيب الأحداث. إذا كنت تحتاج الترتيب، استخدم حقل `timestamp`.
|
||||
|
||||
## الأحداث المدعومة
|
||||
|
||||
يدعم CrewAI كلاً من أحداث النظام والأحداث المخصصة في بث أحداث Enterprise. تُرسل هذه الأحداث إلى نقطة نهاية webhook المُهيأة أثناء تنفيذ الطاقم والتدفق.
|
||||
|
||||
### أحداث التدفق:
|
||||
|
||||
- `flow_created`
|
||||
- `flow_started`
|
||||
- `flow_finished`
|
||||
- `flow_plot`
|
||||
- `method_execution_started`
|
||||
- `method_execution_finished`
|
||||
- `method_execution_failed`
|
||||
|
||||
### أحداث الوكيل:
|
||||
|
||||
- `agent_execution_started`
|
||||
- `agent_execution_completed`
|
||||
- `agent_execution_error`
|
||||
- `lite_agent_execution_started`
|
||||
- `lite_agent_execution_completed`
|
||||
- `lite_agent_execution_error`
|
||||
- `agent_logs_started`
|
||||
- `agent_logs_execution`
|
||||
- `agent_evaluation_started`
|
||||
- `agent_evaluation_completed`
|
||||
- `agent_evaluation_failed`
|
||||
|
||||
### أحداث الطاقم:
|
||||
|
||||
- `crew_kickoff_started`
|
||||
- `crew_kickoff_completed`
|
||||
- `crew_kickoff_failed`
|
||||
- `crew_train_started`
|
||||
- `crew_train_completed`
|
||||
- `crew_train_failed`
|
||||
- `crew_test_started`
|
||||
- `crew_test_completed`
|
||||
- `crew_test_failed`
|
||||
- `crew_test_result`
|
||||
|
||||
### أحداث المهام:
|
||||
|
||||
- `task_started`
|
||||
- `task_completed`
|
||||
- `task_failed`
|
||||
- `task_evaluation`
|
||||
|
||||
### أحداث استخدام الأدوات:
|
||||
|
||||
- `tool_usage_started`
|
||||
- `tool_usage_finished`
|
||||
- `tool_usage_error`
|
||||
- `tool_validate_input_error`
|
||||
- `tool_selection_error`
|
||||
- `tool_execution_error`
|
||||
|
||||
### أحداث LLM:
|
||||
|
||||
- `llm_call_started`
|
||||
- `llm_call_completed`
|
||||
- `llm_call_failed`
|
||||
- `llm_stream_chunk`
|
||||
|
||||
### أحداث حواجز LLM:
|
||||
|
||||
- `llm_guardrail_started`
|
||||
- `llm_guardrail_completed`
|
||||
|
||||
### أحداث الذاكرة:
|
||||
|
||||
- `memory_query_started`
|
||||
- `memory_query_completed`
|
||||
- `memory_query_failed`
|
||||
- `memory_save_started`
|
||||
- `memory_save_completed`
|
||||
- `memory_save_failed`
|
||||
- `memory_retrieval_started`
|
||||
- `memory_retrieval_completed`
|
||||
|
||||
### أحداث المعرفة:
|
||||
|
||||
- `knowledge_search_query_started`
|
||||
- `knowledge_search_query_completed`
|
||||
- `knowledge_search_query_failed`
|
||||
- `knowledge_query_started`
|
||||
- `knowledge_query_completed`
|
||||
- `knowledge_query_failed`
|
||||
|
||||
### أحداث الاستدلال:
|
||||
|
||||
- `agent_reasoning_started`
|
||||
- `agent_reasoning_completed`
|
||||
- `agent_reasoning_failed`
|
||||
|
||||
تتطابق أسماء الأحداث مع ناقل الأحداث الداخلي. راجع GitHub للقائمة الكاملة للأحداث.
|
||||
|
||||
يمكنك إصدار أحداثك المخصصة الخاصة، وسيتم تسليمها عبر تدفق webhook جنباً إلى جنب مع أحداث النظام.
|
||||
|
||||
<CardGroup>
|
||||
<Card
|
||||
title="GitHub"
|
||||
icon="github"
|
||||
href="https://github.com/crewAIInc/crewAI/tree/main/src/crewai/utilities/events"
|
||||
>
|
||||
القائمة الكاملة للأحداث
|
||||
</Card>
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تكامل webhook أو
|
||||
استكشاف الأخطاء.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
321
docs/edge/ar/enterprise/guides/automation-triggers.mdx
Normal file
321
docs/edge/ar/enterprise/guides/automation-triggers.mdx
Normal file
@@ -0,0 +1,321 @@
|
||||
---
|
||||
title: "نظرة عامة على المشغلات"
|
||||
description: "فهم كيفية عمل مشغلات CrewAI AMP وكيفية إدارتها وأين تجد أدلة التكامل الخاصة بكل خدمة"
|
||||
icon: "face-smile"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
تربط مشغلات CrewAI AMP أتمتاتك بالأحداث الفورية عبر الأدوات التي تستخدمها فرقك بالفعل. بدلاً من الاستعلام المتكرر عن الأنظمة أو الاعتماد على التشغيل اليدوي، تستمع المشغلات للتغييرات — رسائل بريد إلكتروني جديدة، تحديثات التقويم، تغييرات حالة CRM — وتطلق فوراً الطاقم أو التدفق الذي تحدده.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### أدلة التكامل
|
||||
|
||||
تقدم الأدلة المفصلة شرحاً لعملية الإعداد وأمثلة على سير العمل لكل تكامل:
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="مشغل Gmail" icon="envelope">
|
||||
<a href="/ar/enterprise/guides/gmail-trigger">فعّل الطواقم عند وصول رسائل بريد إلكتروني أو تحديث سلاسل المحادثات.</a>
|
||||
</Card>
|
||||
|
||||
{" "}
|
||||
<Card title="مشغل Google Calendar" icon="calendar-days">
|
||||
<a href="/ar/enterprise/guides/google-calendar-trigger">
|
||||
استجب لأحداث التقويم عند إنشائها أو تحديثها أو إلغائها.
|
||||
</a>
|
||||
</Card>
|
||||
|
||||
{" "}
|
||||
<Card title="مشغل Google Drive" icon="folder-open">
|
||||
<a href="/ar/enterprise/guides/google-drive-trigger">
|
||||
تعامل مع تحميلات وتعديلات وحذف ملفات Drive.
|
||||
</a>
|
||||
</Card>
|
||||
|
||||
{" "}
|
||||
<Card title="مشغل Outlook" icon="envelope-open">
|
||||
<a href="/ar/enterprise/guides/outlook-trigger">
|
||||
أتمت الاستجابات لرسائل Outlook الجديدة وتحديثات التقويم.
|
||||
</a>
|
||||
</Card>
|
||||
|
||||
{" "}
|
||||
<Card title="مشغل OneDrive" icon="cloud">
|
||||
<a href="/ar/enterprise/guides/onedrive-trigger">
|
||||
راقب نشاط الملفات وتغييرات المشاركة في OneDrive.
|
||||
</a>
|
||||
</Card>
|
||||
|
||||
{" "}
|
||||
<Card title="مشغل Microsoft Teams" icon="comments">
|
||||
<a href="/ar/enterprise/guides/microsoft-teams-trigger">
|
||||
ابدأ سير العمل عند إنشاء محادثات Teams جديدة.
|
||||
</a>
|
||||
</Card>
|
||||
|
||||
{" "}
|
||||
<Card title="مشغل HubSpot" icon="hubspot">
|
||||
<a href="/ar/enterprise/guides/hubspot-trigger">
|
||||
أطلق الأتمتات من سير عمل HubSpot وأحداث دورة الحياة.
|
||||
</a>
|
||||
</Card>
|
||||
|
||||
{" "}
|
||||
<Card title="مشغل Salesforce" icon="salesforce">
|
||||
<a href="/ar/enterprise/guides/salesforce-trigger">
|
||||
اربط عمليات Salesforce بـ CrewAI لأتمتة CRM.
|
||||
</a>
|
||||
</Card>
|
||||
|
||||
{" "}
|
||||
<Card title="مشغل Slack" icon="slack">
|
||||
<a href="/ar/enterprise/guides/slack-trigger">
|
||||
ابدأ الطواقم مباشرة من أوامر Slack.
|
||||
</a>
|
||||
</Card>
|
||||
|
||||
<Card title="مشغل Zapier" icon="bolt">
|
||||
<a href="/ar/enterprise/guides/zapier-trigger">اربط CrewAI بآلاف التطبيقات المدعومة من Zapier.</a>
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## قدرات المشغلات
|
||||
|
||||
مع المشغلات، يمكنك:
|
||||
|
||||
- **الاستجابة للأحداث الفورية** - تنفيذ سير العمل تلقائياً عند استيفاء شروط محددة
|
||||
- **التكامل مع الأنظمة الخارجية** - الاتصال بمنصات مثل Gmail وOutlook وOneDrive وJIRA وSlack وStripe والمزيد
|
||||
- **توسيع نطاق الأتمتة** - التعامل مع أحداث كبيرة الحجم دون تدخل يدوي
|
||||
- **الحفاظ على السياق** - الوصول إلى بيانات المشغل داخل طواقمك وتدفقاتك
|
||||
|
||||
## إدارة المشغلات
|
||||
|
||||
### عرض المشغلات المتاحة
|
||||
|
||||
للوصول إلى مشغلات الأتمتة وإدارتها:
|
||||
|
||||
1. انتقل إلى عملية النشر في لوحة تحكم CrewAI
|
||||
2. انقر على علامة تبويب **Triggers** لعرض جميع تكاملات المشغلات المتاحة
|
||||
|
||||
<Frame caption="مثال على مشغلات الأتمتة المتاحة لنشر Gmail">
|
||||
<img
|
||||
src="/images/enterprise/list-available-triggers.png"
|
||||
alt="قائمة مشغلات الأتمتة المتاحة"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
يعرض هذا العرض جميع تكاملات المشغلات المتاحة لعملية النشر، مع حالة الاتصال الحالية.
|
||||
|
||||
### تفعيل وتعطيل المشغلات
|
||||
|
||||
يمكن تفعيل أو تعطيل كل مشغل بسهولة باستخدام مفتاح التبديل:
|
||||
|
||||
<Frame caption="تفعيل أو تعطيل المشغلات بالتبديل">
|
||||
<img
|
||||
src="/images/enterprise/trigger-selected.png"
|
||||
alt="تفعيل أو تعطيل المشغلات بالتبديل"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
- **مُفعّل (تبديل أزرق)**: المشغل نشط وسينفذ عملية النشر تلقائياً عند حدوث الأحداث المحددة
|
||||
- **مُعطّل (تبديل رمادي)**: المشغل غير نشط ولن يستجيب للأحداث
|
||||
|
||||
انقر ببساطة على التبديل لتغيير حالة المشغل. تسري التغييرات فوراً.
|
||||
|
||||
### مراقبة عمليات تنفيذ المشغلات
|
||||
|
||||
تتبع أداء وسجل عمليات التنفيذ المُشغّلة:
|
||||
|
||||
<Frame caption="قائمة عمليات التنفيذ المُشغّلة بواسطة الأتمتة">
|
||||
<img
|
||||
src="/images/enterprise/list-executions.png"
|
||||
alt="قائمة عمليات التنفيذ المُشغّلة بواسطة الأتمتة"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## بناء أتمتات مدفوعة بالمشغلات
|
||||
|
||||
قبل بناء أتمتتك، من المفيد فهم هيكل حمولات المشغلات التي ستتلقاها طواقمك وتدفقاتك.
|
||||
|
||||
### قائمة فحص إعداد المشغل
|
||||
|
||||
قبل ربط مشغل بالإنتاج، تأكد من:
|
||||
|
||||
- ربط التكامل تحت **Tools & Integrations** وإكمال خطوات OAuth أو مفتاح API
|
||||
- تفعيل تبديل المشغل في عملية النشر التي يجب أن تستجيب للأحداث
|
||||
- توفير متغيرات البيئة المطلوبة (رموز API، معرّفات المستأجر، الأسرار المشتركة)
|
||||
- إنشاء أو تحديث المهام التي يمكنها تحليل الحمولة الواردة في أول مهمة طاقم أو خطوة تدفق
|
||||
- تحديد ما إذا كنت ستمرر سياق المشغل تلقائياً باستخدام `allow_crewai_trigger_context`
|
||||
- إعداد المراقبة — سجلات webhook وسجل تنفيذ CrewAI والتنبيهات الخارجية الاختيارية
|
||||
|
||||
### اختبار المشغلات محلياً باستخدام CLI
|
||||
|
||||
يوفر CrewAI CLI أوامر قوية لمساعدتك في تطوير واختبار الأتمتات المدفوعة بالمشغلات دون النشر في الإنتاج.
|
||||
|
||||
#### عرض المشغلات المتاحة
|
||||
|
||||
اعرض جميع المشغلات المتاحة للتكاملات المتصلة:
|
||||
|
||||
```bash
|
||||
crewai triggers list
|
||||
```
|
||||
|
||||
يعرض هذا الأمر جميع المشغلات المتاحة بناءً على تكاملاتك المتصلة، ويظهر:
|
||||
|
||||
- اسم التكامل وحالة الاتصال
|
||||
- أنواع المشغلات المتاحة
|
||||
- أسماء وأوصاف المشغلات
|
||||
|
||||
#### محاكاة تنفيذ المشغل
|
||||
|
||||
اختبر طاقمك بحمولات مشغل واقعية قبل النشر:
|
||||
|
||||
```bash
|
||||
crewai triggers run <trigger_name>
|
||||
```
|
||||
|
||||
على سبيل المثال:
|
||||
|
||||
```bash
|
||||
crewai triggers run microsoft_onedrive/file_changed
|
||||
```
|
||||
|
||||
يقوم هذا الأمر بـ:
|
||||
|
||||
- تنفيذ طاقمك محلياً
|
||||
- تمرير حمولة مشغل كاملة وواقعية
|
||||
- محاكاة كيفية استدعاء طاقمك في الإنتاج بالضبط
|
||||
|
||||
<Warning>
|
||||
**ملاحظات تطوير مهمة:**
|
||||
- استخدم `crewai triggers run <trigger>` لمحاكاة تنفيذ المشغل أثناء التطوير
|
||||
- استخدام `crewai run` لن يحاكي استدعاءات المشغل ولن يمرر حمولة المشغل
|
||||
- بعد النشر، سيتم تنفيذ طاقمك بحمولة المشغل الفعلية
|
||||
- إذا كان طاقمك يتوقع معاملات غير موجودة في حمولة المشغل، فقد يفشل التنفيذ
|
||||
</Warning>
|
||||
|
||||
### المشغلات مع الطاقم
|
||||
|
||||
تعمل تعريفات طاقمك الحالية بسلاسة مع المشغلات، تحتاج فقط إلى مهمة لتحليل الحمولة المستلمة:
|
||||
|
||||
```python
|
||||
@CrewBase
|
||||
class MyAutomatedCrew:
|
||||
@agent
|
||||
def researcher(self) -> Agent:
|
||||
return Agent(
|
||||
config=self.agents_config['researcher'],
|
||||
)
|
||||
|
||||
@task
|
||||
def parse_trigger_payload(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['parse_trigger_payload'],
|
||||
agent=self.researcher(),
|
||||
)
|
||||
|
||||
@task
|
||||
def analyze_trigger_content(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['analyze_trigger_data'],
|
||||
agent=self.researcher(),
|
||||
)
|
||||
```
|
||||
|
||||
سيتلقى الطاقم تلقائياً حمولة المشغل ويمكنه الوصول إليها عبر آليات سياق CrewAI القياسية.
|
||||
|
||||
<Note>
|
||||
يمكن أن تتضمن مدخلات الطاقم والتدفق `crewai_trigger_payload`. يحقن CrewAI
|
||||
هذه الحمولة تلقائياً: - المهام: تُلحق بوصف المهمة الأولى افتراضياً ("Trigger Payload: {crewai_trigger_payload}") - التحكم
|
||||
عبر `allow_crewai_trigger_context`: عيّن `True` للحقن دائماً، `False` لعدم
|
||||
الحقن أبداً - التدفقات: أي دالة `@start()` تقبل معامل
|
||||
`crewai_trigger_payload` ستستلمه
|
||||
</Note>
|
||||
|
||||
### التكامل مع التدفقات
|
||||
|
||||
للتدفقات، لديك تحكم أكبر في كيفية التعامل مع بيانات المشغل:
|
||||
|
||||
#### الوصول إلى حمولة المشغل
|
||||
|
||||
جميع دوال `@start()` في تدفقاتك ستقبل معاملاً إضافياً يسمى `crewai_trigger_payload`:
|
||||
|
||||
```python
|
||||
from crewai.flow import Flow, start, listen
|
||||
|
||||
class MyAutomatedFlow(Flow):
|
||||
@start()
|
||||
def handle_trigger(self, crewai_trigger_payload: dict = None):
|
||||
"""
|
||||
This start method can receive trigger data
|
||||
"""
|
||||
if crewai_trigger_payload:
|
||||
# Process the trigger data
|
||||
trigger_id = crewai_trigger_payload.get('id')
|
||||
event_data = crewai_trigger_payload.get('payload', {})
|
||||
|
||||
# Store in flow state for use by other methods
|
||||
self.state.trigger_id = trigger_id
|
||||
self.state.trigger_type = event_data
|
||||
|
||||
return event_data
|
||||
|
||||
# Handle manual execution
|
||||
return None
|
||||
|
||||
@listen(handle_trigger)
|
||||
def process_data(self, trigger_data):
|
||||
"""
|
||||
Process the data from the trigger
|
||||
"""
|
||||
# ... process the trigger
|
||||
```
|
||||
|
||||
#### تشغيل الطواقم من التدفقات
|
||||
|
||||
عند تشغيل طاقم داخل تدفق تم تشغيله بمشغل، مرر حمولة المشغل كما هي:
|
||||
|
||||
```python
|
||||
@start()
|
||||
def delegate_to_crew(self, crewai_trigger_payload: dict = None):
|
||||
"""
|
||||
Delegate processing to a specialized crew
|
||||
"""
|
||||
crew = MySpecializedCrew()
|
||||
|
||||
# Pass the trigger payload to the crew
|
||||
result = crew.crew().kickoff(
|
||||
inputs={
|
||||
'a_custom_parameter': "custom_value",
|
||||
'crewai_trigger_payload': crewai_trigger_payload
|
||||
},
|
||||
)
|
||||
|
||||
return result
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
**المشغل لا يعمل:**
|
||||
|
||||
- تحقق من أن المشغل مُفعّل في علامة تبويب Triggers الخاصة بعملية النشر
|
||||
- تحقق من حالة اتصال التكامل تحت Tools & Integrations
|
||||
- تأكد من تهيئة جميع متغيرات البيئة المطلوبة بشكل صحيح
|
||||
|
||||
**فشل التنفيذ:**
|
||||
|
||||
- تحقق من سجلات التنفيذ لتفاصيل الأخطاء
|
||||
- استخدم `crewai triggers run <trigger_name>` للاختبار محلياً ورؤية هيكل الحمولة بالضبط
|
||||
- تحقق من أن طاقمك يمكنه التعامل مع معامل `crewai_trigger_payload`
|
||||
- تأكد من أن طاقمك لا يتوقع معاملات غير مضمنة في حمولة المشغل
|
||||
|
||||
**مشاكل التطوير:**
|
||||
|
||||
- اختبر دائماً باستخدام `crewai triggers run <trigger>` قبل النشر لرؤية الحمولة الكاملة
|
||||
- تذكر أن `crewai run` لا يحاكي استدعاءات المشغل — استخدم `crewai triggers run` بدلاً من ذلك
|
||||
- استخدم `crewai triggers list` للتحقق من المشغلات المتاحة لتكاملاتك المتصلة
|
||||
- بعد النشر، سيتلقى طاقمك حمولة المشغل الفعلية، لذا اختبر بدقة محلياً أولاً
|
||||
|
||||
تحوّل مشغلات الأتمتة عمليات نشر CrewAI إلى أنظمة استجابة مدفوعة بالأحداث يمكنها التكامل بسلاسة مع عمليات عملك وأدواتك الحالية.
|
||||
54
docs/edge/ar/enterprise/guides/azure-openai-setup.mdx
Normal file
54
docs/edge/ar/enterprise/guides/azure-openai-setup.mdx
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: "إعداد Azure OpenAI"
|
||||
description: "تهيئة Azure OpenAI مع Crew Studio لاتصالات LLM المؤسسية"
|
||||
icon: "microsoft"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يرشدك هذا الدليل خلال ربط Azure OpenAI مع Crew Studio لعمليات الذكاء الاصطناعي المؤسسية السلسة.
|
||||
|
||||
## عملية الإعداد
|
||||
|
||||
<Steps>
|
||||
<Step title="الوصول إلى Azure AI Foundry">
|
||||
1. في Azure، انتقل إلى [Azure AI Foundry](https://ai.azure.com/) > اختر نشر Azure OpenAI الخاص بك.
|
||||
2. في القائمة اليسرى، انقر على `Deployments`. إذا لم يكن لديك نشر، أنشئ واحداً بالنموذج المطلوب.
|
||||
3. بمجرد الإنشاء، اختر النشر وحدد موقع `Target URI` و`Key` على الجانب الأيمن من الصفحة. أبقِ هذه الصفحة مفتوحة، حيث ستحتاج هذه المعلومات.
|
||||
<Frame>
|
||||
<img src="/images/enterprise/azure-openai-studio.png" alt="Azure AI Foundry" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="تهيئة اتصال CrewAI AMP">
|
||||
4. في علامة تبويب أخرى، افتح `CrewAI AMP > LLM Connections`. سمِّ اتصال LLM، واختر Azure كمزود، واختر نفس النموذج الذي اخترته في Azure.
|
||||
5. في نفس الصفحة، أضف متغيرات البيئة من الخطوة 3:
|
||||
- واحد بالاسم `AZURE_DEPLOYMENT_TARGET_URL` (باستخدام Target URI). يجب أن يبدو الرابط هكذا: https://your-deployment.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-08-01-preview
|
||||
- آخر بالاسم `AZURE_API_KEY` (باستخدام Key).
|
||||
6. انقر على `Add Connection` لحفظ اتصال LLM.
|
||||
</Step>
|
||||
|
||||
<Step title="ضبط التهيئة الافتراضية">
|
||||
7. في `CrewAI AMP > Settings > Defaults > Crew Studio LLM Settings`، عيّن اتصال LLM والنموذج الجديدين كافتراضيين.
|
||||
</Step>
|
||||
|
||||
<Step title="تهيئة الوصول إلى الشبكة">
|
||||
8. تأكد من إعدادات الوصول إلى الشبكة:
|
||||
- في Azure، انتقل إلى `Azure OpenAI > اختر النشر`.
|
||||
- انتقل إلى `Resource Management > Networking`.
|
||||
- تأكد من تفعيل `Allow access from all networks`. إذا كان هذا الإعداد مقيداً، فقد يُحظر وصول CrewAI إلى نقطة نهاية Azure OpenAI.
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## التحقق
|
||||
|
||||
أنت جاهز! سيستخدم Crew Studio الآن اتصال Azure OpenAI الخاص بك. اختبر الاتصال بإنشاء طاقم أو مهمة بسيطة للتأكد من أن كل شيء يعمل بشكل صحيح.
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
إذا واجهت مشكلات:
|
||||
|
||||
- تحقق من أن تنسيق Target URI يتطابق مع النمط المتوقع
|
||||
- تحقق من صحة مفتاح API وأنه يملك الصلاحيات المناسبة
|
||||
- تأكد من تهيئة الوصول إلى الشبكة للسماح باتصالات CrewAI
|
||||
- تأكد من أن نموذج النشر يتطابق مع ما هيأته في CrewAI
|
||||
48
docs/edge/ar/enterprise/guides/build-crew.mdx
Normal file
48
docs/edge/ar/enterprise/guides/build-crew.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: "بناء طاقم"
|
||||
description: "الطاقم هو مجموعة من الوكلاء الذين يعملون معاً لإتمام مهمة."
|
||||
icon: "people-arrows"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
يبسّط [CrewAI AMP](https://app.crewai.com) عملية **إنشاء** و**نشر** و**إدارة** وكلاء الذكاء الاصطناعي في بيئات الإنتاج.
|
||||
|
||||
## البدء
|
||||
|
||||
<iframe
|
||||
className="w-full aspect-video rounded-xl"
|
||||
src="https://www.youtube.com/embed/-kSOTtYzgEw"
|
||||
title="بناء الطواقم باستخدام CrewAI CLI"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
### التثبيت والإعداد
|
||||
|
||||
<Card
|
||||
title="اتبع دليل التثبيت القياسي"
|
||||
icon="wrench"
|
||||
href="/ar/installation"
|
||||
>
|
||||
اتبع دليل التثبيت القياسي لإعداد CrewAI CLI وإنشاء مشروعك
|
||||
الأول.
|
||||
</Card>
|
||||
|
||||
### بناء طاقمك
|
||||
|
||||
<Card title="دليل البدء السريع" icon="rocket" href="/ar/quickstart">
|
||||
اتبع دليل البدء السريع لإنشاء أول طاقم وكلاء باستخدام تهيئة
|
||||
YAML.
|
||||
</Card>
|
||||
|
||||
## الدعم والموارد
|
||||
|
||||
للدعم الخاص بالمؤسسات أو الأسئلة، تواصل مع فريق الدعم المخصص على [support@crewai.com](mailto:support@crewai.com).
|
||||
|
||||
<Card title="حجز عرض توضيحي" icon="calendar" href="mailto:support@crewai.com">
|
||||
احجز وقتاً مع فريقنا لمعرفة المزيد عن ميزات Enterprise وكيف يمكنها
|
||||
إفادة مؤسستك.
|
||||
</Card>
|
||||
57
docs/edge/ar/enterprise/guides/capture_telemetry_logs.mdx
Normal file
57
docs/edge/ar/enterprise/guides/capture_telemetry_logs.mdx
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: "تصدير OpenTelemetry"
|
||||
description: "تصدير التتبعات والسجلات من عمليات نشر CrewAI AMP إلى مجمّع OpenTelemetry الخاص بك"
|
||||
icon: "magnifying-glass-chart"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يمكن لـ CrewAI AMP تصدير **التتبعات** و**السجلات** من OpenTelemetry من عمليات النشر مباشرة إلى مجمّعك الخاص. يتيح لك ذلك مراقبة أداء الوكلاء وتتبع استدعاءات LLM وتصحيح الأخطاء باستخدام مجموعة المراقبة الحالية.
|
||||
|
||||
تتبع بيانات القياس [اتفاقيات OpenTelemetry GenAI الدلالية](https://opentelemetry.io/docs/specs/semconv/gen-ai/) بالإضافة إلى سمات خاصة بـ CrewAI.
|
||||
|
||||
<Tip>
|
||||
تُعدّ OpenTelemetry **مسار المراقبة الموصى به** — محايدة تجاه الموردين، وتعمل مع أي خلفية متوافقة مع OTLP (Grafana, Honeycomb, NewRelic، أو مجمّعك الخاص). إذا كنت تستخدم Datadog تحديدًا، فراجع دليل [تكامل Datadog](./datadog) المخصص، الذي يغطي كلًا من مسار وكيل Datadog واستيعاب OTLP من Datadog.
|
||||
</Tip>
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="حساب CrewAI AMP" icon="users">
|
||||
يجب أن يكون لدى مؤسستك حساب CrewAI AMP نشط.
|
||||
</Card>
|
||||
<Card title="مجمّع OpenTelemetry" icon="server">
|
||||
تحتاج إلى نقطة نهاية مجمّع متوافقة مع OpenTelemetry (مثل OTel Collector الخاص بك أو Datadog أو Grafana أو أي واجهة خلفية متوافقة مع OTLP).
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## إعداد مجمّع
|
||||
|
||||
1. في CrewAI AMP، انتقل إلى **Settings** > **OpenTelemetry Collectors**.
|
||||
2. انقر على **Add Collector**.
|
||||
3. اختر تكاملاً:
|
||||
- **OpenTelemetry Traces** و**OpenTelemetry Logs** — صدّر إلى أي مجمّع أو واجهة خلفية متوافقة مع OTLP.
|
||||
- **Datadog** — أرسل التتبعات مباشرة إلى استقبال OTLP الخاص بـ Datadog، دون الحاجة إلى مجمّع منفصل أو Datadog Agent.
|
||||
4. هيّئ الاتصال. تعتمد الحقول على التكامل الذي اخترته:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="OpenTelemetry Traces / Logs">
|
||||
إن **OpenTelemetry Traces** و**OpenTelemetry Logs** تكاملان منفصلان يتشاركان نفس الحقول — اختر التكامل المطابق للإشارة التي تريد تصديرها.
|
||||
|
||||
- **Endpoint** — نقطة نهاية OTLP لمجمّعك (مثل `https://otel-collector.example.com:4317`).
|
||||
- **Service Name** — اسم لتعريف هذه الخدمة في منصة المراقبة.
|
||||
- **Custom Headers** *(اختياري)* — أضف رؤوس المصادقة أو التوجيه كأزواج مفتاح-قيمة.
|
||||
- **Certificate** *(اختياري)* — قدم شهادة TLS إذا كان مجمّعك يتطلبها.
|
||||
|
||||
<Frame></Frame>
|
||||
</Tab>
|
||||
<Tab title="Datadog">
|
||||
لإعداد Datadog، راجع دليل [تكامل Datadog](./datadog) المخصص — فهو يغطي كلًا من مسار وكيل Datadog (الموصى به، أرخص لحجم السجلات الكبير) واستيعاب OTLP من Datadog، مع خطوات تهيئة كاملة للمجمّع.
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
5. *(اختياري)* انقر على **Test Connection** للتحقق من قدرة CrewAI على الوصول إلى نقطة النهاية باستخدام بيانات الاعتماد التي قدمتها.
|
||||
6. انقر على **Save**.
|
||||
|
||||
<Tip>
|
||||
يمكنك إضافة مجمّعات متعددة — على سبيل المثال، واحد للتتبعات وآخر للسجلات، أو الإرسال إلى واجهات خلفية مختلفة لأغراض مختلفة.
|
||||
</Tip>
|
||||
136
docs/edge/ar/enterprise/guides/custom-mcp-server.mdx
Normal file
136
docs/edge/ar/enterprise/guides/custom-mcp-server.mdx
Normal file
@@ -0,0 +1,136 @@
|
||||
---
|
||||
title: "خوادم MCP المخصصة"
|
||||
description: "اربط خوادم MCP الخاصة بك بـ CrewAI AMP مع وصول عام أو مصادقة بمفتاح API أو OAuth 2.0"
|
||||
icon: "plug"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يدعم CrewAI AMP الاتصال بأي خادم MCP يُنفّذ [Model Context Protocol](https://modelcontextprotocol.io/). يمكنك إحضار خوادم عامة لا تتطلب مصادقة، وخوادم محمية بمفتاح API أو رمز حامل، وخوادم تستخدم OAuth 2.0 للوصول المفوّض الآمن.
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="حساب CrewAI AMP" icon="user">
|
||||
تحتاج إلى حساب [CrewAI AMP](https://app.crewai.com) نشط.
|
||||
</Card>
|
||||
<Card title="رابط خادم MCP" icon="link">
|
||||
رابط خادم MCP الذي تريد الاتصال به. يجب أن يكون الخادم متاحاً من الإنترنت ويدعم نقل Streamable HTTP.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## إضافة خادم MCP مخصص
|
||||
|
||||
<Steps>
|
||||
<Step title="فتح الأدوات والتكاملات">
|
||||
انتقل إلى **Tools & Integrations** في الشريط الجانبي الأيسر لـ CrewAI AMP، ثم اختر علامة تبويب **Connections**.
|
||||
</Step>
|
||||
|
||||
<Step title="بدء إضافة خادم MCP مخصص">
|
||||
انقر على زر **Add Custom MCP Server**. سيظهر مربع حوار مع نموذج التهيئة.
|
||||
</Step>
|
||||
|
||||
<Step title="ملء المعلومات الأساسية">
|
||||
- **Name** (مطلوب): اسم وصفي لخادم MCP (مثل "My Internal Tools Server").
|
||||
- **Description**: ملخص اختياري لما يقدمه خادم MCP هذا.
|
||||
- **Server URL** (مطلوب): الرابط الكامل لنقطة نهاية خادم MCP (مثل `https://my-server.example.com/mcp`).
|
||||
</Step>
|
||||
|
||||
<Step title="اختيار طريقة المصادقة">
|
||||
اختر إحدى طرق المصادقة الثلاث المتاحة بناءً على كيفية تأمين خادم MCP. راجع الأقسام أدناه لتفاصيل كل طريقة.
|
||||
</Step>
|
||||
|
||||
<Step title="إضافة رؤوس مخصصة (اختياري)">
|
||||
إذا كان خادم MCP يتطلب رؤوساً إضافية في كل طلب (مثل معرّفات المستأجر أو رؤوس التوجيه)، انقر على **+ Add Header** وقدم اسم الرأس وقيمته. يمكنك إضافة رؤوس مخصصة متعددة.
|
||||
</Step>
|
||||
|
||||
<Step title="إنشاء الاتصال">
|
||||
انقر على **Create MCP Server** لحفظ الاتصال. سيظهر خادم MCP المخصص الآن في قائمة الاتصالات وستكون أدواته متاحة للاستخدام في طواقمك.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## طرق المصادقة
|
||||
|
||||
### بدون مصادقة
|
||||
|
||||
اختر هذا الخيار عندما يكون خادم MCP متاحاً للجمهور ولا يتطلب أي بيانات اعتماد. هذا شائع للخوادم مفتوحة المصدر أو الخوادم الداخلية العاملة خلف VPN.
|
||||
|
||||
### رمز المصادقة
|
||||
|
||||
استخدم هذه الطريقة عندما يكون خادم MCP محمياً بمفتاح API أو رمز حامل.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/custom-mcp-auth-token.png" alt="خادم MCP مخصص برمز مصادقة" />
|
||||
</Frame>
|
||||
|
||||
| الحقل | مطلوب | الوصف |
|
||||
|-------|-------|-------|
|
||||
| **Header Name** | نعم | اسم رأس HTTP الذي يحمل الرمز (مثل `X-API-Key`، `Authorization`). |
|
||||
| **Value** | نعم | مفتاح API أو رمز الحامل الخاص بك. |
|
||||
| **Add to** | لا | أين يتم إرفاق بيانات الاعتماد — **Header** (افتراضي) أو **Query parameter**. |
|
||||
|
||||
<Tip>
|
||||
إذا كان خادمك يتوقع رمز `Bearer` في رأس `Authorization`، عيّن Header Name إلى `Authorization` والقيمة إلى `Bearer <your-token>`.
|
||||
</Tip>
|
||||
|
||||
### OAuth 2.0
|
||||
|
||||
استخدم هذه الطريقة لخوادم MCP التي تتطلب تفويض OAuth 2.0. سيتعامل CrewAI مع تدفق OAuth الكامل، بما في ذلك تحديث الرمز.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/custom-mcp-oauth.png" alt="خادم MCP مخصص مع OAuth 2.0" />
|
||||
</Frame>
|
||||
|
||||
| الحقل | مطلوب | الوصف |
|
||||
|-------|-------|-------|
|
||||
| **Redirect URI** | — | مُعبأ مسبقاً وللقراءة فقط. انسخ هذا الرابط وسجّله كرابط إعادة توجيه مصرّح به في مزود OAuth. |
|
||||
| **Authorization Endpoint** | نعم | الرابط الذي يُوجَّه إليه المستخدمون لتفويض الوصول (مثل `https://auth.example.com/oauth/authorize`). |
|
||||
| **Token Endpoint** | نعم | الرابط المستخدم لتبادل رمز التفويض برمز وصول (مثل `https://auth.example.com/oauth/token`). |
|
||||
| **Client ID** | نعم | معرّف عميل OAuth الصادر من مزودك. |
|
||||
| **Client Secret** | لا | سر عميل OAuth. غير مطلوب للعملاء العامين باستخدام PKCE. |
|
||||
| **Scopes** | لا | قائمة نطاقات مفصولة بمسافات للطلب (مثل `read write`). |
|
||||
| **Token Auth Method** | لا | كيفية إرسال بيانات اعتماد العميل عند تبادل الرموز — **Standard (POST body)** أو **Basic Auth (header)**. الافتراضي هو Standard. |
|
||||
| **PKCE Supported** | لا | فعّل إذا كان مزود OAuth يدعم Proof Key for Code Exchange. موصى به لتحسين الأمان. |
|
||||
|
||||
<Info>
|
||||
**اكتشاف تهيئة OAuth**: إذا كان مزود OAuth يدعم OpenID Connect Discovery، انقر على رابط **Discover OAuth Config** لملء نقاط نهاية التفويض والرمز تلقائياً من رابط `/.well-known/openid-configuration` الخاص بالمزود.
|
||||
</Info>
|
||||
|
||||
#### إعداد OAuth 2.0 خطوة بخطوة
|
||||
|
||||
<Steps>
|
||||
<Step title="تسجيل رابط إعادة التوجيه">
|
||||
انسخ **Redirect URI** المعروض في النموذج وأضفه كرابط إعادة توجيه مصرّح به في إعدادات تطبيق مزود OAuth.
|
||||
</Step>
|
||||
|
||||
<Step title="إدخال نقاط النهاية وبيانات الاعتماد">
|
||||
املأ **Authorization Endpoint** و**Token Endpoint** و**Client ID**، واختيارياً **Client Secret** و**Scopes**.
|
||||
</Step>
|
||||
|
||||
<Step title="تهيئة طريقة تبادل الرمز">
|
||||
اختر **Token Auth Method** المناسبة. معظم المزودين يستخدمون الافتراضي **Standard (POST body)**. بعض المزودين القدامى يتطلبون **Basic Auth (header)**.
|
||||
</Step>
|
||||
|
||||
<Step title="تفعيل PKCE (موصى به)">
|
||||
حدد **PKCE Supported** إذا كان مزودك يدعمه. يضيف PKCE طبقة أمان إضافية لتدفق رمز التفويض وموصى به لجميع التكاملات الجديدة.
|
||||
</Step>
|
||||
|
||||
<Step title="الإنشاء والتفويض">
|
||||
انقر على **Create MCP Server**. سيتم توجيهك إلى مزود OAuth لتفويض الوصول. بمجرد التفويض، سيخزن CrewAI الرموز ويحدّثها تلقائياً حسب الحاجة.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## استخدام خادم MCP المخصص
|
||||
|
||||
بمجرد الاتصال، تظهر أدوات خادم MCP المخصص جنباً إلى جنب مع الاتصالات المدمجة في صفحة **Tools & Integrations**. يمكنك:
|
||||
|
||||
- **تعيين الأدوات للوكلاء** في طواقمك تماماً كأي أداة CrewAI أخرى.
|
||||
- **إدارة الرؤية** للتحكم في أعضاء الفريق الذين يمكنهم استخدام الخادم.
|
||||
- **تعديل أو إزالة** الاتصال في أي وقت من قائمة الاتصالات.
|
||||
|
||||
<Warning>
|
||||
إذا أصبح خادم MCP غير قابل للوصول أو انتهت صلاحية بيانات الاعتماد، ستفشل استدعاءات الأدوات التي تستخدم ذلك الخادم. تأكد من استقرار رابط الخادم وتحديث بيانات الاعتماد.
|
||||
</Warning>
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تهيئة خادم MCP المخصص أو استكشاف الأخطاء.
|
||||
</Card>
|
||||
280
docs/edge/ar/enterprise/guides/datadog.mdx
Normal file
280
docs/edge/ar/enterprise/guides/datadog.mdx
Normal file
@@ -0,0 +1,280 @@
|
||||
---
|
||||
title: "تكامل Datadog"
|
||||
description: "راقب عمليات نشر CrewAI AMP المُستضافة ذاتيًا في Datadog عبر وكيل Datadog أو استيعاب OTLP من Datadog — يوفر كلا المسارين نفس الواجهات المهيكلة لاستيراد لوحة معلومات العمليات الجاهزة."
|
||||
icon: "dog"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Note>
|
||||
**الترجمة قيد التقدم** — يتم عرض المحتوى باللغة الإنجليزية.
|
||||
</Note>
|
||||
|
||||
CrewAI ships first-class support for Datadog: two log-ingestion paths, a JSON log schema designed for cheap indexing, and a ready-made operations dashboard you can import in under five minutes.
|
||||
|
||||
<Note>
|
||||
For vendor-neutral observability via any OTLP backend (Grafana, Honeycomb, your own collector), see [OpenTelemetry Export](./capture_telemetry_logs).
|
||||
</Note>
|
||||
|
||||
## Choose a path
|
||||
|
||||
CrewAI supports two log-ingestion paths to Datadog — both are first-class and produce the same structured facets that power the dashboard. Pick the one that fits your infrastructure.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Datadog Agent">
|
||||
The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. Each log event ships as a single billable line with structured attributes — see the [log schema reference](#log-schema-reference) for the full field contract.
|
||||
|
||||
**Setup:**
|
||||
1. Run the Datadog Agent next to your CrewAI containers — see [Datadog's deployment docs](https://docs.datadoghq.com/agent/) for Kubernetes, ECS, or VM setup. Enable log collection (`logs_enabled: true`) and container log collection (`logs_config.container_collect_all: true`).
|
||||
2. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
|
||||
|
||||
**Pick this path if** you already operate Datadog Agents (e.g. for infrastructure metrics), or your log volume makes per-event ingestion cost a real concern — collapsing tracebacks into single events keeps Agent ingestion cheap at scale.
|
||||
</Tab>
|
||||
<Tab title="Datadog OTLP intake">
|
||||
CrewAI AMP exports OpenTelemetry traffic directly to Datadog's OTLP endpoint with no Agent required. Logs and traces ride a single export pipeline configured in AMP's UI, using the same protocol you'd use for any other OTLP backend.
|
||||
|
||||
**Setup:**
|
||||
1. In CrewAI AMP, go to **Settings → OpenTelemetry Collectors → Add Collector** and pick **Datadog**.
|
||||
2. Configure the connection:
|
||||
- **Datadog Site Domain** — your Datadog site's OTLP host only, no protocol or path. CrewAI builds the full HTTPS OTLP endpoint for you. Use the host that matches your [Datadog site](https://docs.datadoghq.com/getting_started/site/):
|
||||
- `otlp.datadoghq.com` (US1)
|
||||
- `otlp.us3.datadoghq.com` (US3)
|
||||
- `otlp.us5.datadoghq.com` (US5)
|
||||
- `otlp.datadoghq.eu` (EU1)
|
||||
- `otlp.ap1.datadoghq.com` (AP1)
|
||||
- **API Key** — your Datadog API key. See [how to create one](https://docs.datadoghq.com/account_management/api-app-keys/#api-keys).
|
||||
3. The Datadog template provisions **both signals at once** — when you save, AMP creates a traces collector at `/v1/traces` and a logs collector at `/v1/logs`, both sharing the same Datadog OTLP host and API key. You'll see them as two separate rows in your OTel collectors list.
|
||||
4. *(optional)* Click **Test Connection** to verify CrewAI can reach the endpoint with the credentials you provided. Then click **Save** — both collectors are created in one step.
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
**Pick this path if** you'd rather not operate a Datadog Agent, you already use OTLP for traces and want one export pipeline, or you may later want to fan out the same telemetry to other backends (Grafana, Honeycomb, etc.) without changing your application setup.
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
Either path lands the same structured facets in Datadog (`@automation_id`, `@kickoff_id`, `@execution_id`, `@automation_name`, `@crewai_version`, `@exception.type`, `@gen_ai.*`), so the dashboard works identically with either choice.
|
||||
|
||||
## Log schema reference
|
||||
|
||||
<Info>
|
||||
This schema applies to the **Datadog Agent path** — structured stdout JSON logs emitted by every CrewAI worker container. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
|
||||
</Info>
|
||||
|
||||
Every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
|
||||
|
||||
### Why JSON output
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Lower ingestion cost" icon="dollar-sign">
|
||||
Most managed log backends bill per event. A Python traceback in text format is counted as one event per line — 30+ events for a single error. JSON output collapses each traceback into a single event with the stack trace as an escaped string field.
|
||||
</Card>
|
||||
<Card title="Structured search" icon="magnifying-glass">
|
||||
Search by `@automation_id`, `@exception.type`, `@kickoff_id` instead of grepping free-text. Build dashboards on typed facets without parser configuration.
|
||||
</Card>
|
||||
<Card title="APM ↔ logs correlation" icon="link">
|
||||
Every event carries `trace_id` and `span_id` when fired inside a recording span, so backends auto-link logs to traces.
|
||||
</Card>
|
||||
<Card title="Stable contract" icon="file-shield">
|
||||
The `schema` field gates compatibility — within `v1`, fields are added but never renamed or removed.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
### Example events
|
||||
|
||||
A single info-level log inside an active automation kickoff:
|
||||
|
||||
```json
|
||||
{
|
||||
"schema": "v1",
|
||||
"ts": "2026-06-17T16:14:23.482914Z",
|
||||
"level": "INFO",
|
||||
"logger": "crewai_enterprise.utilities.pii_redaction",
|
||||
"crewai_version": "1.14.7",
|
||||
"msg": "PII tracking state reset (engines preserved)",
|
||||
"automation_id": "12",
|
||||
"task_id": "0843a930-b306-464b-89c8-bfafa78cc711",
|
||||
"kickoff_id": "0843a930-b306-464b-89c8-bfafa78cc711",
|
||||
"execution_id": "0843a930-b306-464b-89c8-bfafa78cc711",
|
||||
"automation_name": "research_flow"
|
||||
}
|
||||
```
|
||||
|
||||
An error with a Python exception is collapsed into a single event with the traceback as a string:
|
||||
|
||||
```json
|
||||
{
|
||||
"schema": "v1",
|
||||
"ts": "2026-06-17T16:14:31.218450Z",
|
||||
"level": "ERROR",
|
||||
"logger": "api.tasks.flow_run_task",
|
||||
"crewai_version": "1.14.7",
|
||||
"msg": "Flow execution failed",
|
||||
"automation_id": "12",
|
||||
"kickoff_id": "0843a930-b306-464b-89c8-bfafa78cc711",
|
||||
"execution_id": "0843a930-b306-464b-89c8-bfafa78cc711",
|
||||
"automation_name": "research_flow",
|
||||
"exception": {
|
||||
"type": "ValueError",
|
||||
"message": "Topic cannot be empty",
|
||||
"stacktrace": "Traceback (most recent call last):\n File \"/app/flow.py\", line 42, in summarize\n ...\nValueError: Topic cannot be empty\n"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Without JSON output, that same error would produce ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
|
||||
|
||||
### Schema v1 fields
|
||||
|
||||
Within the `v1` schema, fields are only added, never renamed or removed. New fields will appear as soon as a deployment is upgraded.
|
||||
|
||||
| Field | Type | Always present | Source |
|
||||
|-------|------|----------------|--------|
|
||||
| `schema` | string | Yes | Constant `"v1"`. Increment indicates a breaking schema change. |
|
||||
| `ts` | string (ISO-8601 UTC, microseconds) | Yes | Record creation time, e.g. `2026-06-17T16:14:23.482914Z`. |
|
||||
| `level` | string | Yes | Python log level name: `DEBUG` / `INFO` / `WARNING` / `ERROR` / `CRITICAL`. |
|
||||
| `logger` | string | Yes | Dotted logger name, e.g. `api.tasks.flow_run_task`. |
|
||||
| `crewai_version` | string | Yes (when `crewai` package metadata is resolvable) | Installed `crewai` package version, e.g. `"1.14.7"`. |
|
||||
| `msg` | string | Yes | Rendered log message (after `%`-formatting / `{}`-formatting). |
|
||||
| `automation_id` | string | When `CREWAI_PLUS_ID` env var is set | Numeric deployment ID (AMP provisions this on every container). |
|
||||
| `task_id` | string | On Celery worker logs | Celery task UUID, or `"no-task"` for non-task contexts. |
|
||||
| `kickoff_id` | string | Inside an automation kickoff | UUID of the current kickoff. |
|
||||
| `execution_id` | string | Inside an automation kickoff | UUID of the current sub-execution. Equal to `kickoff_id` at the top level; differs for nested flow methods that spawn sub-executions. |
|
||||
| `automation_name` | string | Inside an automation kickoff | Human-readable automation/flow name, e.g. `"research_flow"`. |
|
||||
| `trace_id` | string (32-hex) | Inside a recording OpenTelemetry span | Hex trace ID. Omitted when no span is active. |
|
||||
| `span_id` | string (16-hex) | Inside a recording OpenTelemetry span | Hex span ID. Omitted when no span is active. |
|
||||
| `exception` | object | When the log record has `exc_info` | `{type, message, stacktrace}` — full traceback as a single escaped string. |
|
||||
|
||||
<Tip>
|
||||
Any additional `extra={...}` kwargs passed to a logger call appear as top-level JSON fields verbatim. Reserved field names above always win to keep the schema stable.
|
||||
</Tip>
|
||||
|
||||
### Stability promise
|
||||
|
||||
The `schema` field declares the contract. Within `v1`, CrewAI commits to:
|
||||
|
||||
- **Never removing a field** that customers may have built queries or dashboards against.
|
||||
- **Never renaming a field** in place — renames happen via a schema bump (e.g. `v2`), with the old name kept as a deprecated alias for at least one release cycle.
|
||||
- **Adding new fields** at any time. Consumers should ignore unknown top-level keys.
|
||||
|
||||
When a `v2` is introduced, both the `schema` field and the migration guide will be published in advance, and `v1` will continue to be emitted for one release cycle so dashboards and queries have time to migrate.
|
||||
|
||||
## Prerequisite: promote facets
|
||||
|
||||
Datadog auto-discovers fields the first time it sees them but doesn't make them queryable in widgets until they're promoted to **facets**. This is a one-time setup in your Datadog account.
|
||||
|
||||
<Steps>
|
||||
<Step title="Search for a CrewAI log">
|
||||
Open [Logs Explorer](https://app.datadoghq.com/logs) and search `service:crewai*`. You should see at least one log event.
|
||||
</Step>
|
||||
<Step title="Promote each field">
|
||||
Click any log entry to open the right-hand details panel. For each field below, hover the field name → click the gear icon → **Create facet**.
|
||||
|
||||
- `automation_id`, `automation_name`, `execution_id`, `kickoff_id`, `task_id`
|
||||
- `crewai_version`, `model_id`
|
||||
- `exception.type`, `exception.message`
|
||||
|
||||
Skip any field that already shows a star icon next to its name — that means it's already a facet. The `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`, and `gen_ai.request.model` facets are typically promoted automatically by Datadog's LLM Observability auto-discovery, but verify they exist before importing the dashboard.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Import the dashboard
|
||||
|
||||
<Steps>
|
||||
<Step title="Download the dashboard JSON">
|
||||
Save [`datadog_dashboard.json`](https://raw.githubusercontent.com/crewAIInc/crewAI/main/docs/edge/en/enterprise/guides/datadog_dashboard.json) to your machine.
|
||||
</Step>
|
||||
<Step title="Open the import dialog in Datadog">
|
||||
Navigate to **Dashboards → New Dashboard**. Click the **gear icon** in the top right of the empty dashboard and select **Import Dashboard JSON**.
|
||||
</Step>
|
||||
<Step title="Paste or upload the JSON">
|
||||
Paste the contents of `datadog_dashboard.json` into the import dialog (or drag the file in). Click **Import**.
|
||||
|
||||
Datadog creates the dashboard immediately and lands you on it. The first load may show empty widgets for a few seconds while queries execute against the time range.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Tip>
|
||||
Datadog's [Dashboard API](https://docs.datadoghq.com/api/latest/dashboards/#create-a-new-dashboard) accepts the same JSON via `POST /api/v1/dashboard`. Use it if you manage dashboards through Terraform, Pulumi, or CI.
|
||||
</Tip>
|
||||
|
||||
## What you get
|
||||
|
||||
The dashboard is organized into four sections plus a placeholder for a custom drill-down widget:
|
||||
|
||||
| Section | Widgets | Useful for |
|
||||
|---------|---------|------------|
|
||||
| **Header** | Total Executions · Error Rate (%) · Active Automations · CrewAI Versions in Use | At-a-glance health for the last hour. Error Rate is conditionally formatted (green ≤ 5%, yellow ≤ 10%, red > 10%). |
|
||||
| **Throughput** | Executions per Hour by Automation (top 10, stacked bars) | Spotting traffic shifts, surfacing busy automations, validating that a rollout didn't change baseline volume. |
|
||||
| **Errors** | Errors by Exception Type (top 5, stacked bars) · Top Exception Types by Count (toplist) | Triaging failures — which exception types are spiking, which automations they're hitting. |
|
||||
| **Cost** | Total Tokens per Hour by Model (input + output, stacked area) | Tracking LLM token spend by model. Useful for catching cost regressions when an automation switches model or starts looping. |
|
||||
| **Drill-Down** | _(empty placeholder)_ | See [Customization](#customize) for adding a recent-errors log stream here. |
|
||||
|
||||
Three template variables at the top of the dashboard re-scope every widget at once:
|
||||
|
||||
- **`$automation`** — filter to a single automation by name.
|
||||
- **`$version`** — filter to a single `crewai` SDK version (useful for comparing pre- and post-upgrade behavior).
|
||||
- **`$service`** — filter to a specific Datadog `service` tag (useful when multiple CrewAI deployments share one Datadog account).
|
||||
|
||||
## Verify ingestion
|
||||
|
||||
Open [Logs Explorer](https://app.datadoghq.com/logs) and run a query that matches your ingestion path:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Datadog Agent">
|
||||
Search `service:crewai* @schema:v1`. You should see structured logs with the JSON fields parsed into Datadog facets. Pick a recent event and verify it has `@automation_id`, `@kickoff_id`, `@execution_id`, `@crewai_version`, and (when running inside a span) `@trace_id` / `@span_id` populated.
|
||||
|
||||
If nothing appears, confirm the Datadog Agent is tailing container stdout and that the deployment is running a recent enough CrewAI Enterprise build.
|
||||
</Tab>
|
||||
<Tab title="Datadog OTLP intake">
|
||||
Search `source:otlp service:crewai*`. OTLP attributes land with their OpenTelemetry names (`automation_id`, `crewai.kickoff.id`, etc.) rather than the stdout JSON keys, but they map to the same dashboard facets after [facet promotion](#prerequisite-promote-facets).
|
||||
|
||||
If nothing appears, verify the collector endpoint is correct (`/v1/logs` for logs, `/v1/traces` for traces) and **Test Connection** succeeded when the collector was saved.
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Customize
|
||||
|
||||
The dashboard ships with deliberate gaps so you can extend it without uninstalling and re-importing.
|
||||
|
||||
### Add a Recent Errors log stream
|
||||
|
||||
The **Drill-Down** section is intentionally empty. Add a Log Stream widget to it for an inline view of recent failures:
|
||||
|
||||
1. Edit the dashboard and click **+ Add Widgets** inside the Drill-Down group.
|
||||
2. Drag in a **Log Stream** widget.
|
||||
3. Set the filter query to `status:error $automation $version $service`.
|
||||
4. Choose columns: `@timestamp`, `@automation_name`, `@exception.type`, `@exception.message`, `@execution_id`.
|
||||
5. Sort by most recent, limit to 25 entries.
|
||||
|
||||
Clicking any row jumps to Logs Explorer with the same filter pre-applied.
|
||||
|
||||
### Add p95 latency
|
||||
|
||||
Logs don't include execution duration by default. Two ways to add a latency widget:
|
||||
|
||||
- **From APM traces** — if you also export OTLP traces to Datadog, add a Timeseries widget with data source **Traces**, query `service:crewai*`, aggregation `p95 of @duration`. Datadog APM auto-tracks span duration.
|
||||
- **From metric extraction** — extract a `flow.duration_ms` metric from logs via [Datadog's log-to-metric pipeline](https://docs.datadoghq.com/logs/log_configuration/logs_to_metrics/), then chart it like any other metric. Useful if you don't run APM.
|
||||
|
||||
### Re-scope to multiple deployments
|
||||
|
||||
The `$service` template variable defaults to `*` and will catch every CrewAI deployment in your Datadog account. Change the default to a specific service name in **Configure → Template Variables** if you want the dashboard to focus on one deployment by default.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
| Symptom | Likely cause | Fix |
|
||||
|---------|--------------|-----|
|
||||
| All widgets show "No data" | Facets aren't promoted | Re-do the [Promote facets](#prerequisite-promote-facets) step. Datadog won't query against an un-promoted field. |
|
||||
| Error Rate widget shows `NaN` | No executions in the time window | Either no traffic, or `@execution_id` isn't faceted. Expand the time range and re-check facets. |
|
||||
| Throughput chart is flat at the same value | Logs aren't reaching Datadog | Search `service:crewai*` in Logs Explorer. If nothing shows, verify the Datadog Agent is running (Agent path) or the OTel collector endpoint is correct (OTLP path). |
|
||||
| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments (pre-structured-logs AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
|
||||
| Template variables don't filter widgets | The widget's filter line doesn't reference the template variable | Edit the widget and confirm the search includes `$automation $version $service`. |
|
||||
|
||||
## Next steps
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="OpenTelemetry Export" icon="magnifying-glass-chart" href="./capture_telemetry_logs">
|
||||
Vendor-neutral observability for non-Datadog stacks (Grafana, Honeycomb, your own collector) — or as a Datadog complement when you want to fan out telemetry to multiple backends.
|
||||
</Card>
|
||||
<Card title="Datadog Log Search Syntax" icon="magnifying-glass" href="https://docs.datadoghq.com/logs/explorer/search_syntax/">
|
||||
Reference for customizing widget queries against the structured facets above.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
451
docs/edge/ar/enterprise/guides/deploy-to-amp.mdx
Normal file
451
docs/edge/ar/enterprise/guides/deploy-to-amp.mdx
Normal file
@@ -0,0 +1,451 @@
|
||||
---
|
||||
title: "النشر على AMP"
|
||||
description: "انشر طاقمك أو تدفقك على CrewAI AMP"
|
||||
icon: "rocket"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Note>
|
||||
بعد إنشاء طاقم أو تدفق محلياً (أو عبر Crew Studio)، الخطوة التالية هي
|
||||
نشره على منصة CrewAI AMP. يغطي هذا الدليل طرق نشر متعددة
|
||||
لمساعدتك في اختيار النهج الأفضل لسير عملك.
|
||||
</Note>
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="مشروع جاهز للنشر" icon="check-circle">
|
||||
يجب أن يكون لديك طاقم أو تدفق يعمل بنجاح محلياً.
|
||||
اتبع [دليل التحضير](/ar/enterprise/guides/prepare-for-deployment) للتحقق من بنية مشروعك.
|
||||
</Card>
|
||||
<Card title="مستودع GitHub" icon="github">
|
||||
يجب أن يكون الكود في مستودع GitHub (لطريقة تكامل
|
||||
GitHub)
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Info>
|
||||
**الطواقم مقابل التدفقات**: يمكن نشر كلا نوعي المشاريع كـ "أتمتات" على CrewAI AMP.
|
||||
عملية النشر هي نفسها، لكن لهما بنى مشاريع مختلفة.
|
||||
راجع [التحضير للنشر](/ar/enterprise/guides/prepare-for-deployment) للتفاصيل.
|
||||
</Info>
|
||||
|
||||
## الخيار 1: النشر باستخدام CrewAI CLI
|
||||
|
||||
يوفر CLI أسرع طريقة لنشر الطواقم أو التدفقات المطورة محلياً على منصة AMP.
|
||||
يكتشف CLI تلقائياً نوع مشروعك من `pyproject.toml` ويبني وفقاً لذلك.
|
||||
|
||||
<Steps>
|
||||
<Step title="تثبيت CrewAI CLI">
|
||||
إذا لم تكن قد فعلت بالفعل، ثبّت CrewAI CLI:
|
||||
|
||||
```bash
|
||||
pip install crewai[tools]
|
||||
```
|
||||
|
||||
<Tip>
|
||||
يأتي CLI مع حزمة CrewAI الرئيسية، لكن الإضافة `[tools]` تضمن حصولك على جميع اعتماديات النشر.
|
||||
</Tip>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="المصادقة مع منصة Enterprise">
|
||||
أولاً، تحتاج لمصادقة CLI مع منصة CrewAI AMP:
|
||||
|
||||
```bash
|
||||
# إذا كان لديك حساب CrewAI AMP بالفعل، أو تريد إنشاء واحد:
|
||||
crewai login
|
||||
```
|
||||
|
||||
عند تشغيل أي من الأمرين، سيقوم CLI بـ:
|
||||
1. عرض رابط ورمز جهاز فريد
|
||||
2. فتح متصفحك على صفحة المصادقة
|
||||
3. طلب تأكيد الجهاز
|
||||
4. إتمام عملية المصادقة
|
||||
|
||||
عند المصادقة الناجحة، سترى رسالة تأكيد في الطرفية!
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="إنشاء عملية نشر">
|
||||
|
||||
من مجلد مشروعك، شغّل:
|
||||
|
||||
```bash
|
||||
crewai deploy create
|
||||
```
|
||||
|
||||
سيقوم هذا الأمر بـ:
|
||||
1. اكتشاف معلومات مستودع GitHub
|
||||
2. تحديد متغيرات البيئة في ملف `.env` المحلي
|
||||
3. نقل هذه المتغيرات بأمان إلى منصة Enterprise
|
||||
4. إنشاء عملية نشر جديدة بمعرّف فريد
|
||||
|
||||
عند الإنشاء الناجح، سترى رسالة مثل:
|
||||
```shell
|
||||
Deployment created successfully!
|
||||
Name: your_project_name
|
||||
Deployment ID: 01234567-89ab-cdef-0123-456789abcdef
|
||||
Current Status: Deploy Enqueued
|
||||
```
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="مراقبة تقدم النشر">
|
||||
|
||||
تتبع حالة النشر بـ:
|
||||
|
||||
```bash
|
||||
crewai deploy status
|
||||
```
|
||||
|
||||
للسجلات المفصلة لعملية البناء:
|
||||
|
||||
```bash
|
||||
crewai deploy logs
|
||||
```
|
||||
|
||||
<Tip>
|
||||
يستغرق النشر الأول عادة حوالي دقيقة واحدة.
|
||||
</Tip>
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## أوامر CLI إضافية
|
||||
|
||||
يقدم CrewAI CLI عدة أوامر لإدارة عمليات النشر:
|
||||
|
||||
```bash
|
||||
# عرض جميع عمليات النشر
|
||||
crewai deploy list
|
||||
|
||||
# الحصول على حالة النشر
|
||||
crewai deploy status
|
||||
|
||||
# عرض سجلات النشر
|
||||
crewai deploy logs
|
||||
|
||||
# دفع التحديثات بعد تغييرات الكود
|
||||
crewai deploy push
|
||||
|
||||
# إزالة عملية نشر
|
||||
crewai deploy remove <deployment_id>
|
||||
```
|
||||
|
||||
## الخيار 2: النشر مباشرة عبر واجهة الويب
|
||||
|
||||
يمكنك أيضاً نشر طواقمك أو تدفقاتك مباشرة عبر واجهة ويب CrewAI AMP بربط حساب GitHub. لا يتطلب هذا النهج استخدام CLI على جهازك المحلي. تكتشف المنصة تلقائياً نوع مشروعك وتتعامل مع البناء بشكل مناسب.
|
||||
|
||||
<Steps>
|
||||
|
||||
<Step title="الدفع إلى GitHub">
|
||||
|
||||
تحتاج لدفع طاقمك إلى مستودع GitHub. إذا لم تكن قد أنشأت طاقماً بعد، يمكنك [اتباع هذا الدليل](/ar/quickstart).
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="ربط GitHub بـ CrewAI AMP">
|
||||
|
||||
1. سجّل الدخول إلى [CrewAI AMP](https://app.crewai.com)
|
||||
2. انقر على زر "Connect GitHub"
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="اختيار المستودع">
|
||||
|
||||
بعد ربط حساب GitHub، ستتمكن من اختيار المستودع للنشر:
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
<Tip>
|
||||
إذا كان Crew أو Flow داخل مجلد فرعي في monorepo، فوسّع **Advanced**
|
||||
وعيّن دليل عمل قبل النشر. راجع
|
||||
[النشر من Monorepo](/ar/enterprise/guides/monorepo-deployments).
|
||||
</Tip>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="تعيين متغيرات البيئة">
|
||||
|
||||
قبل النشر، ستحتاج لإعداد متغيرات البيئة للاتصال بمزود LLM أو خدمات أخرى:
|
||||
|
||||
1. يمكنك إضافة المتغيرات فردياً أو بشكل جماعي
|
||||
2. أدخل متغيرات البيئة بتنسيق `KEY=VALUE` (واحد لكل سطر)
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
<Info>
|
||||
تستخدم حزم Python خاصة؟ ستحتاج لإضافة بيانات اعتماد السجل هنا أيضاً.
|
||||
راجع [سجلات الحزم الخاصة](/ar/enterprise/guides/private-package-registry) للمتغيرات المطلوبة.
|
||||
</Info>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="نشر طاقمك">
|
||||
|
||||
1. انقر على زر "Deploy" لبدء عملية النشر
|
||||
2. يمكنك مراقبة التقدم عبر شريط التقدم
|
||||
3. يستغرق النشر الأول عادة حوالي دقيقة واحدة
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
بمجرد اكتمال النشر، سترى:
|
||||
- رابط طاقمك الفريد
|
||||
- رمز Bearer لحماية API طاقمك
|
||||
- زر "Delete" إذا كنت تحتاج لإزالة النشر
|
||||
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## الخيار 3: إعادة النشر باستخدام API (تكامل CI/CD)
|
||||
|
||||
لعمليات النشر الآلية في خطوط أنابيب CI/CD، يمكنك استخدام CrewAI API لتشغيل إعادة نشر الطواقم الحالية. هذا مفيد بشكل خاص لـ GitHub Actions وJenkins أو سير عمل الأتمتة الأخرى.
|
||||
|
||||
<Steps>
|
||||
<Step title="الحصول على رمز الوصول الشخصي">
|
||||
|
||||
انتقل إلى إعدادات حساب CrewAI AMP لإنشاء رمز API:
|
||||
|
||||
1. انتقل إلى [app.crewai.com](https://app.crewai.com)
|
||||
2. انقر على **Settings** → **Account** → **Personal Access Token**
|
||||
3. أنشئ رمزاً جديداً وانسخه بأمان
|
||||
4. خزّن هذا الرمز كسر في نظام CI/CD
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="إيجاد UUID الأتمتة">
|
||||
|
||||
حدد موقع المعرّف الفريد لطاقمك المنشور:
|
||||
|
||||
1. انتقل إلى **Automations** في لوحة تحكم CrewAI AMP
|
||||
2. اختر الأتمتة/الطاقم الحالي
|
||||
3. انقر على **Additional Details**
|
||||
4. انسخ **UUID** — يحدد هذا نشر طاقمك المحدد
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="تشغيل إعادة النشر عبر API">
|
||||
|
||||
استخدم نقطة نهاية Deploy API لتشغيل إعادة النشر:
|
||||
|
||||
```bash
|
||||
curl -i -X POST \
|
||||
-H "Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN" \
|
||||
https://app.crewai.com/crewai_plus/api/v1/crews/YOUR-AUTOMATION-UUID/deploy
|
||||
|
||||
# HTTP/2 200
|
||||
# content-type: application/json
|
||||
#
|
||||
# {
|
||||
# "uuid": "your-automation-uuid",
|
||||
# "status": "Deploy Enqueued",
|
||||
# "public_url": "https://your-crew-deployment.crewai.com",
|
||||
# "token": "your-bearer-token"
|
||||
# }
|
||||
```
|
||||
|
||||
<Info>
|
||||
إذا تم إنشاء أتمتتك متصلة بـ Git أولاً، سيسحب API تلقائياً أحدث التغييرات من مستودعك قبل إعادة النشر.
|
||||
</Info>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="مثال تكامل GitHub Actions">
|
||||
|
||||
إليك سير عمل GitHub Actions مع مشغلات نشر أكثر تعقيداً:
|
||||
|
||||
```yaml
|
||||
name: Deploy CrewAI Automation
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
types: [ labeled ]
|
||||
release:
|
||||
types: [ published ]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
|
||||
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'deploy')) ||
|
||||
(github.event_name == 'release')
|
||||
steps:
|
||||
- name: Trigger CrewAI Redeployment
|
||||
run: |
|
||||
curl -X POST \
|
||||
-H "Authorization: Bearer ${{ secrets.CREWAI_PAT }}" \
|
||||
https://app.crewai.com/crewai_plus/api/v1/crews/${{ secrets.CREWAI_AUTOMATION_UUID }}/deploy
|
||||
```
|
||||
|
||||
<Tip>
|
||||
أضف `CREWAI_PAT` و`CREWAI_AUTOMATION_UUID` كأسرار مستودع. لعمليات نشر PR، أضف تسمية "deploy" لتشغيل سير العمل.
|
||||
</Tip>
|
||||
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## التفاعل مع أتمتتك المنشورة
|
||||
|
||||
بمجرد اكتمال النشر، يمكنك الوصول إلى طاقمك عبر:
|
||||
|
||||
1. **REST API**: تنشئ المنصة نقطة نهاية HTTPS فريدة بهذه المسارات الرئيسية:
|
||||
|
||||
- `/inputs`: يعرض معاملات الإدخال المطلوبة
|
||||
- `/kickoff`: يبدأ التنفيذ بالمدخلات المقدمة
|
||||
- `/status/{kickoff_id}`: يتحقق من حالة التنفيذ
|
||||
|
||||
2. **واجهة الويب**: زر [app.crewai.com](https://app.crewai.com) للوصول إلى:
|
||||
- **علامة تبويب Status**: عرض معلومات النشر وتفاصيل نقطة نهاية API ورمز المصادقة
|
||||
- **علامة تبويب Run**: تمثيل مرئي لبنية طاقمك
|
||||
- **علامة تبويب Executions**: سجل جميع عمليات التنفيذ
|
||||
- **علامة تبويب Metrics**: تحليلات الأداء
|
||||
- **علامة تبويب Traces**: رؤى التنفيذ المفصلة
|
||||
|
||||
### تشغيل عملية تنفيذ
|
||||
|
||||
من لوحة تحكم Enterprise، يمكنك:
|
||||
|
||||
1. النقر على اسم طاقمك لفتح تفاصيله
|
||||
2. اختيار "Trigger Crew" من واجهة الإدارة
|
||||
3. إدخال المدخلات المطلوبة في النافذة المنبثقة
|
||||
4. مراقبة التقدم أثناء مرور التنفيذ عبر خط الأنابيب
|
||||
|
||||
### المراقبة والتحليلات
|
||||
|
||||
توفر منصة Enterprise ميزات مراقبة شاملة:
|
||||
|
||||
- **إدارة التنفيذ**: تتبع عمليات التشغيل النشطة والمكتملة
|
||||
- **التتبعات**: تحليلات مفصلة لكل عملية تنفيذ
|
||||
- **المقاييس**: استخدام الرموز وأوقات التنفيذ والتكاليف
|
||||
- **عرض الجدول الزمني**: تمثيل مرئي لتسلسل المهام
|
||||
|
||||
### ميزات متقدمة
|
||||
|
||||
تقدم منصة Enterprise أيضاً:
|
||||
|
||||
- **إدارة متغيرات البيئة**: تخزين وإدارة مفاتيح API بأمان
|
||||
- **اتصالات LLM**: تهيئة التكاملات مع مزودي LLM المختلفين
|
||||
- **مستودع الأدوات المخصصة**: إنشاء ومشاركة وتثبيت الأدوات
|
||||
- **Crew Studio**: بناء الطواقم عبر واجهة محادثة دون كتابة كود
|
||||
|
||||
## استكشاف أخطاء النشر وإصلاحها
|
||||
|
||||
إذا فشل النشر، تحقق من هذه المشكلات الشائعة:
|
||||
|
||||
### فشل البناء
|
||||
|
||||
#### ملف uv.lock مفقود
|
||||
|
||||
**العرض**: فشل البناء مبكراً مع أخطاء حل الاعتماديات
|
||||
|
||||
**الحل**: أنشئ ملف القفل وارفعه:
|
||||
|
||||
```bash
|
||||
uv lock
|
||||
git add uv.lock
|
||||
git commit -m "Add uv.lock for deployment"
|
||||
git push
|
||||
```
|
||||
|
||||
<Warning>
|
||||
ملف `uv.lock` مطلوب لجميع عمليات النشر. بدونه، لا يمكن للمنصة
|
||||
تثبيت اعتمادياتك بشكل موثوق.
|
||||
</Warning>
|
||||
|
||||
#### بنية المشروع الخاطئة
|
||||
|
||||
**العرض**: أخطاء "Could not find entry point" أو "Module not found"
|
||||
|
||||
**الحل**: تحقق من أن مشروعك يتطابق مع البنية المتوقعة:
|
||||
|
||||
- **JSON-first Crews**: أبقِ `crew.jsonc` أو `crew.json` و `agents/` في جذر المشروع
|
||||
- **Crews كلاسيكية**: استخدم `src/project_name/main.py` مع دالة دخول `run()`
|
||||
- **Flows**: استخدم `src/project_name/main.py` مع دالة دخول `kickoff()`
|
||||
|
||||
راجع [التحضير للنشر](/ar/enterprise/guides/prepare-for-deployment) لمخططات البنية المفصلة.
|
||||
|
||||
#### مُزخرف CrewBase مفقود في crew كلاسيكية
|
||||
|
||||
**العرض**: أخطاء "Crew not found" أو "Config not found" أو أخطاء تهيئة الوكيل/المهمة
|
||||
|
||||
**الحل**: في crews الكلاسيكية Python/YAML، تأكد من أن جميع فئات الـ crew تستخدم مُزخرف `@CrewBase`. لا تحتاج crews بنمط JSON-first إلى هذا المزخرف.
|
||||
|
||||
```python
|
||||
from crewai.project import CrewBase, agent, crew, task
|
||||
|
||||
@CrewBase # This decorator is REQUIRED
|
||||
class YourCrew():
|
||||
"""Your crew description"""
|
||||
|
||||
@agent
|
||||
def my_agent(self) -> Agent:
|
||||
return Agent(
|
||||
config=self.agents_config['my_agent'], # type: ignore[index]
|
||||
verbose=True
|
||||
)
|
||||
|
||||
# ... rest of crew definition
|
||||
```
|
||||
|
||||
<Info>
|
||||
ينطبق هذا على فئات crew الكلاسيكية المكتوبة في Python، بما في ذلك crews الكلاسيكية المضمنة داخل مشاريع Flow.
|
||||
يتم التحقق من crews بنمط JSON-first من `crew.jsonc` و `agents/` بدلاً من ذلك.
|
||||
</Info>
|
||||
|
||||
#### نوع pyproject.toml غير صحيح
|
||||
|
||||
**العرض**: نجاح البناء لكن فشل وقت التشغيل، أو سلوك غير متوقع
|
||||
|
||||
**الحل**: تحقق من أن قسم `[tool.crewai]` يتطابق مع نوع مشروعك:
|
||||
|
||||
```toml
|
||||
# For Crew projects:
|
||||
[tool.crewai]
|
||||
type = "crew"
|
||||
|
||||
# For Flow projects:
|
||||
[tool.crewai]
|
||||
type = "flow"
|
||||
```
|
||||
|
||||
### فشل وقت التشغيل
|
||||
|
||||
#### فشل اتصال LLM
|
||||
|
||||
**العرض**: أخطاء مفتاح API، "model not found"، أو فشل المصادقة
|
||||
|
||||
**الحل**:
|
||||
1. تحقق من صحة تعيين مفتاح API لمزود LLM في متغيرات البيئة
|
||||
2. تأكد من تطابق أسماء متغيرات البيئة مع ما يتوقعه الكود
|
||||
3. اختبر محلياً بنفس متغيرات البيئة بالضبط قبل النشر
|
||||
|
||||
#### أخطاء تنفيذ الطاقم
|
||||
|
||||
**العرض**: يبدأ الطاقم لكن يفشل أثناء التنفيذ
|
||||
|
||||
**الحل**:
|
||||
1. تحقق من سجلات التنفيذ في لوحة تحكم AMP (علامة تبويب Traces)
|
||||
2. تحقق من أن جميع الأدوات لديها مفاتيح API المطلوبة مُهيأة
|
||||
3. في crews بنمط JSON-first، تحقق من `crew.jsonc` والملفات المشار إليها داخل `agents/`
|
||||
4. في crews الكلاسيكية، تأكد من صحة `agents.yaml` و `tasks.yaml`
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في مشاكل النشر أو أسئلة حول
|
||||
منصة AMP.
|
||||
</Card>
|
||||
179
docs/edge/ar/enterprise/guides/enable-crew-studio.mdx
Normal file
179
docs/edge/ar/enterprise/guides/enable-crew-studio.mdx
Normal file
@@ -0,0 +1,179 @@
|
||||
---
|
||||
title: "تفعيل Crew Studio"
|
||||
description: "تفعيل Crew Studio على CrewAI AMP"
|
||||
icon: "comments"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Tip>
|
||||
Crew Studio هو أداة قوية **بدون كود/منخفضة الكود** تتيح لك بسرعة
|
||||
بناء أو هيكلة الطواقم عبر واجهة محادثة.
|
||||
</Tip>
|
||||
|
||||
## ما هو Crew Studio؟
|
||||
|
||||
Crew Studio هو طريقة مبتكرة لإنشاء طواقم وكلاء الذكاء الاصطناعي بدون كتابة كود.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
مع Crew Studio، يمكنك:
|
||||
|
||||
- الدردشة مع مساعد الطاقم لوصف مشكلتك
|
||||
- إنشاء الوكلاء والمهام تلقائياً
|
||||
- اختيار الأدوات المناسبة
|
||||
- تهيئة المدخلات الضرورية
|
||||
- إنشاء كود قابل للتنزيل للتخصيص
|
||||
- النشر مباشرة على منصة CrewAI AMP
|
||||
|
||||
## خطوات التهيئة
|
||||
|
||||
قبل البدء باستخدام Crew Studio، تحتاج لتهيئة اتصالات LLM:
|
||||
|
||||
<Steps>
|
||||
<Step title="إعداد اتصال LLM">
|
||||
انتقل إلى علامة تبويب **LLM Connections** في لوحة تحكم CrewAI AMP وأنشئ اتصال LLM جديداً.
|
||||
|
||||
<Note>
|
||||
يمكنك استخدام أي مزود LLM تريده ويدعمه CrewAI.
|
||||
</Note>
|
||||
|
||||
هيّئ اتصال LLM:
|
||||
|
||||
- أدخل `Connection Name` (مثل `OpenAI`)
|
||||
- اختر مزود النموذج: `openai` أو `azure`
|
||||
- اختر النماذج التي تريد استخدامها في طواقم Studio
|
||||
- نوصي بـ `gpt-4o` و`o1-mini` و`gpt-4o-mini` على الأقل
|
||||
- أضف مفتاح API كمتغير بيئة:
|
||||
- لـ OpenAI: أضف `OPENAI_API_KEY` مع مفتاح API
|
||||
- لـ Azure OpenAI: راجع [هذه المقالة](https://blog.crewai.com/configuring-azure-openai-with-crewai-a-comprehensive-guide/) لتفاصيل التهيئة
|
||||
- انقر على `Add Connection` لحفظ التهيئة
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="التحقق من إضافة الاتصال">
|
||||
بمجرد إتمام الإعداد، سترى الاتصال الجديد مُضافاً إلى قائمة الاتصالات المتاحة.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="تهيئة إعدادات LLM الافتراضية">
|
||||
في القائمة الرئيسية، انتقل إلى **Settings → Defaults** وهيّئ إعدادات LLM الافتراضية:
|
||||
|
||||
- اختر النماذج الافتراضية للوكلاء والمكونات الأخرى
|
||||
- عيّن التهيئات الافتراضية لـ Crew Studio
|
||||
|
||||
انقر على `Save Settings` لتطبيق تغييراتك.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## استخدام Crew Studio
|
||||
|
||||
الآن بعد تهيئة اتصال LLM والإعدادات الافتراضية، أنت جاهز لبدء استخدام Crew Studio!
|
||||
|
||||
<Steps>
|
||||
<Step title="الوصول إلى Studio">
|
||||
انتقل إلى قسم **Studio** في لوحة تحكم CrewAI AMP.
|
||||
</Step>
|
||||
|
||||
<Step title="بدء محادثة">
|
||||
ابدأ محادثة مع مساعد الطاقم بوصف المشكلة التي تريد حلها:
|
||||
|
||||
```md
|
||||
I need a crew that can research the latest AI developments and create a summary report.
|
||||
```
|
||||
|
||||
سيطرح مساعد الطاقم أسئلة توضيحية لفهم متطلباتك بشكل أفضل.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="مراجعة الطاقم المُنشأ">
|
||||
راجع تهيئة الطاقم المُنشأ، بما في ذلك:
|
||||
|
||||
- الوكلاء وأدوارهم
|
||||
- المهام المطلوب تنفيذها
|
||||
- المدخلات المطلوبة
|
||||
- الأدوات المستخدمة
|
||||
|
||||
هذه فرصتك لتنقيح التهيئة قبل المتابعة.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="النشر أو التنزيل">
|
||||
بمجرد رضاك عن التهيئة، يمكنك:
|
||||
|
||||
- تنزيل الكود المُنشأ للتخصيص المحلي
|
||||
- نشر الطاقم مباشرة على منصة CrewAI AMP
|
||||
- تعديل التهيئة وإعادة إنشاء الطاقم
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="اختبار طاقمك">
|
||||
بعد النشر، اختبر طاقمك بمدخلات نموذجية للتأكد من أنه يعمل كما هو متوقع.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Tip>
|
||||
للحصول على أفضل النتائج، قدم أوصافاً واضحة ومفصلة لما تريد أن
|
||||
يحققه طاقمك. ضمّن مدخلات ومخرجات محددة متوقعة في
|
||||
وصفك.
|
||||
</Tip>
|
||||
|
||||
## مثال على سير العمل
|
||||
|
||||
إليك سير عمل نموذجي لإنشاء طاقم مع Crew Studio:
|
||||
|
||||
<Steps>
|
||||
<Step title="وصف مشكلتك">
|
||||
ابدأ بوصف مشكلتك:
|
||||
|
||||
```md
|
||||
I need a crew that can analyze financial news and provide investment recommendations
|
||||
```
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="الإجابة على الأسئلة">
|
||||
أجب على أسئلة التوضيح من مساعد الطاقم لتنقيح
|
||||
متطلباتك.
|
||||
</Step>
|
||||
|
||||
<Step title="مراجعة الخطة">
|
||||
راجع خطة الطاقم المُنشأة، التي قد تتضمن:
|
||||
|
||||
- وكيل بحث لجمع الأخبار المالية
|
||||
- وكيل تحليل لتفسير البيانات
|
||||
- وكيل توصيات لتقديم نصائح استثمارية
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="الموافقة أو التعديل">
|
||||
وافق على الخطة أو اطلب تغييرات إذا لزم الأمر.
|
||||
</Step>
|
||||
|
||||
<Step title="التنزيل أو النشر">
|
||||
نزّل الكود للتخصيص أو انشر مباشرة على المنصة.
|
||||
</Step>
|
||||
|
||||
<Step title="الاختبار والتنقيح">
|
||||
اختبر طاقمك بمدخلات نموذجية ونقّح حسب الحاجة.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في Crew Studio أو أي ميزات أخرى في CrewAI
|
||||
AMP.
|
||||
</Card>
|
||||
97
docs/edge/ar/enterprise/guides/gmail-trigger.mdx
Normal file
97
docs/edge/ar/enterprise/guides/gmail-trigger.mdx
Normal file
@@ -0,0 +1,97 @@
|
||||
---
|
||||
title: "مشغل Gmail"
|
||||
description: "تشغيل الأتمتات عند حدوث أحداث Gmail (مثل رسائل بريد إلكتروني جديدة، تسميات)."
|
||||
icon: "envelope"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
استخدم مشغل Gmail لتشغيل طواقمك المنشورة عند حدوث أحداث Gmail في الحسابات المتصلة، مثل استلام رسالة بريد إلكتروني جديدة أو رسائل تطابق تسمية/فلتر.
|
||||
|
||||
<Tip>
|
||||
تأكد من ربط Gmail في Tools & Integrations وتفعيل المشغل
|
||||
لعملية النشر.
|
||||
</Tip>
|
||||
|
||||
## تفعيل مشغل Gmail
|
||||
|
||||
1. افتح عملية النشر في CrewAI AMP
|
||||
2. انتقل إلى علامة تبويب **Triggers**
|
||||
3. حدد موقع **Gmail** وبدّل مفتاح التبديل للتفعيل
|
||||
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/trigger-selected.png"
|
||||
alt="تفعيل أو تعطيل المشغلات بالتبديل"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## مثال: معالجة الرسائل الجديدة
|
||||
|
||||
عند وصول رسالة بريد إلكتروني جديدة، سيرسل مشغل Gmail الحمولة إلى طاقمك أو تدفقك. فيما يلي مثال على طاقم يحلل ويعالج حمولة المشغل.
|
||||
|
||||
```python
|
||||
@CrewBase
|
||||
class GmailProcessingCrew:
|
||||
@agent
|
||||
def parser(self) -> Agent:
|
||||
return Agent(
|
||||
config=self.agents_config['parser'],
|
||||
)
|
||||
|
||||
@task
|
||||
def parse_gmail_payload(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['parse_gmail_payload'],
|
||||
agent=self.parser(),
|
||||
)
|
||||
|
||||
@task
|
||||
def act_on_email(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['act_on_email'],
|
||||
agent=self.parser(),
|
||||
)
|
||||
```
|
||||
|
||||
ستكون حمولة Gmail متاحة عبر آليات السياق القياسية.
|
||||
|
||||
### الاختبار المحلي
|
||||
|
||||
اختبر تكامل مشغل Gmail محلياً باستخدام CrewAI CLI:
|
||||
|
||||
```bash
|
||||
# عرض جميع المشغلات المتاحة
|
||||
crewai triggers list
|
||||
|
||||
# محاكاة مشغل Gmail بحمولة واقعية
|
||||
crewai triggers run gmail/new_email_received
|
||||
```
|
||||
|
||||
سينفذ أمر `crewai triggers run` طاقمك بحمولة Gmail كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
|
||||
|
||||
<Warning>
|
||||
استخدم `crewai triggers run gmail/new_email_received` (وليس `crewai run`) لمحاكاة
|
||||
تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
|
||||
حمولة المشغل تلقائياً.
|
||||
</Warning>
|
||||
|
||||
## مراقبة عمليات التنفيذ
|
||||
|
||||
تتبع سجل وأداء عمليات التشغيل المُشغّلة:
|
||||
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/list-executions.png"
|
||||
alt="قائمة عمليات التنفيذ المُشغّلة بواسطة الأتمتة"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- تأكد من ربط Gmail في Tools & Integrations
|
||||
- تحقق من تفعيل مشغل Gmail في علامة تبويب Triggers
|
||||
- اختبر محلياً بـ `crewai triggers run gmail/new_email_received` لرؤية هيكل الحمولة بالضبط
|
||||
- تحقق من سجلات التنفيذ وتأكد من تمرير الحمولة كـ `crewai_trigger_payload`
|
||||
- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
|
||||
83
docs/edge/ar/enterprise/guides/google-calendar-trigger.mdx
Normal file
83
docs/edge/ar/enterprise/guides/google-calendar-trigger.mdx
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
title: "مشغل Google Calendar"
|
||||
description: "تشغيل الطواقم عند إنشاء أو تحديث أو إلغاء أحداث Google Calendar"
|
||||
icon: "calendar"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
استخدم مشغل Google Calendar لإطلاق الأتمتات كلما تغيرت أحداث التقويم. تشمل حالات الاستخدام الشائعة إحاطة الفريق قبل اجتماع، وإخطار أصحاب المصلحة عند إلغاء حدث هام، أو تلخيص الجداول اليومية.
|
||||
|
||||
<Tip>
|
||||
تأكد من ربط Google Calendar في **Tools & Integrations** وتفعيله
|
||||
لعملية النشر التي تريد أتمتتها.
|
||||
</Tip>
|
||||
|
||||
## تفعيل مشغل Google Calendar
|
||||
|
||||
1. افتح عملية النشر في CrewAI AMP
|
||||
2. انتقل إلى علامة تبويب **Triggers**
|
||||
3. حدد موقع **Google Calendar** وبدّل مفتاح التبديل للتفعيل
|
||||
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/calendar-trigger.png"
|
||||
alt="تفعيل أو تعطيل المشغلات بالتبديل"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## مثال: تلخيص تفاصيل الاجتماع
|
||||
|
||||
المقتطف أدناه يعكس مثال `calendar-event-crew.py` في مستودع المشغلات. يحلل الحمولة، ويحلل الحاضرين والتوقيت، وينتج ملخصاً للاجتماع للأدوات اللاحقة.
|
||||
|
||||
```python
|
||||
from calendar_event_crew import GoogleCalendarEventTrigger
|
||||
|
||||
crew = GoogleCalendarEventTrigger().crew()
|
||||
result = crew.kickoff({
|
||||
"crewai_trigger_payload": calendar_payload,
|
||||
})
|
||||
print(result.raw)
|
||||
```
|
||||
|
||||
استخدم `crewai_trigger_payload` تماماً كما يتم تسليمه من المشغل حتى يتمكن الطاقم من استخراج الحقول المناسبة.
|
||||
|
||||
## الاختبار المحلي
|
||||
|
||||
اختبر تكامل مشغل Google Calendar محلياً باستخدام CrewAI CLI:
|
||||
|
||||
```bash
|
||||
# عرض جميع المشغلات المتاحة
|
||||
crewai triggers list
|
||||
|
||||
# محاكاة مشغل Google Calendar بحمولة واقعية
|
||||
crewai triggers run google_calendar/event_changed
|
||||
```
|
||||
|
||||
سينفذ أمر `crewai triggers run` طاقمك بحمولة Calendar كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
|
||||
|
||||
<Warning>
|
||||
استخدم `crewai triggers run google_calendar/event_changed` (وليس `crewai run`) لمحاكاة
|
||||
تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
|
||||
حمولة المشغل تلقائياً.
|
||||
</Warning>
|
||||
|
||||
## مراقبة عمليات التنفيذ
|
||||
|
||||
تتبع قائمة **Executions** في لوحة تحكم النشر كل عملية تشغيل مُشغّلة وتعرض بيانات الحمولة الوصفية وملخصات المخرجات والأخطاء.
|
||||
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/list-executions.png"
|
||||
alt="قائمة عمليات التنفيذ المُشغّلة بواسطة الأتمتة"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- تأكد من ربط حساب Google الصحيح وتفعيل المشغل
|
||||
- اختبر محلياً بـ `crewai triggers run google_calendar/event_changed` لرؤية هيكل الحمولة بالضبط
|
||||
- تأكد من أن سير عملك يتعامل مع أحداث اليوم الكامل (الحمولات تستخدم `start.date` و`end.date` بدلاً من الطوابع الزمنية)
|
||||
- تحقق من سجلات التنفيذ إذا كانت التذكيرات أو مصفوفات الحاضرين مفقودة — قد تحد صلاحيات التقويم من الحقول في الحمولة
|
||||
- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
|
||||
80
docs/edge/ar/enterprise/guides/google-drive-trigger.mdx
Normal file
80
docs/edge/ar/enterprise/guides/google-drive-trigger.mdx
Normal file
@@ -0,0 +1,80 @@
|
||||
---
|
||||
title: "مشغل Google Drive"
|
||||
description: "الاستجابة لأحداث ملفات Google Drive بطواقم آلية"
|
||||
icon: "folder"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
شغّل أتمتاتك عند إنشاء أو تحديث أو حذف ملفات في Google Drive. تشمل سير العمل النموذجية تلخيص المحتوى المُحمّل حديثاً، وتطبيق سياسات المشاركة، أو إخطار المالكين عند تغيير ملفات هامة.
|
||||
|
||||
<Tip>
|
||||
اربط Google Drive في **Tools & Integrations** وتأكد من تفعيل المشغل
|
||||
للأتمتة التي تريد مراقبتها.
|
||||
</Tip>
|
||||
|
||||
## تفعيل مشغل Google Drive
|
||||
|
||||
1. افتح عملية النشر في CrewAI AMP
|
||||
2. انتقل إلى علامة تبويب **Triggers**
|
||||
3. حدد موقع **Google Drive** وبدّل مفتاح التبديل للتفعيل
|
||||
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/gdrive-trigger.png"
|
||||
alt="تفعيل أو تعطيل المشغلات بالتبديل"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## مثال: تلخيص نشاط الملفات
|
||||
|
||||
تحلل طواقم Drive النموذجية الحمولة لاستخراج بيانات الملف الوصفية وتقييم الصلاحيات ونشر ملخص.
|
||||
|
||||
```python
|
||||
from drive_file_crew import GoogleDriveFileTrigger
|
||||
|
||||
crew = GoogleDriveFileTrigger().crew()
|
||||
crew.kickoff({
|
||||
"crewai_trigger_payload": drive_payload,
|
||||
})
|
||||
```
|
||||
|
||||
## الاختبار المحلي
|
||||
|
||||
اختبر تكامل مشغل Google Drive محلياً باستخدام CrewAI CLI:
|
||||
|
||||
```bash
|
||||
# عرض جميع المشغلات المتاحة
|
||||
crewai triggers list
|
||||
|
||||
# محاكاة مشغل Google Drive بحمولة واقعية
|
||||
crewai triggers run google_drive/file_changed
|
||||
```
|
||||
|
||||
سينفذ أمر `crewai triggers run` طاقمك بحمولة Drive كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
|
||||
|
||||
<Warning>
|
||||
استخدم `crewai triggers run google_drive/file_changed` (وليس `crewai run`) لمحاكاة
|
||||
تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
|
||||
حمولة المشغل تلقائياً.
|
||||
</Warning>
|
||||
|
||||
## مراقبة عمليات التنفيذ
|
||||
|
||||
تتبع سجل وأداء عمليات التشغيل المُشغّلة عبر قائمة **Executions** في لوحة تحكم النشر.
|
||||
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/list-executions.png"
|
||||
alt="قائمة عمليات التنفيذ المُشغّلة بواسطة الأتمتة"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- تحقق من ربط Google Drive وتفعيل مفتاح التبديل للمشغل
|
||||
- اختبر محلياً بـ `crewai triggers run google_drive/file_changed` لرؤية هيكل الحمولة بالضبط
|
||||
- إذا كانت الحمولة تفتقد بيانات الصلاحيات، تأكد من أن الحساب المتصل لديه صلاحية الوصول إلى الملف أو المجلد
|
||||
- يرسل المشغل معرّفات الملفات فقط؛ استخدم Drive API إذا كنت تحتاج جلب المحتوى الثنائي أثناء تشغيل الطاقم
|
||||
- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
|
||||
61
docs/edge/ar/enterprise/guides/hubspot-trigger.mdx
Normal file
61
docs/edge/ar/enterprise/guides/hubspot-trigger.mdx
Normal file
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: "مشغل HubSpot"
|
||||
description: "تشغيل طواقم CrewAI مباشرة من سير عمل HubSpot"
|
||||
icon: "hubspot"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يقدم هذا الدليل عملية خطوة بخطوة لإعداد مشغلات HubSpot لـ CrewAI AMP، مما يتيح لك بدء الطواقم مباشرة من سير عمل HubSpot.
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
- حساب CrewAI AMP
|
||||
- حساب HubSpot مع ميزة [HubSpot Workflows](https://knowledge.hubspot.com/workflows/create-workflows)
|
||||
|
||||
## خطوات الإعداد
|
||||
|
||||
<Steps>
|
||||
<Step title="ربط حساب HubSpot بـ CrewAI AMP">
|
||||
- سجّل الدخول إلى `حساب CrewAI AMP > Triggers` - اختر `HubSpot` من
|
||||
قائمة المشغلات المتاحة - اختر حساب HubSpot الذي تريد ربطه
|
||||
بـ CrewAI AMP - اتبع التعليمات على الشاشة لتفويض وصول CrewAI AMP
|
||||
إلى حساب HubSpot - ستظهر رسالة تأكيد بمجرد
|
||||
ربط HubSpot بنجاح مع CrewAI AMP
|
||||
</Step>
|
||||
<Step title="إنشاء سير عمل HubSpot">
|
||||
- سجّل الدخول إلى `حساب HubSpot > Automations > Workflows > New workflow`
|
||||
- اختر نوع سير العمل المناسب لاحتياجاتك (مثل Start from scratch) -
|
||||
في منشئ سير العمل، انقر على أيقونة Plus (+) لإضافة إجراء جديد. -
|
||||
اختر `Integrated apps > CrewAI > Kickoff a Crew`. - اختر الطاقم الذي
|
||||
تريد تشغيله. - انقر على `Save` لإضافة الإجراء إلى سير عملك
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/hubspot-workflow-1.png"
|
||||
alt="سير عمل HubSpot 1"
|
||||
/>
|
||||
</Frame>
|
||||
</Step>
|
||||
<Step title="استخدام نتائج الطاقم مع إجراءات أخرى">
|
||||
- بعد خطوة Kickoff a Crew، انقر على أيقونة Plus (+) لإضافة
|
||||
إجراء جديد. - على سبيل المثال، لإرسال إشعار بريد إلكتروني داخلي، اختر
|
||||
`Communications > Send internal email notification` - في حقل Body،
|
||||
انقر على `Insert data`، اختر `View properties or action outputs from > Action
|
||||
outputs > Crew Result` لتضمين بيانات الطاقم في البريد الإلكتروني
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/hubspot-workflow-2.png"
|
||||
alt="سير عمل HubSpot 2"
|
||||
/>
|
||||
</Frame>
|
||||
- هيّئ أي إجراءات إضافية حسب الحاجة - راجع خطوات
|
||||
سير عملك للتأكد من إعداد كل شيء بشكل صحيح - فعّل سير العمل
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/hubspot-workflow-3.png"
|
||||
alt="سير عمل HubSpot 3"
|
||||
/>
|
||||
</Frame>
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
لمزيد من المعلومات المفصلة حول الإجراءات المتاحة وخيارات التخصيص، راجع [وثائق HubSpot Workflows](https://knowledge.hubspot.com/workflows/create-workflows).
|
||||
157
docs/edge/ar/enterprise/guides/human-in-the-loop.mdx
Normal file
157
docs/edge/ar/enterprise/guides/human-in-the-loop.mdx
Normal file
@@ -0,0 +1,157 @@
|
||||
---
|
||||
title: "سير عمل HITL"
|
||||
description: "تعلم كيفية تنفيذ سير عمل Human-In-The-Loop في CrewAI لتعزيز اتخاذ القرار"
|
||||
icon: "user-check"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
Human-In-The-Loop (HITL) هو نهج قوي يجمع بين الذكاء الاصطناعي والخبرة البشرية لتعزيز اتخاذ القرار وتحسين نتائج المهام. يوضح هذا الدليل كيفية تنفيذ HITL داخل CrewAI Enterprise.
|
||||
|
||||
## نهجا HITL في CrewAI
|
||||
|
||||
يقدم CrewAI نهجين لتنفيذ سير عمل Human-In-The-Loop:
|
||||
|
||||
| النهج | الأفضل لـ | الإصدار |
|
||||
|-------|-----------|---------|
|
||||
| **قائم على التدفق** (مُزخرف `@human_feedback`) | الإنتاج مع واجهة Enterprise، سير عمل البريد الإلكتروني أولاً، ميزات المنصة الكاملة | **1.8.0+** |
|
||||
| **قائم على Webhook** | التكاملات المخصصة، الأنظمة الخارجية (Slack، Teams، إلخ.)، الإعدادات القديمة | جميع الإصدارات |
|
||||
|
||||
## HITL القائم على التدفق مع منصة Enterprise
|
||||
|
||||
<Note>
|
||||
يتطلب مُزخرف `@human_feedback` **إصدار CrewAI 1.8.0 أو أعلى**.
|
||||
</Note>
|
||||
|
||||
عند استخدام مُزخرف `@human_feedback` في تدفقاتك، يوفر CrewAI Enterprise **نظام HITL يعتمد على البريد الإلكتروني أولاً** يمكّن أي شخص لديه عنوان بريد إلكتروني من الاستجابة لطلبات المراجعة:
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="تصميم البريد الإلكتروني أولاً" icon="envelope">
|
||||
يتلقى المستجيبون إشعارات بريد إلكتروني ويمكنهم الرد مباشرة — لا حاجة لتسجيل الدخول.
|
||||
</Card>
|
||||
<Card title="مراجعة من لوحة التحكم" icon="desktop">
|
||||
راجع واستجب لطلبات HITL في لوحة تحكم Enterprise عند التفضيل.
|
||||
</Card>
|
||||
<Card title="توجيه مرن" icon="route">
|
||||
وجّه الطلبات إلى عناوين بريد محددة بناءً على أنماط الدوال أو استخراجها من حالة التدفق.
|
||||
</Card>
|
||||
<Card title="استجابة تلقائية" icon="clock">
|
||||
هيّئ استجابات احتياطية تلقائية عندما لا يرد أي شخص خلال المهلة الزمنية.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
### الفوائد الرئيسية
|
||||
|
||||
- **مستجيبون خارجيون**: أي شخص لديه بريد إلكتروني يمكنه الاستجابة، حتى غير مستخدمي المنصة
|
||||
- **تعيين ديناميكي**: استخراج بريد المُعيَّن من حالة التدفق (مثل `account_owner_email`)
|
||||
- **تهيئة بسيطة**: التوجيه عبر البريد الإلكتروني أسهل في الإعداد من إدارة المستخدمين/الأدوار
|
||||
- **احتياطي منشئ النشر**: إذا لم تتطابق قاعدة توجيه، يتم إخطار منشئ النشر
|
||||
|
||||
<Tip>
|
||||
لتفاصيل التنفيذ حول مُزخرف `@human_feedback`، راجع دليل [التغذية الراجعة البشرية في التدفقات](/ar/learn/human-feedback-in-flows).
|
||||
</Tip>
|
||||
|
||||
## إعداد سير عمل HITL القائم على Webhook
|
||||
|
||||
للتكاملات المخصصة مع الأنظمة الخارجية مثل Slack وMicrosoft Teams أو تطبيقاتك الخاصة، يمكنك استخدام النهج القائم على Webhook:
|
||||
|
||||
<Steps>
|
||||
<Step title="تهيئة المهمة">
|
||||
هيّئ مهمتك مع تفعيل الإدخال البشري:
|
||||
<Frame>
|
||||
<img src="/images/enterprise/crew-human-input.png" alt="إدخال بشري للطاقم" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="تقديم رابط Webhook">
|
||||
عند تشغيل طاقمك، أضف رابط webhook للإدخال البشري:
|
||||
<Frame>
|
||||
<img src="/images/enterprise/crew-webhook-url.png" alt="رابط Webhook للطاقم" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="استلام إشعار Webhook">
|
||||
بمجرد إتمام الطاقم للمهمة التي تتطلب إدخالاً بشرياً، ستتلقى إشعار webhook يحتوي على:
|
||||
- **معرّف التنفيذ**
|
||||
- **معرّف المهمة**
|
||||
- **مخرجات المهمة**
|
||||
</Step>
|
||||
|
||||
<Step title="مراجعة مخرجات المهمة">
|
||||
سيتوقف النظام في حالة `Pending Human Input`. راجع مخرجات المهمة بعناية.
|
||||
</Step>
|
||||
|
||||
<Step title="إرسال التغذية الراجعة البشرية">
|
||||
استدعِ نقطة نهاية الاستئناف لطاقمك بالمعلومات التالية:
|
||||
<Frame>
|
||||
<img src="/images/enterprise/crew-resume-endpoint.png" alt="نقطة نهاية استئناف الطاقم" />
|
||||
</Frame>
|
||||
|
||||
<Warning>
|
||||
**هام: يجب تقديم روابط Webhook مرة أخرى**:
|
||||
**يجب** تقديم نفس روابط webhook (`taskWebhookUrl`، `stepWebhookUrl`، `crewWebhookUrl`) في استدعاء الاستئناف التي استخدمتها في استدعاء التشغيل. لا تُنقل تهيئات Webhook تلقائياً من التشغيل — يجب تضمينها صراحة في طلب الاستئناف لمواصلة تلقي الإشعارات لاكتمال المهام وخطوات الوكيل واكتمال الطاقم.
|
||||
</Warning>
|
||||
|
||||
مثال على استدعاء الاستئناف مع webhooks:
|
||||
```bash
|
||||
curl -X POST {BASE_URL}/resume \
|
||||
-H "Authorization: Bearer YOUR_API_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"execution_id": "abcd1234-5678-90ef-ghij-klmnopqrstuv",
|
||||
"task_id": "research_task",
|
||||
"human_feedback": "Great work! Please add more details.",
|
||||
"is_approve": true,
|
||||
"taskWebhookUrl": "https://your-server.com/webhooks/task",
|
||||
"stepWebhookUrl": "https://your-server.com/webhooks/step",
|
||||
"crewWebhookUrl": "https://your-server.com/webhooks/crew"
|
||||
}'
|
||||
```
|
||||
|
||||
<Warning>
|
||||
**تأثير التغذية الراجعة على تنفيذ المهمة**:
|
||||
من الضروري توخي الحذر عند تقديم التغذية الراجعة، حيث سيتم دمج محتوى التغذية الراجعة بالكامل كسياق إضافي لعمليات تنفيذ المهام اللاحقة.
|
||||
</Warning>
|
||||
وهذا يعني:
|
||||
- جميع المعلومات في تغذيتك الراجعة تصبح جزءاً من سياق المهمة.
|
||||
- التفاصيل غير ذات الصلة قد تؤثر سلباً عليها.
|
||||
- التغذية الراجعة الموجزة وذات الصلة تساعد في الحفاظ على تركيز وكفاءة المهمة.
|
||||
- راجع دائماً تغذيتك الراجعة بعناية قبل الإرسال للتأكد من أنها تحتوي فقط على معلومات ذات صلة توجه تنفيذ المهمة بشكل إيجابي.
|
||||
</Step>
|
||||
<Step title="التعامل مع التغذية الراجعة السلبية">
|
||||
إذا قدمت تغذية راجعة سلبية:
|
||||
- سيعيد الطاقم محاولة المهمة مع سياق إضافي من تغذيتك الراجعة.
|
||||
- ستتلقى إشعار webhook آخر لمزيد من المراجعة.
|
||||
- كرر الخطوات 4-6 حتى ترضى.
|
||||
</Step>
|
||||
|
||||
<Step title="استمرار التنفيذ">
|
||||
عندما ترسل تغذية راجعة إيجابية، سيستمر التنفيذ إلى الخطوات التالية.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## أفضل الممارسات
|
||||
|
||||
- **كن محدداً**: قدم تغذية راجعة واضحة وقابلة للتنفيذ تعالج المهمة مباشرة
|
||||
- **كن ذا صلة**: ضمّن فقط المعلومات التي ستساعد في تحسين تنفيذ المهمة
|
||||
- **كن سريعاً**: استجب لمطالبات HITL بسرعة لتجنب تأخير سير العمل
|
||||
- **راجع بعناية**: تحقق من تغذيتك الراجعة قبل الإرسال لضمان الدقة
|
||||
|
||||
## حالات الاستخدام الشائعة
|
||||
|
||||
سير عمل HITL ذو قيمة خاصة لـ:
|
||||
- ضمان الجودة والتحقق
|
||||
- سيناريوهات اتخاذ القرار المعقدة
|
||||
- العمليات الحساسة أو عالية المخاطر
|
||||
- المهام الإبداعية التي تتطلب حكماً بشرياً
|
||||
- مراجعات الامتثال والتنظيم
|
||||
|
||||
## اعرف المزيد
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="إدارة HITL للتدفقات" icon="users-gear" href="/ar/enterprise/features/flow-hitl-management">
|
||||
استكشف قدرات منصة Enterprise الكاملة لـ Flow HITL بما في ذلك إشعارات البريد الإلكتروني وقواعد التوجيه والاستجابة التلقائية والتحليلات.
|
||||
</Card>
|
||||
<Card title="التغذية الراجعة البشرية في التدفقات" icon="code" href="/ar/learn/human-feedback-in-flows">
|
||||
دليل التنفيذ لمُزخرف `@human_feedback` في تدفقاتك.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
178
docs/edge/ar/enterprise/guides/kickoff-crew.mdx
Normal file
178
docs/edge/ar/enterprise/guides/kickoff-crew.mdx
Normal file
@@ -0,0 +1,178 @@
|
||||
---
|
||||
title: "تشغيل الطاقم"
|
||||
description: "تشغيل طاقم على CrewAI AMP"
|
||||
icon: "flag-checkered"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
بمجرد نشر طاقمك على منصة CrewAI AMP، يمكنك بدء عمليات التنفيذ عبر واجهة الويب أو API. يغطي هذا الدليل كلا النهجين.
|
||||
|
||||
## الطريقة 1: استخدام واجهة الويب
|
||||
|
||||
### الخطوة 1: الانتقال إلى طاقمك المنشور
|
||||
|
||||
1. سجّل الدخول إلى [CrewAI AMP](https://app.crewai.com)
|
||||
2. انقر على اسم الطاقم من قائمة مشاريعك
|
||||
3. ستنتقل إلى صفحة تفاصيل الطاقم
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
### الخطوة 2: بدء التنفيذ
|
||||
|
||||
من صفحة تفاصيل طاقمك، لديك خياران لبدء التنفيذ:
|
||||
|
||||
#### الخيار أ: التشغيل السريع
|
||||
|
||||
1. انقر على رابط `Kickoff` في قسم Test Endpoints
|
||||
2. أدخل معاملات الإدخال المطلوبة لطاقمك في محرر JSON
|
||||
3. انقر على زر `Send Request`
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
#### الخيار ب: استخدام الواجهة المرئية
|
||||
|
||||
1. انقر على علامة تبويب `Run` في صفحة تفاصيل الطاقم
|
||||
2. أدخل المدخلات المطلوبة في حقول النموذج
|
||||
3. انقر على زر `Run Crew`
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
### الخطوة 3: مراقبة تقدم التنفيذ
|
||||
|
||||
بعد بدء التنفيذ:
|
||||
|
||||
1. ستتلقى استجابة تحتوي على `kickoff_id` - **انسخ هذا المعرّف**
|
||||
2. هذا المعرّف ضروري لتتبع تنفيذك
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
### الخطوة 4: التحقق من حالة التنفيذ
|
||||
|
||||
لمراقبة تقدم تنفيذك:
|
||||
|
||||
1. انقر على نقطة نهاية "Status" في قسم Test Endpoints
|
||||
2. الصق `kickoff_id` في الحقل المخصص
|
||||
3. انقر على زر "Get Status"
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
ستعرض استجابة الحالة:
|
||||
|
||||
- حالة التنفيذ الحالية (`running`، `completed`، إلخ.)
|
||||
- تفاصيل حول المهام الجارية
|
||||
- أي مخرجات أُنتجت حتى الآن
|
||||
|
||||
### الخطوة 5: عرض النتائج النهائية
|
||||
|
||||
بمجرد اكتمال التنفيذ:
|
||||
|
||||
1. ستتغير الحالة إلى `completed`
|
||||
2. يمكنك عرض نتائج ومخرجات التنفيذ الكاملة
|
||||
3. لعرض أكثر تفصيلاً، تحقق من علامة تبويب `Executions` في صفحة تفاصيل الطاقم
|
||||
|
||||
## الطريقة 2: استخدام API
|
||||
|
||||
يمكنك أيضاً تشغيل الطواقم برمجياً باستخدام REST API لـ CrewAI AMP.
|
||||
|
||||
### المصادقة
|
||||
|
||||
جميع طلبات API تتطلب رمز حامل للمصادقة:
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: Bearer YOUR_CREW_TOKEN" https://your-crew-url.crewai.com
|
||||
```
|
||||
|
||||
رمز الحامل متاح في علامة تبويب Status في صفحة تفاصيل طاقمك.
|
||||
|
||||
### التحقق من صحة الطاقم
|
||||
|
||||
قبل تنفيذ العمليات، يمكنك التحقق من أن طاقمك يعمل بشكل صحيح:
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: Bearer YOUR_CREW_TOKEN" https://your-crew-url.crewai.com
|
||||
```
|
||||
|
||||
ستعيد الاستجابة الناجحة رسالة تشير إلى أن الطاقم يعمل:
|
||||
|
||||
```
|
||||
Healthy%
|
||||
```
|
||||
|
||||
### الخطوة 1: استرداد المدخلات المطلوبة
|
||||
|
||||
أولاً، حدد المدخلات التي يتطلبها طاقمك:
|
||||
|
||||
```bash
|
||||
curl -X GET \
|
||||
-H "Authorization: Bearer YOUR_CREW_TOKEN" \
|
||||
https://your-crew-url.crewai.com/inputs
|
||||
```
|
||||
|
||||
ستكون الاستجابة كائن JSON يحتوي على مصفوفة من معاملات الإدخال المطلوبة، على سبيل المثال:
|
||||
|
||||
```json
|
||||
{ "inputs": ["topic", "current_year"] }
|
||||
```
|
||||
|
||||
يوضح هذا المثال أن هذا الطاقم المحدد يتطلب مدخلين: `topic` و`current_year`.
|
||||
|
||||
### الخطوة 2: بدء التنفيذ
|
||||
|
||||
ابدأ التنفيذ بتقديم المدخلات المطلوبة:
|
||||
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_CREW_TOKEN" \
|
||||
-d '{"inputs": {"topic": "AI Agent Frameworks", "current_year": "2025"}}' \
|
||||
https://your-crew-url.crewai.com/kickoff
|
||||
```
|
||||
|
||||
ستتضمن الاستجابة `kickoff_id` الذي ستحتاجه للتتبع:
|
||||
|
||||
```json
|
||||
{ "kickoff_id": "abcd1234-5678-90ef-ghij-klmnopqrstuv" }
|
||||
```
|
||||
|
||||
### الخطوة 3: التحقق من حالة التنفيذ
|
||||
|
||||
راقب تقدم التنفيذ باستخدام kickoff_id:
|
||||
|
||||
```bash
|
||||
curl -X GET \
|
||||
-H "Authorization: Bearer YOUR_CREW_TOKEN" \
|
||||
https://your-crew-url.crewai.com/status/abcd1234-5678-90ef-ghij-klmnopqrstuv
|
||||
```
|
||||
|
||||
## التعامل مع عمليات التنفيذ
|
||||
|
||||
### عمليات التنفيذ طويلة المدة
|
||||
|
||||
لعمليات التنفيذ التي قد تستغرق وقتاً طويلاً:
|
||||
|
||||
1. فكّر في تنفيذ آلية استعلام دوري للتحقق من الحالة بشكل دوري
|
||||
2. استخدم webhooks (إذا كانت متاحة) للإشعار عند اكتمال التنفيذ
|
||||
3. نفّذ معالجة الأخطاء للمهلات الزمنية المحتملة
|
||||
|
||||
### سياق التنفيذ
|
||||
|
||||
يتضمن سياق التنفيذ:
|
||||
|
||||
- المدخلات المقدمة عند التشغيل
|
||||
- متغيرات البيئة المُهيأة أثناء النشر
|
||||
- أي حالة محفوظة بين المهام
|
||||
|
||||
### تصحيح أخطاء عمليات التنفيذ الفاشلة
|
||||
|
||||
إذا فشل التنفيذ:
|
||||
|
||||
1. تحقق من علامة تبويب "Executions" للسجلات المفصلة
|
||||
2. راجع علامة تبويب "Traces" لتفاصيل التنفيذ خطوة بخطوة
|
||||
3. ابحث عن استجابات LLM واستخدام الأدوات في تفاصيل التتبع
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في مشاكل التنفيذ أو أسئلة حول
|
||||
منصة Enterprise.
|
||||
</Card>
|
||||
70
docs/edge/ar/enterprise/guides/microsoft-teams-trigger.mdx
Normal file
70
docs/edge/ar/enterprise/guides/microsoft-teams-trigger.mdx
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: "مشغل Microsoft Teams"
|
||||
description: "تشغيل الطواقم من نشاط محادثات Microsoft Teams"
|
||||
icon: "microsoft"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
استخدم مشغل Microsoft Teams لبدء الأتمتات كلما أُنشئت محادثة جديدة. تشمل الأنماط الشائعة تلخيص الطلبات الواردة وتوجيه الرسائل العاجلة لفرق الدعم أو إنشاء مهام متابعة في أنظمة أخرى.
|
||||
|
||||
<Tip>
|
||||
تأكد من ربط Microsoft Teams تحت **Tools & Integrations** و
|
||||
تفعيله في علامة تبويب **Triggers** لعملية النشر.
|
||||
</Tip>
|
||||
|
||||
## تفعيل مشغل Microsoft Teams
|
||||
|
||||
1. افتح عملية النشر في CrewAI AMP
|
||||
2. انتقل إلى علامة تبويب **Triggers**
|
||||
3. حدد موقع **Microsoft Teams** وبدّل مفتاح التبديل للتفعيل
|
||||
|
||||
<Frame caption="اتصال مشغل Microsoft Teams">
|
||||
<img
|
||||
src="/images/enterprise/msteams-trigger.png"
|
||||
alt="تفعيل أو تعطيل المشغلات بالتبديل"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## مثال: تلخيص سلسلة محادثة جديدة
|
||||
|
||||
```python
|
||||
from teams_chat_created_crew import MicrosoftTeamsChatTrigger
|
||||
|
||||
crew = MicrosoftTeamsChatTrigger().crew()
|
||||
result = crew.kickoff({
|
||||
"crewai_trigger_payload": teams_payload,
|
||||
})
|
||||
print(result.raw)
|
||||
```
|
||||
|
||||
يحلل الطاقم بيانات المحادثة الوصفية (الموضوع، وقت الإنشاء، قائمة الأعضاء) وينشئ خطة عمل للفريق المستقبل.
|
||||
|
||||
## الاختبار المحلي
|
||||
|
||||
اختبر تكامل مشغل Microsoft Teams محلياً باستخدام CrewAI CLI:
|
||||
|
||||
```bash
|
||||
# عرض جميع المشغلات المتاحة
|
||||
crewai triggers list
|
||||
|
||||
# محاكاة مشغل Microsoft Teams بحمولة واقعية
|
||||
crewai triggers run microsoft_teams/teams_message_created
|
||||
```
|
||||
|
||||
سينفذ أمر `crewai triggers run` طاقمك بحمولة Teams كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
|
||||
|
||||
<Warning>
|
||||
استخدم `crewai triggers run microsoft_teams/teams_message_created` (وليس `crewai
|
||||
run`) لمحاكاة تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى
|
||||
طاقمك حمولة المشغل تلقائياً.
|
||||
</Warning>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- تأكد من أن اتصال Teams نشط؛ يجب تحديثه إذا سحب المستأجر الصلاحيات
|
||||
- اختبر محلياً بـ `crewai triggers run microsoft_teams/teams_message_created` لرؤية هيكل الحمولة بالضبط
|
||||
- تأكد من أن اشتراك webhook في Microsoft 365 لا يزال صالحاً إذا توقفت الحمولات عن الوصول
|
||||
- راجع سجلات التنفيذ لعدم تطابق شكل الحمولة — قد تحذف إشعارات Graph حقولاً عندما تكون المحادثة خاصة أو مقيدة
|
||||
- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
|
||||
224
docs/edge/ar/enterprise/guides/monorepo-deployments.mdx
Normal file
224
docs/edge/ar/enterprise/guides/monorepo-deployments.mdx
Normal file
@@ -0,0 +1,224 @@
|
||||
---
|
||||
title: "النشر من Monorepo"
|
||||
description: "انشر Crew أو Flow من مجلد فرعي داخل مستودع أكبر"
|
||||
icon: "folder-tree"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Note>
|
||||
استخدم دليل عمل عندما يكون Crew أو Flow داخل مستودع أكبر. يتحقق CrewAI AMP
|
||||
من الأتمتة ويبنيها ويشغلها من ذلك المجلد الفرعي بدلاً من جذر المستودع.
|
||||
</Note>
|
||||
|
||||
## متى تستخدم ذلك
|
||||
|
||||
يكون النشر من monorepo مفيداً عندما يحتوي مستودع واحد على عدة أتمتات أو حزم
|
||||
مشتركة أو كود تطبيقات آخر:
|
||||
|
||||
```text
|
||||
company-ai/
|
||||
|-- uv.lock
|
||||
|-- packages/
|
||||
| `-- shared_tools/
|
||||
`-- crews/
|
||||
|-- support_agent/
|
||||
| |-- pyproject.toml
|
||||
| |-- crew.jsonc
|
||||
| `-- agents/
|
||||
| `-- support_agent.jsonc
|
||||
`-- research_flow/
|
||||
|-- pyproject.toml
|
||||
`-- src/
|
||||
`-- research_flow/
|
||||
`-- main.py
|
||||
```
|
||||
|
||||
لنشر `support_agent`، اضبط دليل العمل على:
|
||||
|
||||
```text
|
||||
crews/support_agent
|
||||
```
|
||||
|
||||
لا يزال AMP يجلب المستودع كاملاً أو يرفعه، لكنه يتعامل مع المجلد المحدد كجذر
|
||||
مشروع الأتمتة.
|
||||
|
||||
## ما الذي يتحكم به دليل العمل
|
||||
|
||||
عند تعيين دليل عمل، يستخدم AMP ذلك المجلد من أجل:
|
||||
|
||||
- التحقق من المشروع، بما في ذلك `pyproject.toml` وملفات crew JSON وأي نقطة دخول كلاسيكية لـ Crew أو Flow
|
||||
- تثبيت الاعتماديات باستخدام `uv`
|
||||
- دليل العمل للعملية قيد التشغيل
|
||||
- متغير البيئة `CREW_ROOT_DIR`
|
||||
|
||||
ترك الحقل فارغاً يحافظ على السلوك الحالي ويستخدم جذر المستودع.
|
||||
|
||||
## المصادر المدعومة
|
||||
|
||||
يمكنك تعيين دليل عمل عند إنشاء نشر من:
|
||||
|
||||
- مستودع GitHub متصل
|
||||
- مستودع Git مكوّن في AMP
|
||||
- رفع ملف ZIP
|
||||
|
||||
<Info>
|
||||
اضبط أدلة العمل من واجهة AMP على الويب. لا يطلب تدفق CLI
|
||||
`crewai deploy create` هذا الحقل.
|
||||
</Info>
|
||||
|
||||
يمكنك أيضاً إضافة دليل العمل أو تغييره في نشر موجود من صفحة **Settings** الخاصة
|
||||
بالنشر. يسري التغيير في النشر التالي.
|
||||
|
||||
<Warning>
|
||||
لا يمكن استخدام أدلة العمل وauto-deploy معاً. إذا كان للنشر دليل عمل، يتم
|
||||
تعطيل auto-deploy لذلك النشر. أوقف auto-deploy قبل تعيين دليل عمل.
|
||||
</Warning>
|
||||
|
||||
## إعداد نشر جديد
|
||||
|
||||
<Steps>
|
||||
<Step title="افتح Deploy from Code">
|
||||
في CrewAI AMP، أنشئ نشراً جديداً واختر المصدر: GitHub أو Git Repository أو
|
||||
رفع ZIP.
|
||||
</Step>
|
||||
|
||||
<Step title="اختر المستودع أو الفرع أو ملف ZIP">
|
||||
اختر المستودع والفرع اللذين يحتويان على monorepo، أو ارفع ملف ZIP يحتوي
|
||||
جذره على محتويات monorepo.
|
||||
</Step>
|
||||
|
||||
<Step title="افتح الإعدادات المتقدمة">
|
||||
وسّع قسم **Advanced** في نموذج النشر.
|
||||
</Step>
|
||||
|
||||
<Step title="أدخل دليل العمل">
|
||||
أدخل المسار من جذر المستودع إلى مشروع Crew أو Flow:
|
||||
|
||||
```text
|
||||
crews/support_agent
|
||||
```
|
||||
|
||||
لا تضف شرطة مائلة في البداية.
|
||||
</Step>
|
||||
|
||||
<Step title="انشر">
|
||||
أضف أي متغيرات بيئة مطلوبة، ثم ابدأ النشر.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## إعداد نشر موجود
|
||||
|
||||
<Steps>
|
||||
<Step title="افتح إعدادات النشر">
|
||||
انتقل إلى الأتمتة في AMP وافتح **Settings**.
|
||||
</Step>
|
||||
|
||||
<Step title="أوقف auto-deploy إذا لزم الأمر">
|
||||
إذا كان auto-deploy مفعلاً، أوقفه أولاً. لا يكون حقل دليل العمل متاحاً
|
||||
أثناء تشغيل auto-deploy.
|
||||
</Step>
|
||||
|
||||
<Step title="عيّن دليل العمل">
|
||||
في **Basic settings**، أدخل مسار المجلد الفرعي، مثل:
|
||||
|
||||
```text
|
||||
crews/support_agent
|
||||
```
|
||||
</Step>
|
||||
|
||||
<Step title="أعد النشر">
|
||||
احفظ الإعداد وأعد نشر الأتمتة. سيتم استخدام دليل العمل الجديد في النشر
|
||||
التالي.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## قواعد المسار
|
||||
|
||||
يجب أن يكون دليل العمل مساراً نسبياً داخل جذر المستودع أو ZIP.
|
||||
|
||||
| القاعدة | المثال |
|
||||
|---------|--------|
|
||||
| استخدم مساراً نسبياً | `crews/support_agent` |
|
||||
| لا تبدأ بـ `/` | `/crews/support_agent` غير صالح |
|
||||
| لا تستخدم مقاطع المسار `.` أو `..` | `crews/../support_agent` غير صالح |
|
||||
| استخدم الأحرف والأرقام والشرطات والشرطات السفلية والنقاط والشرطات المائلة فقط | `crews/support agent` غير صالح |
|
||||
| اجعل المسار 255 حرفاً أو أقل | يتم رفض المسارات الأطول |
|
||||
|
||||
يزيل AMP المسافات البيضاء في البداية والنهاية، ويضغط الشرطات المائلة المتكررة،
|
||||
ويزيل الشرطة المائلة النهائية. تستخدم القيمة الفارغة جذر المستودع.
|
||||
|
||||
## ملفات القفل وUV Workspaces
|
||||
|
||||
يجب أن يحتوي المجلد المحدد على `pyproject.toml` وملفات المشروع المناسبة لنوع
|
||||
الأتمتة:
|
||||
|
||||
- crew بنمط JSON-first: ملف `crew.jsonc` أو `crew.json` مع مجلد `agents/`
|
||||
- Crew كلاسيكي أو Flow: مجلد `src/` مع نقطة دخول Python المتوقعة
|
||||
|
||||
يمكن أن يوجد ملف `uv.lock` أو `poetry.lock` إما في المجلد المحدد أو في جذر
|
||||
المستودع.
|
||||
|
||||
يدعم هذا تخطيطي ملفات القفل الشائعين:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="ملف قفل المشروع">
|
||||
```text
|
||||
company-ai/
|
||||
`-- crews/
|
||||
`-- support_agent/
|
||||
|-- pyproject.toml
|
||||
|-- uv.lock
|
||||
|-- crew.jsonc
|
||||
`-- agents/
|
||||
`-- support_agent.jsonc
|
||||
```
|
||||
</Tab>
|
||||
|
||||
<Tab title="ملف قفل workspace">
|
||||
```text
|
||||
company-ai/
|
||||
|-- uv.lock
|
||||
|-- packages/
|
||||
| `-- shared_tools/
|
||||
`-- crews/
|
||||
`-- support_agent/
|
||||
|-- pyproject.toml
|
||||
|-- crew.jsonc
|
||||
`-- agents/
|
||||
`-- support_agent.jsonc
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Tip>
|
||||
إذا كانت الأتمتة تستورد حزماً مشتركة من مكان آخر في monorepo، فصرّح بهذه
|
||||
الحزم في `pyproject.toml` باستخدام إعدادات UV workspace أو path أو source.
|
||||
يشغل AMP الأتمتة من المجلد المحدد، لذلك يجب تثبيت الكود المشترك كاعتمادية
|
||||
بدلاً من الاعتماد على وجود جذر المستودع في Python path.
|
||||
</Tip>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### لم يتم العثور على دليل العمل
|
||||
|
||||
تحقق من أن المسار نسبي إلى جذر المستودع أو ZIP. بالنسبة لرفع ZIP، يجب أن
|
||||
تتضمن محتويات ZIP مسار دليل العمل تماماً كما أدخلته.
|
||||
|
||||
### pyproject.toml مفقود
|
||||
|
||||
يجب أن يشير دليل العمل إلى مجلد مشروع Crew أو Flow، وليس فقط إلى مجلد أب
|
||||
يحتوي على عدة مشاريع.
|
||||
|
||||
### uv.lock أو poetry.lock مفقود
|
||||
|
||||
اعمل commit لملف قفل إما في مجلد المشروع المحدد أو في جذر المستودع. بالنسبة
|
||||
إلى UV workspaces، يتم دعم إبقاء `uv.lock` في جذر workspace.
|
||||
|
||||
### Auto-Deploy غير متاح
|
||||
|
||||
يتم تعطيل auto-deploy أثناء تعيين دليل عمل. استخدم إعادة النشر اليدوية أو شغّل
|
||||
إعادة النشر من CI/CD باستخدام AMP API.
|
||||
|
||||
<Card title="النشر على AMP" icon="rocket" href="/ar/enterprise/guides/deploy-to-amp">
|
||||
تابع دليل النشر بعد اختيار دليل عمل monorepo.
|
||||
</Card>
|
||||
69
docs/edge/ar/enterprise/guides/onedrive-trigger.mdx
Normal file
69
docs/edge/ar/enterprise/guides/onedrive-trigger.mdx
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
title: "مشغل OneDrive"
|
||||
description: "أتمتة الاستجابات لنشاط ملفات OneDrive"
|
||||
icon: "cloud"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
ابدأ الأتمتات عند تغيير الملفات داخل OneDrive. يمكنك إنشاء ملخصات تدقيق وإخطار فرق الأمان بشأن المشاركة الخارجية أو تحديث أنظمة الأعمال اللاحقة ببيانات المستندات الوصفية الجديدة.
|
||||
|
||||
<Tip>
|
||||
اربط OneDrive في **Tools & Integrations** وبدّل المشغل لعملية
|
||||
النشر.
|
||||
</Tip>
|
||||
|
||||
## تفعيل مشغل OneDrive
|
||||
|
||||
1. افتح عملية النشر في CrewAI AMP
|
||||
2. انتقل إلى علامة تبويب **Triggers**
|
||||
3. حدد موقع **OneDrive** وبدّل مفتاح التبديل للتفعيل
|
||||
|
||||
<Frame caption="اتصال مشغل Microsoft OneDrive">
|
||||
<img
|
||||
src="/images/enterprise/onedrive-trigger.png"
|
||||
alt="تفعيل أو تعطيل المشغلات بالتبديل"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## مثال: تدقيق صلاحيات الملفات
|
||||
|
||||
```python
|
||||
from onedrive_file_crew import OneDriveFileTrigger
|
||||
|
||||
crew = OneDriveFileTrigger().crew()
|
||||
crew.kickoff({
|
||||
"crewai_trigger_payload": onedrive_payload,
|
||||
})
|
||||
```
|
||||
|
||||
يفحص الطاقم بيانات الملف الوصفية ونشاط المستخدم وتغييرات الصلاحيات لإنتاج ملخص متوافق مع متطلبات الامتثال.
|
||||
|
||||
## الاختبار المحلي
|
||||
|
||||
اختبر تكامل مشغل OneDrive محلياً باستخدام CrewAI CLI:
|
||||
|
||||
```bash
|
||||
# عرض جميع المشغلات المتاحة
|
||||
crewai triggers list
|
||||
|
||||
# محاكاة مشغل OneDrive بحمولة واقعية
|
||||
crewai triggers run microsoft_onedrive/file_changed
|
||||
```
|
||||
|
||||
سينفذ أمر `crewai triggers run` طاقمك بحمولة OneDrive كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
|
||||
|
||||
<Warning>
|
||||
استخدم `crewai triggers run microsoft_onedrive/file_changed` (وليس `crewai run`)
|
||||
لمحاكاة تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
|
||||
حمولة المشغل تلقائياً.
|
||||
</Warning>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- تأكد من أن الحساب المتصل لديه صلاحية قراءة بيانات الملف الوصفية المضمنة في webhook
|
||||
- اختبر محلياً بـ `crewai triggers run microsoft_onedrive/file_changed` لرؤية هيكل الحمولة بالضبط
|
||||
- إذا كان المشغل يعمل لكن الحمولة تفتقد `permissions`، تأكد من أن إعدادات المشاركة على مستوى الموقع تسمح لـ Graph بإرجاع هذا الحقل
|
||||
- للمستأجرين الكبار، صفّ الإشعارات مسبقاً حتى يعمل الطاقم فقط على المجلدات ذات الصلة
|
||||
- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
|
||||
69
docs/edge/ar/enterprise/guides/outlook-trigger.mdx
Normal file
69
docs/edge/ar/enterprise/guides/outlook-trigger.mdx
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
title: "مشغل Outlook"
|
||||
description: "إطلاق الأتمتات من رسائل Outlook وتحديثات التقويم"
|
||||
icon: "microsoft"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
أتمت الاستجابات عندما يسلّم Outlook رسالة جديدة أو عند إزالة حدث من التقويم. تقوم الفرق عادة بتوجيه التصعيدات وإنشاء تذاكر أو تنبيه الحاضرين بالإلغاءات.
|
||||
|
||||
<Tip>
|
||||
اربط Outlook في **Tools & Integrations** وتأكد من تفعيل المشغل
|
||||
لعملية النشر.
|
||||
</Tip>
|
||||
|
||||
## تفعيل مشغل Outlook
|
||||
|
||||
1. افتح عملية النشر في CrewAI AMP
|
||||
2. انتقل إلى علامة تبويب **Triggers**
|
||||
3. حدد موقع **Outlook** وبدّل مفتاح التبديل للتفعيل
|
||||
|
||||
<Frame caption="اتصال مشغل Microsoft Outlook">
|
||||
<img
|
||||
src="/images/enterprise/outlook-trigger.png"
|
||||
alt="تفعيل أو تعطيل المشغلات بالتبديل"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## مثال: تلخيص رسالة بريد إلكتروني جديدة
|
||||
|
||||
```python
|
||||
from outlook_message_crew import OutlookMessageTrigger
|
||||
|
||||
crew = OutlookMessageTrigger().crew()
|
||||
crew.kickoff({
|
||||
"crewai_trigger_payload": outlook_payload,
|
||||
})
|
||||
```
|
||||
|
||||
يستخرج الطاقم تفاصيل المرسل والموضوع ومعاينة النص والمرفقات قبل إنشاء استجابة منظمة.
|
||||
|
||||
## الاختبار المحلي
|
||||
|
||||
اختبر تكامل مشغل Outlook محلياً باستخدام CrewAI CLI:
|
||||
|
||||
```bash
|
||||
# عرض جميع المشغلات المتاحة
|
||||
crewai triggers list
|
||||
|
||||
# محاكاة مشغل Outlook بحمولة واقعية
|
||||
crewai triggers run microsoft_outlook/email_received
|
||||
```
|
||||
|
||||
سينفذ أمر `crewai triggers run` طاقمك بحمولة Outlook كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
|
||||
|
||||
<Warning>
|
||||
استخدم `crewai triggers run microsoft_outlook/email_received` (وليس `crewai run`)
|
||||
لمحاكاة تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
|
||||
حمولة المشغل تلقائياً.
|
||||
</Warning>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- تحقق من أن موصل Outlook لا يزال مفوّضاً؛ يجب تجديد الاشتراك دورياً
|
||||
- اختبر محلياً بـ `crewai triggers run microsoft_outlook/email_received` لرؤية هيكل الحمولة بالضبط
|
||||
- إذا كانت المرفقات مفقودة، تأكد من أن اشتراك webhook يتضمن علامة `includeResourceData`
|
||||
- راجع سجلات التنفيذ عندما تفشل الأحداث في المطابقة — حمولات الإلغاء تفتقد قوائم الحاضرين حسب التصميم ويجب أن يأخذ الطاقم ذلك في الاعتبار
|
||||
- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
|
||||
343
docs/edge/ar/enterprise/guides/prepare-for-deployment.mdx
Normal file
343
docs/edge/ar/enterprise/guides/prepare-for-deployment.mdx
Normal file
@@ -0,0 +1,343 @@
|
||||
---
|
||||
title: "التحضير للنشر"
|
||||
description: "تأكد من جاهزية طاقمك أو تدفقك للنشر على CrewAI AMP"
|
||||
icon: "clipboard-check"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Note>
|
||||
قبل النشر على CrewAI AMP، من الضروري التحقق من صحة بنية مشروعك.
|
||||
يمكن نشر كل من الطواقم والتدفقات كـ "أتمتات"، لكن لهما بنى مشاريع
|
||||
ومتطلبات مختلفة يجب استيفاؤها لنجاح النشر.
|
||||
</Note>
|
||||
|
||||
## فهم الأتمتات
|
||||
|
||||
في CrewAI AMP، **الأتمتات** هو المصطلح الشامل لمشاريع الذكاء الاصطناعي الوكيل القابلة للنشر. يمكن أن تكون الأتمتة إما:
|
||||
|
||||
- **طاقم**: فريق مستقل من وكلاء الذكاء الاصطناعي يعملون معاً على المهام
|
||||
- **تدفق**: سير عمل مُنسّق يمكنه الجمع بين طواقم متعددة واستدعاءات LLM المباشرة والمنطق الإجرائي
|
||||
|
||||
فهم النوع الذي تنشره ضروري لأن لهما بنى مشاريع ونقاط دخول مختلفة.
|
||||
|
||||
## الطواقم مقابل التدفقات: الفروقات الرئيسية
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="مشاريع الطاقم" icon="users">
|
||||
فرق وكلاء ذكاء اصطناعي مستقلة. الـ crews الجديدة تستخدم بنية JSON-first مع `crew.jsonc` و `agents/`؛ ويمكن للـ crews الكلاسيكية الاستمرار في استخدام `crew.py`.
|
||||
</Card>
|
||||
<Card title="مشاريع التدفق" icon="diagram-project">
|
||||
سير عمل مُنسّق مع طواقم مضمنة في مجلد `crews/`. الأفضل للعمليات المعقدة متعددة المراحل.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
| الجانب | الطاقم | التدفق |
|
||||
|--------|--------|--------|
|
||||
| **بنية المشروع** | جذر المشروع مع `crew.jsonc` و `agents/` | `src/project_name/` مع مجلد `crews/` |
|
||||
| **موقع المنطق الرئيسي** | `crew.jsonc` (كلاسيكي: `src/project_name/crew.py`) | `src/project_name/main.py` (فئة Flow) |
|
||||
| **دالة نقطة الدخول** | تُحمّل من `crew.jsonc` (كلاسيكي: `run()` في `main.py`) | `kickoff()` في `main.py` |
|
||||
| **نوع pyproject.toml** | `type = "crew"` | `type = "flow"` |
|
||||
| **أمر CLI للإنشاء** | `crewai create crew name` | `crewai create flow name` |
|
||||
| **موقع التهيئة** | `crew.jsonc` و `agents/` و `tools/` اختياريًا | `src/project_name/crews/crew_name/config/` أو مجلدات crew JSON مضمنة |
|
||||
| **يمكن أن يحتوي طواقم أخرى** | لا | نعم (في مجلد `crews/`) |
|
||||
|
||||
## مرجع بنية المشروع
|
||||
|
||||
### بنية مشروع الطاقم
|
||||
|
||||
عند تشغيل `crewai create crew my_crew`، تحصل على بنية JSON-first:
|
||||
|
||||
```
|
||||
my_crew/
|
||||
├── .gitignore
|
||||
├── pyproject.toml # Must have type = "crew"
|
||||
├── README.md
|
||||
├── .env
|
||||
├── uv.lock # REQUIRED for deployment
|
||||
├── crew.jsonc # إعدادات الـ crew والمهام والعملية والمدخلات
|
||||
├── agents/
|
||||
│ └── researcher.jsonc # تعريفات الـ Agents
|
||||
├── tools/ # أدوات custom:<name> اختيارية
|
||||
├── knowledge/
|
||||
└── skills/
|
||||
```
|
||||
|
||||
<Warning>
|
||||
في crews بنمط JSON-first، أبقِ `crew.jsonc` و `agents/` و `tools/` و `knowledge/` و `skills/`
|
||||
في جذر المشروع. وضعها داخل `src/` يمنع `crewai run` والتحقق قبل النشر من العثور على تعريف الـ crew.
|
||||
</Warning>
|
||||
|
||||
<Info>
|
||||
المشاريع الكلاسيكية التي تُنشأ عبر `crewai create crew my_crew --classic` تستخدم البنية القديمة
|
||||
`src/project_name/crew.py` و `src/project_name/config/agents.yaml` و
|
||||
`src/project_name/config/tasks.yaml`. تظل هذه البنية مدعومة للـ crews المكتوبة في Python مع decorators.
|
||||
</Info>
|
||||
|
||||
### بنية مشروع التدفق
|
||||
|
||||
عند تشغيل `crewai create flow my_flow`، تحصل على هذه البنية:
|
||||
|
||||
```
|
||||
my_flow/
|
||||
├── .gitignore
|
||||
├── pyproject.toml # Must have type = "flow"
|
||||
├── README.md
|
||||
├── .env
|
||||
├── uv.lock # REQUIRED for deployment
|
||||
└── src/
|
||||
└── my_flow/
|
||||
├── __init__.py
|
||||
├── main.py # Entry point with kickoff() function + Flow class
|
||||
├── crews/ # Embedded crews folder
|
||||
│ └── poem_crew/
|
||||
│ ├── __init__.py
|
||||
│ ├── poem_crew.py # Crew with @CrewBase decorator
|
||||
│ └── config/
|
||||
│ ├── agents.yaml
|
||||
│ └── tasks.yaml
|
||||
└── tools/
|
||||
├── __init__.py
|
||||
└── custom_tool.py
|
||||
```
|
||||
|
||||
<Info>
|
||||
الـ crews المستقلة بنمط JSON-first تستخدم ملفات JSON في جذر المشروع. أما Flows فتظل تستخدم
|
||||
`src/project_name/` ويمكن أن تحتوي crews مضمنة كلاسيكية أو مجلدات crew JSON يتم تحميلها عبر
|
||||
`crewai.project.load_crew`.
|
||||
</Info>
|
||||
|
||||
## قائمة فحص ما قبل النشر
|
||||
|
||||
استخدم هذه القائمة للتحقق من جاهزية مشروعك للنشر.
|
||||
|
||||
### 1. التحقق من تهيئة pyproject.toml
|
||||
|
||||
يجب أن يتضمن `pyproject.toml` قسم `[tool.crewai]` الصحيح:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="للطواقم">
|
||||
```toml
|
||||
[tool.crewai]
|
||||
type = "crew"
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="للتدفقات">
|
||||
```toml
|
||||
[tool.crewai]
|
||||
type = "flow"
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Warning>
|
||||
إذا لم يتطابق `type` مع بنية مشروعك، سيفشل البناء أو
|
||||
لن تعمل الأتمتة بشكل صحيح.
|
||||
</Warning>
|
||||
|
||||
### 2. التأكد من وجود ملف uv.lock
|
||||
|
||||
يستخدم CrewAI `uv` لإدارة الاعتماديات. يضمن ملف `uv.lock` بناءً قابلاً للتكرار وهو **مطلوب** للنشر.
|
||||
|
||||
```bash
|
||||
# إنشاء أو تحديث ملف القفل
|
||||
uv lock
|
||||
|
||||
# التحقق من وجوده
|
||||
ls -la uv.lock
|
||||
```
|
||||
|
||||
إذا لم يكن الملف موجوداً، شغّل `uv lock` وارفعه إلى مستودعك:
|
||||
|
||||
```bash
|
||||
uv lock
|
||||
git add uv.lock
|
||||
git commit -m "Add uv.lock for deployment"
|
||||
git push
|
||||
```
|
||||
|
||||
### 3. التحقق من تعريف الـ Crew
|
||||
|
||||
<Tabs>
|
||||
<Tab title="JSON-first Crews">
|
||||
يجب أن تحتوي crews بنمط JSON-first على `crew.jsonc` أو `crew.json` في جذر المشروع.
|
||||
يجب أن يشير مصفوفة `agents` إلى ملفات داخل `agents/`، ويجب أن تشير كل task إلى اسم Agent صحيح.
|
||||
|
||||
```jsonc crew.jsonc
|
||||
{
|
||||
"name": "Research Crew",
|
||||
"agents": ["researcher"],
|
||||
"tasks": [
|
||||
{
|
||||
"name": "research_task",
|
||||
"description": "Research {topic}.",
|
||||
"expected_output": "A concise report.",
|
||||
"agent": "researcher"
|
||||
}
|
||||
],
|
||||
"inputs": {
|
||||
"topic": "AI Agents"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تُشار الأدوات المخصصة بصيغة `"custom:<name>"` ويجب تنفيذها في
|
||||
`tools/<name>.py` كصنف يرث من `BaseTool`.
|
||||
</Tab>
|
||||
<Tab title="Crews كلاسيكية Python/YAML">
|
||||
يجب أن تستخدم الـ crews الكلاسيكية وPython crews المضمنة داخل Flows مزخرف `@CrewBase`.
|
||||
|
||||
```python
|
||||
from crewai import Agent, Crew, Process, Task
|
||||
from crewai.project import CrewBase, agent, crew, task
|
||||
from crewai.agents.agent_builder.base_agent import BaseAgent
|
||||
from typing import List
|
||||
|
||||
@CrewBase
|
||||
class MyCrew():
|
||||
"""My crew description"""
|
||||
|
||||
agents: List[BaseAgent]
|
||||
tasks: List[Task]
|
||||
|
||||
@agent
|
||||
def my_agent(self) -> Agent:
|
||||
return Agent(
|
||||
config=self.agents_config['my_agent'], # type: ignore[index]
|
||||
verbose=True
|
||||
)
|
||||
|
||||
@task
|
||||
def my_task(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['my_task'] # type: ignore[index]
|
||||
)
|
||||
|
||||
@crew
|
||||
def crew(self) -> Crew:
|
||||
return Crew(
|
||||
agents=self.agents,
|
||||
tasks=self.tasks,
|
||||
process=Process.sequential,
|
||||
verbose=True,
|
||||
)
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### 4. التحقق من نقاط دخول المشروع
|
||||
|
||||
لا تحتاج crews المستقلة بنمط JSON-first إلى ملف `src/project_name/main.py` مكتوب يدويًا؛
|
||||
يقوم `crewai run` وتغليف النشر بتحميل `crew.jsonc` مباشرة. تستخدم crews الكلاسيكية وFlows نقاط دخول Python:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="JSON-first Crews">
|
||||
شغّل محليًا من جذر المشروع:
|
||||
|
||||
```bash
|
||||
crewai run
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Crews كلاسيكية">
|
||||
تستخدم نقطة الدخول دالة `run()`:
|
||||
|
||||
```python
|
||||
# src/my_crew/main.py
|
||||
from my_crew.crew import MyCrew
|
||||
|
||||
def run():
|
||||
"""Run the crew."""
|
||||
inputs = {'topic': 'AI in Healthcare'}
|
||||
result = MyCrew().crew().kickoff(inputs=inputs)
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="للتدفقات">
|
||||
تستخدم نقطة الدخول دالة `kickoff()` مع فئة Flow:
|
||||
|
||||
```python
|
||||
# src/my_flow/main.py
|
||||
from crewai.flow import Flow, listen, start
|
||||
from my_flow.crews.poem_crew.poem_crew import PoemCrew
|
||||
|
||||
class MyFlow(Flow):
|
||||
@start()
|
||||
def begin(self):
|
||||
# Flow logic here
|
||||
result = PoemCrew().crew().kickoff(inputs={...})
|
||||
return result
|
||||
|
||||
def kickoff():
|
||||
"""Run the flow."""
|
||||
MyFlow().kickoff()
|
||||
|
||||
if __name__ == "__main__":
|
||||
kickoff()
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### 5. تحضير متغيرات البيئة
|
||||
|
||||
قبل النشر، تأكد من أن لديك:
|
||||
|
||||
1. **مفاتيح API لـ LLM** جاهزة (OpenAI، Anthropic، Google، إلخ.)
|
||||
2. **مفاتيح API للأدوات** إذا كنت تستخدم أدوات خارجية (Serper، إلخ.)
|
||||
|
||||
<Info>
|
||||
إذا كان مشروعك يعتمد على حزم من **سجل PyPI خاص**، ستحتاج أيضاً لتهيئة
|
||||
بيانات اعتماد مصادقة السجل كمتغيرات بيئة. راجع
|
||||
دليل [سجلات الحزم الخاصة](/ar/enterprise/guides/private-package-registry) للتفاصيل.
|
||||
</Info>
|
||||
|
||||
<Tip>
|
||||
اختبر مشروعك محلياً بنفس متغيرات البيئة قبل النشر
|
||||
لاكتشاف مشاكل التهيئة مبكراً.
|
||||
</Tip>
|
||||
|
||||
## أوامر التحقق السريع
|
||||
|
||||
شغّل هذه الأوامر من جذر مشروعك للتحقق السريع من إعدادك:
|
||||
|
||||
```bash
|
||||
# 1. Check project type in pyproject.toml
|
||||
grep -A2 "\[tool.crewai\]" pyproject.toml
|
||||
|
||||
# 2. Verify uv.lock exists
|
||||
ls -la uv.lock || echo "ERROR: uv.lock missing! Run 'uv lock'"
|
||||
|
||||
# 3. For JSON-first crews, verify crew.jsonc and agents/
|
||||
([ -f crew.jsonc ] || [ -f crew.json ]) || echo "No crew.jsonc or crew.json found"
|
||||
test -d agents || echo "No agents/ directory found"
|
||||
|
||||
# 4. For classic Crews - verify crew.py exists
|
||||
ls -la src/*/crew.py 2>/dev/null || echo "No crew.py (expected for Crews)"
|
||||
|
||||
# 5. For Flows - verify crews/ folder exists
|
||||
ls -la src/*/crews/ 2>/dev/null || echo "No crews/ folder (expected for Flows)"
|
||||
|
||||
# 6. For classic Python crews - check for CrewBase usage
|
||||
grep -r "@CrewBase" . --include="*.py"
|
||||
```
|
||||
|
||||
## أخطاء الإعداد الشائعة
|
||||
|
||||
| الخطأ | العرض | الإصلاح |
|
||||
|-------|-------|---------|
|
||||
| `uv.lock` مفقود | فشل البناء أثناء حل الاعتماديات | شغّل `uv lock` وارفعه |
|
||||
| `type` خاطئ في pyproject.toml | نجاح البناء لكن فشل وقت التشغيل | غيّر إلى النوع الصحيح |
|
||||
| `crew.jsonc` أو `agents/` مفقود في crew بنمط JSON-first | لا يمكن العثور على تعريف الـ crew | أبقِ `crew.jsonc` و `agents/` في جذر المشروع |
|
||||
| مُزخرف `@CrewBase` مفقود في crew كلاسيكية | أخطاء "Config not found" | أضف المُزخرف لجميع فئات الـ crew الكلاسيكية |
|
||||
| ملفات كلاسيكية في الجذر بدل `src/` | نقطة الدخول غير موجودة | انقل ملفات Python الكلاسيكية إلى `src/project_name/` |
|
||||
| `run()` أو `kickoff()` مفقودة | لا يمكن بدء الأتمتة | أضف دالة الدخول الصحيحة |
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
بمجرد اجتياز مشروعك لجميع عناصر القائمة، أنت جاهز للنشر:
|
||||
|
||||
<Card title="النشر على AMP" icon="rocket" href="/ar/enterprise/guides/deploy-to-amp">
|
||||
اتبع دليل النشر لنشر طاقمك أو تدفقك على CrewAI AMP باستخدام
|
||||
CLI أو واجهة الويب أو تكامل CI/CD.
|
||||
</Card>
|
||||
263
docs/edge/ar/enterprise/guides/private-package-registry.mdx
Normal file
263
docs/edge/ar/enterprise/guides/private-package-registry.mdx
Normal file
@@ -0,0 +1,263 @@
|
||||
---
|
||||
title: "سجلات الحزم الخاصة"
|
||||
description: "تثبيت حزم Python الخاصة من سجلات PyPI المصادق عليها في CrewAI AMP"
|
||||
icon: "lock"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Note>
|
||||
يغطي هذا الدليل كيفية تهيئة مشروع CrewAI لتثبيت حزم Python
|
||||
من سجلات PyPI الخاصة (Azure DevOps Artifacts، GitHub Packages، GitLab، AWS CodeArtifact، إلخ.)
|
||||
عند النشر على CrewAI AMP.
|
||||
</Note>
|
||||
|
||||
## متى تحتاج هذا
|
||||
|
||||
إذا كان مشروعك يعتمد على حزم Python داخلية أو خاصة مستضافة على سجل خاص
|
||||
بدلاً من PyPI العام، ستحتاج إلى:
|
||||
|
||||
1. إخبار UV **أين** يجد الحزمة (رابط فهرس)
|
||||
2. إخبار UV **أي** حزم تأتي من ذلك الفهرس (تعيين مصدر)
|
||||
3. تقديم **بيانات اعتماد** حتى يتمكن UV من المصادقة أثناء التثبيت
|
||||
|
||||
يستخدم CrewAI AMP [UV](https://docs.astral.sh/uv/) لحل وتثبيت الاعتماديات.
|
||||
يدعم UV السجلات الخاصة المصادق عليها عبر تهيئة `pyproject.toml` مع
|
||||
متغيرات بيئة لبيانات الاعتماد.
|
||||
|
||||
## الخطوة 1: تهيئة pyproject.toml
|
||||
|
||||
ثلاثة أجزاء تعمل معاً في `pyproject.toml`:
|
||||
|
||||
### 1أ. التصريح بالاعتمادية
|
||||
|
||||
أضف الحزمة الخاصة إلى `[project.dependencies]` كأي اعتمادية أخرى:
|
||||
|
||||
```toml
|
||||
[project]
|
||||
dependencies = [
|
||||
"crewai[tools]>=0.100.1,<1.0.0",
|
||||
"my-private-package>=1.2.0",
|
||||
]
|
||||
```
|
||||
|
||||
### 1ب. تعريف الفهرس
|
||||
|
||||
سجّل سجلك الخاص كفهرس مسمّى تحت `[[tool.uv.index]]`:
|
||||
|
||||
```toml
|
||||
[[tool.uv.index]]
|
||||
name = "my-private-registry"
|
||||
url = "https://pkgs.dev.azure.com/my-org/_packaging/my-feed/pypi/simple/"
|
||||
explicit = true
|
||||
```
|
||||
|
||||
<Info>
|
||||
حقل `name` مهم — يستخدمه UV لبناء أسماء متغيرات البيئة
|
||||
للمصادقة (راجع [الخطوة 2](#step-2-set-authentication-credentials) أدناه).
|
||||
|
||||
تعيين `explicit = true` يعني أن UV لن يبحث في هذا الفهرس عن كل حزمة — فقط
|
||||
الحزم التي تعيّنها صراحة له في `[tool.uv.sources]`. يتجنب ذلك الاستعلامات غير الضرورية
|
||||
ضد سجلك الخاص ويحمي من هجمات ارتباك الاعتماديات.
|
||||
</Info>
|
||||
|
||||
### 1ج. تعيين الحزمة للفهرس
|
||||
|
||||
أخبر UV أي حزم يجب حلها من فهرسك الخاص باستخدام `[tool.uv.sources]`:
|
||||
|
||||
```toml
|
||||
[tool.uv.sources]
|
||||
my-private-package = { index = "my-private-registry" }
|
||||
```
|
||||
|
||||
### مثال كامل
|
||||
|
||||
```toml
|
||||
[project]
|
||||
name = "my-crew-project"
|
||||
version = "0.1.0"
|
||||
requires-python = ">=3.10,<=3.13"
|
||||
dependencies = [
|
||||
"crewai[tools]>=0.100.1,<1.0.0",
|
||||
"my-private-package>=1.2.0",
|
||||
]
|
||||
|
||||
[tool.crewai]
|
||||
type = "crew"
|
||||
|
||||
[[tool.uv.index]]
|
||||
name = "my-private-registry"
|
||||
url = "https://pkgs.dev.azure.com/my-org/_packaging/my-feed/pypi/simple/"
|
||||
explicit = true
|
||||
|
||||
[tool.uv.sources]
|
||||
my-private-package = { index = "my-private-registry" }
|
||||
```
|
||||
|
||||
بعد تحديث `pyproject.toml`، أعد إنشاء ملف القفل:
|
||||
|
||||
```bash
|
||||
uv lock
|
||||
```
|
||||
|
||||
<Warning>
|
||||
ارفع دائماً `uv.lock` المُحدّث مع تغييرات `pyproject.toml`.
|
||||
ملف القفل مطلوب للنشر — راجع [التحضير للنشر](/ar/enterprise/guides/prepare-for-deployment).
|
||||
</Warning>
|
||||
|
||||
## الخطوة 2: تعيين بيانات اعتماد المصادقة
|
||||
|
||||
يصادق UV ضد الفهارس الخاصة باستخدام متغيرات بيئة تتبع اصطلاح تسمية
|
||||
بناءً على اسم الفهرس الذي حددته في `pyproject.toml`:
|
||||
|
||||
```
|
||||
UV_INDEX_{UPPER_NAME}_USERNAME
|
||||
UV_INDEX_{UPPER_NAME}_PASSWORD
|
||||
```
|
||||
|
||||
حيث `{UPPER_NAME}` هو اسم فهرسك محوّلاً إلى **أحرف كبيرة** مع **استبدال الشرطات بشرطات سفلية**.
|
||||
|
||||
على سبيل المثال، فهرس باسم `my-private-registry` يستخدم:
|
||||
|
||||
| المتغير | القيمة |
|
||||
|---------|--------|
|
||||
| `UV_INDEX_MY_PRIVATE_REGISTRY_USERNAME` | اسم مستخدم السجل أو اسم الرمز |
|
||||
| `UV_INDEX_MY_PRIVATE_REGISTRY_PASSWORD` | كلمة مرور السجل أو الرمز/PAT |
|
||||
|
||||
<Warning>
|
||||
هذه المتغيرات **يجب** إضافتها عبر إعدادات **Environment Variables** في CrewAI AMP —
|
||||
إما عالمياً أو على مستوى النشر. لا يمكن تعيينها في ملفات `.env` أو ترميزها في مشروعك.
|
||||
|
||||
راجع [تعيين متغيرات البيئة في AMP](#setting-environment-variables-in-amp) أدناه.
|
||||
</Warning>
|
||||
|
||||
## مرجع مزودي السجلات
|
||||
|
||||
يوضح الجدول أدناه تنسيق رابط الفهرس وقيم بيانات الاعتماد لمزودي السجلات الشائعين.
|
||||
استبدل القيم المؤقتة بتفاصيل مؤسستك وخلاصتك الفعلية.
|
||||
|
||||
| المزود | رابط الفهرس | اسم المستخدم | كلمة المرور |
|
||||
|--------|-------------|--------------|-------------|
|
||||
| **Azure DevOps Artifacts** | `https://pkgs.dev.azure.com/{org}/_packaging/{feed}/pypi/simple/` | أي نص غير فارغ (مثل `token`) | Personal Access Token (PAT) بنطاق Packaging Read |
|
||||
| **GitHub Packages** | `https://pypi.pkg.github.com/{owner}/simple/` | اسم مستخدم GitHub | Personal Access Token (classic) بنطاق `read:packages` |
|
||||
| **GitLab Package Registry** | `https://gitlab.com/api/v4/projects/{project_id}/packages/pypi/simple/` | `__token__` | Project أو Personal Access Token بنطاق `read_api` |
|
||||
| **AWS CodeArtifact** | استخدم الرابط من `aws codeartifact get-repository-endpoint` | `aws` | رمز من `aws codeartifact get-authorization-token` |
|
||||
| **Google Artifact Registry** | `https://{region}-python.pkg.dev/{project}/{repo}/simple/` | `_json_key_base64` | مفتاح حساب الخدمة بتشفير Base64 |
|
||||
| **JFrog Artifactory** | `https://{instance}.jfrog.io/artifactory/api/pypi/{repo}/simple/` | اسم المستخدم أو البريد الإلكتروني | مفتاح API أو رمز الهوية |
|
||||
| **مستضاف ذاتياً (devpi، Nexus، إلخ.)** | رابط Simple API لسجلك | اسم مستخدم السجل | كلمة مرور السجل |
|
||||
|
||||
<Tip>
|
||||
لـ **AWS CodeArtifact**، تنتهي صلاحية رمز التفويض دورياً.
|
||||
ستحتاج لتحديث قيمة `UV_INDEX_*_PASSWORD` عند انتهاء صلاحيتها.
|
||||
فكّر في أتمتة هذا في خط أنابيب CI/CD.
|
||||
</Tip>
|
||||
|
||||
## تعيين متغيرات البيئة في AMP
|
||||
|
||||
يجب تهيئة بيانات اعتماد السجل الخاص كمتغيرات بيئة في CrewAI AMP.
|
||||
لديك خياران:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="واجهة الويب">
|
||||
1. سجّل الدخول إلى [CrewAI AMP](https://app.crewai.com)
|
||||
2. انتقل إلى أتمتتك
|
||||
3. افتح علامة تبويب **Environment Variables**
|
||||
4. أضف كل متغير (`UV_INDEX_*_USERNAME` و`UV_INDEX_*_PASSWORD`) مع قيمته
|
||||
|
||||
راجع خطوة [النشر على AMP — تعيين متغيرات البيئة](/ar/enterprise/guides/deploy-to-amp#set-environment-variables) للتفاصيل.
|
||||
</Tab>
|
||||
<Tab title="النشر عبر CLI">
|
||||
أضف المتغيرات إلى ملف `.env` المحلي قبل تشغيل `crewai deploy create`.
|
||||
سينقلها CLI بأمان إلى المنصة:
|
||||
|
||||
```bash
|
||||
# .env
|
||||
OPENAI_API_KEY=sk-...
|
||||
UV_INDEX_MY_PRIVATE_REGISTRY_USERNAME=token
|
||||
UV_INDEX_MY_PRIVATE_REGISTRY_PASSWORD=your-pat-here
|
||||
```
|
||||
|
||||
```bash
|
||||
crewai deploy create
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Warning>
|
||||
**لا ترفع** أبداً بيانات الاعتماد إلى مستودعك. استخدم متغيرات بيئة AMP لجميع الأسرار.
|
||||
يجب إدراج ملف `.env` في `.gitignore`.
|
||||
</Warning>
|
||||
|
||||
لتحديث بيانات الاعتماد في نشر حالي، راجع [تحديث طاقمك — متغيرات البيئة](/ar/enterprise/guides/update-crew).
|
||||
|
||||
## كيف يعمل الكل معاً
|
||||
|
||||
عندما يبني CrewAI AMP أتمتتك، يعمل تدفق الحل هكذا:
|
||||
|
||||
<Steps>
|
||||
<Step title="بدء البناء">
|
||||
يسحب AMP مستودعك ويقرأ `pyproject.toml` و`uv.lock`.
|
||||
</Step>
|
||||
<Step title="UV يحل الاعتماديات">
|
||||
يقرأ UV `[tool.uv.sources]` لتحديد أي فهرس يجب أن تأتي منه كل حزمة.
|
||||
</Step>
|
||||
<Step title="UV يصادق">
|
||||
لكل فهرس خاص، يبحث UV عن `UV_INDEX_{NAME}_USERNAME` و`UV_INDEX_{NAME}_PASSWORD`
|
||||
من متغيرات البيئة التي هيأتها في AMP.
|
||||
</Step>
|
||||
<Step title="تثبيت الحزم">
|
||||
يحمّل UV ويثبّت جميع الحزم — العامة (من PyPI) والخاصة (من سجلك).
|
||||
</Step>
|
||||
<Step title="تشغيل الأتمتة">
|
||||
يبدأ طاقمك أو تدفقك مع توفر جميع الاعتماديات.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### أخطاء المصادقة أثناء البناء
|
||||
|
||||
**العرض**: فشل البناء بـ `401 Unauthorized` أو `403 Forbidden` عند حل حزمة خاصة.
|
||||
|
||||
**تحقق من**:
|
||||
- أسماء متغيرات البيئة `UV_INDEX_*` تتطابق مع اسم فهرسك بالضبط (أحرف كبيرة، شرطات → شرطات سفلية)
|
||||
- بيانات الاعتماد معيّنة في متغيرات بيئة AMP، وليس فقط في `.env` محلي
|
||||
- الرمز/PAT لديه صلاحيات القراءة المطلوبة لخلاصة الحزم
|
||||
- الرمز لم تنتهِ صلاحيته (ذو صلة خاصة لـ AWS CodeArtifact)
|
||||
|
||||
### الحزمة غير موجودة
|
||||
|
||||
**العرض**: `No matching distribution found for my-private-package`.
|
||||
|
||||
**تحقق من**:
|
||||
- رابط الفهرس في `pyproject.toml` ينتهي بـ `/simple/`
|
||||
- إدخال `[tool.uv.sources]` يعيّن اسم الحزمة الصحيح لاسم الفهرس الصحيح
|
||||
- الحزمة منشورة فعلاً في سجلك الخاص
|
||||
- شغّل `uv lock` محلياً بنفس بيانات الاعتماد للتحقق من عمل الحل
|
||||
|
||||
### تعارضات ملف القفل
|
||||
|
||||
**العرض**: فشل `uv lock` أو نتائج غير متوقعة بعد إضافة فهرس خاص.
|
||||
|
||||
**الحل**: عيّن بيانات الاعتماد محلياً وأعد الإنشاء:
|
||||
|
||||
```bash
|
||||
export UV_INDEX_MY_PRIVATE_REGISTRY_USERNAME=token
|
||||
export UV_INDEX_MY_PRIVATE_REGISTRY_PASSWORD=your-pat
|
||||
uv lock
|
||||
```
|
||||
|
||||
ثم ارفع `uv.lock` المُحدّث.
|
||||
|
||||
## أدلة ذات صلة
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="التحضير للنشر" icon="clipboard-check" href="/ar/enterprise/guides/prepare-for-deployment">
|
||||
تحقق من بنية المشروع والاعتماديات قبل النشر.
|
||||
</Card>
|
||||
<Card title="النشر على AMP" icon="rocket" href="/ar/enterprise/guides/deploy-to-amp">
|
||||
انشر طاقمك أو تدفقك وهيّئ متغيرات البيئة.
|
||||
</Card>
|
||||
<Card title="تحديث طاقمك" icon="arrows-rotate" href="/ar/enterprise/guides/update-crew">
|
||||
حدّث متغيرات البيئة وادفع التغييرات إلى نشر قائم.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
112
docs/edge/ar/enterprise/guides/react-component-export.mdx
Normal file
112
docs/edge/ar/enterprise/guides/react-component-export.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "تصدير مكون React"
|
||||
description: "تعلم كيفية تصدير ودمج مكونات React من CrewAI AMP في تطبيقاتك"
|
||||
icon: "react"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يشرح هذا الدليل كيفية تصدير طواقم CrewAI AMP كمكونات React ودمجها في تطبيقاتك.
|
||||
|
||||
## تصدير مكون React
|
||||
|
||||
<Steps>
|
||||
<Step title="تصدير المكون">
|
||||
انقر على القائمة (ثلاث نقاط على يمين طاقمك المنشور) واختر خيار التصدير واحفظ الملف محلياً. سنستخدم `CrewLead.jsx` في مثالنا.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/export-react-component.png" alt="تصدير مكون React" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## إعداد بيئة React
|
||||
|
||||
لتشغيل مكون React هذا محلياً، ستحتاج لإعداد بيئة تطوير React ودمج هذا المكون في مشروع React.
|
||||
|
||||
<Steps>
|
||||
<Step title="تثبيت Node.js">
|
||||
- حمّل وثبّت Node.js من الموقع الرسمي: https://nodejs.org/
|
||||
- اختر إصدار LTS (الدعم طويل المدى) للاستقرار.
|
||||
</Step>
|
||||
|
||||
<Step title="إنشاء مشروع React جديد">
|
||||
- افتح Command Prompt أو PowerShell
|
||||
- انتقل إلى المجلد الذي تريد إنشاء مشروعك فيه
|
||||
- شغّل الأمر التالي لإنشاء مشروع React جديد:
|
||||
|
||||
```bash
|
||||
npx create-react-app my-crew-app
|
||||
```
|
||||
- انتقل إلى مجلد المشروع:
|
||||
|
||||
```bash
|
||||
cd my-crew-app
|
||||
```
|
||||
</Step>
|
||||
|
||||
<Step title="تثبيت الاعتماديات اللازمة">
|
||||
```bash
|
||||
npm install react-dom
|
||||
```
|
||||
</Step>
|
||||
|
||||
<Step title="إنشاء مكون CrewLead">
|
||||
- انقل الملف المُحمّل `CrewLead.jsx` إلى مجلد `src` في مشروعك.
|
||||
</Step>
|
||||
|
||||
<Step title="تعديل App.js لاستخدام مكون CrewLead">
|
||||
- افتح `src/App.js`
|
||||
- استبدل محتوياته بشيء مثل هذا:
|
||||
|
||||
```jsx
|
||||
import React from 'react';
|
||||
import CrewLead from './CrewLead';
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="App">
|
||||
<CrewLead baseUrl="YOUR_API_BASE_URL" bearerToken="YOUR_BEARER_TOKEN" />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
```
|
||||
- استبدل `YOUR_API_BASE_URL` و`YOUR_BEARER_TOKEN` بالقيم الفعلية لـ API.
|
||||
</Step>
|
||||
|
||||
<Step title="بدء خادم التطوير">
|
||||
- في مجلد مشروعك، شغّل:
|
||||
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
- سيبدأ خادم التطوير، ويجب أن يفتح متصفح الويب الافتراضي تلقائياً على `http://localhost:3000`، حيث سترى تطبيق React يعمل.
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## التخصيص
|
||||
|
||||
يمكنك بعد ذلك تخصيص `CrewLead.jsx` لإضافة اللون والعنوان وغيرها.
|
||||
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/customise-react-component.png"
|
||||
alt="تخصيص مكون React"
|
||||
/>
|
||||
</Frame>
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/customise-react-component-2.png"
|
||||
alt="تخصيص مكون React"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
- خصّص تنسيق المكون ليتوافق مع تصميم تطبيقك
|
||||
- أضف خصائص إضافية للتهيئة
|
||||
- ادمج مع إدارة حالة تطبيقك
|
||||
- أضف معالجة الأخطاء وحالات التحميل
|
||||
50
docs/edge/ar/enterprise/guides/salesforce-trigger.mdx
Normal file
50
docs/edge/ar/enterprise/guides/salesforce-trigger.mdx
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
title: "مشغل Salesforce"
|
||||
description: "تشغيل طواقم CrewAI من سير عمل Salesforce لأتمتة CRM"
|
||||
icon: "salesforce"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يمكن تشغيل CrewAI AMP من Salesforce لأتمتة سير عمل إدارة علاقات العملاء وتعزيز عمليات المبيعات.
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
Salesforce هي منصة رائدة لإدارة علاقات العملاء (CRM) تساعد الشركات على تبسيط عمليات المبيعات والخدمة والتسويق. من خلال إعداد مشغلات CrewAI من Salesforce، يمكنك:
|
||||
|
||||
- أتمتة تسجيل وتأهيل العملاء المحتملين
|
||||
- إنشاء مواد مبيعات مخصصة
|
||||
- تعزيز خدمة العملاء بردود مدعومة بالذكاء الاصطناعي
|
||||
- تبسيط تحليل البيانات وإعداد التقارير
|
||||
|
||||
## عرض توضيحي
|
||||
|
||||
<iframe
|
||||
className="w-full aspect-video rounded-xl"
|
||||
src="https://www.youtube.com/embed/oJunVqjjfu4"
|
||||
title="عرض توضيحي لمشغل CrewAI + Salesforce"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
## البدء
|
||||
|
||||
لإعداد مشغلات Salesforce:
|
||||
|
||||
1. **تواصل مع الدعم**: تواصل مع دعم CrewAI AMP للمساعدة في إعداد مشغل Salesforce
|
||||
2. **مراجعة المتطلبات**: تأكد من أن لديك صلاحيات Salesforce اللازمة والوصول إلى API
|
||||
3. **تهيئة الاتصال**: اعمل مع فريق الدعم لإنشاء الاتصال بين CrewAI ومثيل Salesforce الخاص بك
|
||||
4. **اختبار المشغلات**: تحقق من عمل المشغلات بشكل صحيح مع حالات الاستخدام المحددة
|
||||
|
||||
## حالات الاستخدام
|
||||
|
||||
سيناريوهات Salesforce + CrewAI الشائعة تشمل:
|
||||
|
||||
- **معالجة العملاء المحتملين**: تحليل وتسجيل العملاء المحتملين الوافدين تلقائياً
|
||||
- **إنشاء العروض**: إنشاء عروض مخصصة بناءً على بيانات الفرص
|
||||
- **رؤى العملاء**: إنشاء تقارير تحليلية من سجل تفاعلات العملاء
|
||||
- **أتمتة المتابعة**: إنشاء رسائل متابعة وتوصيات مخصصة
|
||||
|
||||
## الخطوات التالية
|
||||
|
||||
للحصول على تعليمات الإعداد المفصلة وخيارات التهيئة المتقدمة، يرجى التواصل مع دعم CrewAI AMP الذي يمكنه تقديم إرشادات مخصصة لبيئة Salesforce واحتياجات عملك المحددة.
|
||||
62
docs/edge/ar/enterprise/guides/slack-trigger.mdx
Normal file
62
docs/edge/ar/enterprise/guides/slack-trigger.mdx
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: "مشغل Slack"
|
||||
description: "تشغيل طواقم CrewAI مباشرة من Slack باستخدام أوامر الشرطة المائلة"
|
||||
icon: "slack"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يشرح هذا الدليل كيفية بدء طاقم مباشرة من Slack باستخدام مشغلات CrewAI.
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
- مشغل CrewAI لـ Slack مُثبّت ومتصل بمساحة عمل Slack
|
||||
- طاقم واحد على الأقل مُهيأ في CrewAI
|
||||
|
||||
## خطوات الإعداد
|
||||
|
||||
<Steps>
|
||||
<Step title="التأكد من إعداد مشغل CrewAI لـ Slack">
|
||||
في لوحة تحكم CrewAI، انتقل إلى قسم **Triggers**.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/slack-integration.png" alt="تكامل CrewAI مع Slack" />
|
||||
</Frame>
|
||||
|
||||
تحقق من أن Slack مدرج ومتصل.
|
||||
</Step>
|
||||
<Step title="فتح قناة Slack">
|
||||
- انتقل إلى القناة التي تريد تشغيل الطاقم منها.
|
||||
- اكتب أمر الشرطة المائلة "**/kickoff**" لبدء عملية تشغيل الطاقم.
|
||||
- يجب أن ترى "**Kickoff crew**" تظهر أثناء الكتابة:
|
||||
<Frame>
|
||||
<img src="/images/enterprise/kickoff-slack-crew.png" alt="تشغيل الطاقم" />
|
||||
</Frame>
|
||||
- اضغط Enter أو اختر خيار "**Kickoff crew**". سيظهر مربع حوار بعنوان "**Kickoff an AI Crew**".
|
||||
</Step>
|
||||
<Step title="اختيار الطاقم الذي تريد بدءه">
|
||||
- في القائمة المنسدلة "**Select of the crews online:**"، اختر الطاقم الذي تريد بدءه.
|
||||
- في المثال أدناه، تم اختيار "**prep-for-meeting**":
|
||||
<Frame>
|
||||
<img src="/images/enterprise/kickoff-slack-crew-dropdown.png" alt="القائمة المنسدلة لتشغيل الطاقم" />
|
||||
</Frame>
|
||||
- إذا كان طاقمك يتطلب أي مدخلات، انقر على زر "**Add Inputs**" لتقديمها.
|
||||
<Note>
|
||||
زر "**Add Inputs**" معروض في المثال أعلاه لكن لم يُنقر عليه بعد.
|
||||
</Note>
|
||||
</Step>
|
||||
<Step title="النقر على Kickoff والانتظار حتى يكتمل الطاقم">
|
||||
- بمجرد اختيار الطاقم وإضافة أي مدخلات ضرورية، انقر على "**Kickoff**" لبدء الطاقم.
|
||||
<Frame>
|
||||
<img src="/images/enterprise/kickoff-slack-crew-kickoff.png" alt="تشغيل الطاقم" />
|
||||
</Frame>
|
||||
- سيبدأ الطاقم بالتنفيذ وسترى النتائج في قناة Slack.
|
||||
<Frame>
|
||||
<img src="/images/enterprise/kickoff-slack-crew-results.png" alt="نتائج تشغيل الطاقم" />
|
||||
</Frame>
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## نصائح
|
||||
|
||||
- تأكد من أن لديك الصلاحيات اللازمة لاستخدام أمر `/kickoff` في مساحة عمل Slack.
|
||||
- إذا لم تر الطاقم المطلوب في القائمة المنسدلة، تأكد من أنه مُهيأ بشكل صحيح ومتصل في CrewAI.
|
||||
91
docs/edge/ar/enterprise/guides/team-management.mdx
Normal file
91
docs/edge/ar/enterprise/guides/team-management.mdx
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
title: "إدارة الفريق"
|
||||
description: "تعلم كيفية دعوة وإدارة أعضاء الفريق في مؤسسة CrewAI AMP"
|
||||
icon: "users"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
بصفتك مسؤولاً عن حساب CrewAI AMP، يمكنك بسهولة دعوة أعضاء جدد للانضمام إلى مؤسستك. يرشدك هذا الدليل خلال العملية خطوة بخطوة.
|
||||
|
||||
## دعوة أعضاء الفريق
|
||||
|
||||
<Steps>
|
||||
<Step title="الوصول إلى صفحة الإعدادات">
|
||||
- سجّل الدخول إلى حساب CrewAI AMP - ابحث عن أيقونة الترس في
|
||||
الزاوية العلوية اليمنى من لوحة التحكم - انقر على أيقونة الترس للوصول إلى
|
||||
صفحة **Settings**:
|
||||
<Frame caption="صفحة الإعدادات">
|
||||
<img src="/images/enterprise/settings-page.png" alt="صفحة الإعدادات" />
|
||||
</Frame>
|
||||
</Step>
|
||||
<Step title="الانتقال إلى قسم الأعضاء">
|
||||
- في صفحة الإعدادات، سترى علامة تبويب `Members` - انقر على علامة تبويب `Members`
|
||||
للوصول إلى صفحة **Members**:
|
||||
<Frame caption="علامة تبويب الأعضاء">
|
||||
<img src="/images/enterprise/members-tab.png" alt="علامة تبويب الأعضاء" />
|
||||
</Frame>
|
||||
</Step>
|
||||
<Step title="دعوة أعضاء جدد">
|
||||
- في قسم الأعضاء، سترى قائمة بالأعضاء الحاليين (بما فيهم
|
||||
أنت) - حدد موقع حقل إدخال `Email` - أدخل عنوان البريد الإلكتروني للشخص
|
||||
الذي تريد دعوته - انقر على زر `Invite` لإرسال الدعوة
|
||||
</Step>
|
||||
<Step title="التكرار حسب الحاجة">
|
||||
- يمكنك تكرار هذه العملية لدعوة أعضاء فريق متعددين - سيتلقى كل عضو
|
||||
مدعو دعوة عبر البريد الإلكتروني للانضمام إلى مؤسستك
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## إضافة الأدوار
|
||||
|
||||
يمكنك إضافة أدوار لأعضاء فريقك للتحكم في وصولهم إلى أجزاء مختلفة من المنصة.
|
||||
|
||||
<Steps>
|
||||
<Step title="الوصول إلى صفحة الإعدادات">
|
||||
- سجّل الدخول إلى حساب CrewAI AMP - ابحث عن أيقونة الترس في
|
||||
الزاوية العلوية اليمنى من لوحة التحكم - انقر على أيقونة الترس للوصول إلى
|
||||
صفحة **Settings**:
|
||||
<Frame>
|
||||
<img src="/images/enterprise/settings-page.png" alt="صفحة الإعدادات" />
|
||||
</Frame>
|
||||
</Step>
|
||||
<Step title="الانتقال إلى قسم الأعضاء">
|
||||
- في صفحة الإعدادات، سترى علامة تبويب `Roles` - انقر على علامة تبويب `Roles`
|
||||
للوصول إلى صفحة **Roles**.
|
||||
<Frame>
|
||||
<img src="/images/enterprise/roles-tab.png" alt="علامة تبويب الأدوار" />
|
||||
</Frame>
|
||||
- انقر على زر `Add Role` لإضافة دور جديد. - أدخل
|
||||
تفاصيل وصلاحيات الدور وانقر على زر `Create Role` لإنشاء
|
||||
الدور.
|
||||
<Frame>
|
||||
<img src="/images/enterprise/add-role-modal.png" alt="نافذة إضافة الدور" />
|
||||
</Frame>
|
||||
</Step>
|
||||
<Step title="إضافة أدوار للأعضاء">
|
||||
- في قسم الأعضاء، سترى قائمة بالأعضاء الحاليين (بما فيهم
|
||||
أنت)
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/member-accepted-invitation.png"
|
||||
alt="العضو قبل الدعوة"
|
||||
/>
|
||||
</Frame>
|
||||
- بمجرد قبول العضو للدعوة، يمكنك إضافة دور
|
||||
له. - عد إلى علامة تبويب `Roles` - انتقل إلى العضو الذي تريد إضافة
|
||||
دور له وتحت عمود `Role`، انقر على القائمة المنسدلة - اختر الدور
|
||||
الذي تريد إضافته للعضو - انقر على زر `Update` لحفظ الدور
|
||||
<Frame>
|
||||
<img src="/images/enterprise/assign-role.png" alt="إضافة دور للعضو" />
|
||||
</Frame>
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## ملاحظات مهمة
|
||||
|
||||
- **صلاحيات المسؤول**: فقط المستخدمون ذوو الصلاحيات الإدارية يمكنهم دعوة أعضاء جدد
|
||||
- **دقة البريد الإلكتروني**: تأكد من صحة عناوين البريد الإلكتروني لأعضاء فريقك
|
||||
- **قبول الدعوة**: سيحتاج الأعضاء المدعوون لقبول الدعوة للانضمام إلى مؤسستك
|
||||
- **إشعارات البريد الإلكتروني**: قد ترغب في إعلام أعضاء فريقك بالتحقق من بريدهم الإلكتروني (بما في ذلك مجلدات البريد غير المرغوب) للدعوة
|
||||
|
||||
باتباع هذه الخطوات، يمكنك بسهولة توسيع فريقك والتعاون بشكل أكثر فعالية داخل مؤسسة CrewAI AMP.
|
||||
154
docs/edge/ar/enterprise/guides/tool-repository.mdx
Normal file
154
docs/edge/ar/enterprise/guides/tool-repository.mdx
Normal file
@@ -0,0 +1,154 @@
|
||||
---
|
||||
title: مستودع الأدوات
|
||||
description: "استخدام مستودع الأدوات لإدارة أدواتك"
|
||||
icon: "toolbox"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مستودع الأدوات هو مدير حزم لأدوات CrewAI. يتيح للمستخدمين نشر وتثبيت وإدارة الأدوات التي تتكامل مع طواقم وتدفقات CrewAI.
|
||||
|
||||
يمكن أن تكون الأدوات:
|
||||
|
||||
- **خاصة**: متاحة فقط داخل مؤسستك (افتراضي)
|
||||
- **عامة**: متاحة لجميع مستخدمي CrewAI إذا نُشرت بعلامة `--public`
|
||||
|
||||
المستودع ليس نظام تحكم في الإصدارات. استخدم Git لتتبع تغييرات الكود وتمكين التعاون.
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
قبل استخدام مستودع الأدوات، تأكد من أن لديك:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com)
|
||||
- [CrewAI CLI](/ar/concepts/cli#cli) مُثبّت
|
||||
- uv>=0.5.0 مُثبّت. راجع [كيفية الترقية](https://docs.astral.sh/uv/getting-started/installation/#upgrading-uv)
|
||||
- [Git](https://git-scm.com) مُثبّت ومُهيأ
|
||||
- صلاحيات الوصول للنشر أو التثبيت في مؤسسة CrewAI AMP
|
||||
|
||||
## تثبيت الأدوات
|
||||
|
||||
لتثبيت أداة:
|
||||
|
||||
```bash
|
||||
crewai tool install <tool-name>
|
||||
```
|
||||
|
||||
يثبّت هذا الأداة ويضيفها إلى `pyproject.toml`.
|
||||
|
||||
يمكنك استخدام الأداة باستيرادها وإضافتها إلى وكلائك:
|
||||
|
||||
```python
|
||||
from your_tool.tool import YourTool
|
||||
|
||||
custom_tool = YourTool()
|
||||
|
||||
researcher = Agent(
|
||||
role='Market Research Analyst',
|
||||
goal='Provide up-to-date market analysis of the AI industry',
|
||||
backstory='An expert analyst with a keen eye for market trends.',
|
||||
tools=[custom_tool],
|
||||
verbose=True
|
||||
)
|
||||
```
|
||||
|
||||
## إضافة حزم أخرى بعد تثبيت أداة
|
||||
|
||||
بعد تثبيت أداة من مستودع أدوات CrewAI AMP، تحتاج لاستخدام أمر `crewai uv` لإضافة حزم أخرى لمشروعك.
|
||||
استخدام أوامر `uv` المباشرة سيفشل لأن المصادقة لمستودع الأدوات يتم التعامل معها عبر CLI. باستخدام أمر `crewai uv`، يمكنك إضافة حزم أخرى لمشروعك دون القلق بشأن المصادقة.
|
||||
يمكن استخدام أي أمر `uv` مع أمر `crewai uv`، مما يجعله أداة قوية لإدارة اعتماديات مشروعك دون عناء إدارة المصادقة عبر متغيرات البيئة أو طرق أخرى.
|
||||
|
||||
لنفرض أنك ثبّت أداة مخصصة من مستودع أدوات CrewAI AMP تسمى "my-tool":
|
||||
|
||||
```bash
|
||||
crewai tool install my-tool
|
||||
```
|
||||
|
||||
والآن تريد إضافة حزمة أخرى لمشروعك، يمكنك استخدام الأمر التالي:
|
||||
|
||||
```bash
|
||||
crewai uv add requests
|
||||
```
|
||||
|
||||
أوامر أخرى مثل `uv sync` أو `uv remove` يمكن أيضاً استخدامها مع أمر `crewai uv`:
|
||||
|
||||
```bash
|
||||
crewai uv sync
|
||||
```
|
||||
|
||||
```bash
|
||||
crewai uv remove requests
|
||||
```
|
||||
|
||||
سيضيف هذا الحزمة لمشروعك ويحدّث `pyproject.toml` وفقاً لذلك.
|
||||
|
||||
## إنشاء ونشر الأدوات
|
||||
|
||||
لإنشاء مشروع أداة جديد:
|
||||
|
||||
```bash
|
||||
crewai tool create <tool-name>
|
||||
```
|
||||
|
||||
يولّد هذا مشروع أداة مُهيكل محلياً.
|
||||
|
||||
بعد إجراء التغييرات، أنشئ مستودع Git وارفع الكود:
|
||||
|
||||
```bash
|
||||
git init
|
||||
git add .
|
||||
git commit -m "Initial version"
|
||||
```
|
||||
|
||||
لنشر الأداة:
|
||||
|
||||
```bash
|
||||
crewai tool publish
|
||||
```
|
||||
|
||||
افتراضياً، تُنشر الأدوات كخاصة. لجعل الأداة عامة:
|
||||
|
||||
```bash
|
||||
crewai tool publish --public
|
||||
```
|
||||
|
||||
لمزيد من التفاصيل حول بناء الأدوات، راجع [إنشاء أدواتك الخاصة](/ar/concepts/tools#creating-your-own-tools).
|
||||
|
||||
## تحديث الأدوات
|
||||
|
||||
لتحديث أداة منشورة:
|
||||
|
||||
1. عدّل الأداة محلياً
|
||||
2. حدّث الإصدار في `pyproject.toml` (مثل من `0.1.0` إلى `0.1.1`)
|
||||
3. ارفع التغييرات وانشر
|
||||
|
||||
```bash
|
||||
git commit -m "Update version to 0.1.1"
|
||||
crewai tool publish
|
||||
```
|
||||
|
||||
## حذف الأدوات
|
||||
|
||||
لحذف أداة:
|
||||
|
||||
1. انتقل إلى [CrewAI AMP](https://app.crewai.com)
|
||||
2. انتقل إلى **Tools**
|
||||
3. اختر الأداة
|
||||
4. انقر على **Delete**
|
||||
|
||||
<Warning>
|
||||
الحذف نهائي. لا يمكن استعادة أو إعادة تثبيت الأدوات المحذوفة.
|
||||
</Warning>
|
||||
|
||||
## فحوصات الأمان
|
||||
|
||||
كل إصدار منشور يخضع لفحوصات أمان آلية، ولا يكون متاحاً للتثبيت إلا بعد اجتيازها.
|
||||
|
||||
يمكنك التحقق من حالة فحص الأمان للأداة في:
|
||||
|
||||
`CrewAI AMP > Tools > Your Tool > Versions`
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تكامل API أو
|
||||
استكشاف الأخطاء.
|
||||
</Card>
|
||||
132
docs/edge/ar/enterprise/guides/training-crews.mdx
Normal file
132
docs/edge/ar/enterprise/guides/training-crews.mdx
Normal file
@@ -0,0 +1,132 @@
|
||||
---
|
||||
title: "تدريب الطواقم"
|
||||
description: "قم بتدريب طواقمك المنشورة مباشرة من منصة CrewAI AMP لتحسين أداء الوكلاء بمرور الوقت"
|
||||
icon: "dumbbell"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يتيح لك التدريب تحسين أداء الطاقم من خلال تشغيل جلسات تدريب تكرارية مباشرة من علامة تبويب **Training** في CrewAI AMP. تستخدم المنصة **وضع التدريب التلقائي** — حيث تتولى العملية التكرارية تلقائياً، على عكس تدريب CLI الذي يتطلب ملاحظات بشرية تفاعلية لكل تكرار.
|
||||
|
||||
بعد اكتمال التدريب، يقوم CrewAI بتقييم مخرجات الوكلاء ودمج الملاحظات في اقتراحات قابلة للتنفيذ لكل وكيل. يتم بعد ذلك تطبيق هذه الاقتراحات على تشغيلات الطاقم المستقبلية لتحسين جودة المخرجات.
|
||||
|
||||
<Tip>
|
||||
للحصول على تفاصيل حول كيفية عمل تدريب CrewAI، راجع صفحة [مفاهيم التدريب](/ar/concepts/training).
|
||||
</Tip>
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="نشر نشط" icon="rocket">
|
||||
تحتاج إلى حساب CrewAI AMP مع نشر نشط في حالة **Ready** (نوع Crew).
|
||||
</Card>
|
||||
<Card title="صلاحية التشغيل" icon="key">
|
||||
يجب أن يكون لحسابك صلاحية تشغيل للنشر الذي تريد تدريبه.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## كيفية تدريب طاقم
|
||||
|
||||
<Steps>
|
||||
<Step title="افتح علامة تبويب Training">
|
||||
انتقل إلى **Deployments**، انقر على نشرك، ثم اختر علامة تبويب **Training**.
|
||||
</Step>
|
||||
|
||||
<Step title="أدخل اسم التدريب">
|
||||
قدم **Training Name** — سيصبح هذا اسم ملف `.pkl` المستخدم لتخزين نتائج التدريب. على سبيل المثال، "Expert Mode Training" ينتج `expert_mode_training.pkl`.
|
||||
</Step>
|
||||
|
||||
<Step title="املأ مدخلات الطاقم">
|
||||
أدخل حقول إدخال الطاقم. هذه هي نفس المدخلات التي ستقدمها للتشغيل العادي — يتم تحميلها ديناميكياً بناءً على تكوين طاقمك.
|
||||
</Step>
|
||||
|
||||
<Step title="ابدأ التدريب">
|
||||
انقر على **Train Crew**. يتغير الزر إلى "Training..." مع مؤشر دوران أثناء تشغيل العملية.
|
||||
|
||||
خلف الكواليس:
|
||||
- يتم إنشاء سجل تدريب للنشر الخاص بك
|
||||
- تستدعي المنصة نقطة نهاية التدريب التلقائي للنشر
|
||||
- يقوم الطاقم بتشغيل تكراراته تلقائياً — لا حاجة لملاحظات يدوية
|
||||
</Step>
|
||||
|
||||
<Step title="راقب التقدم">
|
||||
تعرض لوحة **Current Training Status**:
|
||||
- **Status** — الحالة الحالية لجلسة التدريب
|
||||
- **Nº Iterations** — عدد تكرارات التدريب المُهيأة
|
||||
- **Filename** — ملف `.pkl` الذي يتم إنشاؤه
|
||||
- **Started At** — وقت بدء التدريب
|
||||
- **Training Inputs** — المدخلات التي قدمتها
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## فهم نتائج التدريب
|
||||
|
||||
بمجرد اكتمال التدريب، سترى بطاقات نتائج لكل وكيل تحتوي على المعلومات التالية:
|
||||
|
||||
- **Agent Role** — اسم/دور الوكيل في طاقمك
|
||||
- **Final Quality** — درجة من 0 إلى 10 تقيّم جودة مخرجات الوكيل
|
||||
- **Final Summary** — ملخص لأداء الوكيل أثناء التدريب
|
||||
- **Suggestions** — توصيات قابلة للتنفيذ لتحسين سلوك الوكيل
|
||||
|
||||
### تحرير الاقتراحات
|
||||
|
||||
يمكنك تحسين الاقتراحات لأي وكيل:
|
||||
|
||||
<Steps>
|
||||
<Step title="انقر على Edit">
|
||||
في بطاقة نتائج أي وكيل، انقر على زر **Edit** بجوار الاقتراحات.
|
||||
</Step>
|
||||
|
||||
<Step title="عدّل الاقتراحات">
|
||||
حدّث نص الاقتراحات ليعكس التحسينات التي تريدها بشكل أفضل.
|
||||
</Step>
|
||||
|
||||
<Step title="احفظ التغييرات">
|
||||
انقر على **Save**. تتم مزامنة الاقتراحات المُعدّلة مع النشر وتُستخدم في جميع التشغيلات المستقبلية.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## استخدام بيانات التدريب
|
||||
|
||||
لتطبيق نتائج التدريب على طاقمك:
|
||||
|
||||
1. لاحظ **Training Filename** (ملف `.pkl`) من جلسة التدريب المكتملة.
|
||||
2. حدد اسم الملف هذا في تكوين kickoff أو التشغيل الخاص بنشرك.
|
||||
3. يقوم الطاقم تلقائياً بتحميل ملف التدريب وتطبيق الاقتراحات المخزنة على كل وكيل.
|
||||
|
||||
هذا يعني أن الوكلاء يستفيدون من الملاحظات المُنشأة أثناء التدريب في كل تشغيل لاحق.
|
||||
|
||||
## التدريبات السابقة
|
||||
|
||||
يعرض الجزء السفلي من علامة تبويب Training **سجل جميع جلسات التدريب السابقة** للنشر. استخدم هذا لمراجعة التدريبات السابقة، ومقارنة النتائج، أو اختيار ملف تدريب مختلف للاستخدام.
|
||||
|
||||
## معالجة الأخطاء
|
||||
|
||||
إذا فشل تشغيل التدريب، تعرض لوحة الحالة حالة خطأ مع رسالة تصف ما حدث خطأ.
|
||||
|
||||
الأسباب الشائعة لفشل التدريب:
|
||||
- **لم يتم تحديث وقت تشغيل النشر** — تأكد من أن نشرك يعمل بأحدث إصدار
|
||||
- **أخطاء تنفيذ الطاقم** — مشاكل في منطق مهام الطاقم أو تكوين الوكيل
|
||||
- **مشاكل الشبكة** — مشاكل الاتصال بين المنصة والنشر
|
||||
|
||||
## القيود
|
||||
|
||||
<Info>
|
||||
ضع هذه القيود في الاعتبار عند التخطيط لسير عمل التدريب الخاص بك:
|
||||
- **تدريب نشط واحد في كل مرة** لكل نشر — انتظر حتى ينتهي التشغيل الحالي قبل بدء آخر
|
||||
- **وضع التدريب التلقائي فقط** — لا تدعم المنصة الملاحظات التفاعلية لكل تكرار مثل CLI
|
||||
- **بيانات التدريب خاصة بالنشر** — ترتبط نتائج التدريب بمثيل وإصدار النشر المحدد
|
||||
</Info>
|
||||
|
||||
## الموارد ذات الصلة
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="مفاهيم التدريب" icon="book" href="/ar/concepts/training">
|
||||
تعلم كيف يعمل تدريب CrewAI.
|
||||
</Card>
|
||||
<Card title="تشغيل الطاقم" icon="play" href="/ar/enterprise/guides/kickoff-crew">
|
||||
قم بتشغيل طاقمك المنشور من منصة AMP.
|
||||
</Card>
|
||||
<Card title="النشر على AMP" icon="cloud-arrow-up" href="/ar/enterprise/guides/deploy-to-amp">
|
||||
انشر طاقمك واجعله جاهزاً للتدريب.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
91
docs/edge/ar/enterprise/guides/update-crew.mdx
Normal file
91
docs/edge/ar/enterprise/guides/update-crew.mdx
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
title: "تحديث الطاقم"
|
||||
description: "تحديث طاقم على CrewAI AMP"
|
||||
icon: "pencil"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Note>
|
||||
بعد نشر طاقمك على CrewAI AMP، قد تحتاج لإجراء تحديثات على
|
||||
الكود أو إعدادات الأمان أو التهيئة. يشرح هذا الدليل كيفية تنفيذ
|
||||
عمليات التحديث الشائعة.
|
||||
</Note>
|
||||
|
||||
## لماذا تحديث طاقمك؟
|
||||
|
||||
لن يلتقط CrewAI تحديثات GitHub تلقائياً بشكل افتراضي، لذا ستحتاج لتشغيل التحديثات يدوياً، ما لم تكن قد حددت خيار `Auto-update` عند نشر طاقمك.
|
||||
|
||||
هناك عدة أسباب قد تدفعك لتحديث نشر طاقمك:
|
||||
|
||||
- تريد تحديث الكود بأحدث إيداع دفعته إلى GitHub
|
||||
- تريد إعادة تعيين رمز الحامل لأسباب أمنية
|
||||
- تريد تحديث متغيرات البيئة
|
||||
|
||||
## 1. تحديث كود طاقمك لأحدث إيداع
|
||||
|
||||
عندما تدفع إيداعات جديدة إلى مستودع GitHub وتريد تحديث نشرك:
|
||||
|
||||
1. انتقل إلى طاقمك في منصة CrewAI AMP
|
||||
2. انقر على زر `Re-deploy` في صفحة تفاصيل طاقمك
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
سيؤدي ذلك إلى تشغيل تحديث يمكنك تتبعه عبر شريط التقدم. سيسحب النظام أحدث كود من مستودعك ويعيد بناء نشرك.
|
||||
|
||||
## 2. إعادة تعيين رمز الحامل
|
||||
|
||||
إذا كنت تحتاج لإنشاء رمز حامل جديد (مثلاً، إذا كنت تشتبه في أن الرمز الحالي ربما تم اختراقه):
|
||||
|
||||
1. انتقل إلى طاقمك في منصة CrewAI AMP
|
||||
2. ابحث عن قسم `Bearer Token`
|
||||
3. انقر على زر `Reset` بجانب رمزك الحالي
|
||||
|
||||
<Frame></Frame>
|
||||
|
||||
<Warning>
|
||||
إعادة تعيين رمز الحامل ستبطل الرمز السابق فوراً.
|
||||
تأكد من تحديث أي تطبيقات أو نصوص برمجية تستخدم الرمز القديم.
|
||||
</Warning>
|
||||
|
||||
## 3. تحديث متغيرات البيئة
|
||||
|
||||
لتحديث متغيرات البيئة لطاقمك:
|
||||
|
||||
1. أولاً ادخل صفحة النشر بالنقر على اسم طاقمك
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
2. حدد موقع قسم `Environment Variables` (ستحتاج للنقر على أيقونة `Settings` للوصول إليه)
|
||||
3. عدّل المتغيرات الحالية أو أضف جديدة في الحقول المتوفرة
|
||||
4. انقر على زر `Update` بجانب كل متغير تعدّله
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
5. أخيراً، انقر على زر `Update Deployment` في أسفل الصفحة لتطبيق التغييرات
|
||||
|
||||
<Note>
|
||||
تحديث متغيرات البيئة سيشغّل نشراً جديداً، لكن هذا سيحدّث
|
||||
فقط تهيئة البيئة وليس الكود نفسه.
|
||||
</Note>
|
||||
|
||||
## بعد التحديث
|
||||
|
||||
بعد إجراء أي تحديث:
|
||||
|
||||
1. سيعيد النظام بناء وإعادة نشر طاقمك
|
||||
2. يمكنك مراقبة تقدم النشر في الوقت الفعلي
|
||||
3. بمجرد الاكتمال، اختبر طاقمك للتأكد من أن التغييرات تعمل كما هو متوقع
|
||||
|
||||
<Tip>
|
||||
إذا واجهت أي مشاكل بعد التحديث، يمكنك عرض سجلات النشر في
|
||||
المنصة أو التواصل مع الدعم للمساعدة.
|
||||
</Tip>
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للمساعدة في تحديث طاقمك أو
|
||||
استكشاف أخطاء النشر.
|
||||
</Card>
|
||||
157
docs/edge/ar/enterprise/guides/webhook-automation.mdx
Normal file
157
docs/edge/ar/enterprise/guides/webhook-automation.mdx
Normal file
@@ -0,0 +1,157 @@
|
||||
---
|
||||
title: "أتمتة Webhook"
|
||||
description: "أتمتة سير عمل CrewAI AMP باستخدام webhooks مع منصات مثل ActivePieces وZapier وMake.com"
|
||||
icon: "webhook"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
يتيح لك CrewAI AMP أتمتة سير عملك باستخدام webhooks. ستوجهك هذه المقالة خلال عملية إعداد واستخدام webhooks لبدء تنفيذ طاقمك، مع التركيز على التكامل مع ActivePieces، وهي منصة أتمتة سير العمل مشابهة لـ Zapier وMake.com.
|
||||
|
||||
## إعداد Webhooks
|
||||
|
||||
<Steps>
|
||||
<Step title="الوصول إلى واجهة البدء">
|
||||
- انتقل إلى لوحة تحكم CrewAI AMP
|
||||
- ابحث عن قسم `/kickoff`، الذي يُستخدم لبدء تنفيذ الطاقم
|
||||
<Frame>
|
||||
<img src="/images/enterprise/kickoff-interface.png" alt="واجهة البدء" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="تكوين محتوى JSON">
|
||||
في قسم محتوى JSON، ستحتاج إلى تقديم المعلومات التالية:
|
||||
|
||||
- **inputs**: كائن JSON يحتوي على:
|
||||
- `company`: اسم الشركة (مثال: "tesla")
|
||||
- `product_name`: اسم المنتج (مثال: "crewai")
|
||||
- `form_response`: نوع الاستجابة (مثال: "financial")
|
||||
- `icp_description`: وصف موجز لملف العميل المثالي
|
||||
- `product_description`: وصف قصير للمنتج
|
||||
- `taskWebhookUrl`، `stepWebhookUrl`، `crewWebhookUrl`: عناوين URL لنقاط نهاية webhook المختلفة (ActivePieces أو Zapier أو Make.com أو منصة أخرى متوافقة)
|
||||
</Step>
|
||||
|
||||
<Step title="التكامل مع ActivePieces">
|
||||
في هذا المثال سنستخدم ActivePieces. يمكنك استخدام منصات أخرى مثل Zapier وMake.com
|
||||
|
||||
للتكامل مع ActivePieces:
|
||||
|
||||
1. أنشئ تدفقًا جديدًا في ActivePieces
|
||||
2. أضف مشغلًا (مثال: جدول `Every Day`)
|
||||
<Frame>
|
||||
<img src="/images/enterprise/activepieces-trigger.png" alt="مشغل ActivePieces" />
|
||||
</Frame>
|
||||
|
||||
3. أضف خطوة إجراء HTTP
|
||||
- عيّن الإجراء إلى `Send HTTP request`
|
||||
- استخدم `POST` كطريقة
|
||||
- عيّن عنوان URL إلى نقطة نهاية بدء CrewAI AMP
|
||||
- أضف الترويسات اللازمة (مثال: `Bearer Token`)
|
||||
<Frame>
|
||||
<img src="/images/enterprise/activepieces-headers.png" alt="ترويسات ActivePieces" />
|
||||
</Frame>
|
||||
|
||||
- في النص، ضمّن محتوى JSON كما تم تكوينه في الخطوة 2
|
||||
<Frame>
|
||||
<img src="/images/enterprise/activepieces-body.png" alt="نص ActivePieces" />
|
||||
</Frame>
|
||||
|
||||
- سيبدأ الطاقم بعد ذلك في الوقت المحدد مسبقًا.
|
||||
</Step>
|
||||
|
||||
<Step title="إعداد Webhook">
|
||||
1. أنشئ تدفقًا جديدًا في ActivePieces وسمّه
|
||||
<Frame>
|
||||
<img src="/images/enterprise/activepieces-flow.png" alt="تدفق ActivePieces" />
|
||||
</Frame>
|
||||
|
||||
2. أضف خطوة webhook كمشغل:
|
||||
- اختر `Catch Webhook` كنوع المشغل
|
||||
- سيولّد هذا عنوان URL فريدًا سيستقبل طلبات HTTP ويشغل تدفقك
|
||||
<Frame>
|
||||
<img src="/images/enterprise/activepieces-webhook.png" alt="Webhook ActivePieces" />
|
||||
</Frame>
|
||||
|
||||
- كوّن البريد الإلكتروني لاستخدام نص جسم webhook الخاص بالطاقم
|
||||
<Frame>
|
||||
<img src="/images/enterprise/activepieces-email.png" alt="بريد ActivePieces الإلكتروني" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## أمثلة مخرجات Webhook
|
||||
|
||||
**ملاحظة:** أي كائن `meta` مُقدم في طلب البدء الخاص بك سيتم تضمينه في جميع حمولات webhook، مما يتيح لك تتبع الطلبات والحفاظ على السياق عبر دورة حياة تنفيذ الطاقم بالكامل.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Step Webhook">
|
||||
`stepWebhookUrl` - رد نداء يتم تنفيذه عند كل فكرة داخلية للوكيل
|
||||
|
||||
```json
|
||||
{
|
||||
"prompt": "Research the financial industry for potential AI solutions",
|
||||
"thought": "I need to conduct preliminary research on the financial industry",
|
||||
"tool": "research_tool",
|
||||
"tool_input": "financial industry AI solutions",
|
||||
"result": "**Preliminary Research Report on the Financial Industry for crewai Enterprise Solution**\n1. Industry Overview and Trends\nThe financial industry in ....\nConclusion:\nThe financial industry presents a fertile ground for implementing AI solutions like crewai, particularly in areas such as digital customer engagement, risk management, and regulatory compliance. Further engagement with the lead is recommended to better tailor the crewai solution to their specific needs and scale.",
|
||||
"kickoff_id": "97eba64f-958c-40a0-b61c-625fe635a3c0",
|
||||
"meta": {
|
||||
"requestId": "travel-req-123",
|
||||
"source": "web-app"
|
||||
}
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Task Webhook">
|
||||
`taskWebhookUrl` - رد نداء يتم تنفيذه عند انتهاء كل مهمة
|
||||
|
||||
```json
|
||||
{
|
||||
"description": "Using the information gathered from the lead's data, conduct preliminary research on the lead's industry, company background, and potential use cases for crewai. Focus on finding relevant data that can aid in scoring the lead and planning a strategy to pitch them crewai.",
|
||||
"name": "Industry Research Task",
|
||||
"expected_output": "Detailed research report on the financial industry",
|
||||
"summary": "The financial industry presents a fertile ground for implementing AI solutions like crewai, particularly in areas such as digital customer engagement, risk management, and regulatory compliance. Further engagement with the lead is recommended to better tailor the crewai solution to their specific needs and scale.",
|
||||
"agent": "Research Agent",
|
||||
"output": "**Preliminary Research Report on the Financial Industry for crewai Enterprise Solution**\n1. Industry Overview and Trends\nThe financial industry in ....\nConclusion:\nThe financial industry presents a fertile ground for implementing AI solutions like crewai, particularly in areas such as digital customer engagement, risk management, and regulatory compliance.",
|
||||
"output_json": {
|
||||
"industry": "financial",
|
||||
"key_opportunities": ["digital customer engagement", "risk management", "regulatory compliance"]
|
||||
},
|
||||
"kickoff_id": "97eba64f-958c-40a0-b61c-625fe635a3c0",
|
||||
"meta": {
|
||||
"requestId": "travel-req-123",
|
||||
"source": "web-app"
|
||||
}
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Crew Webhook">
|
||||
`crewWebhookUrl` - رد نداء يتم تنفيذه عند انتهاء تنفيذ الطاقم
|
||||
|
||||
```json
|
||||
{
|
||||
"kickoff_id": "97eba64f-958c-40a0-b61c-625fe635a3c0",
|
||||
"result": "**Final Analysis Report**\n\nLead Score: Customer service enhancement and compliance are particularly relevant.\n\nTalking Points:\n- Highlight how crewai's AI solutions can transform customer service\n- Discuss crewai's potential for sustainability goals\n- Emphasize compliance capabilities\n- Stress adaptability for various operation scales",
|
||||
"result_json": {
|
||||
"lead_score": "Customer service enhancement, and compliance are particularly relevant.",
|
||||
"talking_points": [
|
||||
"Highlight how crewai's AI solutions can transform customer service with automated, personalized experiences and 24/7 support, improving both customer satisfaction and operational efficiency.",
|
||||
"Discuss crewai's potential to help the institution achieve its sustainability goals through better data analysis and decision-making, contributing to responsible investing and green initiatives.",
|
||||
"Emphasize crewai's ability to enhance compliance with evolving regulations through efficient data processing and reporting, reducing the risk of non-compliance penalties.",
|
||||
"Stress the adaptability of crewai to support both extensive multinational operations and smaller, targeted projects, ensuring the solution grows with the institution's needs."
|
||||
]
|
||||
},
|
||||
"token_usage": {
|
||||
"total_tokens": 1250,
|
||||
"prompt_tokens": 800,
|
||||
"completion_tokens": 450
|
||||
},
|
||||
"meta": {
|
||||
"requestId": "travel-req-123",
|
||||
"source": "web-app"
|
||||
}
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
|
||||
</Tabs>
|
||||
105
docs/edge/ar/enterprise/guides/zapier-trigger.mdx
Normal file
105
docs/edge/ar/enterprise/guides/zapier-trigger.mdx
Normal file
@@ -0,0 +1,105 @@
|
||||
---
|
||||
title: "مشغل Zapier"
|
||||
description: "تشغيل أطقم CrewAI من سير عمل Zapier لأتمتة سير العمل عبر التطبيقات"
|
||||
icon: "bolt"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
سيرشدك هذا الدليل خلال عملية إعداد مشغلات Zapier لـ CrewAI AMP، مما يتيح لك أتمتة سير العمل بين CrewAI AMP والتطبيقات الأخرى.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
- حساب CrewAI AMP
|
||||
- حساب Zapier
|
||||
- حساب Slack (لهذا المثال المحدد)
|
||||
|
||||
## الإعداد خطوة بخطوة
|
||||
|
||||
<Steps>
|
||||
<Step title="إعداد مشغل Slack">
|
||||
- في Zapier، أنشئ Zap جديدًا.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-1.png" alt="Zapier 1" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="اختر Slack كتطبيق المشغل">
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-2.png" alt="Zapier 2" />
|
||||
</Frame>
|
||||
- اختر `New Pushed Message` كحدث المشغل.
|
||||
- اربط حساب Slack الخاص بك إذا لم تفعل ذلك بالفعل.
|
||||
</Step>
|
||||
|
||||
<Step title="تكوين إجراء CrewAI AMP">
|
||||
- أضف خطوة إجراء جديدة إلى Zap الخاص بك.
|
||||
- اختر CrewAI+ كتطبيق الإجراء وKickoff كحدث الإجراء
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-3.png" alt="Zapier 5" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="ربط حساب CrewAI AMP">
|
||||
- اربط حساب CrewAI AMP الخاص بك.
|
||||
- اختر الطاقم المناسب لسير عملك.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-4.png" alt="Zapier 6" />
|
||||
</Frame>
|
||||
- كوّن مدخلات الطاقم باستخدام البيانات من رسالة Slack.
|
||||
</Step>
|
||||
|
||||
<Step title="تنسيق مخرجات CrewAI AMP">
|
||||
- أضف خطوة إجراء أخرى لتنسيق مخرجات النص من CrewAI AMP.
|
||||
- استخدم أدوات التنسيق في Zapier لتحويل مخرجات Markdown إلى HTML.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-5.png" alt="Zapier 8" />
|
||||
</Frame>
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-6.png" alt="Zapier 9" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="إرسال المخرجات عبر البريد الإلكتروني">
|
||||
- أضف خطوة إجراء نهائية لإرسال المخرجات المنسقة عبر البريد الإلكتروني.
|
||||
- اختر خدمة البريد الإلكتروني المفضلة لديك (مثال: Gmail، Outlook).
|
||||
- كوّن تفاصيل البريد الإلكتروني، بما في ذلك المستلم والموضوع والنص.
|
||||
- أدرج مخرجات CrewAI AMP المنسقة في نص البريد الإلكتروني.
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-7.png" alt="Zapier 7" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="بدء تشغيل الطاقم من Slack">
|
||||
- أدخل النص في قناة Slack الخاصة بك
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-7b.png" alt="Zapier 10" />
|
||||
</Frame>
|
||||
|
||||
- اختر زر النقاط الثلاث ثم اختر Push to Zapier
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-8.png" alt="Zapier 11" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
<Step title="اختر الطاقم ثم اضغط Push للبدء">
|
||||
<Frame>
|
||||
<img src="/images/enterprise/zapier-9.png" alt="Zapier 12" />
|
||||
</Frame>
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## نصائح للنجاح
|
||||
|
||||
- تأكد من أن مدخلات CrewAI AMP مربوطة بشكل صحيح من رسالة Slack.
|
||||
- اختبر Zap الخاص بك جيدًا قبل تفعيله لاكتشاف أي مشاكل محتملة.
|
||||
- فكر في إضافة خطوات معالجة الأخطاء لإدارة حالات الفشل المحتملة في سير العمل.
|
||||
|
||||
باتباع هذه الخطوات، ستكون قد أعددت بنجاح مشغلات Zapier لـ CrewAI AMP، مما يتيح سير عمل آلي يتم تشغيله بواسطة رسائل Slack وينتج عنه إشعارات بالبريد الإلكتروني مع مخرجات CrewAI AMP.
|
||||
271
docs/edge/ar/enterprise/integrations/asana.mdx
Normal file
271
docs/edge/ar/enterprise/integrations/asana.mdx
Normal file
@@ -0,0 +1,271 @@
|
||||
---
|
||||
title: تكامل Asana
|
||||
description: "تنسيق مهام الفريق والمشاريع مع تكامل Asana لـ CrewAI."
|
||||
icon: "circle"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة المهام والمشاريع وتنسيق الفريق عبر Asana. أنشئ المهام وحدّث حالة المشروع وأدر التعيينات وبسّط سير عمل فريقك مع الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Asana، تأكد من أن لديك:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك نشط
|
||||
- حساب Asana مع الأذونات المناسبة
|
||||
- ربط حساب Asana الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Asana
|
||||
|
||||
### 1. ربط حساب Asana الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Asana** في قسم تكاملات المصادقة
|
||||
3. انقر على **ربط** وأكمل تدفق OAuth
|
||||
4. امنح الأذونات اللازمة لإدارة المهام والمشاريع
|
||||
5. انسخ رمز Enterprise الخاص بك من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز Enterprise الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="asana/create_comment">
|
||||
**الوصف:** إنشاء تعليق في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `task` (string, مطلوب): معرف المهمة - معرف المهمة التي سيُضاف إليها التعليق. سيُنسب التعليق للمستخدم المصادق عليه حاليًا.
|
||||
- `text` (string, مطلوب): النص (مثال: "This is a comment.").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/create_project">
|
||||
**الوصف:** إنشاء مشروع في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, مطلوب): الاسم (مثال: "Stuff to buy").
|
||||
- `workspace` (string, مطلوب): مساحة العمل - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار مساحة العمل لإنشاء المشاريع فيها. الافتراضي هو أول مساحة عمل للمستخدم إذا تُرك فارغًا.
|
||||
- `team` (string, اختياري): الفريق - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار الفريق لمشاركة هذا المشروع معه. الافتراضي هو أول فريق للمستخدم إذا تُرك فارغًا.
|
||||
- `notes` (string, اختياري): ملاحظات (مثال: "These are things we need to purchase.").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/get_projects">
|
||||
**الوصف:** الحصول على قائمة المشاريع في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `archived` (string, اختياري): مؤرشف - اختر "true" لعرض المشاريع المؤرشفة، "false" لعرض المشاريع النشطة فقط، أو "default" لعرض كليهما.
|
||||
- الخيارات: `default`, `true`, `false`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/get_project_by_id">
|
||||
**الوصف:** الحصول على مشروع بواسطة المعرف في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `projectFilterId` (string, مطلوب): معرف المشروع.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/create_task">
|
||||
**الوصف:** إنشاء مهمة في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, مطلوب): الاسم (مثال: "Task Name").
|
||||
- `workspace` (string, اختياري): مساحة العمل - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار مساحة العمل لإنشاء المهام فيها. الافتراضي هو أول مساحة عمل للمستخدم إذا تُرك فارغًا.
|
||||
- `project` (string, اختياري): المشروع - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار المشروع لإنشاء هذه المهمة فيه.
|
||||
- `notes` (string, اختياري): ملاحظات.
|
||||
- `dueOnDate` (string, اختياري): تاريخ الاستحقاق - التاريخ الذي تستحق فيه هذه المهمة. لا يمكن استخدامه مع Due At. (مثال: "YYYY-MM-DD").
|
||||
- `dueAtDate` (string, اختياري): الاستحقاق في - التاريخ والوقت (طابع زمني ISO) الذي تستحق فيه هذه المهمة. لا يمكن استخدامه مع Due On. (مثال: "2019-09-15T02:06:58.147Z").
|
||||
- `assignee` (string, اختياري): المُكلف - معرف مستخدم Asana الذي سيتم تعيين هذه المهمة له. استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار المُكلف.
|
||||
- `gid` (string, اختياري): معرف خارجي - معرف من تطبيقك لربط هذه المهمة به. يمكنك استخدام هذا المعرف لمزامنة التحديثات لهذه المهمة لاحقًا.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/update_task">
|
||||
**الوصف:** تحديث مهمة في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `taskId` (string, مطلوب): معرف المهمة - معرف المهمة التي سيتم تحديثها.
|
||||
- `completeStatus` (string, اختياري): حالة الإكمال.
|
||||
- الخيارات: `true`, `false`
|
||||
- `name` (string, اختياري): الاسم (مثال: "Task Name").
|
||||
- `notes` (string, اختياري): ملاحظات.
|
||||
- `dueOnDate` (string, اختياري): تاريخ الاستحقاق - التاريخ الذي تستحق فيه هذه المهمة. لا يمكن استخدامه مع Due At. (مثال: "YYYY-MM-DD").
|
||||
- `dueAtDate` (string, اختياري): الاستحقاق في - التاريخ والوقت (طابع زمني ISO) الذي تستحق فيه هذه المهمة. لا يمكن استخدامه مع Due On. (مثال: "2019-09-15T02:06:58.147Z").
|
||||
- `assignee` (string, اختياري): المُكلف - معرف مستخدم Asana الذي سيتم تعيين هذه المهمة له.
|
||||
- `gid` (string, اختياري): معرف خارجي - معرف من تطبيقك لربط هذه المهمة به.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/get_tasks">
|
||||
**الوصف:** الحصول على قائمة المهام في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `workspace` (string, اختياري): مساحة العمل - معرف مساحة العمل لتصفية المهام عليها.
|
||||
- `project` (string, اختياري): المشروع - معرف المشروع لتصفية المهام عليه.
|
||||
- `assignee` (string, اختياري): المُكلف - معرف المُكلف لتصفية المهام عليه.
|
||||
- `completedSince` (string, اختياري): مكتملة منذ - إرجاع المهام غير المكتملة فقط أو التي اكتملت منذ هذا الوقت (طابع زمني ISO أو Unix). (مثال: "2014-04-25T16:15:47-04:00").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/get_tasks_by_id">
|
||||
**الوصف:** الحصول على قائمة المهام بواسطة المعرف في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `taskId` (string, مطلوب): معرف المهمة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/get_task_by_external_id">
|
||||
**الوصف:** الحصول على مهمة بواسطة المعرف الخارجي في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `gid` (string, مطلوب): المعرف الخارجي - المعرف الذي ترتبط أو تتزامن به هذه المهمة، من تطبيقك.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/add_task_to_section">
|
||||
**الوصف:** إضافة مهمة إلى قسم في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `sectionId` (string, مطلوب): معرف القسم - معرف القسم لإضافة هذه المهمة إليه.
|
||||
- `taskId` (string, مطلوب): معرف المهمة - معرف المهمة. (مثال: "1204619611402340").
|
||||
- `beforeTaskId` (string, اختياري): معرف المهمة السابقة - معرف مهمة في هذا القسم سيتم إدراج هذه المهمة قبلها. لا يمكن استخدامه مع After Task ID. (مثال: "1204619611402340").
|
||||
- `afterTaskId` (string, اختياري): معرف المهمة التالية - معرف مهمة في هذا القسم سيتم إدراج هذه المهمة بعدها. لا يمكن استخدامه مع Before Task ID. (مثال: "1204619611402340").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/get_teams">
|
||||
**الوصف:** الحصول على قائمة الفرق في Asana.
|
||||
|
||||
**المعاملات:**
|
||||
- `workspace` (string, مطلوب): مساحة العمل - إرجاع الفرق في مساحة العمل هذه المرئية للمستخدم المصرح له.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="asana/get_workspaces">
|
||||
**الوصف:** الحصول على قائمة مساحات العمل في Asana.
|
||||
|
||||
**المعاملات:** لا توجد معاملات مطلوبة.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد وكيل Asana الأساسي
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Asana capabilities
|
||||
asana_agent = Agent(
|
||||
role="Project Manager",
|
||||
goal="Manage tasks and projects in Asana efficiently",
|
||||
backstory="An AI assistant specialized in project management and task coordination.",
|
||||
apps=['asana'] # All Asana actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new project
|
||||
create_project_task = Task(
|
||||
description="Create a new project called 'Q1 Marketing Campaign' in the Marketing workspace",
|
||||
agent=asana_agent,
|
||||
expected_output="Confirmation that the project was created successfully with project ID"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[asana_agent],
|
||||
tasks=[create_project_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات Asana محددة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with specific Asana actions only
|
||||
task_manager_agent = Agent(
|
||||
role="Task Manager",
|
||||
goal="Create and manage tasks efficiently",
|
||||
backstory="An AI assistant that focuses on task creation and management.",
|
||||
apps=[
|
||||
'asana/create_task',
|
||||
'asana/update_task',
|
||||
'asana/get_tasks'
|
||||
] # Specific Asana actions
|
||||
)
|
||||
|
||||
# Task to create and assign a task
|
||||
task_management = Task(
|
||||
description="Create a task called 'Review quarterly reports' and assign it to the appropriate team member",
|
||||
agent=task_manager_agent,
|
||||
expected_output="Task created and assigned successfully"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[task_manager_agent],
|
||||
tasks=[task_management]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة المشاريع المتقدمة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
project_coordinator = Agent(
|
||||
role="Project Coordinator",
|
||||
goal="Coordinate project activities and track progress",
|
||||
backstory="An experienced project coordinator who ensures projects run smoothly.",
|
||||
apps=['asana']
|
||||
)
|
||||
|
||||
# Complex task involving multiple Asana operations
|
||||
coordination_task = Task(
|
||||
description="""
|
||||
1. Get all active projects in the workspace
|
||||
2. For each project, get the list of incomplete tasks
|
||||
3. Create a summary report task in the 'Management Reports' project
|
||||
4. Add comments to overdue tasks to request status updates
|
||||
""",
|
||||
agent=project_coordinator,
|
||||
expected_output="Summary report created and status update requests sent for overdue tasks"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[project_coordinator],
|
||||
tasks=[coordination_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
280
docs/edge/ar/enterprise/integrations/box.mdx
Normal file
280
docs/edge/ar/enterprise/integrations/box.mdx
Normal file
@@ -0,0 +1,280 @@
|
||||
---
|
||||
title: تكامل Box
|
||||
description: "تخزين الملفات وإدارة المستندات مع تكامل Box لـ CrewAI."
|
||||
icon: "box"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة الملفات والمجلدات والمستندات عبر Box. ارفع الملفات، ونظّم هياكل المجلدات، وابحث في المحتوى، وبسّط إدارة مستندات فريقك باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Box، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Box بالصلاحيات المناسبة
|
||||
- ربط حساب Box الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Box
|
||||
|
||||
### 1. ربط حساب Box الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Box** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة الملفات والمجلدات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="box/save_file">
|
||||
**الوصف:** حفظ ملف من عنوان URL في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `fileAttributes` (object, مطلوب): السمات - بيانات وصفية للملف تشمل الاسم والمجلد الأصلي والطوابع الزمنية.
|
||||
```json
|
||||
{
|
||||
"content_created_at": "2012-12-12T10:53:43-08:00",
|
||||
"content_modified_at": "2012-12-12T10:53:43-08:00",
|
||||
"name": "qwerty.png",
|
||||
"parent": { "id": "1234567" }
|
||||
}
|
||||
```
|
||||
- `file` (string, مطلوب): عنوان URL للملف - يجب أن يكون حجم الملفات أقل من 50 ميجابايت. (مثال: "https://picsum.photos/200/300").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="box/save_file_from_object">
|
||||
**الوصف:** حفظ ملف في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `file` (string, مطلوب): الملف - يقبل كائن ملف يحتوي على بيانات الملف. يجب أن يكون حجم الملفات أقل من 50 ميجابايت.
|
||||
- `fileName` (string, مطلوب): اسم الملف (مثال: "qwerty.png").
|
||||
- `folder` (string, اختياري): المجلد - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار وجهة مجلد الملف. يستخدم المجلد الجذري افتراضياً إذا تُرك فارغاً.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="box/get_file_by_id">
|
||||
**الوصف:** الحصول على ملف بواسطة المعرّف في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `fileId` (string, مطلوب): معرّف الملف - المعرّف الفريد الذي يمثل ملفاً. (مثال: "12345").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="box/list_files">
|
||||
**الوصف:** عرض قائمة الملفات في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `folderId` (string, مطلوب): معرّف المجلد - المعرّف الفريد الذي يمثل مجلداً. (مثال: "0").
|
||||
- `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل - OR لمجموعات AND من شروط فردية.
|
||||
```json
|
||||
{
|
||||
"operator": "OR",
|
||||
"conditions": [
|
||||
{
|
||||
"operator": "AND",
|
||||
"conditions": [
|
||||
{
|
||||
"field": "direction",
|
||||
"operator": "$stringExactlyMatches",
|
||||
"value": "ASC"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="box/create_folder">
|
||||
**الوصف:** إنشاء مجلد في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `folderName` (string, مطلوب): الاسم - اسم المجلد الجديد. (مثال: "New Folder").
|
||||
- `folderParent` (object, مطلوب): المجلد الأصلي - المجلد الأصلي الذي سيُنشأ فيه المجلد الجديد.
|
||||
```json
|
||||
{
|
||||
"id": "123456"
|
||||
}
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="box/move_folder">
|
||||
**الوصف:** نقل مجلد في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `folderId` (string, مطلوب): معرّف المجلد - المعرّف الفريد الذي يمثل مجلداً. (مثال: "0").
|
||||
- `folderName` (string, مطلوب): الاسم - اسم المجلد. (مثال: "New Folder").
|
||||
- `folderParent` (object, مطلوب): المجلد الأصلي - وجهة المجلد الأصلي الجديد.
|
||||
```json
|
||||
{
|
||||
"id": "123456"
|
||||
}
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="box/get_folder_by_id">
|
||||
**الوصف:** الحصول على مجلد بواسطة المعرّف في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `folderId` (string, مطلوب): معرّف المجلد - المعرّف الفريد الذي يمثل مجلداً. (مثال: "0").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="box/search_folders">
|
||||
**الوصف:** البحث في المجلدات في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `folderId` (string, مطلوب): معرّف المجلد - المجلد المراد البحث فيه.
|
||||
- `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل - OR لمجموعات AND من شروط فردية.
|
||||
```json
|
||||
{
|
||||
"operator": "OR",
|
||||
"conditions": [
|
||||
{
|
||||
"operator": "AND",
|
||||
"conditions": [
|
||||
{
|
||||
"field": "sort",
|
||||
"operator": "$stringExactlyMatches",
|
||||
"value": "name"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="box/delete_folder">
|
||||
**الوصف:** حذف مجلد في Box.
|
||||
|
||||
**المعاملات:**
|
||||
- `folderId` (string, مطلوب): معرّف المجلد - المعرّف الفريد الذي يمثل مجلداً. (مثال: "0").
|
||||
- `recursive` (boolean, اختياري): تكراري - حذف مجلد غير فارغ بحذف المجلد وجميع محتوياته تكرارياً.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Box
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Box capabilities
|
||||
box_agent = Agent(
|
||||
role="Document Manager",
|
||||
goal="Manage files and folders in Box efficiently",
|
||||
backstory="An AI assistant specialized in document management and file organization.",
|
||||
apps=['box'] # All Box actions will be available
|
||||
)
|
||||
|
||||
# Task to create a folder structure
|
||||
create_structure_task = Task(
|
||||
description="Create a folder called 'Project Files' in the root directory and upload a document from URL",
|
||||
agent=box_agent,
|
||||
expected_output="Folder created and file uploaded successfully"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[box_agent],
|
||||
tasks=[create_structure_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات Box محددة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with specific Box actions only
|
||||
file_organizer_agent = Agent(
|
||||
role="File Organizer",
|
||||
goal="Organize and manage file storage efficiently",
|
||||
backstory="An AI assistant that focuses on file organization and storage management.",
|
||||
apps=['box/create_folder', 'box/save_file', 'box/list_files'] # Specific Box actions
|
||||
)
|
||||
|
||||
# Task to organize files
|
||||
organization_task = Task(
|
||||
description="Create a folder structure for the marketing team and organize existing files",
|
||||
agent=file_organizer_agent,
|
||||
expected_output="Folder structure created and files organized"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[file_organizer_agent],
|
||||
tasks=[organization_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة الملفات المتقدمة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
file_manager = Agent(
|
||||
role="File Manager",
|
||||
goal="Maintain organized file structure and manage document lifecycle",
|
||||
backstory="An experienced file manager who ensures documents are properly organized and accessible.",
|
||||
apps=['box']
|
||||
)
|
||||
|
||||
# Complex task involving multiple Box operations
|
||||
management_task = Task(
|
||||
description="""
|
||||
1. List all files in the root folder
|
||||
2. Create monthly archive folders for the current year
|
||||
3. Move old files to appropriate archive folders
|
||||
4. Generate a summary report of the file organization
|
||||
""",
|
||||
agent=file_manager,
|
||||
expected_output="Files organized into archive structure with summary report"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[file_manager],
|
||||
tasks=[management_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
301
docs/edge/ar/enterprise/integrations/clickup.mdx
Normal file
301
docs/edge/ar/enterprise/integrations/clickup.mdx
Normal file
@@ -0,0 +1,301 @@
|
||||
---
|
||||
title: تكامل ClickUp
|
||||
description: "إدارة المهام والإنتاجية مع تكامل ClickUp لـ CrewAI."
|
||||
icon: "list-check"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة المهام والمشاريع وسير عمل الإنتاجية عبر ClickUp. أنشئ المهام وحدّثها، ونظّم المشاريع، وأدر تعيينات الفريق، وبسّط إدارة إنتاجيتك باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل ClickUp، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب ClickUp بالصلاحيات المناسبة
|
||||
- ربط حساب ClickUp الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل ClickUp
|
||||
|
||||
### 1. ربط حساب ClickUp الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **ClickUp** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة المهام والمشاريع
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="clickup/search_tasks">
|
||||
**الوصف:** البحث عن المهام في ClickUp باستخدام فلاتر متقدمة.
|
||||
|
||||
**المعاملات:**
|
||||
- `taskFilterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل - OR لمجموعات AND من شروط فردية.
|
||||
```json
|
||||
{
|
||||
"operator": "OR",
|
||||
"conditions": [
|
||||
{
|
||||
"operator": "AND",
|
||||
"conditions": [
|
||||
{
|
||||
"field": "statuses%5B%5D",
|
||||
"operator": "$stringExactlyMatches",
|
||||
"value": "open"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
الحقول المتاحة: `space_ids%5B%5D`, `project_ids%5B%5D`, `list_ids%5B%5D`, `statuses%5B%5D`, `include_closed`, `assignees%5B%5D`, `tags%5B%5D`, `due_date_gt`, `due_date_lt`, `date_created_gt`, `date_created_lt`, `date_updated_gt`, `date_updated_lt`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/get_task_in_list">
|
||||
**الوصف:** الحصول على المهام في قائمة محددة في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `listId` (string, مطلوب): القائمة - اختر قائمة للحصول على المهام منها. استخدم إعدادات المستخدم في بوابة الاتصال للسماح للمستخدمين باختيار قائمة ClickUp.
|
||||
- `taskFilterFormula` (string, اختياري): البحث عن المهام التي تطابق الفلاتر المحددة. مثال: name=task1.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/create_task">
|
||||
**الوصف:** إنشاء مهمة في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `listId` (string, مطلوب): القائمة - اختر قائمة لإنشاء هذه المهمة فيها.
|
||||
- `name` (string, مطلوب): الاسم - اسم المهمة.
|
||||
- `description` (string, اختياري): الوصف - وصف المهمة.
|
||||
- `status` (string, اختياري): الحالة - اختر حالة لهذه المهمة.
|
||||
- `assignees` (string, اختياري): المكلّفون - اختر عضواً (أو مصفوفة من معرّفات الأعضاء) ليتم تعيينهم لهذه المهمة.
|
||||
- `dueDate` (string, اختياري): تاريخ الاستحقاق - حدد تاريخ استحقاق لهذه المهمة.
|
||||
- `additionalFields` (string, اختياري): حقول إضافية - حدد حقولاً إضافية لتضمينها في هذه المهمة بصيغة JSON.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/update_task">
|
||||
**الوصف:** تحديث مهمة في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `taskId` (string, مطلوب): معرّف المهمة - معرّف المهمة المراد تحديثها.
|
||||
- `listId` (string, مطلوب): القائمة - اختر قائمة لإنشاء هذه المهمة فيها.
|
||||
- `name` (string, اختياري): الاسم - اسم المهمة.
|
||||
- `description` (string, اختياري): الوصف - وصف المهمة.
|
||||
- `status` (string, اختياري): الحالة - اختر حالة لهذه المهمة.
|
||||
- `assignees` (string, اختياري): المكلّفون - اختر عضواً (أو مصفوفة من معرّفات الأعضاء) ليتم تعيينهم لهذه المهمة.
|
||||
- `dueDate` (string, اختياري): تاريخ الاستحقاق - حدد تاريخ استحقاق لهذه المهمة.
|
||||
- `additionalFields` (string, اختياري): حقول إضافية - حدد حقولاً إضافية لتضمينها في هذه المهمة بصيغة JSON.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/delete_task">
|
||||
**الوصف:** حذف مهمة في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `taskId` (string, مطلوب): معرّف المهمة - معرّف المهمة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/get_list">
|
||||
**الوصف:** الحصول على معلومات القائمة في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `spaceId` (string, مطلوب): معرّف المساحة - معرّف المساحة التي تحتوي على القوائم.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/get_custom_fields_in_list">
|
||||
**الوصف:** الحصول على الحقول المخصصة في قائمة في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `listId` (string, مطلوب): معرّف القائمة - معرّف القائمة للحصول على الحقول المخصصة منها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/get_all_fields_in_list">
|
||||
**الوصف:** الحصول على جميع الحقول في قائمة في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `listId` (string, مطلوب): معرّف القائمة - معرّف القائمة للحصول على جميع الحقول منها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/get_space">
|
||||
**الوصف:** الحصول على معلومات المساحة في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `spaceId` (string, اختياري): معرّف المساحة - معرّف المساحة المراد استرجاعها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/get_folders">
|
||||
**الوصف:** الحصول على المجلدات في ClickUp.
|
||||
|
||||
**المعاملات:**
|
||||
- `spaceId` (string, مطلوب): معرّف المساحة - معرّف المساحة التي تحتوي على المجلدات.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="clickup/get_member">
|
||||
**الوصف:** الحصول على معلومات العضو في ClickUp.
|
||||
|
||||
**المعاملات:** لا توجد معاملات مطلوبة.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ ClickUp
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Clickup capabilities
|
||||
clickup_agent = Agent(
|
||||
role="Task Manager",
|
||||
goal="Manage tasks and projects in ClickUp efficiently",
|
||||
backstory="An AI assistant specialized in task management and productivity coordination.",
|
||||
apps=['clickup'] # All Clickup actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new task
|
||||
create_task = Task(
|
||||
description="Create a task called 'Review Q1 Reports' in the Marketing list with high priority",
|
||||
agent=clickup_agent,
|
||||
expected_output="Task created successfully with task ID"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[clickup_agent],
|
||||
tasks=[create_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات ClickUp محددة
|
||||
|
||||
```python
|
||||
|
||||
task_coordinator = Agent(
|
||||
role="Task Coordinator",
|
||||
goal="Create and manage tasks efficiently",
|
||||
backstory="An AI assistant that focuses on task creation and status management.",
|
||||
apps=['clickup/create_task']
|
||||
)
|
||||
|
||||
# Task to manage task workflow
|
||||
task_workflow = Task(
|
||||
description="Create a task for project planning and assign it to the development team",
|
||||
agent=task_coordinator,
|
||||
expected_output="Task created and assigned successfully"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[task_coordinator],
|
||||
tasks=[task_workflow]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة المشاريع المتقدمة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
project_manager = Agent(
|
||||
role="Project Manager",
|
||||
goal="Coordinate project activities and track team productivity",
|
||||
backstory="An experienced project manager who ensures projects are delivered on time.",
|
||||
apps=['clickup']
|
||||
)
|
||||
|
||||
# Complex task involving multiple ClickUp operations
|
||||
project_coordination = Task(
|
||||
description="""
|
||||
1. Get all open tasks in the current space
|
||||
2. Identify overdue tasks and update their status
|
||||
3. Create a weekly report task summarizing project progress
|
||||
4. Assign the report task to the team lead
|
||||
""",
|
||||
agent=project_manager,
|
||||
expected_output="Project status updated and weekly report task created and assigned"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[project_manager],
|
||||
tasks=[project_coordination]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### البحث في المهام وإدارتها
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
task_analyst = Agent(
|
||||
role="Task Analyst",
|
||||
goal="Analyze task patterns and optimize team productivity",
|
||||
backstory="An AI assistant that analyzes task data to improve team efficiency.",
|
||||
apps=['clickup']
|
||||
)
|
||||
|
||||
# Task to analyze and optimize task distribution
|
||||
task_analysis = Task(
|
||||
description="""
|
||||
Search for all tasks assigned to team members in the last 30 days,
|
||||
analyze completion patterns, and create optimization recommendations
|
||||
""",
|
||||
agent=task_analyst,
|
||||
expected_output="Task analysis report with optimization recommendations"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[task_analyst],
|
||||
tasks=[task_analysis]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل ClickUp أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
123
docs/edge/ar/enterprise/integrations/databricks.mdx
Normal file
123
docs/edge/ar/enterprise/integrations/databricks.mdx
Normal file
@@ -0,0 +1,123 @@
|
||||
---
|
||||
title: تكامل Databricks
|
||||
description: "اربط وكلاء CrewAI بـ Databricks Genie وSQL وUnity Catalog Functions وVector Search عبر خوادم MCP المُدارة من Databricks."
|
||||
icon: "layer-group"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
اربط وكلاء CrewAI مباشرةً بمساحة عمل Databricks الخاصة بك عبر [خوادم MCP المُدارة من Databricks](https://docs.databricks.com/aws/en/generative-ai/mcp/managed-mcp). يتيح تكامل Databricks لوكلائك طرح أسئلة بلغة طبيعية باستخدام **Genie**، وتنفيذ **SQL** خاضع للحوكمة، واستدعاء **Unity Catalog Functions**، واسترجاع المستندات باستخدام **Vector Search** — كل ذلك دون كتابة أو استضافة أي كود موصِّل، مع تطبيق أذونات Unity Catalog في كل استدعاء.
|
||||
|
||||
في الخلفية، يُعدّ تكامل Databricks غلافًا مُدارًا حول دعم [خوادم MCP المخصصة](/ar/enterprise/guides/custom-mcp-server) في CrewAI. تكشف Databricks عن كل قدرة كنقطة نهاية [Model Context Protocol](https://modelcontextprotocol.io/) خاصة بها، ويتصل بها CrewAI بأمان نيابةً عنك. ولأن كل خادم يُضاف بشكل منفصل، يمكنك تفعيل القدرات التي تحتاجها فرقك (crews) بالضبط.
|
||||
|
||||
## القدرات الرئيسية
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Genie" icon="comments">
|
||||
اطرح أسئلة بلغة طبيعية واحصل على إجابات مستندة إلى بياناتك باستخدام [Genie](https://docs.databricks.com/aws/en/genie/)، الذي يستعلم من Genie Spaces وUnity Catalog ويوفّر روابط تعود إلى واجهة Databricks.
|
||||
</Card>
|
||||
<Card title="Databricks SQL" icon="database">
|
||||
نفّذ SQL خاضعًا للحوكمة على مستودعات Databricks لديك للاستعلام عن البيانات وتحويلها وإنشاء خطوط أنابيب البيانات مباشرةً من وكلائك.
|
||||
</Card>
|
||||
<Card title="Unity Catalog Functions" icon="function">
|
||||
استدعِ [دوال Unity Catalog](https://docs.databricks.com/aws/en/udf/unity-catalog) لتنفيذ SQL مُعرّف مسبقًا ومنطق أعمال مخصّص كأدوات قابلة لإعادة الاستخدام وخاضعة للحوكمة.
|
||||
</Card>
|
||||
<Card title="Vector Search" icon="magnifying-glass">
|
||||
استرجع المستندات ذات الصلة لسير عمل RAG والمعرفة من فهارس [Mosaic AI Vector Search](https://docs.databricks.com/aws/en/generative-ai/vector-search) باستخدام التشابه الدلالي.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
تعمل جميع الخوادم خلف Unity AI Gateway وتطبّق ضوابط الوصول في Unity Catalog، بحيث لا يرى وكلاؤك سوى البيانات والأدوات المصرَّح لهم باستخدامها.
|
||||
|
||||
## المتطلبات المسبقة
|
||||
|
||||
قبل استخدام تكامل Databricks، تأكّد من توفّر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) باشتراك نشط
|
||||
- مساحة عمل Databricks تحتوي على القدرات التي تريد كشفها (Genie Spaces، مستودعات SQL، دوال Unity Catalog، أو فهارس Vector Search)
|
||||
- [امتيازات Unity Catalog](https://docs.databricks.com/aws/en/data-governance/unity-catalog) المناسبة على الكائنات الأساسية
|
||||
- اسم مضيف مساحة عمل Databricks الخاص بك (مثال: `your-workspace.cloud.databricks.com`)
|
||||
|
||||
## خوادم MCP المُدارة من Databricks
|
||||
|
||||
تنشر Databricks خادم MCP مُدارًا منفصلًا لكل قدرة. يكشف CrewAI عنها كاتصالات فردية، يُهيَّأ كل منها باستخدام مضيف مساحة العمل ومعرّفات Unity Catalog ذات الصلة. تتبع نقاط النهاية الأنماط التالية:
|
||||
|
||||
| الخادم | الوظيفة | نمط عنوان MCP |
|
||||
|--------|---------|---------------|
|
||||
| **Genie** | أسئلة وأجوبة بلغة طبيعية على Genie Space | `https://<workspace-hostname>/api/2.0/mcp/genie/{genie_space_id}` |
|
||||
| **Databricks SQL** | تنفيذ SQL على مستودعاتك | `https://<workspace-hostname>/api/2.0/mcp/sql` |
|
||||
| **Unity Catalog Functions** | تشغيل دوال UC المسجّلة | `https://<workspace-hostname>/api/2.0/mcp/functions/{catalog}/{schema}` |
|
||||
| **Vector Search** | الاستعلام من فهرس Vector Search | `https://<workspace-hostname>/api/2.0/mcp/vector-search/{catalog}/{schema}` |
|
||||
|
||||
<Note>
|
||||
لا حاجة لإنشاء عناوين URL هذه يدويًا — يُنشئ CrewAI كل نقطة نهاية من مضيف مساحة العمل والمعرّفات (Genie Space ID، أو catalog/schema) التي تقدّمها عند تهيئة الاتصال. للاطّلاع على المواصفات الكاملة وأحدث تفاصيل نقاط النهاية، راجع [وثائق MCP المُدارة من Databricks](https://docs.databricks.com/aws/en/generative-ai/mcp/managed-mcp).
|
||||
</Note>
|
||||
|
||||
## ربط Databricks في CrewAI AMP
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/databricks-configure.png" alt="تهيئة خادم MCP مُدار من Databricks في CrewAI AMP" />
|
||||
</Frame>
|
||||
|
||||
تظهر كل قدرة من قدرات Databricks — **Databricks Genie** و**Databricks SQL** و**Databricks Unity Catalog Functions** و**Databricks Vector Search** — كخادم MCP خاص بها ضمن مجموعة Databricks في صفحة **Tools & Integrations**. هيّئ ما تحتاجه:
|
||||
|
||||
<Steps>
|
||||
<Step title="افتح Tools & Integrations">
|
||||
انتقل إلى **Tools & Integrations** في الشريط الجانبي الأيسر في CrewAI AMP وحدِّد مجموعة **Databricks** في قائمة Connections. سترى خوادم Genie وSQL وUnity Catalog Functions وVector Search مُدرجة أسفلها.
|
||||
</Step>
|
||||
|
||||
<Step title="هيّئ خادمًا">
|
||||
انقر على **Configure** بجوار القدرة التي تريد تفعيلها وقدّم تفاصيل الاتصال الخاصة بها:
|
||||
|
||||
- **Workspace Host** — اسم مضيف مساحة عمل Databricks الخاص بك (مثال: `my-workspace.cloud.databricks.com`).
|
||||
- **Genie** — **Genie Space ID** المراد الاستعلام عنه.
|
||||
- **Unity Catalog Functions** — الـ **catalog** والـ **schema** اللذان يحتويان على دوالك.
|
||||
- **Vector Search** — الـ **catalog** والـ **schema** اللذان يحتويان على الفهرس.
|
||||
- **Databricks SQL** — لا توجد معرّفات إضافية؛ تُنفَّذ الاستعلامات على مستودعات SQL في مساحة عملك.
|
||||
</Step>
|
||||
|
||||
<Step title="اختر طريقة المصادقة">
|
||||
اختر كيف يصادق CrewAI على Databricks. يُوصى باستخدام **OAuth**.
|
||||
|
||||
- **Use OAuth** — اتصل بأمان باستخدام OAuth 2.0. يصادق كل مستخدم على حدة، وتُصدر Databricks رموزًا (tokens) محدّدة النطاق للقدرة (`genie` أو `sql` أو `unity-catalog` أو `vector-search`). يتولّى CrewAI تدفّق التفويض ويُجدّد الرموز تلقائيًا.
|
||||
- **Use personal access token** — صادِق باستخدام [رمز وصول شخصي من Databricks](https://docs.databricks.com/aws/en/dev-tools/auth/pat). استخدم هوية بأقل الامتيازات للحدّ من التعرّض.
|
||||
</Step>
|
||||
|
||||
<Step title="صادِق">
|
||||
أكمل المصادقة. بمجرد الاتصال، تصبح أدوات الخادم متاحة لفرقك. كرّر العملية لأي قدرات Databricks أخرى تريد تفعيلها.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Tip>
|
||||
لأن كل قدرة هي اتصال منفصل، يمكنك المزج والمطابقة — على سبيل المثال، فعّل Genie وVector Search لفريق بحث، مع حجز SQL وUnity Catalog Functions لفريق هندسة البيانات. تتيح لك إعدادات الرؤية (Visibility) التحكّم في أعضاء الفريق الذين يمكنهم استخدام كل منها.
|
||||
</Tip>
|
||||
|
||||
## استخدام أدوات Databricks في فرقك
|
||||
|
||||
بمجرد الاتصال، تظهر الأدوات التي يكشفها كل خادم MCP جنبًا إلى جنب مع الاتصالات المدمجة في صفحة **Tools & Integrations**. يمكنك:
|
||||
|
||||
- **إسناد الأدوات إلى الوكلاء** في فرقك تمامًا مثل أي أداة أخرى في CrewAI.
|
||||
- **إدارة الرؤية** للتحكّم في أعضاء الفريق الذين يمكنهم استخدام كل اتصال.
|
||||
- **تعديل أو إزالة** أي اتصال في أي وقت من قائمة Connections.
|
||||
|
||||
يمكن لوكلائك الآن طلب إجابات مستندة من Genie، وتنفيذ SQL على مستودعاتك، واستدعاء دوال Unity Catalog، والبحث في فهارس Vector Search — مع تدفّق النتائج تلقائيًا إلى استدلالهم.
|
||||
|
||||
<Warning>
|
||||
تطبّق Databricks الحوكمة عبر Unity Catalog وUnity AI Gateway: لا يمكن للمستخدم اكتشاف الأدوات واستدعاؤها إلا تلك المصرَّح بها لهوية مساحة عمله. إذا فشل استدعاء أداة، فتأكّد من أن المستخدم المتصل (أو هوية الرمز) يمتلك امتيازات Unity Catalog المطلوبة على Genie Space أو المستودع أو الدالة أو الفهرس. تُنفَّذ بعض استعلامات Genie وSQL بشكل غير متزامن وقد تستغرق لحظة لإرجاع النتائج.
|
||||
</Warning>
|
||||
|
||||
## مزيد من المعلومات
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="خوادم MCP المُدارة من Databricks" icon="layer-group" href="https://docs.databricks.com/aws/en/generative-ai/mcp/managed-mcp">
|
||||
وثائق Databricks الرسمية لخوادم MCP المُدارة Genie وSQL وUnity Catalog Functions وVector Search.
|
||||
</Card>
|
||||
<Card title="خوادم MCP المخصصة في CrewAI" icon="plug" href="/ar/enterprise/guides/custom-mcp-server">
|
||||
تعرّف على كيفية اتصال CrewAI بأي خادم MCP، وهو الأساس الذي يُبنى عليه تكامل Databricks.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Card title="بحاجة إلى مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في تهيئة تكامل Databricks أو في حل المشكلات.
|
||||
</Card>
|
||||
330
docs/edge/ar/enterprise/integrations/github.mdx
Normal file
330
docs/edge/ar/enterprise/integrations/github.mdx
Normal file
@@ -0,0 +1,330 @@
|
||||
---
|
||||
title: تكامل GitHub
|
||||
description: "إدارة المستودعات والمشكلات مع تكامل GitHub لـ CrewAI."
|
||||
icon: "github"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة المستودعات والمشكلات والإصدارات عبر GitHub. أنشئ المشكلات وحدّثها، وأدر الإصدارات، وتتبع تطور المشاريع، وبسّط سير عمل تطوير البرمجيات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل GitHub، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب GitHub بصلاحيات المستودع المناسبة
|
||||
- ربط حساب GitHub الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل GitHub
|
||||
|
||||
### 1. ربط حساب GitHub الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **GitHub** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة المستودعات والمشكلات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="github/create_issue">
|
||||
**الوصف:** إنشاء مشكلة في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
|
||||
- `title` (string, مطلوب): عنوان المشكلة - حدد عنوان المشكلة المراد إنشاؤها.
|
||||
- `body` (string, اختياري): محتوى المشكلة - حدد محتوى نص المشكلة المراد إنشاؤها.
|
||||
- `assignees` (string, اختياري): المكلّفون - حدد اسم (أسماء) تسجيل الدخول في GitHub للمكلّفين كمصفوفة من السلاسل النصية لهذه المشكلة. (مثال: `["octocat"]`).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/update_issue">
|
||||
**الوصف:** تحديث مشكلة في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
|
||||
- `issue_number` (string, مطلوب): رقم المشكلة - حدد رقم المشكلة المراد تحديثها.
|
||||
- `title` (string, مطلوب): عنوان المشكلة - حدد عنوان المشكلة المراد تحديثها.
|
||||
- `body` (string, اختياري): محتوى المشكلة - حدد محتوى نص المشكلة المراد تحديثها.
|
||||
- `assignees` (string, اختياري): المكلّفون - حدد اسم (أسماء) تسجيل الدخول في GitHub للمكلّفين كمصفوفة من السلاسل النصية لهذه المشكلة. (مثال: `["octocat"]`).
|
||||
- `state` (string, اختياري): الحالة - حدد الحالة المحدّثة للمشكلة.
|
||||
- الخيارات: `open`, `closed`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/get_issue_by_number">
|
||||
**الوصف:** الحصول على مشكلة بواسطة الرقم في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
|
||||
- `issue_number` (string, مطلوب): رقم المشكلة - حدد رقم المشكلة المراد جلبها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/lock_issue">
|
||||
**الوصف:** قفل مشكلة في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
|
||||
- `issue_number` (string, مطلوب): رقم المشكلة - حدد رقم المشكلة المراد قفلها.
|
||||
- `lock_reason` (string, مطلوب): سبب القفل - حدد سبب قفل محادثة المشكلة أو طلب السحب.
|
||||
- الخيارات: `off-topic`, `too heated`, `resolved`, `spam`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/search_issue">
|
||||
**الوصف:** البحث عن المشكلات في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
|
||||
- `filter` (object, مطلوب): فلتر بصيغة التعبير العادي المنفصل - OR لمجموعات AND من شروط فردية.
|
||||
```json
|
||||
{
|
||||
"operator": "OR",
|
||||
"conditions": [
|
||||
{
|
||||
"operator": "AND",
|
||||
"conditions": [
|
||||
{
|
||||
"field": "assignee",
|
||||
"operator": "$stringExactlyMatches",
|
||||
"value": "octocat"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
الحقول المتاحة: `assignee`, `creator`, `mentioned`, `labels`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/create_release">
|
||||
**الوصف:** إنشاء إصدار في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
|
||||
- `tag_name` (string, مطلوب): الاسم - حدد اسم وسم الإصدار المراد إنشاؤه. (مثال: "v1.0.0").
|
||||
- `target_commitish` (string, اختياري): الهدف - حدد هدف الإصدار. يمكن أن يكون اسم فرع أو SHA لعملية إيداع. الافتراضي هو الفرع الرئيسي. (مثال: "master").
|
||||
- `body` (string, اختياري): المحتوى - حدد وصفاً لهذا الإصدار.
|
||||
- `draft` (string, اختياري): مسودة - حدد ما إذا كان الإصدار المُنشأ يجب أن يكون مسودة (غير منشور).
|
||||
- الخيارات: `true`, `false`
|
||||
- `prerelease` (string, اختياري): إصدار تجريبي - حدد ما إذا كان الإصدار المُنشأ يجب أن يكون إصداراً تجريبياً.
|
||||
- الخيارات: `true`, `false`
|
||||
- `discussion_category_name` (string, اختياري): اسم فئة المناقشة - إذا حُدد، يتم إنشاء مناقشة من الفئة المحددة وربطها بالإصدار.
|
||||
- `generate_release_notes` (string, اختياري): ملاحظات الإصدار - حدد ما إذا كان يجب إنشاء ملاحظات الإصدار تلقائياً.
|
||||
- الخيارات: `true`, `false`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/update_release">
|
||||
**الوصف:** تحديث إصدار في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
|
||||
- `id` (string, مطلوب): معرّف الإصدار - حدد معرّف الإصدار المراد تحديثه.
|
||||
- `tag_name` (string, اختياري): الاسم - حدد اسم وسم الإصدار المراد تحديثه. (مثال: "v1.0.0").
|
||||
- `target_commitish` (string, اختياري): الهدف - حدد هدف الإصدار. يمكن أن يكون اسم فرع أو SHA لعملية إيداع. الافتراضي هو الفرع الرئيسي. (مثال: "master").
|
||||
- `body` (string, اختياري): المحتوى - حدد وصفاً لهذا الإصدار.
|
||||
- `draft` (string, اختياري): مسودة - حدد ما إذا كان الإصدار يجب أن يكون مسودة (غير منشور).
|
||||
- الخيارات: `true`, `false`
|
||||
- `prerelease` (string, اختياري): إصدار تجريبي - حدد ما إذا كان الإصدار يجب أن يكون إصداراً تجريبياً.
|
||||
- الخيارات: `true`, `false`
|
||||
- `discussion_category_name` (string, اختياري): اسم فئة المناقشة - إذا حُدد، يتم إنشاء مناقشة من الفئة المحددة وربطها بالإصدار.
|
||||
- `generate_release_notes` (string, اختياري): ملاحظات الإصدار - حدد ما إذا كان يجب إنشاء ملاحظات الإصدار تلقائياً.
|
||||
- الخيارات: `true`, `false`
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/get_release_by_id">
|
||||
**الوصف:** الحصول على إصدار بواسطة المعرّف في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
|
||||
- `id` (string, مطلوب): معرّف الإصدار - حدد معرّف الإصدار المراد جلبه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/get_release_by_tag_name">
|
||||
**الوصف:** الحصول على إصدار بواسطة اسم الوسم في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
|
||||
- `tag_name` (string, مطلوب): الاسم - حدد وسم الإصدار المراد جلبه. (مثال: "v1.0.0").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="github/delete_release">
|
||||
**الوصف:** حذف إصدار في GitHub.
|
||||
|
||||
**المعاملات:**
|
||||
- `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
|
||||
- `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
|
||||
- `id` (string, مطلوب): معرّف الإصدار - حدد معرّف الإصدار المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ GitHub
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Github capabilities
|
||||
github_agent = Agent(
|
||||
role="Repository Manager",
|
||||
goal="Manage GitHub repositories, issues, and releases efficiently",
|
||||
backstory="An AI assistant specialized in repository management and issue tracking.",
|
||||
apps=['github'] # All Github actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new issue
|
||||
create_issue_task = Task(
|
||||
description="Create a bug report issue for the login functionality in the main repository",
|
||||
agent=github_agent,
|
||||
expected_output="Issue created successfully with issue number"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[github_agent],
|
||||
tasks=[create_issue_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات GitHub محددة
|
||||
|
||||
```python
|
||||
|
||||
issue_manager = Agent(
|
||||
role="Issue Manager",
|
||||
goal="Create and manage GitHub issues efficiently",
|
||||
backstory="An AI assistant that focuses on issue tracking and management.",
|
||||
apps=['github/create_issue']
|
||||
)
|
||||
|
||||
# Task to manage issue workflow
|
||||
issue_workflow = Task(
|
||||
description="Create a feature request issue and assign it to the development team",
|
||||
agent=issue_manager,
|
||||
expected_output="Feature request issue created and assigned successfully"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[issue_manager],
|
||||
tasks=[issue_workflow]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة الإصدارات
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
release_manager = Agent(
|
||||
role="Release Manager",
|
||||
goal="Manage software releases and versioning",
|
||||
backstory="An experienced release manager who handles version control and release processes.",
|
||||
apps=['github']
|
||||
)
|
||||
|
||||
# Task to create a new release
|
||||
release_task = Task(
|
||||
description="""
|
||||
Create a new release v2.1.0 for the project with:
|
||||
- Auto-generated release notes
|
||||
- Target the main branch
|
||||
- Include a description of new features and bug fixes
|
||||
""",
|
||||
agent=release_manager,
|
||||
expected_output="Release v2.1.0 created successfully with release notes"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[release_manager],
|
||||
tasks=[release_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تتبع المشكلات وإدارتها
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
project_coordinator = Agent(
|
||||
role="Project Coordinator",
|
||||
goal="Track and coordinate project issues and development progress",
|
||||
backstory="An AI assistant that helps coordinate development work and track project progress.",
|
||||
apps=['github']
|
||||
)
|
||||
|
||||
# Complex task involving multiple GitHub operations
|
||||
coordination_task = Task(
|
||||
description="""
|
||||
1. Search for all open issues assigned to the current milestone
|
||||
2. Identify overdue issues and update their priority labels
|
||||
3. Create a weekly progress report issue
|
||||
4. Lock resolved issues that have been inactive for 30 days
|
||||
""",
|
||||
agent=project_coordinator,
|
||||
expected_output="Project coordination completed with progress report and issue management"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[project_coordinator],
|
||||
tasks=[coordination_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل GitHub أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
302
docs/edge/ar/enterprise/integrations/gmail.mdx
Normal file
302
docs/edge/ar/enterprise/integrations/gmail.mdx
Normal file
@@ -0,0 +1,302 @@
|
||||
---
|
||||
title: تكامل Gmail
|
||||
description: "إدارة البريد الإلكتروني وجهات الاتصال مع تكامل Gmail لـ CrewAI."
|
||||
icon: "envelope"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة رسائل البريد الإلكتروني وجهات الاتصال والمسودات عبر Gmail. أرسل رسائل البريد الإلكتروني، وابحث في الرسائل، وأدر جهات الاتصال، وأنشئ المسودات، وبسّط اتصالات البريد الإلكتروني باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Gmail، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Gmail بالصلاحيات المناسبة
|
||||
- ربط حساب Gmail الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Gmail
|
||||
|
||||
### 1. ربط حساب Gmail الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Gmail** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة البريد الإلكتروني وجهات الاتصال
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="gmail/fetch_emails">
|
||||
**الوصف:** استرجاع قائمة بالرسائل.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
|
||||
- `q` (string, اختياري): استعلام بحث لتصفية الرسائل (مثال: 'from:someone@example.com is:unread').
|
||||
- `maxResults` (integer, اختياري): الحد الأقصى لعدد الرسائل المُرجعة (1-500). (الافتراضي: 100)
|
||||
- `pageToken` (string, اختياري): رمز الصفحة لاسترجاع صفحة محددة من النتائج.
|
||||
- `labelIds` (array, اختياري): إرجاع الرسائل ذات التصنيفات التي تطابق جميع معرّفات التصنيف المحددة فقط.
|
||||
- `includeSpamTrash` (boolean, اختياري): تضمين رسائل البريد العشوائي والمحذوفات في النتائج. (الافتراضي: false)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/send_email">
|
||||
**الوصف:** إرسال بريد إلكتروني.
|
||||
|
||||
**المعاملات:**
|
||||
- `to` (string, مطلوب): عنوان البريد الإلكتروني للمستلم.
|
||||
- `subject` (string, مطلوب): سطر موضوع البريد الإلكتروني.
|
||||
- `body` (string, مطلوب): محتوى رسالة البريد الإلكتروني.
|
||||
- `userId` (string, اختياري): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
|
||||
- `cc` (string, اختياري): عناوين نسخة كربونية (مفصولة بفواصل).
|
||||
- `bcc` (string, اختياري): عناوين نسخة كربونية مخفية (مفصولة بفواصل).
|
||||
- `from` (string, اختياري): عنوان المرسل (إذا كان مختلفاً عن المستخدم المصادق عليه).
|
||||
- `replyTo` (string, اختياري): عنوان الرد.
|
||||
- `threadId` (string, اختياري): معرّف السلسلة إذا كان الرد على محادثة موجودة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/delete_email">
|
||||
**الوصف:** حذف بريد إلكتروني بواسطة المعرّف.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه.
|
||||
- `id` (string, مطلوب): معرّف الرسالة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/create_draft">
|
||||
**الوصف:** إنشاء مسودة بريد إلكتروني جديدة.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه.
|
||||
- `message` (object, مطلوب): كائن الرسالة الذي يحتوي على محتوى المسودة.
|
||||
- `raw` (string, مطلوب): رسالة البريد الإلكتروني بترميز base64url.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/get_message">
|
||||
**الوصف:** استرجاع رسالة محددة بواسطة المعرّف.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
|
||||
- `id` (string, مطلوب): معرّف الرسالة المراد استرجاعها.
|
||||
- `format` (string, اختياري): صيغة إرجاع الرسالة. الخيارات: "full", "metadata", "minimal", "raw". (الافتراضي: "full")
|
||||
- `metadataHeaders` (array, اختياري): عند التحديد وكانت الصيغة METADATA، يتم تضمين الترويسات المحددة فقط.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/get_attachment">
|
||||
**الوصف:** استرجاع مرفق رسالة.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
|
||||
- `messageId` (string, مطلوب): معرّف الرسالة التي تحتوي على المرفق.
|
||||
- `id` (string, مطلوب): معرّف المرفق المراد استرجاعه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/fetch_thread">
|
||||
**الوصف:** استرجاع سلسلة بريد إلكتروني محددة بواسطة المعرّف.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
|
||||
- `id` (string, مطلوب): معرّف السلسلة المراد استرجاعها.
|
||||
- `format` (string, اختياري): صيغة إرجاع الرسائل. الخيارات: "full", "metadata", "minimal". (الافتراضي: "full")
|
||||
- `metadataHeaders` (array, اختياري): عند التحديد وكانت الصيغة METADATA، يتم تضمين الترويسات المحددة فقط.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/modify_thread">
|
||||
**الوصف:** تعديل التصنيفات المُطبقة على سلسلة.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
|
||||
- `id` (string, مطلوب): معرّف السلسلة المراد تعديلها.
|
||||
- `addLabelIds` (array, اختياري): قائمة بمعرّفات التصنيفات المراد إضافتها لهذه السلسلة.
|
||||
- `removeLabelIds` (array, اختياري): قائمة بمعرّفات التصنيفات المراد إزالتها من هذه السلسلة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/trash_thread">
|
||||
**الوصف:** نقل سلسلة إلى سلة المحذوفات.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
|
||||
- `id` (string, مطلوب): معرّف السلسلة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="gmail/untrash_thread">
|
||||
**الوصف:** إزالة سلسلة من سلة المحذوفات.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
|
||||
- `id` (string, مطلوب): معرّف السلسلة المراد استعادتها.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Gmail
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Gmail capabilities
|
||||
gmail_agent = Agent(
|
||||
role="Email Manager",
|
||||
goal="Manage email communications and messages efficiently",
|
||||
backstory="An AI assistant specialized in email management and communication.",
|
||||
apps=['gmail'] # All Gmail actions will be available
|
||||
)
|
||||
|
||||
# Task to send a follow-up email
|
||||
send_email_task = Task(
|
||||
description="Send a follow-up email to john@example.com about the project update meeting",
|
||||
agent=gmail_agent,
|
||||
expected_output="Email sent successfully with confirmation"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[gmail_agent],
|
||||
tasks=[send_email_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات Gmail محددة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with specific Gmail actions only
|
||||
email_coordinator = Agent(
|
||||
role="Email Coordinator",
|
||||
goal="Coordinate email communications and manage drafts",
|
||||
backstory="An AI assistant that focuses on email coordination and draft management.",
|
||||
apps=[
|
||||
'gmail/send_email',
|
||||
'gmail/fetch_emails',
|
||||
'gmail/create_draft'
|
||||
]
|
||||
)
|
||||
|
||||
# Task to prepare and send emails
|
||||
email_coordination = Task(
|
||||
description="Search for emails from the marketing team, create a summary draft, and send it to stakeholders",
|
||||
agent=email_coordinator,
|
||||
expected_output="Summary email sent to stakeholders"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[email_coordinator],
|
||||
tasks=[email_coordination]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### البحث في البريد الإلكتروني وتحليله
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with Gmail search and analysis capabilities
|
||||
email_analyst = Agent(
|
||||
role="Email Analyst",
|
||||
goal="Analyze email patterns and provide insights",
|
||||
backstory="An AI assistant that analyzes email data to provide actionable insights.",
|
||||
apps=['gmail/fetch_emails', 'gmail/get_message'] # Specific actions for email analysis
|
||||
)
|
||||
|
||||
# Task to analyze email patterns
|
||||
analysis_task = Task(
|
||||
description="""
|
||||
Search for all unread emails from the last 7 days,
|
||||
categorize them by sender domain,
|
||||
and create a summary report of communication patterns
|
||||
""",
|
||||
agent=email_analyst,
|
||||
expected_output="Email analysis report with communication patterns and recommendations"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[email_analyst],
|
||||
tasks=[analysis_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة السلاسل
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with Gmail thread management capabilities
|
||||
thread_manager = Agent(
|
||||
role="Thread Manager",
|
||||
goal="Organize and manage email threads efficiently",
|
||||
backstory="An AI assistant that specializes in email thread organization and management.",
|
||||
apps=[
|
||||
'gmail/fetch_thread',
|
||||
'gmail/modify_thread',
|
||||
'gmail/trash_thread'
|
||||
]
|
||||
)
|
||||
|
||||
# Task to organize email threads
|
||||
thread_task = Task(
|
||||
description="""
|
||||
1. Fetch all threads from the last month
|
||||
2. Apply appropriate labels to organize threads by project
|
||||
3. Archive or trash threads that are no longer relevant
|
||||
""",
|
||||
agent=thread_manager,
|
||||
expected_output="Email threads organized with appropriate labels and cleanup completed"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[thread_manager],
|
||||
tasks=[thread_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Gmail أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
366
docs/edge/ar/enterprise/integrations/google_calendar.mdx
Normal file
366
docs/edge/ar/enterprise/integrations/google_calendar.mdx
Normal file
@@ -0,0 +1,366 @@
|
||||
---
|
||||
title: تكامل Google Calendar
|
||||
description: "إدارة الأحداث والجداول الزمنية مع تكامل Google Calendar لـ CrewAI."
|
||||
icon: "calendar"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة أحداث التقويم والجداول الزمنية والتوفر عبر Google Calendar. أنشئ الأحداث وحدّثها، وأدر الحضور، وتحقق من التوفر، وبسّط سير عمل الجدولة باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Google Calendar، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Google مع إمكانية الوصول إلى Google Calendar
|
||||
- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Google Calendar
|
||||
|
||||
### 1. ربط حساب Google الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Google Calendar** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى التقويم
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="google_calendar/get_availability">
|
||||
**الوصف:** الحصول على توفر التقويم (معلومات مشغول/متاح).
|
||||
|
||||
**المعاملات:**
|
||||
- `timeMin` (string, مطلوب): وقت البداية (بصيغة RFC3339)
|
||||
- `timeMax` (string, مطلوب): وقت النهاية (بصيغة RFC3339)
|
||||
- `items` (array, مطلوب): معرّفات التقاويم المراد التحقق منها
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "calendar_id"
|
||||
}
|
||||
]
|
||||
```
|
||||
- `timeZone` (string, اختياري): المنطقة الزمنية المستخدمة في الاستجابة. الافتراضي هو UTC.
|
||||
- `groupExpansionMax` (integer, اختياري): الحد الأقصى لعدد معرّفات التقاويم لمجموعة واحدة. الحد الأقصى: 100
|
||||
- `calendarExpansionMax` (integer, اختياري): الحد الأقصى لعدد التقاويم لتقديم معلومات التوفر. الحد الأقصى: 50
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_calendar/create_event">
|
||||
**الوصف:** إنشاء حدث جديد في التقويم المحدد.
|
||||
|
||||
**المعاملات:**
|
||||
- `calendarId` (string, مطلوب): معرّف التقويم (استخدم 'primary' للتقويم الرئيسي)
|
||||
- `summary` (string, مطلوب): عنوان/ملخص الحدث
|
||||
- `start_dateTime` (string, مطلوب): وقت البداية بصيغة RFC3339 (مثال: 2024-01-20T10:00:00-07:00)
|
||||
- `end_dateTime` (string, مطلوب): وقت النهاية بصيغة RFC3339
|
||||
- `description` (string, اختياري): وصف الحدث
|
||||
- `timeZone` (string, اختياري): المنطقة الزمنية (مثال: America/Los_Angeles)
|
||||
- `location` (string, اختياري): الموقع الجغرافي للحدث كنص حر.
|
||||
- `attendees` (array, اختياري): قائمة الحضور للحدث.
|
||||
```json
|
||||
[
|
||||
{
|
||||
"email": "attendee@example.com",
|
||||
"displayName": "Attendee Name",
|
||||
"optional": false
|
||||
}
|
||||
]
|
||||
```
|
||||
- `reminders` (object, اختياري): معلومات حول تذكيرات الحدث.
|
||||
```json
|
||||
{
|
||||
"useDefault": true,
|
||||
"overrides": [
|
||||
{
|
||||
"method": "email",
|
||||
"minutes": 15
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
- `conferenceData` (object, اختياري): المعلومات المتعلقة بالمؤتمر، مثل تفاصيل مؤتمر Google Meet.
|
||||
```json
|
||||
{
|
||||
"createRequest": {
|
||||
"requestId": "unique-request-id",
|
||||
"conferenceSolutionKey": {
|
||||
"type": "hangoutsMeet"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
- `visibility` (string, اختياري): ظهور الحدث. الخيارات: default, public, private, confidential. الافتراضي: default
|
||||
- `transparency` (string, اختياري): ما إذا كان الحدث يحجب الوقت في التقويم. الخيارات: opaque, transparent. الافتراضي: opaque
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_calendar/view_events">
|
||||
**الوصف:** استرجاع الأحداث للتقويم المحدد.
|
||||
|
||||
**المعاملات:**
|
||||
- `calendarId` (string, مطلوب): معرّف التقويم (استخدم 'primary' للتقويم الرئيسي)
|
||||
- `timeMin` (string, اختياري): الحد الأدنى للأحداث (بصيغة RFC3339)
|
||||
- `timeMax` (string, اختياري): الحد الأعلى للأحداث (بصيغة RFC3339)
|
||||
- `maxResults` (integer, اختياري): الحد الأقصى لعدد الأحداث (الافتراضي 10). الحد الأدنى: 1، الحد الأقصى: 2500
|
||||
- `orderBy` (string, اختياري): ترتيب الأحداث في النتيجة. الخيارات: startTime, updated. الافتراضي: startTime
|
||||
- `singleEvents` (boolean, اختياري): ما إذا كان يجب توسيع الأحداث المتكررة إلى نُسخ فردية. الافتراضي: true
|
||||
- `showDeleted` (boolean, اختياري): ما إذا كان يجب تضمين الأحداث المحذوفة. الافتراضي: false
|
||||
- `showHiddenInvitations` (boolean, اختياري): ما إذا كان يجب تضمين الدعوات المخفية. الافتراضي: false
|
||||
- `q` (string, اختياري): مصطلحات بحث نصية حرة للعثور على الأحداث المطابقة في أي حقل.
|
||||
- `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
|
||||
- `timeZone` (string, اختياري): المنطقة الزمنية المستخدمة في الاستجابة.
|
||||
- `updatedMin` (string, اختياري): الحد الأدنى لوقت آخر تعديل للحدث (بصيغة RFC3339) للتصفية.
|
||||
- `iCalUID` (string, اختياري): يحدد معرّف حدث بصيغة iCalendar ليتم تقديمه في الاستجابة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_calendar/update_event">
|
||||
**الوصف:** تحديث حدث موجود.
|
||||
|
||||
**المعاملات:**
|
||||
- `calendarId` (string, مطلوب): معرّف التقويم
|
||||
- `eventId` (string, مطلوب): معرّف الحدث المراد تحديثه
|
||||
- `summary` (string, اختياري): عنوان الحدث المحدّث
|
||||
- `description` (string, اختياري): وصف الحدث المحدّث
|
||||
- `start_dateTime` (string, اختياري): وقت البداية المحدّث
|
||||
- `end_dateTime` (string, اختياري): وقت النهاية المحدّث
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_calendar/delete_event">
|
||||
**الوصف:** حذف حدث محدد.
|
||||
|
||||
**المعاملات:**
|
||||
- `calendarId` (string, مطلوب): معرّف التقويم
|
||||
- `eventId` (string, مطلوب): معرّف الحدث المراد حذفه
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_calendar/view_calendar_list">
|
||||
**الوصف:** استرجاع قائمة تقاويم المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `maxResults` (integer, اختياري): الحد الأقصى لعدد الإدخالات في صفحة نتائج واحدة. الحد الأدنى: 1
|
||||
- `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
|
||||
- `showDeleted` (boolean, اختياري): ما إذا كان يجب تضمين إدخالات قائمة التقويم المحذوفة. الافتراضي: false
|
||||
- `showHidden` (boolean, اختياري): ما إذا كان يجب عرض الإدخالات المخفية. الافتراضي: false
|
||||
- `minAccessRole` (string, اختياري): الحد الأدنى لدور الوصول للمستخدم. الخيارات: freeBusyReader, owner, reader, writer
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي للتقويم
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Google Calendar capabilities
|
||||
calendar_agent = Agent(
|
||||
role="Schedule Manager",
|
||||
goal="Manage calendar events and scheduling efficiently",
|
||||
backstory="An AI assistant specialized in calendar management and scheduling coordination.",
|
||||
apps=['google_calendar'] # All Google Calendar actions will be available
|
||||
)
|
||||
|
||||
# Task to create a meeting
|
||||
create_meeting_task = Task(
|
||||
description="Create a team standup meeting for tomorrow at 9 AM with the development team",
|
||||
agent=calendar_agent,
|
||||
expected_output="Meeting created successfully with Google Meet link"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[calendar_agent],
|
||||
tasks=[create_meeting_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات التقويم المحددة
|
||||
|
||||
```python
|
||||
meeting_coordinator = Agent(
|
||||
role="Meeting Coordinator",
|
||||
goal="Coordinate meetings and check availability",
|
||||
backstory="An AI assistant that focuses on meeting scheduling and availability management.",
|
||||
apps=['google_calendar/create_event', 'google_calendar/get_availability']
|
||||
)
|
||||
|
||||
# Task to schedule a meeting with availability check
|
||||
schedule_meeting = Task(
|
||||
description="Check availability for next week and schedule a project review meeting with stakeholders",
|
||||
agent=meeting_coordinator,
|
||||
expected_output="Meeting scheduled after checking availability of all participants"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[meeting_coordinator],
|
||||
tasks=[schedule_meeting]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة الأحداث وتحديثاتها
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
event_manager = Agent(
|
||||
role="Event Manager",
|
||||
goal="Manage and update calendar events efficiently",
|
||||
backstory="An experienced event manager who handles event logistics and updates.",
|
||||
apps=['google_calendar']
|
||||
)
|
||||
|
||||
# Task to manage event updates
|
||||
event_management = Task(
|
||||
description="""
|
||||
1. List all events for this week
|
||||
2. Update any events that need location changes to include video conference links
|
||||
3. Check availability for upcoming meetings
|
||||
""",
|
||||
agent=event_manager,
|
||||
expected_output="Weekly events updated with proper locations and availability checked"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[event_manager],
|
||||
tasks=[event_management]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### التوفر وإدارة التقويم
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
availability_coordinator = Agent(
|
||||
role="Availability Coordinator",
|
||||
goal="Coordinate availability and manage calendars for scheduling",
|
||||
backstory="An AI assistant that specializes in availability management and calendar coordination.",
|
||||
apps=['google_calendar']
|
||||
)
|
||||
|
||||
# Task to coordinate availability
|
||||
availability_task = Task(
|
||||
description="""
|
||||
1. Get the list of available calendars
|
||||
2. Check availability for all calendars next Friday afternoon
|
||||
3. Create a team meeting for the first available 2-hour slot
|
||||
4. Include Google Meet link and send invitations
|
||||
""",
|
||||
agent=availability_coordinator,
|
||||
expected_output="Team meeting scheduled based on availability with all team members invited"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[availability_coordinator],
|
||||
tasks=[availability_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### سير عمل الجدولة الآلية
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
scheduling_automator = Agent(
|
||||
role="Scheduling Automator",
|
||||
goal="Automate scheduling workflows and calendar management",
|
||||
backstory="An AI assistant that automates complex scheduling scenarios and calendar workflows.",
|
||||
apps=['google_calendar']
|
||||
)
|
||||
|
||||
# Complex scheduling automation task
|
||||
automation_task = Task(
|
||||
description="""
|
||||
1. List all upcoming events for the next two weeks
|
||||
2. Identify any scheduling conflicts or back-to-back meetings
|
||||
3. Suggest optimal meeting times by checking availability
|
||||
4. Create buffer time between meetings where needed
|
||||
5. Update event descriptions with agenda items and meeting links
|
||||
""",
|
||||
agent=scheduling_automator,
|
||||
expected_output="Calendar optimized with resolved conflicts, buffer times, and updated meeting details"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[scheduling_automator],
|
||||
tasks=[automation_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء المصادقة**
|
||||
|
||||
- تأكد من أن حساب Google الخاص بك لديه الصلاحيات اللازمة للوصول إلى التقويم
|
||||
- تحقق من أن اتصال OAuth يتضمن جميع النطاقات المطلوبة لـ Google Calendar API
|
||||
- تحقق مما إذا كانت إعدادات مشاركة التقويم تسمح بمستوى الوصول المطلوب
|
||||
|
||||
**مشاكل إنشاء الأحداث**
|
||||
|
||||
- تحقق من صحة صيغ الوقت (صيغة RFC3339)
|
||||
- تأكد من صحة صيغة عناوين البريد الإلكتروني للحضور
|
||||
- تحقق من وجود التقويم المستهدف وإمكانية الوصول إليه
|
||||
- تحقق من صحة تحديد المناطق الزمنية
|
||||
|
||||
**التوفر وتعارضات الوقت**
|
||||
|
||||
- استخدم صيغة RFC3339 المناسبة لنطاقات الوقت عند التحقق من التوفر
|
||||
- تأكد من اتساق المناطق الزمنية عبر جميع العمليات
|
||||
- تحقق من صحة معرّفات التقاويم عند التحقق من تقاويم متعددة
|
||||
|
||||
**تحديث الأحداث وحذفها**
|
||||
|
||||
- تحقق من صحة معرّفات الأحداث ووجودها
|
||||
- تأكد من أن لديك صلاحيات التحرير للأحداث
|
||||
- تحقق من أن ملكية التقويم تسمح بالتعديلات
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Calendar
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
493
docs/edge/ar/enterprise/integrations/google_contacts.mdx
Normal file
493
docs/edge/ar/enterprise/integrations/google_contacts.mdx
Normal file
@@ -0,0 +1,493 @@
|
||||
---
|
||||
title: تكامل Google Contacts
|
||||
description: "إدارة جهات الاتصال والدليل مع تكامل Google Contacts لـ CrewAI."
|
||||
icon: "address-book"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة جهات الاتصال ومعلومات الدليل عبر Google Contacts. يمكنك الوصول إلى جهات الاتصال الشخصية، والبحث في أشخاص الدليل، وإنشاء معلومات الاتصال وتحديثها، وإدارة مجموعات جهات الاتصال باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Google Contacts، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Google مع إمكانية الوصول إلى Google Contacts
|
||||
- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Google Contacts
|
||||
|
||||
### 1. ربط حساب Google الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Google Contacts** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى جهات الاتصال والدليل
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="google_contacts/get_contacts">
|
||||
**الوصف:** استرجاع جهات اتصال المستخدم من Google Contacts.
|
||||
|
||||
**المعاملات:**
|
||||
- `pageSize` (integer, اختياري): عدد جهات الاتصال المراد إرجاعها (الحد الأقصى 1000). الحد الأدنى: 1، الحد الأقصى: 1000
|
||||
- `pageToken` (string, اختياري): رمز الصفحة المراد استرجاعها.
|
||||
- `personFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'names,emailAddresses,phoneNumbers'). الافتراضي: names,emailAddresses,phoneNumbers
|
||||
- `requestSyncToken` (boolean, اختياري): ما إذا كان يجب أن تتضمن الاستجابة رمز مزامنة. الافتراضي: false
|
||||
- `sortOrder` (string, اختياري): ترتيب الفرز للاتصالات. الخيارات: LAST_MODIFIED_ASCENDING, LAST_MODIFIED_DESCENDING, FIRST_NAME_ASCENDING, LAST_NAME_ASCENDING
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/search_contacts">
|
||||
**الوصف:** البحث عن جهات اتصال باستخدام سلسلة استعلام.
|
||||
|
||||
**المعاملات:**
|
||||
- `query` (string, مطلوب): سلسلة استعلام البحث
|
||||
- `readMask` (string, مطلوب): الحقول المراد قراءتها (مثال: 'names,emailAddresses,phoneNumbers')
|
||||
- `pageSize` (integer, اختياري): عدد النتائج المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 30
|
||||
- `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
|
||||
- `sources` (array, اختياري): المصادر المراد البحث فيها. الخيارات: READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_PROFILE. الافتراضي: READ_SOURCE_TYPE_CONTACT
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/list_directory_people">
|
||||
**الوصف:** عرض قائمة الأشخاص في دليل المستخدم المصادق عليه.
|
||||
|
||||
**المعاملات:**
|
||||
- `sources` (array, مطلوب): مصادر الدليل المراد البحث فيها. الخيارات: DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE, DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT. الافتراضي: DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE
|
||||
- `pageSize` (integer, اختياري): عدد الأشخاص المراد إرجاعهم. الحد الأدنى: 1، الحد الأقصى: 1000
|
||||
- `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
|
||||
- `readMask` (string, اختياري): الحقول المراد قراءتها (مثال: 'names,emailAddresses')
|
||||
- `requestSyncToken` (boolean, اختياري): ما إذا كان يجب أن تتضمن الاستجابة رمز مزامنة. الافتراضي: false
|
||||
- `mergeSources` (array, اختياري): بيانات إضافية لدمجها في استجابات أشخاص الدليل. الخيارات: CONTACT
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/search_directory_people">
|
||||
**الوصف:** البحث عن أشخاص في الدليل.
|
||||
|
||||
**المعاملات:**
|
||||
- `query` (string, مطلوب): استعلام البحث
|
||||
- `sources` (string, مطلوب): مصادر الدليل (استخدم 'DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE')
|
||||
- `pageSize` (integer, اختياري): عدد النتائج المراد إرجاعها
|
||||
- `readMask` (string, اختياري): الحقول المراد قراءتها
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/list_other_contacts">
|
||||
**الوصف:** عرض جهات الاتصال الأخرى (غير الموجودة في جهات الاتصال الشخصية).
|
||||
|
||||
**المعاملات:**
|
||||
- `pageSize` (integer, اختياري): عدد جهات الاتصال المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 1000
|
||||
- `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
|
||||
- `readMask` (string, اختياري): الحقول المراد قراءتها
|
||||
- `requestSyncToken` (boolean, اختياري): ما إذا كان يجب أن تتضمن الاستجابة رمز مزامنة. الافتراضي: false
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/search_other_contacts">
|
||||
**الوصف:** البحث في جهات الاتصال الأخرى.
|
||||
|
||||
**المعاملات:**
|
||||
- `query` (string, مطلوب): استعلام البحث
|
||||
- `readMask` (string, مطلوب): الحقول المراد قراءتها (مثال: 'names,emailAddresses')
|
||||
- `pageSize` (integer, اختياري): عدد النتائج
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/get_person">
|
||||
**الوصف:** الحصول على معلومات الاتصال لشخص واحد بواسطة اسم المورد.
|
||||
|
||||
**المعاملات:**
|
||||
- `resourceName` (string, مطلوب): اسم المورد للشخص المراد الحصول عليه (مثال: 'people/c123456789')
|
||||
- `personFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'names,emailAddresses,phoneNumbers'). الافتراضي: names,emailAddresses,phoneNumbers
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/create_contact">
|
||||
**الوصف:** إنشاء جهة اتصال جديدة في دفتر عناوين المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `names` (array, اختياري): أسماء الشخص
|
||||
```json
|
||||
[
|
||||
{
|
||||
"givenName": "John",
|
||||
"familyName": "Doe",
|
||||
"displayName": "John Doe"
|
||||
}
|
||||
]
|
||||
```
|
||||
- `emailAddresses` (array, اختياري): عناوين البريد الإلكتروني
|
||||
```json
|
||||
[
|
||||
{
|
||||
"value": "john.doe@example.com",
|
||||
"type": "work"
|
||||
}
|
||||
]
|
||||
```
|
||||
- `phoneNumbers` (array, اختياري): أرقام الهاتف
|
||||
```json
|
||||
[
|
||||
{
|
||||
"value": "+1234567890",
|
||||
"type": "mobile"
|
||||
}
|
||||
]
|
||||
```
|
||||
- `addresses` (array, اختياري): العناوين البريدية
|
||||
```json
|
||||
[
|
||||
{
|
||||
"formattedValue": "123 Main St, City, State 12345",
|
||||
"type": "home"
|
||||
}
|
||||
]
|
||||
```
|
||||
- `organizations` (array, اختياري): المؤسسات/الشركات
|
||||
```json
|
||||
[
|
||||
{
|
||||
"name": "Company Name",
|
||||
"title": "Job Title",
|
||||
"type": "work"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/update_contact">
|
||||
**الوصف:** تحديث معلومات جهة اتصال موجودة.
|
||||
|
||||
**المعاملات:**
|
||||
- `resourceName` (string, مطلوب): اسم المورد للشخص المراد تحديثه (مثال: 'people/c123456789')
|
||||
- `updatePersonFields` (string, مطلوب): الحقول المراد تحديثها (مثال: 'names,emailAddresses,phoneNumbers')
|
||||
- `names` (array, اختياري): أسماء الشخص
|
||||
- `emailAddresses` (array, اختياري): عناوين البريد الإلكتروني
|
||||
- `phoneNumbers` (array, اختياري): أرقام الهاتف
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/delete_contact">
|
||||
**الوصف:** حذف جهة اتصال من دفتر عناوين المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `resourceName` (string, مطلوب): اسم المورد للشخص المراد حذفه (مثال: 'people/c123456789')
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/batch_get_people">
|
||||
**الوصف:** الحصول على معلومات عن عدة أشخاص في طلب واحد.
|
||||
|
||||
**المعاملات:**
|
||||
- `resourceNames` (array, مطلوب): أسماء موارد الأشخاص المراد الحصول عليهم. الحد الأقصى: 200 عنصر
|
||||
- `personFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'names,emailAddresses,phoneNumbers'). الافتراضي: names,emailAddresses,phoneNumbers
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/list_contact_groups">
|
||||
**الوصف:** عرض مجموعات جهات اتصال المستخدم (التصنيفات).
|
||||
|
||||
**المعاملات:**
|
||||
- `pageSize` (integer, اختياري): عدد مجموعات جهات الاتصال المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 1000
|
||||
- `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
|
||||
- `groupFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'name,memberCount,clientData'). الافتراضي: name,memberCount
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/get_contact_group">
|
||||
**الوصف:** الحصول على مجموعة جهات اتصال محددة بواسطة اسم المورد.
|
||||
|
||||
**المعاملات:**
|
||||
- `resourceName` (string, مطلوب): اسم المورد لمجموعة جهات الاتصال (مثال: 'contactGroups/myContactGroup')
|
||||
- `maxMembers` (integer, اختياري): الحد الأقصى لعدد الأعضاء المراد تضمينهم. الحد الأدنى: 0، الحد الأقصى: 20000
|
||||
- `groupFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'name,memberCount,clientData'). الافتراضي: name,memberCount
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/create_contact_group">
|
||||
**الوصف:** إنشاء مجموعة جهات اتصال جديدة (تصنيف).
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, مطلوب): اسم مجموعة جهات الاتصال
|
||||
- `clientData` (array, اختياري): بيانات خاصة بالعميل
|
||||
```json
|
||||
[
|
||||
{
|
||||
"key": "data_key",
|
||||
"value": "data_value"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/update_contact_group">
|
||||
**الوصف:** تحديث معلومات مجموعة جهات اتصال.
|
||||
|
||||
**المعاملات:**
|
||||
- `resourceName` (string, مطلوب): اسم المورد لمجموعة جهات الاتصال (مثال: 'contactGroups/myContactGroup')
|
||||
- `name` (string, مطلوب): اسم مجموعة جهات الاتصال
|
||||
- `clientData` (array, اختياري): بيانات خاصة بالعميل
|
||||
```json
|
||||
[
|
||||
{
|
||||
"key": "data_key",
|
||||
"value": "data_value"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_contacts/delete_contact_group">
|
||||
**الوصف:** حذف مجموعة جهات اتصال.
|
||||
|
||||
**المعاملات:**
|
||||
- `resourceName` (string, مطلوب): اسم المورد لمجموعة جهات الاتصال المراد حذفها (مثال: 'contactGroups/myContactGroup')
|
||||
- `deleteContacts` (boolean, اختياري): ما إذا كان يجب حذف جهات الاتصال في المجموعة أيضاً. الافتراضي: false
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Google Contacts
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Google Contacts capabilities
|
||||
contacts_agent = Agent(
|
||||
role="Contact Manager",
|
||||
goal="Manage contacts and directory information efficiently",
|
||||
backstory="An AI assistant specialized in contact management and directory operations.",
|
||||
apps=['google_contacts'] # All Google Contacts actions will be available
|
||||
)
|
||||
|
||||
# Task to retrieve and organize contacts
|
||||
contact_management_task = Task(
|
||||
description="Retrieve all contacts and organize them by company affiliation",
|
||||
agent=contacts_agent,
|
||||
expected_output="Contacts retrieved and organized by company with summary report"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[contacts_agent],
|
||||
tasks=[contact_management_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### البحث في الدليل وإدارته
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
directory_manager = Agent(
|
||||
role="Directory Manager",
|
||||
goal="Search and manage directory people and contacts",
|
||||
backstory="An AI assistant that specializes in directory management and people search.",
|
||||
apps=[
|
||||
'google_contacts/search_directory_people',
|
||||
'google_contacts/list_directory_people',
|
||||
'google_contacts/search_contacts'
|
||||
]
|
||||
)
|
||||
|
||||
# Task to search and manage directory
|
||||
directory_task = Task(
|
||||
description="Search for team members in the company directory and create a team contact list",
|
||||
agent=directory_manager,
|
||||
expected_output="Team directory compiled with contact information"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[directory_manager],
|
||||
tasks=[directory_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إنشاء جهات الاتصال وتحديثاتها
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
contact_curator = Agent(
|
||||
role="Contact Curator",
|
||||
goal="Create and update contact information systematically",
|
||||
backstory="An AI assistant that maintains accurate and up-to-date contact information.",
|
||||
apps=['google_contacts']
|
||||
)
|
||||
|
||||
# Task to create and update contacts
|
||||
curation_task = Task(
|
||||
description="""
|
||||
1. Search for existing contacts related to new business partners
|
||||
2. Create new contacts for partners not in the system
|
||||
3. Update existing contact information with latest details
|
||||
4. Organize contacts into appropriate groups
|
||||
""",
|
||||
agent=contact_curator,
|
||||
expected_output="Contact database updated with new partners and organized groups"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[contact_curator],
|
||||
tasks=[curation_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة مجموعات جهات الاتصال
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
group_organizer = Agent(
|
||||
role="Contact Group Organizer",
|
||||
goal="Organize contacts into meaningful groups and categories",
|
||||
backstory="An AI assistant that specializes in contact organization and group management.",
|
||||
apps=['google_contacts']
|
||||
)
|
||||
|
||||
# Task to organize contact groups
|
||||
organization_task = Task(
|
||||
description="""
|
||||
1. List all existing contact groups
|
||||
2. Analyze contact distribution across groups
|
||||
3. Create new groups for better organization
|
||||
4. Move contacts to appropriate groups based on their information
|
||||
""",
|
||||
agent=group_organizer,
|
||||
expected_output="Contacts organized into logical groups with improved structure"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[group_organizer],
|
||||
tasks=[organization_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة جهات الاتصال الشاملة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
contact_specialist = Agent(
|
||||
role="Contact Management Specialist",
|
||||
goal="Provide comprehensive contact management across all sources",
|
||||
backstory="An AI assistant that handles all aspects of contact management including personal, directory, and other contacts.",
|
||||
apps=['google_contacts']
|
||||
)
|
||||
|
||||
# Complex contact management task
|
||||
comprehensive_task = Task(
|
||||
description="""
|
||||
1. Retrieve contacts from all sources (personal, directory, other)
|
||||
2. Search for duplicate contacts and merge information
|
||||
3. Update outdated contact information
|
||||
4. Create missing contacts for important stakeholders
|
||||
5. Organize contacts into meaningful groups
|
||||
6. Generate a comprehensive contact report
|
||||
""",
|
||||
agent=contact_specialist,
|
||||
expected_output="Complete contact management performed with unified contact database and detailed report"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[contact_specialist],
|
||||
tasks=[comprehensive_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء الصلاحيات**
|
||||
|
||||
- تأكد من أن حساب Google الخاص بك لديه الصلاحيات المناسبة للوصول إلى جهات الاتصال
|
||||
- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة لـ Google Contacts API
|
||||
- تحقق من منح صلاحيات الوصول للدليل لجهات اتصال المؤسسة
|
||||
|
||||
**مشاكل صيغة اسم المورد**
|
||||
|
||||
- تأكد من أن أسماء الموارد تتبع الصيغة الصحيحة (مثال: 'people/c123456789' لجهات الاتصال)
|
||||
- تحقق من أن أسماء موارد مجموعات جهات الاتصال تستخدم الصيغة 'contactGroups/groupId'
|
||||
- تأكد من وجود أسماء الموارد وإمكانية الوصول إليها
|
||||
|
||||
**مشاكل البحث والاستعلام**
|
||||
|
||||
- تأكد من صحة صيغة استعلامات البحث وعدم كونها فارغة
|
||||
- استخدم حقول readMask المناسبة للبيانات التي تحتاجها
|
||||
- تحقق من صحة تحديد مصادر البحث (جهات اتصال مقابل ملفات تعريف)
|
||||
|
||||
**إنشاء جهات الاتصال وتحديثاتها**
|
||||
|
||||
- تأكد من توفير الحقول المطلوبة عند إنشاء جهات الاتصال
|
||||
- تحقق من صحة صيغة عناوين البريد الإلكتروني وأرقام الهاتف
|
||||
- تأكد من أن معامل updatePersonFields يتضمن جميع الحقول التي يتم تحديثها
|
||||
|
||||
**مشاكل الوصول إلى الدليل**
|
||||
|
||||
- تأكد من أن لديك الصلاحيات المناسبة للوصول إلى دليل المؤسسة
|
||||
- تحقق من صحة تحديد مصادر الدليل
|
||||
- تأكد من أن مؤسستك تسمح بالوصول عبر API إلى معلومات الدليل
|
||||
|
||||
**الترقيم والحدود**
|
||||
|
||||
- انتبه لحدود حجم الصفحة (تختلف حسب نقطة النهاية)
|
||||
- استخدم pageToken للترقيم عبر مجموعات النتائج الكبيرة
|
||||
- احترم حدود معدل API وطبّق تأخيرات مناسبة
|
||||
|
||||
**مجموعات جهات الاتصال والتنظيم**
|
||||
|
||||
- تأكد من أن أسماء مجموعات جهات الاتصال فريدة عند إنشاء مجموعات جديدة
|
||||
- تحقق من وجود جهات الاتصال قبل إضافتها إلى المجموعات
|
||||
- تأكد من أن لديك صلاحيات تعديل مجموعات جهات الاتصال
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Contacts
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
550
docs/edge/ar/enterprise/integrations/google_docs.mdx
Normal file
550
docs/edge/ar/enterprise/integrations/google_docs.mdx
Normal file
@@ -0,0 +1,550 @@
|
||||
---
|
||||
title: تكامل Google Docs
|
||||
description: "إنشاء المستندات وتحريرها مع تكامل Google Docs لـ CrewAI."
|
||||
icon: "file-lines"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إنشاء وتحرير وإدارة مستندات Google Docs مع معالجة النصوص والتنسيق. أتمت إنشاء المستندات، وأدرج النصوص واستبدلها، وأدر نطاقات المحتوى، وبسّط سير عمل المستندات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Google Docs، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Google مع إمكانية الوصول إلى Google Docs
|
||||
- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Google Docs
|
||||
|
||||
### 1. ربط حساب Google الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Google Docs** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى المستندات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="google_docs/create_document">
|
||||
**الوصف:** إنشاء مستند Google جديد.
|
||||
|
||||
**المعاملات:**
|
||||
- `title` (string, اختياري): عنوان المستند الجديد.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/get_document">
|
||||
**الوصف:** الحصول على محتويات وبيانات وصفية لمستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند المراد استرجاعه.
|
||||
- `includeTabsContent` (boolean, اختياري): ما إذا كان يجب تضمين محتوى علامات التبويب. الافتراضي هو `false`.
|
||||
- `suggestionsViewMode` (string, اختياري): وضع عرض الاقتراحات المراد تطبيقه. القيم: `DEFAULT_FOR_CURRENT_ACCESS`, `PREVIEW_SUGGESTIONS_ACCEPTED`, `PREVIEW_WITHOUT_SUGGESTIONS`. الافتراضي: `DEFAULT_FOR_CURRENT_ACCESS`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/batch_update">
|
||||
**الوصف:** تطبيق تحديث واحد أو أكثر على مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
|
||||
- `requests` (array, مطلوب): قائمة بالتحديثات المراد تطبيقها على المستند.
|
||||
- `writeControl` (object, اختياري): يوفر التحكم في كيفية تنفيذ طلبات الكتابة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/insert_text">
|
||||
**الوصف:** إدراج نص في مستند Google في موقع محدد.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
|
||||
- `text` (string, مطلوب): النص المراد إدراجه.
|
||||
- `index` (integer, اختياري): الفهرس القائم على الصفر حيث يتم إدراج النص. الافتراضي هو `1`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/replace_text">
|
||||
**الوصف:** استبدال جميع نُسخ النص في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
|
||||
- `containsText` (string, مطلوب): النص المراد البحث عنه واستبداله.
|
||||
- `replaceText` (string, مطلوب): النص البديل.
|
||||
- `matchCase` (boolean, اختياري): ما إذا كان البحث يجب أن يراعي حالة الأحرف. الافتراضي هو `false`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/delete_content_range">
|
||||
**الوصف:** حذف المحتوى من نطاق محدد في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
|
||||
- `startIndex` (integer, مطلوب): فهرس بداية النطاق المراد حذفه.
|
||||
- `endIndex` (integer, مطلوب): فهرس نهاية النطاق المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/insert_page_break">
|
||||
**الوصف:** إدراج فاصل صفحة في موقع محدد في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
|
||||
- `index` (integer, اختياري): الفهرس القائم على الصفر حيث يتم إدراج فاصل الصفحة. الافتراضي هو `1`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/create_named_range">
|
||||
**الوصف:** إنشاء نطاق مسمّى في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
|
||||
- `name` (string, مطلوب): اسم النطاق المسمّى.
|
||||
- `startIndex` (integer, مطلوب): فهرس بداية النطاق.
|
||||
- `endIndex` (integer, مطلوب): فهرس نهاية النطاق.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/create_document_with_content">
|
||||
**الوصف:** إنشاء مستند Google جديد مع محتوى في إجراء واحد.
|
||||
|
||||
**المعاملات:**
|
||||
- `title` (string, مطلوب): عنوان المستند الجديد.
|
||||
- `content` (string, اختياري): المحتوى النصي المراد إدراجه في المستند. استخدم `\n` لفقرات جديدة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/append_text">
|
||||
**الوصف:** إلحاق نص بنهاية مستند Google. يُدرج تلقائياً في نهاية المستند دون الحاجة لتحديد فهرس.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `text` (string, مطلوب): النص المراد إلحاقه بنهاية المستند. استخدم `\n` لفقرات جديدة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/set_text_bold">
|
||||
**الوصف:** جعل النص غامقاً أو إزالة التنسيق الغامق في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
|
||||
- `bold` (boolean, مطلوب): عيّن `true` لجعله غامقاً، `false` لإزالة الغامق.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/set_text_italic">
|
||||
**الوصف:** جعل النص مائلاً أو إزالة التنسيق المائل في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
|
||||
- `italic` (boolean, مطلوب): عيّن `true` لجعله مائلاً، `false` لإزالة المائل.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/set_text_underline">
|
||||
**الوصف:** إضافة أو إزالة تنسيق التسطير من النص في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
|
||||
- `underline` (boolean, مطلوب): عيّن `true` للتسطير، `false` لإزالة التسطير.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/set_text_strikethrough">
|
||||
**الوصف:** إضافة أو إزالة تنسيق يتوسطه خط من النص في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
|
||||
- `strikethrough` (boolean, مطلوب): عيّن `true` لإضافة يتوسطه خط، `false` للإزالة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/set_font_size">
|
||||
**الوصف:** تغيير حجم خط النص في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
|
||||
- `fontSize` (number, مطلوب): حجم الخط بالنقاط. الأحجام الشائعة: 10, 11, 12, 14, 16, 18, 24, 36.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/set_text_color">
|
||||
**الوصف:** تغيير لون النص باستخدام قيم RGB (مقياس 0-1) في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
|
||||
- `red` (number, مطلوب): مكوّن الأحمر (0-1). مثال: `1` للأحمر الكامل.
|
||||
- `green` (number, مطلوب): مكوّن الأخضر (0-1). مثال: `0.5` لنصف الأخضر.
|
||||
- `blue` (number, مطلوب): مكوّن الأزرق (0-1). مثال: `0` لعدم وجود أزرق.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/create_hyperlink">
|
||||
**الوصف:** تحويل نص موجود إلى رابط قابل للنقر في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية النص المراد تحويله إلى رابط.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية النص المراد تحويله إلى رابط (حصري).
|
||||
- `url` (string, مطلوب): عنوان URL الذي يجب أن يشير إليه الرابط. مثال: `"https://example.com"`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/apply_heading_style">
|
||||
**الوصف:** تطبيق نمط عنوان أو فقرة على نطاق نصي في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية الفقرة (الفقرات) المراد تنسيقها.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية الفقرة (الفقرات) المراد تنسيقها.
|
||||
- `style` (string, مطلوب): النمط المراد تطبيقه. القيم: `NORMAL_TEXT`, `TITLE`, `SUBTITLE`, `HEADING_1`, `HEADING_2`, `HEADING_3`, `HEADING_4`, `HEADING_5`, `HEADING_6`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/set_paragraph_alignment">
|
||||
**الوصف:** تعيين محاذاة النص للفقرات في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية الفقرة (الفقرات) المراد محاذاتها.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية الفقرة (الفقرات) المراد محاذاتها.
|
||||
- `alignment` (string, مطلوب): محاذاة النص. القيم: `START` (يسار), `CENTER`, `END` (يمين), `JUSTIFIED`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/set_line_spacing">
|
||||
**الوصف:** تعيين تباعد الأسطر للفقرات في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية الفقرة (الفقرات).
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية الفقرة (الفقرات).
|
||||
- `lineSpacing` (number, مطلوب): تباعد الأسطر كنسبة مئوية. `100` = مفرد، `115` = 1.15x، `150` = 1.5x، `200` = مزدوج.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/create_paragraph_bullets">
|
||||
**الوصف:** تحويل الفقرات إلى قائمة نقطية أو مرقمة في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية الفقرات المراد تحويلها إلى قائمة.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية الفقرات المراد تحويلها إلى قائمة.
|
||||
- `bulletPreset` (string, مطلوب): نمط النقاط/الترقيم. القيم: `BULLET_DISC_CIRCLE_SQUARE`, `BULLET_DIAMONDX_ARROW3D_SQUARE`, `BULLET_CHECKBOX`, `BULLET_ARROW_DIAMOND_DISC`, `BULLET_STAR_CIRCLE_SQUARE`, `NUMBERED_DECIMAL_ALPHA_ROMAN`, `NUMBERED_DECIMAL_ALPHA_ROMAN_PARENS`, `NUMBERED_DECIMAL_NESTED`, `NUMBERED_UPPERALPHA_ALPHA_ROMAN`, `NUMBERED_UPPERROMAN_UPPERALPHA_DECIMAL`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/delete_paragraph_bullets">
|
||||
**الوصف:** إزالة النقاط أو الترقيم من الفقرات في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `startIndex` (integer, مطلوب): موضع بداية فقرات القائمة.
|
||||
- `endIndex` (integer, مطلوب): موضع نهاية فقرات القائمة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/insert_table_with_content">
|
||||
**الوصف:** إدراج جدول مع محتوى في مستند Google في إجراء واحد. قدم المحتوى كمصفوفة ثنائية الأبعاد.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `rows` (integer, مطلوب): عدد الصفوف في الجدول.
|
||||
- `columns` (integer, مطلوب): عدد الأعمدة في الجدول.
|
||||
- `index` (integer, اختياري): الموضع لإدراج الجدول. إذا لم يُحدد، يُدرج الجدول في نهاية المستند.
|
||||
- `content` (array, مطلوب): محتوى الجدول كمصفوفة ثنائية الأبعاد. كل مصفوفة داخلية هي صف. مثال: `[["Year", "Revenue"], ["2023", "$43B"], ["2024", "$45B"]]`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/insert_table_row">
|
||||
**الوصف:** إدراج صف جديد فوق أو أسفل خلية مرجعية في جدول موجود.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
|
||||
- `rowIndex` (integer, مطلوب): فهرس الصف (قائم على الصفر) للخلية المرجعية.
|
||||
- `columnIndex` (integer, اختياري): فهرس العمود (قائم على الصفر) للخلية المرجعية. الافتراضي هو `0`.
|
||||
- `insertBelow` (boolean, اختياري): إذا `true`، يُدرج أسفل الصف المرجعي. إذا `false`، يُدرج فوقه. الافتراضي هو `true`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/insert_table_column">
|
||||
**الوصف:** إدراج عمود جديد يساراً أو يميناً لخلية مرجعية في جدول موجود.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
|
||||
- `rowIndex` (integer, اختياري): فهرس الصف (قائم على الصفر) للخلية المرجعية. الافتراضي هو `0`.
|
||||
- `columnIndex` (integer, مطلوب): فهرس العمود (قائم على الصفر) للخلية المرجعية.
|
||||
- `insertRight` (boolean, اختياري): إذا `true`، يُدرج إلى اليمين. إذا `false`، يُدرج إلى اليسار. الافتراضي هو `true`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/delete_table_row">
|
||||
**الوصف:** حذف صف من جدول موجود في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
|
||||
- `rowIndex` (integer, مطلوب): فهرس الصف (قائم على الصفر) المراد حذفه.
|
||||
- `columnIndex` (integer, اختياري): فهرس العمود (قائم على الصفر) لأي خلية في الصف. الافتراضي هو `0`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/delete_table_column">
|
||||
**الوصف:** حذف عمود من جدول موجود في مستند Google.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
|
||||
- `rowIndex` (integer, اختياري): فهرس الصف (قائم على الصفر) لأي خلية في العمود. الافتراضي هو `0`.
|
||||
- `columnIndex` (integer, مطلوب): فهرس العمود (قائم على الصفر) المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/merge_table_cells">
|
||||
**الوصف:** دمج نطاق من خلايا الجدول في خلية واحدة. يتم الاحتفاظ بمحتوى جميع الخلايا.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
|
||||
- `rowIndex` (integer, مطلوب): فهرس الصف البادئ (قائم على الصفر) للدمج.
|
||||
- `columnIndex` (integer, مطلوب): فهرس العمود البادئ (قائم على الصفر) للدمج.
|
||||
- `rowSpan` (integer, مطلوب): عدد الصفوف المراد دمجها.
|
||||
- `columnSpan` (integer, مطلوب): عدد الأعمدة المراد دمجها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/unmerge_table_cells">
|
||||
**الوصف:** إلغاء دمج خلايا جدول مدمجة سابقاً وإعادتها إلى خلايا فردية.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
|
||||
- `rowIndex` (integer, مطلوب): فهرس الصف (قائم على الصفر) للخلية المدمجة.
|
||||
- `columnIndex` (integer, مطلوب): فهرس العمود (قائم على الصفر) للخلية المدمجة.
|
||||
- `rowSpan` (integer, مطلوب): عدد الصفوف التي تمتد عليها الخلية المدمجة.
|
||||
- `columnSpan` (integer, مطلوب): عدد الأعمدة التي تمتد عليها الخلية المدمجة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/insert_inline_image">
|
||||
**الوصف:** إدراج صورة من عنوان URL عام في مستند Google. يجب أن تكون الصورة متاحة للعموم، وأقل من 50 ميجابايت، وبصيغة PNG/JPEG/GIF.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `uri` (string, مطلوب): عنوان URL العام للصورة. يجب أن يكون متاحاً بدون مصادقة.
|
||||
- `index` (integer, اختياري): الموضع لإدراج الصورة. إذا لم يُحدد، تُدرج الصورة في نهاية المستند. الافتراضي هو `1`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/insert_section_break">
|
||||
**الوصف:** إدراج فاصل قسم لإنشاء أقسام مستند بتنسيقات مختلفة.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `index` (integer, مطلوب): الموضع لإدراج فاصل القسم.
|
||||
- `sectionType` (string, مطلوب): نوع فاصل القسم. القيم: `CONTINUOUS` (يبقى في نفس الصفحة), `NEXT_PAGE` (يبدأ صفحة جديدة).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/create_header">
|
||||
**الوصف:** إنشاء ترويسة للمستند. يُرجع headerId يمكن استخدامه مع insert_text لإضافة محتوى الترويسة.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `type` (string, اختياري): نوع الترويسة. القيم: `DEFAULT`. الافتراضي هو `DEFAULT`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/create_footer">
|
||||
**الوصف:** إنشاء تذييل للمستند. يُرجع footerId يمكن استخدامه مع insert_text لإضافة محتوى التذييل.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `type` (string, اختياري): نوع التذييل. القيم: `DEFAULT`. الافتراضي هو `DEFAULT`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/delete_header">
|
||||
**الوصف:** حذف ترويسة من المستند. استخدم get_document للعثور على headerId.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `headerId` (string, مطلوب): معرّف الترويسة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_docs/delete_footer">
|
||||
**الوصف:** حذف تذييل من المستند. استخدم get_document للعثور على footerId.
|
||||
|
||||
**المعاملات:**
|
||||
- `documentId` (string, مطلوب): معرّف المستند.
|
||||
- `footerId` (string, مطلوب): معرّف التذييل المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Google Docs
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Google Docs capabilities
|
||||
docs_agent = Agent(
|
||||
role="Document Creator",
|
||||
goal="Create and manage Google Docs documents efficiently",
|
||||
backstory="An AI assistant specialized in Google Docs document creation and editing.",
|
||||
apps=['google_docs'] # All Google Docs actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new document
|
||||
create_doc_task = Task(
|
||||
description="Create a new Google Document titled 'Project Status Report'",
|
||||
agent=docs_agent,
|
||||
expected_output="New Google Document 'Project Status Report' created successfully"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[docs_agent],
|
||||
tasks=[create_doc_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تحرير النصوص وإدارة المحتوى
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent focused on text editing
|
||||
text_editor = Agent(
|
||||
role="Document Editor",
|
||||
goal="Edit and update content in Google Docs documents",
|
||||
backstory="An AI assistant skilled in precise text editing and content management.",
|
||||
apps=['google_docs/insert_text', 'google_docs/replace_text', 'google_docs/delete_content_range']
|
||||
)
|
||||
|
||||
# Task to edit document content
|
||||
edit_content_task = Task(
|
||||
description="In document 'your_document_id', insert the text 'Executive Summary: ' at the beginning, then replace all instances of 'TODO' with 'COMPLETED'.",
|
||||
agent=text_editor,
|
||||
expected_output="Document updated with new text inserted and TODO items replaced."
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[text_editor],
|
||||
tasks=[edit_content_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### عمليات المستندات المتقدمة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent for advanced document operations
|
||||
document_formatter = Agent(
|
||||
role="Document Formatter",
|
||||
goal="Apply advanced formatting and structure to Google Docs",
|
||||
backstory="An AI assistant that handles complex document formatting and organization.",
|
||||
apps=['google_docs/batch_update', 'google_docs/insert_page_break', 'google_docs/create_named_range']
|
||||
)
|
||||
|
||||
# Task to format document
|
||||
format_doc_task = Task(
|
||||
description="In document 'your_document_id', insert a page break at position 100, create a named range called 'Introduction' for characters 1-50, and apply batch formatting updates.",
|
||||
agent=document_formatter,
|
||||
expected_output="Document formatted with page break, named range, and styling applied."
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[document_formatter],
|
||||
tasks=[format_doc_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء المصادقة**
|
||||
|
||||
- تأكد من أن حساب Google الخاص بك لديه الصلاحيات اللازمة للوصول إلى Google Docs.
|
||||
- تحقق من أن اتصال OAuth يتضمن جميع النطاقات المطلوبة (`https://www.googleapis.com/auth/documents`).
|
||||
|
||||
**مشاكل معرّف المستند**
|
||||
|
||||
- تحقق جيداً من صحة معرّفات المستندات.
|
||||
- تأكد من وجود المستند وإمكانية الوصول إليه من حسابك.
|
||||
- يمكن العثور على معرّفات المستندات في عنوان URL لـ Google Docs.
|
||||
|
||||
**عمليات إدراج النص والنطاقات**
|
||||
|
||||
- عند استخدام `insert_text` أو `delete_content_range`، تأكد من صحة مواضع الفهرس.
|
||||
- تذكر أن Google Docs يستخدم فهرسة قائمة على الصفر.
|
||||
- يجب أن يحتوي المستند على محتوى في مواضع الفهرس المحددة.
|
||||
|
||||
**تنسيق طلبات التحديث الدفعي**
|
||||
|
||||
- عند استخدام `batch_update`، تأكد من صحة تنسيق مصفوفة `requests` وفقاً لتوثيق Google Docs API.
|
||||
- تتطلب التحديثات المعقدة هياكل JSON محددة لكل نوع طلب.
|
||||
|
||||
**عمليات استبدال النص**
|
||||
|
||||
- لـ `replace_text`، تأكد من مطابقة معامل `containsText` تماماً للنص المراد استبداله.
|
||||
- استخدم معامل `matchCase` للتحكم في حساسية حالة الأحرف.
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Docs أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
238
docs/edge/ar/enterprise/integrations/google_drive.mdx
Normal file
238
docs/edge/ar/enterprise/integrations/google_drive.mdx
Normal file
@@ -0,0 +1,238 @@
|
||||
---
|
||||
title: تكامل Google Drive
|
||||
description: "تخزين الملفات وإدارتها مع تكامل Google Drive لـ CrewAI."
|
||||
icon: "google"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة الملفات والمجلدات عبر Google Drive. ارفع الملفات وحمّلها ونظّمها وشاركها، وأنشئ المجلدات، وبسّط سير عمل إدارة المستندات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Google Drive، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Google مع إمكانية الوصول إلى Google Drive
|
||||
- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Google Drive
|
||||
|
||||
### 1. ربط حساب Google الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Google Drive** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة الملفات والمجلدات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="google_drive/get_file">
|
||||
**الوصف:** الحصول على ملف بواسطة المعرّف من Google Drive.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف الملف المراد استرجاعه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_drive/list_files">
|
||||
**الوصف:** عرض قائمة الملفات في Google Drive.
|
||||
|
||||
**المعاملات:**
|
||||
- `q` (string, اختياري): سلسلة استعلام لتصفية الملفات (مثال: "name contains 'report'").
|
||||
- `page_size` (integer, اختياري): الحد الأقصى لعدد الملفات المُرجعة (الافتراضي: 100، الحد الأقصى: 1000).
|
||||
- `page_token` (string, اختياري): رمز لاسترجاع الصفحة التالية من النتائج.
|
||||
- `order_by` (string, اختياري): ترتيب الفرز (مثال: "name", "createdTime desc", "modifiedTime").
|
||||
- `spaces` (string, اختياري): قائمة مفصولة بفواصل للمساحات المراد الاستعلام عنها (drive, appDataFolder, photos).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_drive/upload_file">
|
||||
**الوصف:** رفع ملف إلى Google Drive.
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, مطلوب): اسم الملف المراد إنشاؤه.
|
||||
- `content` (string, مطلوب): محتوى الملف المراد رفعه.
|
||||
- `mime_type` (string, اختياري): نوع MIME للملف (مثال: "text/plain", "application/pdf").
|
||||
- `parent_folder_id` (string, اختياري): معرّف المجلد الأصلي حيث يجب إنشاء الملف.
|
||||
- `description` (string, اختياري): وصف الملف.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_drive/download_file">
|
||||
**الوصف:** تحميل ملف من Google Drive.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف الملف المراد تحميله.
|
||||
- `mime_type` (string, اختياري): نوع MIME للتصدير (مطلوب لمستندات Google Workspace).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_drive/create_folder">
|
||||
**الوصف:** إنشاء مجلد جديد في Google Drive.
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, مطلوب): اسم المجلد المراد إنشاؤه.
|
||||
- `parent_folder_id` (string, اختياري): معرّف المجلد الأصلي حيث يجب إنشاء المجلد الجديد.
|
||||
- `description` (string, اختياري): وصف المجلد.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_drive/delete_file">
|
||||
**الوصف:** حذف ملف من Google Drive.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف الملف المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_drive/share_file">
|
||||
**الوصف:** مشاركة ملف في Google Drive مع مستخدمين محددين أو جعله عاماً.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف الملف المراد مشاركته.
|
||||
- `role` (string, مطلوب): الدور الممنوح بهذا الإذن (reader, writer, commenter, owner).
|
||||
- `type` (string, مطلوب): نوع المستفيد (user, group, domain, anyone).
|
||||
- `email_address` (string, اختياري): عنوان البريد الإلكتروني للمستخدم أو المجموعة المراد المشاركة معهم (مطلوب لأنواع user/group).
|
||||
- `domain` (string, اختياري): النطاق المراد المشاركة معه (مطلوب لنوع domain).
|
||||
- `send_notification_email` (boolean, اختياري): ما إذا كان يجب إرسال بريد إلكتروني إشعاري (الافتراضي: true).
|
||||
- `email_message` (string, اختياري): رسالة نصية مخصصة لتضمينها في البريد الإلكتروني الإشعاري.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_drive/update_file">
|
||||
**الوصف:** تحديث ملف موجود في Google Drive.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف الملف المراد تحديثه.
|
||||
- `name` (string, اختياري): الاسم الجديد للملف.
|
||||
- `content` (string, اختياري): المحتوى الجديد للملف.
|
||||
- `mime_type` (string, اختياري): نوع MIME الجديد للملف.
|
||||
- `description` (string, اختياري): الوصف الجديد للملف.
|
||||
- `add_parents` (string, اختياري): قائمة مفصولة بفواصل لمعرّفات المجلدات الأصلية المراد إضافتها.
|
||||
- `remove_parents` (string, اختياري): قائمة مفصولة بفواصل لمعرّفات المجلدات الأصلية المراد إزالتها.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Google Drive
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Google Drive capabilities
|
||||
drive_agent = Agent(
|
||||
role="File Manager",
|
||||
goal="Manage files and folders in Google Drive efficiently",
|
||||
backstory="An AI assistant specialized in document and file management.",
|
||||
apps=['google_drive'] # All Google Drive actions will be available
|
||||
)
|
||||
|
||||
# Task to organize files
|
||||
organize_files_task = Task(
|
||||
description="List all files in the root directory and organize them into appropriate folders",
|
||||
agent=drive_agent,
|
||||
expected_output="Summary of files organized with folder structure"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[drive_agent],
|
||||
tasks=[organize_files_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات Google Drive المحددة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with specific Google Drive actions only
|
||||
file_manager_agent = Agent(
|
||||
role="Document Manager",
|
||||
goal="Upload and manage documents efficiently",
|
||||
backstory="An AI assistant that focuses on document upload and organization.",
|
||||
apps=[
|
||||
'google_drive/upload_file',
|
||||
'google_drive/create_folder',
|
||||
'google_drive/share_file'
|
||||
] # Specific Google Drive actions
|
||||
)
|
||||
|
||||
# Task to upload and share documents
|
||||
document_task = Task(
|
||||
description="Upload the quarterly report and share it with the finance team",
|
||||
agent=file_manager_agent,
|
||||
expected_output="Document uploaded and sharing permissions configured"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[file_manager_agent],
|
||||
tasks=[document_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة الملفات المتقدمة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
file_organizer = Agent(
|
||||
role="File Organizer",
|
||||
goal="Maintain organized file structure and manage permissions",
|
||||
backstory="An experienced file manager who ensures proper organization and access control.",
|
||||
apps=['google_drive']
|
||||
)
|
||||
|
||||
# Complex task involving multiple Google Drive operations
|
||||
organization_task = Task(
|
||||
description="""
|
||||
1. List all files in the shared folder
|
||||
2. Create folders for different document types (Reports, Presentations, Spreadsheets)
|
||||
3. Move files to appropriate folders based on their type
|
||||
4. Set appropriate sharing permissions for each folder
|
||||
5. Create a summary document of the organization changes
|
||||
""",
|
||||
agent=file_organizer,
|
||||
expected_output="Files organized into categorized folders with proper permissions and summary report"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[file_organizer],
|
||||
tasks=[organization_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
254
docs/edge/ar/enterprise/integrations/google_sheets.mdx
Normal file
254
docs/edge/ar/enterprise/integrations/google_sheets.mdx
Normal file
@@ -0,0 +1,254 @@
|
||||
---
|
||||
title: تكامل Google Sheets
|
||||
description: "مزامنة بيانات جداول البيانات مع تكامل Google Sheets لـ CrewAI."
|
||||
icon: "google"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة بيانات جداول البيانات عبر Google Sheets. اقرأ الصفوف، وأنشئ إدخالات جديدة، وحدّث البيانات الموجودة، وبسّط سير عمل إدارة البيانات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي. مثالي لتتبع البيانات وإعداد التقارير وإدارة البيانات التعاونية.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Google Sheets، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Google مع إمكانية الوصول إلى Google Sheets
|
||||
- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
- جداول بيانات بترويسات أعمدة مناسبة لعمليات البيانات
|
||||
|
||||
## إعداد تكامل Google Sheets
|
||||
|
||||
### 1. ربط حساب Google الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Google Sheets** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى جداول البيانات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="google_sheets/get_spreadsheet">
|
||||
**الوصف:** استرجاع خصائص وبيانات جدول البيانات.
|
||||
|
||||
**المعاملات:**
|
||||
- `spreadsheetId` (string, مطلوب): معرّف جدول البيانات المراد استرجاعه.
|
||||
- `ranges` (array, اختياري): النطاقات المراد استرجاعها من جدول البيانات.
|
||||
- `includeGridData` (boolean, اختياري): true إذا كان يجب إرجاع بيانات الشبكة. الافتراضي: false
|
||||
- `fields` (string, اختياري): الحقول المراد تضمينها في الاستجابة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_sheets/get_values">
|
||||
**الوصف:** إرجاع نطاق من القيم من جدول البيانات.
|
||||
|
||||
**المعاملات:**
|
||||
- `spreadsheetId` (string, مطلوب): معرّف جدول البيانات المراد استرجاع البيانات منه.
|
||||
- `range` (string, مطلوب): ترميز A1 أو R1C1 للنطاق المراد استرجاع القيم منه.
|
||||
- `valueRenderOption` (string, اختياري): كيفية تمثيل القيم في الإخراج. الخيارات: FORMATTED_VALUE, UNFORMATTED_VALUE, FORMULA. الافتراضي: FORMATTED_VALUE
|
||||
- `dateTimeRenderOption` (string, اختياري): كيفية تمثيل التواريخ والأوقات في الإخراج. الخيارات: SERIAL_NUMBER, FORMATTED_STRING. الافتراضي: SERIAL_NUMBER
|
||||
- `majorDimension` (string, اختياري): البُعد الرئيسي للنتائج. الخيارات: ROWS, COLUMNS. الافتراضي: ROWS
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_sheets/update_values">
|
||||
**الوصف:** تعيين القيم في نطاق من جدول البيانات.
|
||||
|
||||
**المعاملات:**
|
||||
- `spreadsheetId` (string, مطلوب): معرّف جدول البيانات المراد تحديثه.
|
||||
- `range` (string, مطلوب): ترميز A1 للنطاق المراد تحديثه.
|
||||
- `values` (array, مطلوب): البيانات المراد كتابتها. كل مصفوفة تمثل صفاً.
|
||||
```json
|
||||
[
|
||||
["Value1", "Value2", "Value3"],
|
||||
["Value4", "Value5", "Value6"]
|
||||
]
|
||||
```
|
||||
- `valueInputOption` (string, اختياري): كيفية تفسير بيانات الإدخال. الخيارات: RAW, USER_ENTERED. الافتراضي: USER_ENTERED
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_sheets/append_values">
|
||||
**الوصف:** إلحاق قيم بجدول البيانات.
|
||||
|
||||
**المعاملات:**
|
||||
- `spreadsheetId` (string, مطلوب): معرّف جدول البيانات المراد تحديثه.
|
||||
- `range` (string, مطلوب): ترميز A1 لنطاق البحث عن جدول بيانات منطقي.
|
||||
- `values` (array, مطلوب): البيانات المراد إلحاقها. كل مصفوفة تمثل صفاً.
|
||||
```json
|
||||
[
|
||||
["Value1", "Value2", "Value3"],
|
||||
["Value4", "Value5", "Value6"]
|
||||
]
|
||||
```
|
||||
- `valueInputOption` (string, اختياري): كيفية تفسير بيانات الإدخال. الخيارات: RAW, USER_ENTERED. الافتراضي: USER_ENTERED
|
||||
- `insertDataOption` (string, اختياري): كيفية إدراج بيانات الإدخال. الخيارات: OVERWRITE, INSERT_ROWS. الافتراضي: INSERT_ROWS
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_sheets/create_spreadsheet">
|
||||
**الوصف:** إنشاء جدول بيانات جديد.
|
||||
|
||||
**المعاملات:**
|
||||
- `title` (string, مطلوب): عنوان جدول البيانات الجديد.
|
||||
- `sheets` (array, اختياري): الأوراق التي تشكل جزءاً من جدول البيانات.
|
||||
```json
|
||||
[
|
||||
{
|
||||
"properties": {
|
||||
"title": "Sheet1"
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Google Sheets
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Google Sheets capabilities
|
||||
sheets_agent = Agent(
|
||||
role="Data Manager",
|
||||
goal="Manage spreadsheet data and track information efficiently",
|
||||
backstory="An AI assistant specialized in data management and spreadsheet operations.",
|
||||
apps=['google_sheets']
|
||||
)
|
||||
|
||||
# Task to add new data to a spreadsheet
|
||||
data_entry_task = Task(
|
||||
description="Add a new customer record to the customer database spreadsheet with name, email, and signup date",
|
||||
agent=sheets_agent,
|
||||
expected_output="New customer record added successfully to the spreadsheet"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[sheets_agent],
|
||||
tasks=[data_entry_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات Google Sheets المحددة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with specific Google Sheets actions only
|
||||
data_collector = Agent(
|
||||
role="Data Collector",
|
||||
goal="Collect and organize data in spreadsheets",
|
||||
backstory="An AI assistant that focuses on data collection and organization.",
|
||||
apps=[
|
||||
'google_sheets/get_values',
|
||||
'google_sheets/update_values'
|
||||
]
|
||||
)
|
||||
|
||||
# Task to collect and organize data
|
||||
data_collection = Task(
|
||||
description="Retrieve current inventory data and add new product entries to the inventory spreadsheet",
|
||||
agent=data_collector,
|
||||
expected_output="Inventory data retrieved and new products added successfully"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[data_collector],
|
||||
tasks=[data_collection]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تحليل البيانات وإعداد التقارير
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
data_analyst = Agent(
|
||||
role="Data Analyst",
|
||||
goal="Analyze spreadsheet data and generate insights",
|
||||
backstory="An experienced data analyst who extracts insights from spreadsheet data.",
|
||||
apps=['google_sheets']
|
||||
)
|
||||
|
||||
# Task to analyze data and create reports
|
||||
analysis_task = Task(
|
||||
description="""
|
||||
1. Retrieve all sales data from the current month's spreadsheet
|
||||
2. Analyze the data for trends and patterns
|
||||
3. Create a summary report in a new row with key metrics
|
||||
""",
|
||||
agent=data_analyst,
|
||||
expected_output="Sales data analyzed and summary report created with key insights"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[data_analyst],
|
||||
tasks=[analysis_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء الصلاحيات**
|
||||
|
||||
- تأكد من أن حساب Google الخاص بك لديه صلاحية التحرير على جداول البيانات المستهدفة
|
||||
- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة لـ Google Sheets API
|
||||
- تأكد من مشاركة جداول البيانات مع الحساب المصادق عليه
|
||||
|
||||
**مشاكل هيكل جدول البيانات**
|
||||
|
||||
- تأكد من أن أوراق العمل تحتوي على ترويسات أعمدة مناسبة قبل إنشاء الصفوف أو تحديثها
|
||||
- تحقق من صحة ترميز النطاق (صيغة A1) للخلايا المستهدفة
|
||||
- تأكد من وجود معرّف جدول البيانات المحدد وإمكانية الوصول إليه
|
||||
|
||||
**مشاكل نوع البيانات والصيغة**
|
||||
|
||||
- تأكد من تطابق قيم البيانات مع الصيغة المتوقعة لكل عمود
|
||||
- استخدم صيغ التاريخ المناسبة لأعمدة التاريخ (يُنصح بصيغة ISO)
|
||||
- تحقق من صحة تنسيق القيم الرقمية لأعمدة الأرقام
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Sheets
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
382
docs/edge/ar/enterprise/integrations/google_slides.mdx
Normal file
382
docs/edge/ar/enterprise/integrations/google_slides.mdx
Normal file
@@ -0,0 +1,382 @@
|
||||
---
|
||||
title: تكامل Google Slides
|
||||
description: "إنشاء العروض التقديمية وإدارتها مع تكامل Google Slides لـ CrewAI."
|
||||
icon: "chart-bar"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إنشاء وتحرير وإدارة عروض Google Slides التقديمية. أنشئ العروض التقديمية، وحدّث المحتوى، واستورد البيانات من Google Sheets، وأدر الصفحات والصور المصغرة، وبسّط سير عمل العروض التقديمية باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Google Slides، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Google مع إمكانية الوصول إلى Google Slides
|
||||
- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Google Slides
|
||||
|
||||
### 1. ربط حساب Google الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Google Slides** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى العروض التقديمية وجداول البيانات وDrive
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="google_slides/create_blank_presentation">
|
||||
**الوصف:** إنشاء عرض تقديمي فارغ بدون محتوى.
|
||||
|
||||
**المعاملات:**
|
||||
- `title` (string, مطلوب): عنوان العرض التقديمي.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/get_presentation_metadata">
|
||||
**الوصف:** الحصول على بيانات وصفية خفيفة حول العرض التقديمي (العنوان، عدد الشرائح، معرّفات الشرائح).
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي المراد استرجاعه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/get_presentation_text">
|
||||
**الوصف:** استخراج جميع المحتوى النصي من العرض التقديمي.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/get_presentation">
|
||||
**الوصف:** استرجاع عرض تقديمي بواسطة المعرّف.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي المراد استرجاعه.
|
||||
- `fields` (string, اختياري): الحقول المراد تضمينها في الاستجابة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/batch_update_presentation">
|
||||
**الوصف:** تطبيق التحديثات أو إضافة المحتوى أو إزالته من العرض التقديمي.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي المراد تحديثه.
|
||||
- `requests` (array, مطلوب): قائمة بالتحديثات المراد تطبيقها.
|
||||
```json
|
||||
[
|
||||
{
|
||||
"insertText": {
|
||||
"objectId": "slide_id",
|
||||
"text": "Your text content here"
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
- `writeControl` (object, اختياري): يوفر التحكم في كيفية تنفيذ طلبات الكتابة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/get_slide_text">
|
||||
**الوصف:** استخراج المحتوى النصي من شريحة واحدة.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `pageObjectId` (string, مطلوب): معرّف الشريحة/الصفحة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/get_page">
|
||||
**الوصف:** استرجاع صفحة محددة بواسطة معرّفها.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `pageObjectId` (string, مطلوب): معرّف الصفحة المراد استرجاعها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/get_thumbnail">
|
||||
**الوصف:** إنشاء صورة مصغرة للصفحة.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `pageObjectId` (string, مطلوب): معرّف الصفحة لإنشاء الصورة المصغرة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/create_slide">
|
||||
**الوصف:** إضافة شريحة فارغة إضافية للعرض التقديمي.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `insertionIndex` (integer, اختياري): مكان إدراج الشريحة (قائم على الصفر). إذا حُذف، تُضاف في النهاية.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/create_slide_with_layout">
|
||||
**الوصف:** إنشاء شريحة بتخطيط محدد مسبقاً يحتوي على مناطق عناصر نائبة للعنوان والمحتوى وغيرها.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `layout` (string, مطلوب): نوع التخطيط. أحد: `BLANK`, `TITLE`, `TITLE_AND_BODY`, `TITLE_AND_TWO_COLUMNS`, `TITLE_ONLY`, `SECTION_HEADER`, `ONE_COLUMN_TEXT`, `MAIN_POINT`, `BIG_NUMBER`.
|
||||
- `insertionIndex` (integer, اختياري): مكان الإدراج (قائم على الصفر). حُذف للإضافة في النهاية.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/create_text_box">
|
||||
**الوصف:** إنشاء مربع نص على شريحة مع محتوى.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideId` (string, مطلوب): معرّف الشريحة لإضافة مربع النص إليها.
|
||||
- `text` (string, مطلوب): المحتوى النصي لمربع النص.
|
||||
- `x` (integer, اختياري): موضع X بوحدة EMU (914400 = 1 بوصة). الافتراضي: 914400.
|
||||
- `y` (integer, اختياري): موضع Y بوحدة EMU. الافتراضي: 914400.
|
||||
- `width` (integer, اختياري): العرض بوحدة EMU. الافتراضي: 7315200.
|
||||
- `height` (integer, اختياري): الارتفاع بوحدة EMU. الافتراضي: 914400.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/delete_slide">
|
||||
**الوصف:** إزالة شريحة من العرض التقديمي.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideId` (string, مطلوب): معرّف الشريحة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/duplicate_slide">
|
||||
**الوصف:** إنشاء نسخة من شريحة موجودة.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideId` (string, مطلوب): معرّف الشريحة المراد تكرارها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/move_slides">
|
||||
**الوصف:** إعادة ترتيب الشرائح بنقلها إلى موضع جديد.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideIds` (array of strings, مطلوب): مصفوفة من معرّفات الشرائح المراد نقلها.
|
||||
- `insertionIndex` (integer, مطلوب): الموضع المستهدف (قائم على الصفر).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/insert_youtube_video">
|
||||
**الوصف:** تضمين فيديو YouTube على شريحة.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideId` (string, مطلوب): معرّف الشريحة لإضافة الفيديو إليها.
|
||||
- `videoId` (string, مطلوب): معرّف فيديو YouTube (القيمة بعد v= في عنوان URL).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/insert_drive_video">
|
||||
**الوصف:** تضمين فيديو من Google Drive على شريحة.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideId` (string, مطلوب): معرّف الشريحة لإضافة الفيديو إليها.
|
||||
- `fileId` (string, مطلوب): معرّف ملف Google Drive للفيديو.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/set_slide_background_image">
|
||||
**الوصف:** تعيين صورة خلفية لشريحة.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideId` (string, مطلوب): معرّف الشريحة لتعيين الخلفية لها.
|
||||
- `imageUrl` (string, مطلوب): عنوان URL المتاح للعموم للصورة المراد استخدامها كخلفية.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/create_table">
|
||||
**الوصف:** إنشاء جدول فارغ على شريحة.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideId` (string, مطلوب): معرّف الشريحة لإضافة الجدول إليها.
|
||||
- `rows` (integer, مطلوب): عدد الصفوف في الجدول.
|
||||
- `columns` (integer, مطلوب): عدد الأعمدة في الجدول.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/create_table_with_content">
|
||||
**الوصف:** إنشاء جدول مع محتوى في إجراء واحد.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `slideId` (string, مطلوب): معرّف الشريحة لإضافة الجدول إليها.
|
||||
- `rows` (integer, مطلوب): عدد الصفوف في الجدول.
|
||||
- `columns` (integer, مطلوب): عدد الأعمدة في الجدول.
|
||||
- `content` (array, مطلوب): محتوى الجدول كمصفوفة ثنائية الأبعاد. مثال: [["Year", "Revenue"], ["2023", "$10M"]].
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/import_data_from_sheet">
|
||||
**الوصف:** استيراد البيانات من Google Sheet إلى العرض التقديمي.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `sheetId` (string, مطلوب): معرّف Google Sheet المراد الاستيراد منه.
|
||||
- `dataRange` (string, مطلوب): نطاق البيانات المراد استيرادها من الورقة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/upload_file_to_drive">
|
||||
**الوصف:** رفع ملف إلى Google Drive المرتبط بالعرض التقديمي.
|
||||
|
||||
**المعاملات:**
|
||||
- `file` (string, مطلوب): بيانات الملف المراد رفعها.
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي لربط الملف المرفوع.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/link_file_to_presentation">
|
||||
**الوصف:** ربط ملف في Google Drive بالعرض التقديمي.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي.
|
||||
- `fileId` (string, مطلوب): معرّف الملف المراد ربطه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/get_all_presentations">
|
||||
**الوصف:** عرض قائمة بجميع العروض التقديمية المتاحة للمستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `pageSize` (integer, اختياري): عدد العروض التقديمية المراد إرجاعها لكل صفحة.
|
||||
- `pageToken` (string, اختياري): رمز للترقيم.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="google_slides/delete_presentation">
|
||||
**الوصف:** حذف عرض تقديمي بواسطة المعرّف.
|
||||
|
||||
**المعاملات:**
|
||||
- `presentationId` (string, مطلوب): معرّف العرض التقديمي المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Google Slides
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Google Slides capabilities
|
||||
slides_agent = Agent(
|
||||
role="Presentation Manager",
|
||||
goal="Create and manage presentations efficiently",
|
||||
backstory="An AI assistant specialized in presentation creation and content management.",
|
||||
apps=['google_slides'] # All Google Slides actions will be available
|
||||
)
|
||||
|
||||
# Task to create a presentation
|
||||
create_presentation_task = Task(
|
||||
description="Create a new presentation for the quarterly business review with key slides",
|
||||
agent=slides_agent,
|
||||
expected_output="Quarterly business review presentation created with structured content"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[slides_agent],
|
||||
tasks=[create_presentation_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة محتوى العروض التقديمية
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
content_manager = Agent(
|
||||
role="Content Manager",
|
||||
goal="Manage presentation content and updates",
|
||||
backstory="An AI assistant that focuses on content creation and presentation updates.",
|
||||
apps=[
|
||||
'google_slides/create_blank_presentation',
|
||||
'google_slides/batch_update_presentation',
|
||||
'google_slides/get_presentation'
|
||||
]
|
||||
)
|
||||
|
||||
# Task to create and update presentations
|
||||
content_task = Task(
|
||||
description="Create a new presentation and add content slides with charts and text",
|
||||
agent=content_manager,
|
||||
expected_output="Presentation created with updated content and visual elements"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[content_manager],
|
||||
tasks=[content_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء الصلاحيات**
|
||||
|
||||
- تأكد من أن حساب Google الخاص بك لديه الصلاحيات المناسبة لـ Google Slides
|
||||
- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة للعروض التقديمية وجداول البيانات وDrive
|
||||
|
||||
**مشاكل معرّف العرض التقديمي**
|
||||
|
||||
- تحقق من صحة معرّفات العروض التقديمية ووجودها
|
||||
- تأكد من أن لديك صلاحيات الوصول للعروض التقديمية التي تحاول تعديلها
|
||||
|
||||
**مشاكل تحديث المحتوى**
|
||||
|
||||
- تأكد من صحة تنسيق طلبات التحديث الدفعي وفقاً لمواصفات Google Slides API
|
||||
- تحقق من وجود معرّفات الكائنات للشرائح والعناصر في العرض التقديمي
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Slides
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
360
docs/edge/ar/enterprise/integrations/hubspot.mdx
Normal file
360
docs/edge/ar/enterprise/integrations/hubspot.mdx
Normal file
@@ -0,0 +1,360 @@
|
||||
---
|
||||
title: تكامل HubSpot
|
||||
description: "إدارة الشركات وجهات الاتصال في HubSpot مع CrewAI."
|
||||
icon: "briefcase"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة الشركات وجهات الاتصال داخل HubSpot. أنشئ سجلات جديدة وبسّط عمليات CRM باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل HubSpot، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال.
|
||||
- حساب HubSpot بالصلاحيات المناسبة.
|
||||
- ربط حساب HubSpot الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors).
|
||||
|
||||
## إعداد تكامل HubSpot
|
||||
|
||||
### 1. ربط حساب HubSpot الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors).
|
||||
2. ابحث عن **HubSpot** في قسم تكاملات المصادقة.
|
||||
3. انقر على **Connect** وأكمل عملية OAuth.
|
||||
4. امنح الصلاحيات اللازمة لإدارة الشركات وجهات الاتصال.
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="hubspot/create_company">
|
||||
**الوصف:** إنشاء سجل شركة جديد في HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, مطلوب): اسم الشركة.
|
||||
- `domain` (string, اختياري): اسم نطاق الشركة.
|
||||
- `industry` (string, اختياري): القطاع.
|
||||
- `phone` (string, اختياري): رقم الهاتف.
|
||||
- `hubspot_owner_id` (string, اختياري): معرّف مالك الشركة.
|
||||
- `type` (string, اختياري): نوع الشركة. القيم المتاحة: `PROSPECT`, `PARTNER`, `RESELLER`, `VENDOR`, `OTHER`.
|
||||
- `city` (string, اختياري): المدينة.
|
||||
- `state` (string, اختياري): الولاية/المنطقة.
|
||||
- `zip` (string, اختياري): الرمز البريدي.
|
||||
- `numberofemployees` (number, اختياري): عدد الموظفين.
|
||||
- `annualrevenue` (number, اختياري): الإيرادات السنوية.
|
||||
- `description` (string, اختياري): الوصف.
|
||||
- `website` (string, اختياري): عنوان URL للموقع الإلكتروني.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/create_contact">
|
||||
**الوصف:** إنشاء سجل جهة اتصال جديد في HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `email` (string, مطلوب): عنوان البريد الإلكتروني لجهة الاتصال.
|
||||
- `firstname` (string, اختياري): الاسم الأول.
|
||||
- `lastname` (string, اختياري): اسم العائلة.
|
||||
- `phone` (string, اختياري): رقم الهاتف.
|
||||
- `hubspot_owner_id` (string, اختياري): مالك جهة الاتصال.
|
||||
- `lifecyclestage` (string, اختياري): مرحلة دورة الحياة. القيم المتاحة: `subscriber`, `lead`, `marketingqualifiedlead`, `salesqualifiedlead`, `opportunity`, `customer`, `evangelist`, `other`.
|
||||
- `company` (string, اختياري): اسم الشركة.
|
||||
- `jobtitle` (string, اختياري): المسمى الوظيفي.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/create_deal">
|
||||
**الوصف:** إنشاء سجل صفقة جديد في HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `dealname` (string, مطلوب): اسم الصفقة.
|
||||
- `amount` (number, اختياري): قيمة الصفقة.
|
||||
- `dealstage` (string, اختياري): مرحلة مسار الصفقة.
|
||||
- `pipeline` (string, اختياري): مسار المبيعات الذي تنتمي إليه الصفقة.
|
||||
- `closedate` (string, اختياري): التاريخ المتوقع لإغلاق الصفقة.
|
||||
- `hubspot_owner_id` (string, اختياري): مالك الصفقة.
|
||||
- `dealtype` (string, اختياري): نوع الصفقة. القيم المتاحة: `newbusiness`, `existingbusiness`.
|
||||
- `description` (string, اختياري): وصف الصفقة.
|
||||
- `hs_priority` (string, اختياري): أولوية الصفقة. القيم المتاحة: `low`, `medium`, `high`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/create_record_engagements">
|
||||
**الوصف:** إنشاء تفاعل جديد (مثل ملاحظة، بريد إلكتروني، مكالمة، اجتماع، مهمة) في HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `engagementType` (string, مطلوب): نوع التفاعل. القيم المتاحة: `NOTE`, `EMAIL`, `CALL`, `MEETING`, `TASK`.
|
||||
- `hubspot_owner_id` (string, اختياري): المستخدم المعيّن للنشاط.
|
||||
- `hs_timestamp` (string, اختياري): تاريخ ووقت النشاط.
|
||||
- `hs_note_body` (string, اختياري): نص الملاحظة. (يُستخدم لـ `NOTE`)
|
||||
- `hs_task_subject` (string, اختياري): عنوان المهمة. (يُستخدم لـ `TASK`)
|
||||
- `hs_meeting_title` (string, اختياري): عنوان الاجتماع. (يُستخدم لـ `MEETING`)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/update_company">
|
||||
**الوصف:** تحديث سجل شركة موجود في HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف الشركة المراد تحديثها.
|
||||
- `name` (string, اختياري): اسم الشركة.
|
||||
- `domain` (string, اختياري): اسم نطاق الشركة.
|
||||
- `industry` (string, اختياري): القطاع.
|
||||
- `phone` (string, اختياري): رقم الهاتف.
|
||||
- `description` (string, اختياري): الوصف.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/update_contact">
|
||||
**الوصف:** تحديث سجل جهة اتصال موجود في HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف جهة الاتصال المراد تحديثها.
|
||||
- `firstname` (string, اختياري): الاسم الأول.
|
||||
- `lastname` (string, اختياري): اسم العائلة.
|
||||
- `email` (string, اختياري): عنوان البريد الإلكتروني.
|
||||
- `phone` (string, اختياري): رقم الهاتف.
|
||||
- `company` (string, اختياري): اسم الشركة.
|
||||
- `jobtitle` (string, اختياري): المسمى الوظيفي.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/update_deal">
|
||||
**الوصف:** تحديث سجل صفقة موجود في HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف الصفقة المراد تحديثها.
|
||||
- `dealname` (string, اختياري): اسم الصفقة.
|
||||
- `amount` (number, اختياري): قيمة الصفقة.
|
||||
- `dealstage` (string, اختياري): مرحلة مسار الصفقة.
|
||||
- `closedate` (string, اختياري): تاريخ الإغلاق المتوقع.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/list_companies">
|
||||
**الوصف:** الحصول على قائمة بسجلات الشركات من HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/list_contacts">
|
||||
**الوصف:** الحصول على قائمة بسجلات جهات الاتصال من HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/list_deals">
|
||||
**الوصف:** الحصول على قائمة بسجلات الصفقات من HubSpot.
|
||||
|
||||
**المعاملات:**
|
||||
- `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/get_company">
|
||||
**الوصف:** الحصول على سجل شركة واحد بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف الشركة المراد استرجاعها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/get_contact">
|
||||
**الوصف:** الحصول على سجل جهة اتصال واحد بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف جهة الاتصال المراد استرجاعها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/get_deal">
|
||||
**الوصف:** الحصول على سجل صفقة واحد بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف الصفقة المراد استرجاعها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/search_companies">
|
||||
**الوصف:** البحث عن سجلات الشركات في HubSpot باستخدام صيغة فلتر.
|
||||
|
||||
**المعاملات:**
|
||||
- `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل (OR لمجموعات AND).
|
||||
- `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/search_contacts">
|
||||
**الوصف:** البحث عن سجلات جهات الاتصال في HubSpot باستخدام صيغة فلتر.
|
||||
|
||||
**المعاملات:**
|
||||
- `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل (OR لمجموعات AND).
|
||||
- `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/search_deals">
|
||||
**الوصف:** البحث عن سجلات الصفقات في HubSpot باستخدام صيغة فلتر.
|
||||
|
||||
**المعاملات:**
|
||||
- `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل (OR لمجموعات AND).
|
||||
- `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/delete_record_companies">
|
||||
**الوصف:** حذف سجل شركة بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف الشركة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/delete_record_contacts">
|
||||
**الوصف:** حذف سجل جهة اتصال بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف جهة الاتصال المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/delete_record_deals">
|
||||
**الوصف:** حذف سجل صفقة بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف الصفقة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="hubspot/describe_action_schema">
|
||||
**الوصف:** الحصول على المخطط المتوقع لنوع كائن وعملية معينة.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordType` (string, مطلوب): معرّف نوع الكائن (مثال: 'companies').
|
||||
- `operation` (string, مطلوب): نوع العملية (مثال: 'CREATE_RECORD').
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ HubSpot
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with HubSpot capabilities
|
||||
hubspot_agent = Agent(
|
||||
role="CRM Manager",
|
||||
goal="Manage company and contact records in HubSpot",
|
||||
backstory="An AI assistant specialized in CRM management.",
|
||||
apps=['hubspot'] # All HubSpot actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new company
|
||||
create_company_task = Task(
|
||||
description="Create a new company in HubSpot with name 'Innovate Corp' and domain 'innovatecorp.com'.",
|
||||
agent=hubspot_agent,
|
||||
expected_output="Company created successfully with confirmation"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[hubspot_agent],
|
||||
tasks=[create_company_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تصفية أدوات HubSpot المحددة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with specific HubSpot actions only
|
||||
contact_creator = Agent(
|
||||
role="Contact Creator",
|
||||
goal="Create new contacts in HubSpot",
|
||||
backstory="An AI assistant that focuses on creating new contact entries in the CRM.",
|
||||
apps=['hubspot/create_contact'] # Only contact creation action
|
||||
)
|
||||
|
||||
# Task to create a contact
|
||||
create_contact = Task(
|
||||
description="Create a new contact for 'John Doe' with email 'john.doe@example.com'.",
|
||||
agent=contact_creator,
|
||||
expected_output="Contact created successfully in HubSpot."
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[contact_creator],
|
||||
tasks=[create_contact]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة جهات الاتصال
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create agent with HubSpot contact management capabilities
|
||||
crm_manager = Agent(
|
||||
role="CRM Manager",
|
||||
goal="Manage and organize HubSpot contacts efficiently.",
|
||||
backstory="An experienced CRM manager who maintains an organized contact database.",
|
||||
apps=['hubspot'] # All HubSpot actions including contact management
|
||||
)
|
||||
|
||||
# Task to manage contacts
|
||||
contact_task = Task(
|
||||
description="Create a new contact for 'Jane Smith' at 'Global Tech Inc.' with email 'jane.smith@globaltech.com'.",
|
||||
agent=crm_manager,
|
||||
expected_output="Contact database updated with the new contact."
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[crm_manager],
|
||||
tasks=[contact_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل HubSpot أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
248
docs/edge/ar/enterprise/integrations/jira.mdx
Normal file
248
docs/edge/ar/enterprise/integrations/jira.mdx
Normal file
@@ -0,0 +1,248 @@
|
||||
---
|
||||
title: تكامل Jira
|
||||
description: "تتبع المشكلات وإدارة المشاريع مع تكامل Jira لـ CrewAI."
|
||||
icon: "bug"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة المشكلات والمشاريع وسير العمل عبر Jira. أنشئ المشكلات وحدّثها، وتتبع تقدم المشاريع، وأدر التعيينات، وبسّط إدارة مشاريعك باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Jira، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Jira بصلاحيات المشروع المناسبة
|
||||
- ربط حساب Jira الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Jira
|
||||
|
||||
### 1. ربط حساب Jira الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Jira** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة المشكلات والمشاريع
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="jira/create_issue">
|
||||
**الوصف:** إنشاء مشكلة في Jira.
|
||||
|
||||
**المعاملات:**
|
||||
- `summary` (string, مطلوب): الملخص - ملخص موجز من سطر واحد للمشكلة. (مثال: "The printer stopped working").
|
||||
- `project` (string, اختياري): المشروع - المشروع الذي تنتمي إليه المشكلة.
|
||||
- `issueType` (string, اختياري): نوع المشكلة - الافتراضي هو Task.
|
||||
- `jiraIssueStatus` (string, اختياري): الحالة - الافتراضي هو أول حالة في المشروع.
|
||||
- `assignee` (string, اختياري): المكلّف - الافتراضي هو المستخدم المصادق عليه.
|
||||
- `description` (string, اختياري): الوصف - وصف تفصيلي للمشكلة.
|
||||
- `additionalFields` (string, اختياري): حقول إضافية - حدد أي حقول أخرى بصيغة JSON.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/update_issue">
|
||||
**الوصف:** تحديث مشكلة في Jira.
|
||||
|
||||
**المعاملات:**
|
||||
- `issueKey` (string, مطلوب): مفتاح المشكلة (مثال: "TEST-1234").
|
||||
- `summary` (string, اختياري): الملخص.
|
||||
- `issueType` (string, اختياري): نوع المشكلة.
|
||||
- `jiraIssueStatus` (string, اختياري): الحالة.
|
||||
- `assignee` (string, اختياري): المكلّف.
|
||||
- `description` (string, اختياري): الوصف.
|
||||
- `additionalFields` (string, اختياري): حقول إضافية بصيغة JSON.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/get_issue_by_key">
|
||||
**الوصف:** الحصول على مشكلة بواسطة المفتاح في Jira.
|
||||
|
||||
**المعاملات:**
|
||||
- `issueKey` (string, مطلوب): مفتاح المشكلة (مثال: "TEST-1234").
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/filter_issues">
|
||||
**الوصف:** البحث عن المشكلات في Jira باستخدام الفلاتر.
|
||||
|
||||
**المعاملات:**
|
||||
- `jqlQuery` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل.
|
||||
- `limit` (string, اختياري): حدود النتائج - الافتراضي 10.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/search_by_jql">
|
||||
**الوصف:** البحث عن المشكلات بواسطة JQL في Jira.
|
||||
|
||||
**المعاملات:**
|
||||
- `jqlQuery` (string, مطلوب): استعلام JQL (مثال: "project = PROJECT").
|
||||
- `paginationParameters` (object, اختياري): معاملات الترقيم.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/describe_action_schema">
|
||||
**الوصف:** الحصول على المخطط المتوقع لنوع مشكلة.
|
||||
|
||||
**المعاملات:**
|
||||
- `issueTypeId` (string, مطلوب): معرّف نوع المشكلة.
|
||||
- `projectKey` (string, مطلوب): مفتاح المشروع.
|
||||
- `operation` (string, مطلوب): نوع العملية، مثال CREATE_ISSUE أو UPDATE_ISSUE.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/get_projects">
|
||||
**الوصف:** الحصول على المشاريع في Jira.
|
||||
|
||||
**المعاملات:**
|
||||
- `paginationParameters` (object, اختياري): معاملات الترقيم.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/get_issue_types_by_project">
|
||||
**الوصف:** الحصول على أنواع المشكلات بواسطة المشروع في Jira.
|
||||
|
||||
**المعاملات:**
|
||||
- `project` (string, مطلوب): مفتاح المشروع.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/get_issue_types">
|
||||
**الوصف:** الحصول على جميع أنواع المشكلات في Jira.
|
||||
|
||||
**المعاملات:** لا توجد معاملات مطلوبة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/get_issue_status_by_project">
|
||||
**الوصف:** الحصول على حالات المشكلات لمشروع معين.
|
||||
|
||||
**المعاملات:**
|
||||
- `project` (string, مطلوب): مفتاح المشروع.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="jira/get_all_assignees_by_project">
|
||||
**الوصف:** الحصول على المكلّفين لمشروع معين.
|
||||
|
||||
**المعاملات:**
|
||||
- `project` (string, مطلوب): مفتاح المشروع.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Jira
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Jira capabilities
|
||||
jira_agent = Agent(
|
||||
role="Issue Manager",
|
||||
goal="Manage Jira issues and track project progress efficiently",
|
||||
backstory="An AI assistant specialized in issue tracking and project management.",
|
||||
apps=['jira'] # All Jira actions will be available
|
||||
)
|
||||
|
||||
# Task to create a bug report
|
||||
create_bug_task = Task(
|
||||
description="Create a bug report for the login functionality with high priority and assign it to the development team",
|
||||
agent=jira_agent,
|
||||
expected_output="Bug report created successfully with issue key"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[jira_agent],
|
||||
tasks=[create_bug_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### تحليل المشاريع وإعداد التقارير
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
project_analyst = Agent(
|
||||
role="Project Analyst",
|
||||
goal="Analyze project data and generate insights from Jira",
|
||||
backstory="An experienced project analyst who extracts insights from project management data.",
|
||||
apps=['jira']
|
||||
)
|
||||
|
||||
# Task to analyze project status
|
||||
analysis_task = Task(
|
||||
description="""
|
||||
1. Get all projects and their issue types
|
||||
2. Search for all open issues across projects
|
||||
3. Analyze issue distribution by status and assignee
|
||||
4. Create a summary report issue with findings
|
||||
""",
|
||||
agent=project_analyst,
|
||||
expected_output="Project analysis completed with summary report created"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[project_analyst],
|
||||
tasks=[analysis_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء الصلاحيات**
|
||||
|
||||
- تأكد من أن حساب Jira الخاص بك لديه الصلاحيات اللازمة للمشاريع المستهدفة
|
||||
- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة لـ Jira API
|
||||
|
||||
**مفاتيح المشاريع أو المشكلات غير الصالحة**
|
||||
|
||||
- تحقق جيداً من مفاتيح المشاريع ومفاتيح المشكلات للتأكد من صحة الصيغة (مثال: "PROJ-123")
|
||||
- تأكد من وجود المشاريع وإمكانية الوصول إليها من حسابك
|
||||
|
||||
**مشاكل استعلام JQL**
|
||||
|
||||
- اختبر استعلامات JQL في بحث مشكلات Jira قبل استخدامها في استدعاءات API
|
||||
- تأكد من صحة إملاء أسماء الحقول في JQL ووجودها في مثيل Jira الخاص بك
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Jira أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
261
docs/edge/ar/enterprise/integrations/linear.mdx
Normal file
261
docs/edge/ar/enterprise/integrations/linear.mdx
Normal file
@@ -0,0 +1,261 @@
|
||||
---
|
||||
title: تكامل Linear
|
||||
description: "إدارة المشاريع البرمجية وتتبع الأخطاء مع تكامل Linear لـ CrewAI."
|
||||
icon: "list-check"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة المشكلات والمشاريع وسير عمل التطوير عبر Linear. أنشئ المشكلات وحدّثها، وأدر جداول المشاريع الزمنية، ونظّم الفرق، وبسّط عملية تطوير البرمجيات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Linear، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Linear بصلاحيات مساحة العمل المناسبة
|
||||
- ربط حساب Linear الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Linear
|
||||
|
||||
### 1. ربط حساب Linear الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Linear** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة المشكلات والمشاريع
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="linear/create_issue">
|
||||
**الوصف:** إنشاء مشكلة جديدة في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `teamId` (string, مطلوب): معرّف الفريق للمشكلة الجديدة.
|
||||
- `title` (string, مطلوب): العنوان.
|
||||
- `description` (string, اختياري): الوصف.
|
||||
- `statusId` (string, اختياري): الحالة.
|
||||
- `priority` (string, اختياري): الأولوية كعدد صحيح.
|
||||
- `dueDate` (string, اختياري): تاريخ الاستحقاق بصيغة ISO 8601.
|
||||
- `cycleId` (string, اختياري): معرّف الدورة المرتبطة.
|
||||
- `additionalFields` (object, اختياري): حقول إضافية.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/update_issue">
|
||||
**الوصف:** تحديث مشكلة في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `issueId` (string, مطلوب): معرّف المشكلة المراد تحديثها.
|
||||
- `title` (string, اختياري): العنوان.
|
||||
- `description` (string, اختياري): الوصف.
|
||||
- `statusId` (string, اختياري): الحالة.
|
||||
- `priority` (string, اختياري): الأولوية.
|
||||
- `dueDate` (string, اختياري): تاريخ الاستحقاق.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/get_issue_by_id">
|
||||
**الوصف:** الحصول على مشكلة بواسطة المعرّف في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `issueId` (string, مطلوب): معرّف المشكلة المراد جلبها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/search_issue">
|
||||
**الوصف:** البحث عن المشكلات في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `queryTerm` (string, مطلوب): مصطلح البحث.
|
||||
- `issueFilterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/delete_issue">
|
||||
**الوصف:** حذف مشكلة في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `issueId` (string, مطلوب): معرّف المشكلة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/archive_issue">
|
||||
**الوصف:** أرشفة مشكلة في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `issueId` (string, مطلوب): معرّف المشكلة المراد أرشفتها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/create_sub_issue">
|
||||
**الوصف:** إنشاء مشكلة فرعية في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `parentId` (string, مطلوب): معرّف المشكلة الأصلية.
|
||||
- `teamId` (string, مطلوب): معرّف الفريق.
|
||||
- `title` (string, مطلوب): العنوان.
|
||||
- `description` (string, اختياري): الوصف.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/create_project">
|
||||
**الوصف:** إنشاء مشروع جديد في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `teamIds` (object, مطلوب): معرّف (معرّفات) الفريق المرتبطة بالمشروع.
|
||||
- `projectName` (string, مطلوب): اسم المشروع.
|
||||
- `description` (string, اختياري): وصف المشروع.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/update_project">
|
||||
**الوصف:** تحديث مشروع في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `projectId` (string, مطلوب): معرّف المشروع المراد تحديثه.
|
||||
- `projectName` (string, اختياري): اسم المشروع.
|
||||
- `description` (string, اختياري): وصف المشروع.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/get_project_by_id">
|
||||
**الوصف:** الحصول على مشروع بواسطة المعرّف في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `projectId` (string, مطلوب): معرّف المشروع المراد جلبه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/delete_project">
|
||||
**الوصف:** حذف مشروع في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `projectId` (string, مطلوب): معرّف المشروع المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="linear/search_teams">
|
||||
**الوصف:** البحث عن الفرق في Linear.
|
||||
|
||||
**المعاملات:**
|
||||
- `teamFilterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Linear
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Linear capabilities
|
||||
linear_agent = Agent(
|
||||
role="Development Manager",
|
||||
goal="Manage Linear issues and track development progress efficiently",
|
||||
backstory="An AI assistant specialized in software development project management.",
|
||||
apps=['linear'] # All Linear actions will be available
|
||||
)
|
||||
|
||||
# Task to create a bug report
|
||||
create_bug_task = Task(
|
||||
description="Create a high-priority bug report for the authentication system and assign it to the backend team",
|
||||
agent=linear_agent,
|
||||
expected_output="Bug report created successfully with issue ID"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[linear_agent],
|
||||
tasks=[create_bug_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة المشاريع والفرق
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
project_coordinator = Agent(
|
||||
role="Project Coordinator",
|
||||
goal="Coordinate projects and teams in Linear efficiently",
|
||||
backstory="An experienced project coordinator who manages development cycles and team workflows.",
|
||||
apps=['linear']
|
||||
)
|
||||
|
||||
# Task to coordinate project setup
|
||||
project_coordination = Task(
|
||||
description="""
|
||||
1. Search for engineering teams in Linear
|
||||
2. Create a new project for Q2 feature development
|
||||
3. Associate the project with relevant teams
|
||||
4. Create initial project milestones as issues
|
||||
""",
|
||||
agent=project_coordinator,
|
||||
expected_output="Q2 project created with teams assigned and initial milestones established"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[project_coordinator],
|
||||
tasks=[project_coordination]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء الصلاحيات**
|
||||
|
||||
- تأكد من أن حساب Linear الخاص بك لديه الصلاحيات اللازمة لمساحة العمل المستهدفة
|
||||
- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة لـ Linear API
|
||||
|
||||
**معرّفات ومراجع غير صالحة**
|
||||
|
||||
- تحقق جيداً من معرّفات الفرق والمشكلات والمشاريع للتأكد من صحة صيغة UUID
|
||||
- تأكد من وجود الكيانات المشار إليها وإمكانية الوصول إليها
|
||||
|
||||
**مشاكل التاريخ والوقت**
|
||||
|
||||
- استخدم صيغة ISO 8601 لتواريخ الاستحقاق والطوابع الزمنية
|
||||
- تأكد من معالجة المناطق الزمنية بشكل صحيح
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Linear أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
269
docs/edge/ar/enterprise/integrations/microsoft_excel.mdx
Normal file
269
docs/edge/ar/enterprise/integrations/microsoft_excel.mdx
Normal file
@@ -0,0 +1,269 @@
|
||||
---
|
||||
title: تكامل Microsoft Excel
|
||||
description: "إدارة المصنفات والبيانات مع تكامل Microsoft Excel لـ CrewAI."
|
||||
icon: "table"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إنشاء وإدارة مصنفات Excel وأوراق العمل والجداول والرسوم البيانية في OneDrive أو SharePoint. تعامل مع نطاقات البيانات، وأنشئ المرئيات، وأدر الجداول، وبسّط سير عمل جداول البيانات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Microsoft Excel، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Microsoft 365 مع إمكانية الوصول إلى Excel وOneDrive/SharePoint
|
||||
- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Microsoft Excel
|
||||
|
||||
### 1. ربط حساب Microsoft الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Microsoft Excel** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى الملفات ومصنفات Excel
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="microsoft_excel/create_workbook">
|
||||
**الوصف:** إنشاء مصنف Excel جديد في OneDrive أو SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_path` (string, مطلوب): المسار حيث يتم إنشاء المصنف (مثال: 'MyWorkbook.xlsx')
|
||||
- `worksheets` (array, اختياري): أوراق العمل الأولية المراد إنشاؤها
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/get_workbooks">
|
||||
**الوصف:** الحصول على جميع مصنفات Excel من OneDrive أو SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `select` (string, اختياري): اختيار خصائص محددة للإرجاع
|
||||
- `filter` (string, اختياري): تصفية النتائج باستخدام صيغة OData
|
||||
- `top` (integer, اختياري): عدد العناصر المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 999
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/get_worksheets">
|
||||
**الوصف:** الحصول على جميع أوراق العمل في مصنف Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/create_worksheet">
|
||||
**الوصف:** إنشاء ورقة عمل جديدة في مصنف Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `name` (string, مطلوب): اسم ورقة العمل الجديدة
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/get_range_data">
|
||||
**الوصف:** الحصول على البيانات من نطاق محدد في ورقة عمل Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
- `range` (string, مطلوب): عنوان النطاق (مثال: 'A1:C10')
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/update_range_data">
|
||||
**الوصف:** تحديث البيانات في نطاق محدد في ورقة عمل Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
- `range` (string, مطلوب): عنوان النطاق (مثال: 'A1:C10')
|
||||
- `values` (array, مطلوب): مصفوفة ثنائية الأبعاد من القيم لتعيينها في النطاق
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/add_table">
|
||||
**الوصف:** إنشاء جدول في ورقة عمل Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
- `range` (string, مطلوب): النطاق للجدول (مثال: 'A1:D10')
|
||||
- `has_headers` (boolean, اختياري): ما إذا كان الصف الأول يحتوي على ترويسات. الافتراضي: true
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/add_table_row">
|
||||
**الوصف:** إضافة صف جديد إلى جدول Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
- `table_name` (string, مطلوب): اسم الجدول
|
||||
- `values` (array, مطلوب): مصفوفة من القيم للصف الجديد
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/create_chart">
|
||||
**الوصف:** إنشاء رسم بياني في ورقة عمل Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
- `chart_type` (string, مطلوب): نوع الرسم البياني (مثال: 'ColumnClustered', 'Line', 'Pie')
|
||||
- `source_data` (string, مطلوب): نطاق البيانات للرسم البياني (مثال: 'A1:B10')
|
||||
- `series_by` (string, اختياري): كيفية تفسير البيانات ('Auto', 'Columns', 'Rows'). الافتراضي: Auto
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/get_cell">
|
||||
**الوصف:** الحصول على قيمة خلية واحدة في ورقة عمل Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
- `row` (integer, مطلوب): رقم الصف (قائم على الصفر)
|
||||
- `column` (integer, مطلوب): رقم العمود (قائم على الصفر)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/get_used_range">
|
||||
**الوصف:** الحصول على النطاق المستخدم لورقة عمل Excel (يحتوي على جميع البيانات).
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/get_tables">
|
||||
**الوصف:** الحصول على جميع الجداول في ورقة عمل Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/get_table_data">
|
||||
**الوصف:** الحصول على البيانات من جدول محدد في ورقة عمل Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
- `table_name` (string, مطلوب): اسم الجدول
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/delete_worksheet">
|
||||
**الوصف:** حذف ورقة عمل من مصنف Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل المراد حذفها
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/delete_table">
|
||||
**الوصف:** حذف جدول من ورقة عمل Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
- `worksheet_name` (string, مطلوب): اسم ورقة العمل
|
||||
- `table_name` (string, مطلوب): اسم الجدول المراد حذفه
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_excel/list_names">
|
||||
**الوصف:** الحصول على جميع النطاقات المسماة في مصنف Excel.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف ملف Excel
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Excel
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Excel capabilities
|
||||
excel_agent = Agent(
|
||||
role="Excel Data Manager",
|
||||
goal="Manage Excel workbooks and data efficiently",
|
||||
backstory="An AI assistant specialized in Excel data management and analysis.",
|
||||
apps=['microsoft_excel'] # All Excel actions will be available
|
||||
)
|
||||
|
||||
# Task to create and populate a workbook
|
||||
data_management_task = Task(
|
||||
description="Create a new sales report workbook with data analysis and charts",
|
||||
agent=excel_agent,
|
||||
expected_output="Excel workbook created with sales data, analysis, and visualizations"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[excel_agent],
|
||||
tasks=[data_management_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء الصلاحيات**
|
||||
|
||||
- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات المناسبة لـ Excel وOneDrive/SharePoint
|
||||
- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة (Files.Read.All, Files.ReadWrite.All)
|
||||
|
||||
**مشاكل النطاق وورقة العمل**
|
||||
|
||||
- تحقق من وجود أسماء أوراق العمل في المصنف المحدد
|
||||
- تأكد من صحة تنسيق عناوين النطاقات (مثال: 'A1:C10')
|
||||
|
||||
**مشاكل الرسوم البيانية**
|
||||
|
||||
- تحقق من دعم أنواع الرسوم البيانية (ColumnClustered, Line, Pie، إلخ.)
|
||||
- تأكد من أن نطاقات بيانات المصدر تحتوي على بيانات مناسبة لنوع الرسم البياني
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft Excel
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
218
docs/edge/ar/enterprise/integrations/microsoft_onedrive.mdx
Normal file
218
docs/edge/ar/enterprise/integrations/microsoft_onedrive.mdx
Normal file
@@ -0,0 +1,218 @@
|
||||
---
|
||||
title: تكامل Microsoft OneDrive
|
||||
description: "إدارة الملفات والمجلدات مع تكامل Microsoft OneDrive لـ CrewAI."
|
||||
icon: "cloud"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من رفع وتحميل وإدارة الملفات والمجلدات في Microsoft OneDrive. أتمت عمليات الملفات، ونظّم المحتوى، وأنشئ روابط المشاركة، وبسّط سير عمل التخزين السحابي باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Microsoft OneDrive، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Microsoft مع إمكانية الوصول إلى OneDrive
|
||||
- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Microsoft OneDrive
|
||||
|
||||
### 1. ربط حساب Microsoft الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Microsoft OneDrive** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى الملفات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="microsoft_onedrive/list_files">
|
||||
**الوصف:** عرض الملفات والمجلدات في OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `top` (integer, اختياري): عدد العناصر المراد استرجاعها (الحد الأقصى 1000). الافتراضي: `50`.
|
||||
- `orderby` (string, اختياري): الترتيب حسب حقل (مثال: "name asc", "lastModifiedDateTime desc"). الافتراضي: "name asc".
|
||||
- `filter` (string, اختياري): تعبير فلتر OData.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/get_file_info">
|
||||
**الوصف:** الحصول على معلومات حول ملف أو مجلد محدد.
|
||||
|
||||
**المعاملات:**
|
||||
- `item_id` (string, مطلوب): معرّف الملف أو المجلد.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/download_file">
|
||||
**الوصف:** تحميل ملف من OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `item_id` (string, مطلوب): معرّف الملف المراد تحميله.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/upload_file">
|
||||
**الوصف:** رفع ملف إلى OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_name` (string, مطلوب): اسم الملف المراد رفعه.
|
||||
- `content` (string, مطلوب): محتوى الملف بترميز Base64.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/create_folder">
|
||||
**الوصف:** إنشاء مجلد جديد في OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `folder_name` (string, مطلوب): اسم المجلد المراد إنشاؤه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/delete_item">
|
||||
**الوصف:** حذف ملف أو مجلد من OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `item_id` (string, مطلوب): معرّف الملف أو المجلد المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/copy_item">
|
||||
**الوصف:** نسخ ملف أو مجلد في OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `item_id` (string, مطلوب): معرّف الملف أو المجلد المراد نسخه.
|
||||
- `parent_id` (string, اختياري): معرّف مجلد الوجهة (اختياري، الافتراضي هو الجذر).
|
||||
- `new_name` (string, اختياري): الاسم الجديد للعنصر المنسوخ (اختياري).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/move_item">
|
||||
**الوصف:** نقل ملف أو مجلد في OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `item_id` (string, مطلوب): معرّف الملف أو المجلد المراد نقله.
|
||||
- `parent_id` (string, مطلوب): معرّف مجلد الوجهة.
|
||||
- `new_name` (string, اختياري): الاسم الجديد للعنصر (اختياري).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/search_files">
|
||||
**الوصف:** البحث عن الملفات والمجلدات في OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `query` (string, مطلوب): سلسلة استعلام البحث.
|
||||
- `top` (integer, اختياري): عدد النتائج المراد إرجاعها (الحد الأقصى 1000). الافتراضي: `50`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/share_item">
|
||||
**الوصف:** إنشاء رابط مشاركة لملف أو مجلد.
|
||||
|
||||
**المعاملات:**
|
||||
- `item_id` (string, مطلوب): معرّف الملف أو المجلد المراد مشاركته.
|
||||
- `type` (string, اختياري): نوع رابط المشاركة. القيم: `view`, `edit`, `embed`. الافتراضي: `view`.
|
||||
- `scope` (string, اختياري): نطاق رابط المشاركة. القيم: `anonymous`, `organization`. الافتراضي: `anonymous`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/get_recent_files">
|
||||
**الوصف:** الحصول على الملفات التي تم الوصول إليها مؤخراً من OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `top` (integer, اختياري): عدد العناصر المراد استرجاعها (الحد الأقصى 200). الافتراضي: `25`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_onedrive/get_shared_with_me">
|
||||
**الوصف:** الحصول على الملفات والمجلدات المشاركة مع المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `top` (integer, اختياري): عدد العناصر المراد استرجاعها (الحد الأقصى 200). الافتراضي: `50`.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Microsoft OneDrive
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Microsoft OneDrive capabilities
|
||||
onedrive_agent = Agent(
|
||||
role="File Manager",
|
||||
goal="Manage files and folders in OneDrive efficiently",
|
||||
backstory="An AI assistant specialized in Microsoft OneDrive file operations and organization.",
|
||||
apps=['microsoft_onedrive'] # All OneDrive actions will be available
|
||||
)
|
||||
|
||||
# Task to list files and create a folder
|
||||
organize_files_task = Task(
|
||||
description="List all files in my OneDrive root directory and create a new folder called 'Project Documents'.",
|
||||
agent=onedrive_agent,
|
||||
expected_output="List of files displayed and new folder 'Project Documents' created."
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[onedrive_agent],
|
||||
tasks=[organize_files_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء المصادقة**
|
||||
|
||||
- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات اللازمة للوصول إلى الملفات (مثال: `Files.Read`, `Files.ReadWrite`).
|
||||
- تحقق من أن اتصال OAuth يتضمن جميع النطاقات المطلوبة.
|
||||
|
||||
**مشاكل رفع الملفات**
|
||||
|
||||
- تأكد من توفير `file_name` و`content` لعمليات رفع الملفات.
|
||||
- يجب أن يكون المحتوى بترميز Base64 للملفات الثنائية.
|
||||
|
||||
**عمليات الملفات (النسخ/النقل)**
|
||||
|
||||
- لـ `move_item`، تأكد من توفير كل من `item_id` و`parent_id`.
|
||||
- تحقق من وجود مجلدات الوجهة وإمكانية الوصول إليها.
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft OneDrive
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
227
docs/edge/ar/enterprise/integrations/microsoft_outlook.mdx
Normal file
227
docs/edge/ar/enterprise/integrations/microsoft_outlook.mdx
Normal file
@@ -0,0 +1,227 @@
|
||||
---
|
||||
title: تكامل Microsoft Outlook
|
||||
description: "إدارة البريد الإلكتروني والتقويم وجهات الاتصال مع تكامل Microsoft Outlook لـ CrewAI."
|
||||
icon: "envelope"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من الوصول إلى رسائل Outlook الإلكترونية وأحداث التقويم وجهات الاتصال وإدارتها. أرسل رسائل البريد الإلكتروني، واسترجع الرسائل، وأدر أحداث التقويم، ونظّم جهات الاتصال باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Microsoft Outlook، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Microsoft مع إمكانية الوصول إلى Outlook
|
||||
- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Microsoft Outlook
|
||||
|
||||
### 1. ربط حساب Microsoft الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Microsoft Outlook** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى البريد والتقويم وجهات الاتصال
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="microsoft_outlook/get_messages">
|
||||
**الوصف:** الحصول على رسائل البريد الإلكتروني من صندوق بريد المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `top` (integer, اختياري): عدد الرسائل (الحد الأقصى 1000). الافتراضي: `10`.
|
||||
- `filter` (string, اختياري): تعبير فلتر OData (مثال: "isRead eq false").
|
||||
- `search` (string, اختياري): سلسلة استعلام البحث.
|
||||
- `orderby` (string, اختياري): الترتيب (مثال: "receivedDateTime desc"). الافتراضي: "receivedDateTime desc".
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/send_email">
|
||||
**الوصف:** إرسال رسالة بريد إلكتروني.
|
||||
|
||||
**المعاملات:**
|
||||
- `to_recipients` (array, مطلوب): مصفوفة عناوين المستلمين.
|
||||
- `subject` (string, مطلوب): موضوع البريد الإلكتروني.
|
||||
- `body` (string, مطلوب): محتوى البريد الإلكتروني.
|
||||
- `body_type` (string, اختياري): نوع المحتوى. القيم: `Text`, `HTML`. الافتراضي: `HTML`.
|
||||
- `importance` (string, اختياري): مستوى الأهمية. القيم: `low`, `normal`, `high`. الافتراضي: `normal`.
|
||||
- `cc_recipients` (array, اختياري): مصفوفة عناوين النسخة الكربونية.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/get_calendar_events">
|
||||
**الوصف:** الحصول على أحداث التقويم من تقويم المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `top` (integer, اختياري): عدد الأحداث (الحد الأقصى 1000). الافتراضي: `10`.
|
||||
- `filter` (string, اختياري): تعبير فلتر OData.
|
||||
- `orderby` (string, اختياري): الترتيب. الافتراضي: "start/dateTime asc".
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/create_calendar_event">
|
||||
**الوصف:** إنشاء حدث تقويم جديد.
|
||||
|
||||
**المعاملات:**
|
||||
- `subject` (string, مطلوب): موضوع/عنوان الحدث.
|
||||
- `start_datetime` (string, مطلوب): وقت البداية بصيغة ISO 8601.
|
||||
- `end_datetime` (string, مطلوب): وقت النهاية بصيغة ISO 8601.
|
||||
- `timezone` (string, اختياري): المنطقة الزمنية. الافتراضي: `UTC`.
|
||||
- `location` (string, اختياري): موقع الحدث.
|
||||
- `attendees` (array, اختياري): مصفوفة عناوين الحضور.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/get_contacts">
|
||||
**الوصف:** الحصول على جهات الاتصال من دفتر عناوين المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `top` (integer, اختياري): عدد جهات الاتصال (الحد الأقصى 1000). الافتراضي: `10`.
|
||||
- `filter` (string, اختياري): تعبير فلتر OData.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/create_contact">
|
||||
**الوصف:** إنشاء جهة اتصال جديدة في دفتر عناوين المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- `displayName` (string, مطلوب): اسم العرض لجهة الاتصال.
|
||||
- `givenName` (string, اختياري): الاسم الأول.
|
||||
- `surname` (string, اختياري): اسم العائلة.
|
||||
- `emailAddresses` (array, اختياري): مصفوفة عناوين البريد الإلكتروني.
|
||||
- `jobTitle` (string, اختياري): المسمى الوظيفي.
|
||||
- `companyName` (string, اختياري): اسم الشركة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/reply_to_email">
|
||||
**الوصف:** الرد على رسالة بريد إلكتروني.
|
||||
|
||||
**المعاملات:**
|
||||
- `message_id` (string, مطلوب): المعرّف الفريد للرسالة المراد الرد عليها.
|
||||
- `comment` (string, مطلوب): محتوى الرد.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/forward_email">
|
||||
**الوصف:** إعادة توجيه رسالة بريد إلكتروني.
|
||||
|
||||
**المعاملات:**
|
||||
- `message_id` (string, مطلوب): المعرّف الفريد للرسالة المراد إعادة توجيهها.
|
||||
- `to_recipients` (array, مطلوب): مصفوفة عناوين المستلمين.
|
||||
- `comment` (string, اختياري): رسالة اختيارية لتضمينها فوق المحتوى المُعاد توجيهه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/delete_message">
|
||||
**الوصف:** حذف رسالة بريد إلكتروني.
|
||||
|
||||
**المعاملات:**
|
||||
- `message_id` (string, مطلوب): المعرّف الفريد للرسالة المراد حذفها.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/update_event">
|
||||
**الوصف:** تحديث حدث تقويم موجود.
|
||||
|
||||
**المعاملات:**
|
||||
- `event_id` (string, مطلوب): المعرّف الفريد للحدث.
|
||||
- `subject` (string, اختياري): الموضوع/العنوان الجديد.
|
||||
- `start_time` (string, اختياري): وقت البداية الجديد بصيغة ISO 8601.
|
||||
- `location` (string, اختياري): الموقع الجديد.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_outlook/delete_event">
|
||||
**الوصف:** حذف حدث تقويم.
|
||||
|
||||
**المعاملات:**
|
||||
- `event_id` (string, مطلوب): المعرّف الفريد للحدث المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Microsoft Outlook
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Microsoft Outlook capabilities
|
||||
outlook_agent = Agent(
|
||||
role="Email Assistant",
|
||||
goal="Manage emails, calendar events, and contacts efficiently",
|
||||
backstory="An AI assistant specialized in Microsoft Outlook operations and communication management.",
|
||||
apps=['microsoft_outlook'] # All Outlook actions will be available
|
||||
)
|
||||
|
||||
# Task to send an email
|
||||
send_email_task = Task(
|
||||
description="Send an email to 'colleague@example.com' with subject 'Project Update' and body 'Hi, here is the latest project update. Best regards.'",
|
||||
agent=outlook_agent,
|
||||
expected_output="Email sent successfully to colleague@example.com"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[outlook_agent],
|
||||
tasks=[send_email_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء المصادقة**
|
||||
|
||||
- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات اللازمة للوصول إلى البريد والتقويم وجهات الاتصال.
|
||||
- النطاقات المطلوبة تشمل: `Mail.Read`, `Mail.Send`, `Calendars.ReadWrite`, `Contacts.ReadWrite`.
|
||||
|
||||
**مشاكل إرسال البريد الإلكتروني**
|
||||
|
||||
- تأكد من توفير `to_recipients` و`subject` و`body` لـ `send_email`.
|
||||
- تحقق من صحة صيغة عناوين البريد الإلكتروني.
|
||||
|
||||
**إنشاء أحداث التقويم**
|
||||
|
||||
- تأكد من توفير `subject` و`start_datetime` و`end_datetime`.
|
||||
- استخدم صيغة ISO 8601 المناسبة لحقول التاريخ والوقت.
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft Outlook
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
270
docs/edge/ar/enterprise/integrations/microsoft_sharepoint.mdx
Normal file
270
docs/edge/ar/enterprise/integrations/microsoft_sharepoint.mdx
Normal file
@@ -0,0 +1,270 @@
|
||||
---
|
||||
title: تكامل Microsoft SharePoint
|
||||
description: "إدارة المواقع والقوائم والمستندات مع تكامل Microsoft SharePoint لـ CrewAI."
|
||||
icon: "folder-tree"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من الوصول إلى مواقع SharePoint والقوائم ومكتبات المستندات وإدارتها. استرجع معلومات المواقع، وأدر عناصر القوائم، وارفع الملفات ونظّمها، وبسّط سير عمل SharePoint باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Microsoft SharePoint، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Microsoft 365 مع إمكانية الوصول إلى SharePoint
|
||||
- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Microsoft SharePoint
|
||||
|
||||
### 1. ربط حساب Microsoft الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Microsoft SharePoint** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى مواقع SharePoint ومحتوياتها
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="microsoft_sharepoint/get_sites">
|
||||
**الوصف:** الحصول على جميع مواقع SharePoint التي يمكن للمستخدم الوصول إليها.
|
||||
|
||||
**المعاملات:**
|
||||
- `search` (string, اختياري): استعلام بحث لتصفية المواقع
|
||||
- `top` (integer, اختياري): عدد العناصر المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 999
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/get_site">
|
||||
**الوصف:** الحصول على معلومات حول موقع SharePoint محدد.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/get_drives">
|
||||
**الوصف:** عرض جميع مكتبات المستندات (drives) في موقع SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/get_site_lists">
|
||||
**الوصف:** الحصول على جميع القوائم في موقع SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/get_list_items">
|
||||
**الوصف:** الحصول على عناصر من قائمة SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint
|
||||
- `list_id` (string, مطلوب): معرّف القائمة
|
||||
- `expand` (string, اختياري): توسيع البيانات المرتبطة (مثال: 'fields')
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/create_list_item">
|
||||
**الوصف:** إنشاء عنصر جديد في قائمة SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint
|
||||
- `list_id` (string, مطلوب): معرّف القائمة
|
||||
- `fields` (object, مطلوب): قيم الحقول للعنصر الجديد
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/update_list_item">
|
||||
**الوصف:** تحديث عنصر في قائمة SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint
|
||||
- `list_id` (string, مطلوب): معرّف القائمة
|
||||
- `item_id` (string, مطلوب): معرّف العنصر المراد تحديثه
|
||||
- `fields` (object, مطلوب): قيم الحقول المراد تحديثها
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/delete_list_item">
|
||||
**الوصف:** حذف عنصر من قائمة SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint
|
||||
- `list_id` (string, مطلوب): معرّف القائمة
|
||||
- `item_id` (string, مطلوب): معرّف العنصر المراد حذفه
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/upload_file_to_library">
|
||||
**الوصف:** رفع ملف إلى مكتبة مستندات SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint
|
||||
- `file_path` (string, مطلوب): المسار حيث يتم رفع الملف
|
||||
- `content` (string, مطلوب): محتوى الملف المراد رفعه
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/list_files">
|
||||
**الوصف:** استرجاع الملفات والمجلدات من مكتبة مستندات SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
|
||||
- `drive_id` (string, مطلوب): معرّف مكتبة المستندات
|
||||
- `folder_id` (string, اختياري): معرّف المجلد. الافتراضي: 'root'
|
||||
- `top` (integer, اختياري): الحد الأقصى لعدد العناصر. الافتراضي: 50
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/search_files">
|
||||
**الوصف:** البحث عن الملفات والمجلدات في مكتبة مستندات SharePoint بالكلمات المفتاحية.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
|
||||
- `drive_id` (string, مطلوب): معرّف مكتبة المستندات
|
||||
- `query` (string, مطلوب): كلمات البحث المفتاحية
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/delete_file">
|
||||
**الوصف:** حذف ملف أو مجلد من مكتبة مستندات SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
|
||||
- `drive_id` (string, مطلوب): معرّف مكتبة المستندات
|
||||
- `item_id` (string, مطلوب): المعرّف الفريد للملف أو المجلد المراد حذفه
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/create_folder">
|
||||
**الوصف:** إنشاء مجلد جديد في مكتبة مستندات SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
|
||||
- `drive_id` (string, مطلوب): معرّف مكتبة المستندات
|
||||
- `folder_name` (string, مطلوب): اسم المجلد الجديد
|
||||
- `parent_id` (string, اختياري): معرّف المجلد الأصلي. الافتراضي: 'root'
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/download_file">
|
||||
**الوصف:** تحميل محتوى ملف خام من مكتبة مستندات SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
|
||||
- `drive_id` (string, مطلوب): معرّف مكتبة المستندات
|
||||
- `item_id` (string, مطلوب): المعرّف الفريد للملف المراد تحميله
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/copy_file">
|
||||
**الوصف:** نسخ ملف أو مجلد إلى موقع جديد داخل SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
|
||||
- `drive_id` (string, مطلوب): معرّف مكتبة المستندات
|
||||
- `item_id` (string, مطلوب): المعرّف الفريد للملف أو المجلد المراد نسخه
|
||||
- `destination_folder_id` (string, مطلوب): معرّف مجلد الوجهة
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_sharepoint/move_file">
|
||||
**الوصف:** نقل ملف أو مجلد إلى موقع جديد داخل SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
|
||||
- `drive_id` (string, مطلوب): معرّف مكتبة المستندات
|
||||
- `item_id` (string, مطلوب): المعرّف الفريد للملف أو المجلد المراد نقله
|
||||
- `destination_folder_id` (string, مطلوب): معرّف مجلد الوجهة
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ SharePoint
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with SharePoint capabilities
|
||||
sharepoint_agent = Agent(
|
||||
role="SharePoint Manager",
|
||||
goal="Manage SharePoint sites, lists, and documents efficiently",
|
||||
backstory="An AI assistant specialized in SharePoint content management and collaboration.",
|
||||
apps=['microsoft_sharepoint'] # All SharePoint actions will be available
|
||||
)
|
||||
|
||||
# Task to organize SharePoint content
|
||||
content_organization_task = Task(
|
||||
description="List all accessible SharePoint sites and organize content by department",
|
||||
agent=sharepoint_agent,
|
||||
expected_output="SharePoint sites listed and content organized by department"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[sharepoint_agent],
|
||||
tasks=[content_organization_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء الصلاحيات**
|
||||
|
||||
- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات المناسبة لمواقع SharePoint
|
||||
- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة (Sites.Read.All, Sites.ReadWrite.All)
|
||||
|
||||
**مشاكل معرّفات المواقع والقوائم**
|
||||
|
||||
- تحقق من صحة معرّفات المواقع والقوائم وصيغتها الصحيحة
|
||||
- استخدم إجراءات get_sites وget_site_lists لاكتشاف المعرّفات الصالحة
|
||||
|
||||
**مشاكل الحقول والمخطط**
|
||||
|
||||
- تأكد من تطابق أسماء الحقول تماماً مع مخطط قائمة SharePoint
|
||||
- تحقق من تضمين الحقول المطلوبة عند إنشاء أو تحديث عناصر القوائم
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft SharePoint
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
205
docs/edge/ar/enterprise/integrations/microsoft_teams.mdx
Normal file
205
docs/edge/ar/enterprise/integrations/microsoft_teams.mdx
Normal file
@@ -0,0 +1,205 @@
|
||||
---
|
||||
title: تكامل Microsoft Teams
|
||||
description: "التعاون الجماعي والتواصل مع تكامل Microsoft Teams لـ CrewAI."
|
||||
icon: "users"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من الوصول إلى بيانات Teams وإرسال الرسائل وإنشاء الاجتماعات وإدارة القنوات. أتمت التواصل الجماعي، وجدوِل الاجتماعات، واسترجع الرسائل، وبسّط سير عمل التعاون باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Microsoft Teams، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Microsoft مع إمكانية الوصول إلى Teams
|
||||
- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Microsoft Teams
|
||||
|
||||
### 1. ربط حساب Microsoft الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Microsoft Teams** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى Teams
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="microsoft_teams/get_teams">
|
||||
**الوصف:** الحصول على جميع الفرق التي ينتمي إليها المستخدم.
|
||||
|
||||
**المعاملات:**
|
||||
- لا توجد معاملات مطلوبة.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/get_channels">
|
||||
**الوصف:** الحصول على القنوات في فريق محدد.
|
||||
|
||||
**المعاملات:**
|
||||
- `team_id` (string, مطلوب): معرّف الفريق.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/send_message">
|
||||
**الوصف:** إرسال رسالة إلى قناة Teams.
|
||||
|
||||
**المعاملات:**
|
||||
- `team_id` (string, مطلوب): معرّف الفريق.
|
||||
- `channel_id` (string, مطلوب): معرّف القناة.
|
||||
- `message` (string, مطلوب): محتوى الرسالة.
|
||||
- `content_type` (string, اختياري): نوع المحتوى (html أو text). الافتراضي: `text`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/get_messages">
|
||||
**الوصف:** الحصول على الرسائل من قناة Teams.
|
||||
|
||||
**المعاملات:**
|
||||
- `team_id` (string, مطلوب): معرّف الفريق.
|
||||
- `channel_id` (string, مطلوب): معرّف القناة.
|
||||
- `top` (integer, اختياري): عدد الرسائل (الحد الأقصى 50). الافتراضي: `20`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/create_meeting">
|
||||
**الوصف:** إنشاء اجتماع Teams.
|
||||
|
||||
**المعاملات:**
|
||||
- `subject` (string, مطلوب): موضوع/عنوان الاجتماع.
|
||||
- `startDateTime` (string, مطلوب): وقت بداية الاجتماع (صيغة ISO 8601 مع المنطقة الزمنية).
|
||||
- `endDateTime` (string, مطلوب): وقت نهاية الاجتماع (صيغة ISO 8601 مع المنطقة الزمنية).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/get_team_members">
|
||||
**الوصف:** الحصول على أعضاء فريق محدد.
|
||||
|
||||
**المعاملات:**
|
||||
- `team_id` (string, مطلوب): المعرّف الفريد للفريق.
|
||||
- `top` (integer, اختياري): الحد الأقصى لعدد الأعضاء (1-999). الافتراضي: `100`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/create_channel">
|
||||
**الوصف:** إنشاء قناة جديدة في فريق.
|
||||
|
||||
**المعاملات:**
|
||||
- `team_id` (string, مطلوب): المعرّف الفريد للفريق.
|
||||
- `display_name` (string, مطلوب): اسم القناة. الحد الأقصى 50 حرفاً.
|
||||
- `description` (string, اختياري): وصف اختياري يشرح غرض القناة.
|
||||
- `membership_type` (string, اختياري): ظهور القناة. القيم: `standard`, `private`. الافتراضي: `standard`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/reply_to_message">
|
||||
**الوصف:** الرد على رسالة في قناة Teams.
|
||||
|
||||
**المعاملات:**
|
||||
- `team_id` (string, مطلوب): المعرّف الفريد للفريق.
|
||||
- `channel_id` (string, مطلوب): المعرّف الفريد للقناة.
|
||||
- `message_id` (string, مطلوب): المعرّف الفريد للرسالة المراد الرد عليها.
|
||||
- `message` (string, مطلوب): محتوى الرد.
|
||||
- `content_type` (string, اختياري): صيغة المحتوى. القيم: `html`, `text`. الافتراضي: `text`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/update_meeting">
|
||||
**الوصف:** تحديث اجتماع عبر الإنترنت موجود.
|
||||
|
||||
**المعاملات:**
|
||||
- `meeting_id` (string, مطلوب): المعرّف الفريد للاجتماع.
|
||||
- `subject` (string, اختياري): عنوان الاجتماع الجديد.
|
||||
- `startDateTime` (string, اختياري): وقت البداية الجديد بصيغة ISO 8601.
|
||||
- `endDateTime` (string, اختياري): وقت النهاية الجديد بصيغة ISO 8601.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_teams/delete_meeting">
|
||||
**الوصف:** حذف اجتماع عبر الإنترنت.
|
||||
|
||||
**المعاملات:**
|
||||
- `meeting_id` (string, مطلوب): المعرّف الفريد للاجتماع المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Microsoft Teams
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Microsoft Teams capabilities
|
||||
teams_agent = Agent(
|
||||
role="Teams Coordinator",
|
||||
goal="Manage Teams communication and meetings efficiently",
|
||||
backstory="An AI assistant specialized in Microsoft Teams operations and team collaboration.",
|
||||
apps=['microsoft_teams'] # All Teams actions will be available
|
||||
)
|
||||
|
||||
# Task to list teams and channels
|
||||
explore_teams_task = Task(
|
||||
description="List all teams I'm a member of and then get the channels for the first team.",
|
||||
agent=teams_agent,
|
||||
expected_output="List of teams and channels displayed."
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[teams_agent],
|
||||
tasks=[explore_teams_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء المصادقة**
|
||||
|
||||
- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات اللازمة للوصول إلى Teams.
|
||||
- النطاقات المطلوبة تشمل: `Team.ReadBasic.All`, `Channel.ReadBasic.All`, `ChannelMessage.Send`, `OnlineMeetings.ReadWrite`.
|
||||
|
||||
**إنشاء الاجتماعات**
|
||||
|
||||
- تأكد من توفير `subject` و`startDateTime` و`endDateTime`.
|
||||
- استخدم صيغة ISO 8601 مع المنطقة الزمنية لحقول التاريخ والوقت.
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft Teams
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
168
docs/edge/ar/enterprise/integrations/microsoft_word.mdx
Normal file
168
docs/edge/ar/enterprise/integrations/microsoft_word.mdx
Normal file
@@ -0,0 +1,168 @@
|
||||
---
|
||||
title: تكامل Microsoft Word
|
||||
description: "إنشاء المستندات وإدارتها مع تكامل Microsoft Word لـ CrewAI."
|
||||
icon: "file-word"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إنشاء وقراءة وإدارة مستندات Word والملفات النصية في OneDrive أو SharePoint. أتمت إنشاء المستندات، واسترجع المحتوى، وأدر خصائص المستندات، وبسّط سير عمل المستندات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Microsoft Word، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Microsoft مع إمكانية الوصول إلى Word وOneDrive/SharePoint
|
||||
- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Microsoft Word
|
||||
|
||||
### 1. ربط حساب Microsoft الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Microsoft Word** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى الملفات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="microsoft_word/get_documents">
|
||||
**الوصف:** الحصول على جميع مستندات Word من OneDrive أو SharePoint.
|
||||
|
||||
**المعاملات:**
|
||||
- `top` (integer, اختياري): عدد العناصر المراد إرجاعها (الحد الأدنى 1، الحد الأقصى 999).
|
||||
- `filter` (string, اختياري): تصفية النتائج باستخدام صيغة OData.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_word/create_text_document">
|
||||
**الوصف:** إنشاء مستند نصي (.txt) مع محتوى. يُنصح به لإنشاء المحتوى برمجياً.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_name` (string, مطلوب): اسم المستند النصي (يجب أن ينتهي بـ .txt).
|
||||
- `content` (string, اختياري): المحتوى النصي للمستند.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_word/get_document_content">
|
||||
**الوصف:** الحصول على محتوى مستند (يعمل بشكل أفضل مع الملفات النصية).
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف المستند.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_word/get_document_properties">
|
||||
**الوصف:** الحصول على خصائص وبيانات وصفية لمستند.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف المستند.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_word/delete_document">
|
||||
**الوصف:** حذف مستند.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف المستند المراد حذفه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_word/copy_document">
|
||||
**الوصف:** نسخ مستند إلى موقع جديد في OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف المستند المراد نسخه
|
||||
- `name` (string, اختياري): الاسم الجديد للمستند المنسوخ
|
||||
- `parent_id` (string, اختياري): معرّف مجلد الوجهة (الافتراضي هو الجذر)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="microsoft_word/move_document">
|
||||
**الوصف:** نقل مستند إلى موقع جديد في OneDrive.
|
||||
|
||||
**المعاملات:**
|
||||
- `file_id` (string, مطلوب): معرّف المستند المراد نقله
|
||||
- `parent_id` (string, مطلوب): معرّف مجلد الوجهة
|
||||
- `name` (string, اختياري): الاسم الجديد للمستند المنقول
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Microsoft Word
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Microsoft Word capabilities
|
||||
word_agent = Agent(
|
||||
role="Document Manager",
|
||||
goal="Manage Word documents and text files efficiently",
|
||||
backstory="An AI assistant specialized in Microsoft Word document operations and content management.",
|
||||
apps=['microsoft_word'] # All Word actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new text document
|
||||
create_doc_task = Task(
|
||||
description="Create a new text document named 'meeting_notes.txt' with content 'Meeting Notes from January 2024: Key discussion points and action items.'",
|
||||
agent=word_agent,
|
||||
expected_output="New text document 'meeting_notes.txt' created successfully."
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[word_agent],
|
||||
tasks=[create_doc_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء المصادقة**
|
||||
|
||||
- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات اللازمة للوصول إلى الملفات (`Files.Read.All`, `Files.ReadWrite.All`).
|
||||
|
||||
**مشاكل إنشاء الملفات**
|
||||
|
||||
- عند إنشاء مستندات نصية، تأكد من أن `file_name` ينتهي بامتداد `.txt`.
|
||||
- تحقق من أن لديك صلاحيات الكتابة للموقع المستهدف.
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft Word
|
||||
أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
149
docs/edge/ar/enterprise/integrations/notion.mdx
Normal file
149
docs/edge/ar/enterprise/integrations/notion.mdx
Normal file
@@ -0,0 +1,149 @@
|
||||
---
|
||||
title: تكامل Notion
|
||||
description: "إدارة المستخدمين والتعليقات مع تكامل Notion لـ CrewAI."
|
||||
icon: "book"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة المستخدمين وإنشاء التعليقات عبر Notion. يمكنك الوصول إلى معلومات مستخدمي مساحة العمل وإنشاء تعليقات على الصفحات والمناقشات، مما يبسّط سير عمل التعاون باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Notion، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Notion بصلاحيات مساحة العمل المناسبة
|
||||
- ربط حساب Notion الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
|
||||
|
||||
## إعداد تكامل Notion
|
||||
|
||||
### 1. ربط حساب Notion الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Notion** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للوصول إلى المستخدمين وإنشاء التعليقات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الإجراءات المتاحة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="notion/list_users">
|
||||
**الوصف:** عرض جميع المستخدمين في مساحة العمل.
|
||||
|
||||
**المعاملات:**
|
||||
- `page_size` (integer, اختياري): عدد العناصر في الاستجابة. الحد الأدنى: 1، الحد الأقصى: 100، الافتراضي: 100
|
||||
- `start_cursor` (string, اختياري): مؤشر للترقيم.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="notion/get_user">
|
||||
**الوصف:** استرجاع مستخدم محدد بواسطة المعرّف.
|
||||
|
||||
**المعاملات:**
|
||||
- `user_id` (string, مطلوب): معرّف المستخدم المراد استرجاعه.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="notion/create_comment">
|
||||
**الوصف:** إنشاء تعليق على صفحة أو مناقشة.
|
||||
|
||||
**المعاملات:**
|
||||
- `parent` (object, مطلوب): الصفحة الأصلية أو المناقشة للتعليق عليها.
|
||||
```json
|
||||
{
|
||||
"type": "page_id",
|
||||
"page_id": "PAGE_ID_HERE"
|
||||
}
|
||||
```
|
||||
- `rich_text` (array, مطلوب): المحتوى النصي الغني للتعليق.
|
||||
```json
|
||||
[
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "This is my comment text"
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Notion
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Notion capabilities
|
||||
notion_agent = Agent(
|
||||
role="Workspace Manager",
|
||||
goal="Manage workspace users and facilitate collaboration through comments",
|
||||
backstory="An AI assistant specialized in user management and team collaboration.",
|
||||
apps=['notion'] # All Notion actions will be available
|
||||
)
|
||||
|
||||
# Task to list workspace users
|
||||
user_management_task = Task(
|
||||
description="List all users in the workspace and provide a summary of team members",
|
||||
agent=notion_agent,
|
||||
expected_output="Complete list of workspace users with their details"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[notion_agent],
|
||||
tasks=[user_management_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
### المشاكل الشائعة
|
||||
|
||||
**أخطاء الصلاحيات**
|
||||
|
||||
- تأكد من أن حساب Notion الخاص بك لديه الصلاحيات المناسبة لقراءة معلومات المستخدمين
|
||||
- تحقق من أن لديك صلاحيات التعليق على الصفحات أو المناقشات المستهدفة
|
||||
|
||||
**مشاكل إنشاء التعليقات**
|
||||
|
||||
- تحقق من صحة معرّفات الصفحات أو المناقشات وإمكانية الوصول إليها
|
||||
- تأكد من اتباع محتوى النص الغني لمواصفات صيغة Notion API
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Notion أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
378
docs/edge/ar/enterprise/integrations/salesforce.mdx
Normal file
378
docs/edge/ar/enterprise/integrations/salesforce.mdx
Normal file
@@ -0,0 +1,378 @@
|
||||
---
|
||||
title: تكامل Salesforce
|
||||
description: "أتمتة CRM والمبيعات مع تكامل Salesforce لـ CrewAI."
|
||||
icon: "salesforce"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة علاقات العملاء وعمليات المبيعات والبيانات عبر Salesforce. أنشئ السجلات وحدّثها، وأدر العملاء المحتملين والفرص، ونفّذ استعلامات SOQL، وبسّط سير عمل CRM باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Salesforce، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Salesforce بالصلاحيات المناسبة
|
||||
- ربط حساب Salesforce الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
|
||||
|
||||
<Note>
|
||||
يتطلب Salesforce **تثبيتًا واحدًا يقوم به مسؤول النظام (admin)** لحزمة
|
||||
CrewAI في مؤسستك قبل أن يتمكن أي مستخدم من الاتصال. هذا متطلب من منصة
|
||||
Salesforce لجميع التكاملات المعتمدة على ExternalClientApp اعتبارًا من
|
||||
إصدار Spring '26 — وليس خطوة خاصة بـ CrewAI. تدليلك خطوة Connect
|
||||
Salesforce في CrewAI AMP خلال هذه العملية عند المحاولة الأولى.
|
||||
</Note>
|
||||
|
||||
## إعداد تكامل Salesforce
|
||||
|
||||
### 1. ربط حساب Salesforce الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/unified_tools).
|
||||
2. ابحث عن **Salesforce** في قسم تكاملات المصادقة.
|
||||
3. انقر على **Connect**.
|
||||
|
||||
ما يحدث بعد ذلك يعتمد على ما إذا كان مسؤول Salesforce في مؤسستك قد ثبّت
|
||||
حزمة CrewAI بالفعل:
|
||||
|
||||
- **الحزمة مثبتة بالفعل:** سيتم نقلك مباشرة إلى شاشة موافقة OAuth في
|
||||
Salesforce — اعتمدها وسيكتمل الاتصال.
|
||||
- **الحزمة غير مثبتة بعد:** سترى صفحة **Install CrewAI in Salesforce**.
|
||||
اتبع خطوات التثبيت لمرة واحدة أدناه، ثم عُد إلى CrewAI AMP وانقر على
|
||||
**Connect** مرة أخرى.
|
||||
|
||||
4. امنح الصلاحيات اللازمة لإدارة CRM والمبيعات.
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations).
|
||||
|
||||
#### تثبيت لمرة واحدة بواسطة المسؤول (مسؤول Salesforce فقط)
|
||||
|
||||
عند أول نقرة على **Connect Salesforce** من أي مستخدم في مؤسستك، تقوم CrewAI
|
||||
بإعادة توجيهك إلى صفحة تثبيت تُشير إلى حزمة CrewAI المُدارة. يحتاج مسؤول
|
||||
Salesforce إلى تثبيتها مرة واحدة فقط لكامل المؤسسة.
|
||||
|
||||
1. في صفحة التثبيت داخل CrewAI، انقر على **Install in Salesforce**. (يمكنك
|
||||
أيضًا مشاركة عنوان URL لتلك الصفحة مع المسؤول — رابط التثبيت يعمل لأي
|
||||
شخص يفتحه.)
|
||||
2. سجّل الدخول إلى Salesforce بصلاحيات مسؤول. لبيئات Sandbox، استبدل
|
||||
`login.salesforce.com` بـ `test.salesforce.com` في الرابط قبل فتحه.
|
||||
3. اختر **Install for All Users**، ووافق على إشعار تطبيقات الجهات
|
||||
الخارجية، ثم انقر **Install**.
|
||||
4. من Setup في Salesforce، ابحث عن **External Client App Manager** ←
|
||||
**CrewAI App** ← افتح علامة التبويب **Policies** ← **Edit**، واضبط
|
||||
القيم التالية:
|
||||
- **Permitted Users:** All users may self-authorize
|
||||
- **IP Relaxation:** Relax IP restrictions
|
||||
- **Refresh Token Policy:** Refresh token is valid until revoked
|
||||
5. احفظ التغييرات.
|
||||
6. عُد إلى CrewAI AMP وانقر على **Connect Salesforce** مرة أخرى. سيكتمل
|
||||
OAuth هذه المرة.
|
||||
|
||||
<Note>
|
||||
**لست مسؤول Salesforce؟** أعِد توجيه عنوان URL لصفحة التثبيت (أو رابط
|
||||
التثبيت نفسه) إلى مسؤول Salesforce لديكم واطلب منه إكمال الخطوات أعلاه.
|
||||
بمجرد انتهائه، عُد إلى CrewAI AMP وانقر على **Connect** مرة أخرى.
|
||||
</Note>
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الأدوات المتاحة
|
||||
|
||||
### **إدارة السجلات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="salesforce/create_record_contact">
|
||||
**الوصف:** إنشاء سجل جهة اتصال جديد في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `LastName` (string, مطلوب): اسم العائلة - هذا الحقل مطلوب
|
||||
- `FirstName` (string, اختياري): الاسم الأول
|
||||
- `Email` (string, اختياري): عنوان البريد الإلكتروني
|
||||
- `accountId` (string, اختياري): معرّف الحساب المرتبط
|
||||
- `Title` (string, اختياري): المسمى الوظيفي
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/create_record_lead">
|
||||
**الوصف:** إنشاء سجل عميل محتمل جديد في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `LastName` (string, مطلوب): اسم العائلة - هذا الحقل مطلوب
|
||||
- `Company` (string, مطلوب): الشركة - هذا الحقل مطلوب
|
||||
- `FirstName` (string, اختياري): الاسم الأول
|
||||
- `Email` (string, اختياري): عنوان البريد الإلكتروني
|
||||
- `Status` (string, اختياري): حالة العميل المحتمل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/create_record_opportunity">
|
||||
**الوصف:** إنشاء سجل فرصة جديد في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `Name` (string, مطلوب): اسم الفرصة - هذا الحقل مطلوب
|
||||
- `StageName` (string, اختياري): مرحلة الفرصة
|
||||
- `CloseDate` (string, اختياري): تاريخ الإغلاق بصيغة YYYY-MM-DD
|
||||
- `Amount` (string, اختياري): المبلغ المقدر للبيع
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/create_record_account">
|
||||
**الوصف:** إنشاء سجل حساب جديد في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `Name` (string, مطلوب): اسم الحساب - هذا الحقل مطلوب
|
||||
- `Website` (string, اختياري): عنوان URL للموقع الإلكتروني
|
||||
- `Phone` (string, اختياري): رقم الهاتف
|
||||
- `Description` (string, اختياري): وصف الحساب
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/create_record_task">
|
||||
**الوصف:** إنشاء سجل مهمة جديد في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `subject` (string, مطلوب): موضوع المهمة
|
||||
- `taskSubtype` (string, مطلوب): النوع الفرعي للمهمة - الخيارات: task, email, listEmail, call
|
||||
- `whatId` (string, اختياري): معرّف الحساب أو الفرصة المرتبطة
|
||||
- `Status` (string, اختياري): الحالة - الخيارات: Not Started, In Progress, Completed
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **تحديث السجلات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="salesforce/update_record_contact">
|
||||
**الوصف:** تحديث سجل جهة اتصال موجود في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف السجل المراد تحديثه
|
||||
- `FirstName` (string, اختياري): الاسم الأول
|
||||
- `LastName` (string, اختياري): اسم العائلة
|
||||
- `Email` (string, اختياري): عنوان البريد الإلكتروني
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/update_record_lead">
|
||||
**الوصف:** تحديث سجل عميل محتمل موجود في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف السجل المراد تحديثه
|
||||
- `LastName` (string, اختياري): اسم العائلة
|
||||
- `Company` (string, اختياري): اسم الشركة
|
||||
- `Status` (string, اختياري): حالة العميل المحتمل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/update_record_opportunity">
|
||||
**الوصف:** تحديث سجل فرصة موجود في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف السجل المراد تحديثه
|
||||
- `Name` (string, اختياري): اسم الفرصة
|
||||
- `StageName` (string, اختياري): مرحلة الفرصة
|
||||
- `Amount` (string, اختياري): المبلغ المقدر
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/update_record_account">
|
||||
**الوصف:** تحديث سجل حساب موجود في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف السجل المراد تحديثه
|
||||
- `Name` (string, اختياري): اسم الحساب
|
||||
- `Website` (string, اختياري): عنوان URL للموقع الإلكتروني
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **استرجاع السجلات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="salesforce/get_record_by_id_contact">
|
||||
**الوصف:** الحصول على سجل جهة اتصال بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف سجل جهة الاتصال
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/get_record_by_id_lead">
|
||||
**الوصف:** الحصول على سجل عميل محتمل بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف سجل العميل المحتمل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/get_record_by_id_opportunity">
|
||||
**الوصف:** الحصول على سجل فرصة بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف سجل الفرصة
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/get_record_by_id_account">
|
||||
**الوصف:** الحصول على سجل حساب بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordId` (string, مطلوب): معرّف سجل الحساب
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **البحث في السجلات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="salesforce/search_records_contact">
|
||||
**الوصف:** البحث عن سجلات جهات الاتصال بتصفية متقدمة.
|
||||
|
||||
**المعاملات:**
|
||||
- `filterFormula` (object, اختياري): فلتر متقدم بصيغة التعبير العادي المنفصل
|
||||
- `sortBy` (string, اختياري): حقل الفرز
|
||||
- `sortDirection` (string, اختياري): اتجاه الفرز - الخيارات: ASC, DESC
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/search_records_lead">
|
||||
**الوصف:** البحث عن سجلات العملاء المحتملين بتصفية متقدمة.
|
||||
|
||||
**المعاملات:**
|
||||
- `filterFormula` (object, اختياري): فلتر متقدم
|
||||
- `sortBy` (string, اختياري): حقل الفرز
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/search_records_opportunity">
|
||||
**الوصف:** البحث عن سجلات الفرص بتصفية متقدمة.
|
||||
|
||||
**المعاملات:**
|
||||
- `filterFormula` (object, اختياري): فلتر متقدم
|
||||
- `sortBy` (string, اختياري): حقل الفرز
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **العمليات المتقدمة**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="salesforce/write_soql_query">
|
||||
**الوصف:** تنفيذ استعلامات SOQL مخصصة على بيانات Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `query` (string, مطلوب): استعلام SOQL (مثال: "SELECT Id, Name FROM Account WHERE Name = 'Example'")
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/create_custom_object">
|
||||
**الوصف:** نشر كائن مخصص جديد في Salesforce.
|
||||
|
||||
**المعاملات:**
|
||||
- `label` (string, مطلوب): تسمية الكائن
|
||||
- `pluralLabel` (string, مطلوب): التسمية الجمعية
|
||||
- `recordName` (string, مطلوب): اسم السجل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="salesforce/describe_action_schema">
|
||||
**الوصف:** الحصول على المخطط المتوقع لعمليات على أنواع كائنات محددة.
|
||||
|
||||
**المعاملات:**
|
||||
- `recordType` (string, مطلوب): نوع السجل المراد وصفه
|
||||
- `operation` (string, مطلوب): نوع العملية (مثال: "CREATE_RECORD" أو "UPDATE_RECORD")
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Salesforce
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Salesforce capabilities
|
||||
salesforce_agent = Agent(
|
||||
role="CRM Manager",
|
||||
goal="Manage customer relationships and sales processes efficiently",
|
||||
backstory="An AI assistant specialized in CRM operations and sales automation.",
|
||||
apps=['salesforce'] # All Salesforce actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new lead
|
||||
create_lead_task = Task(
|
||||
description="Create a new lead for John Doe from Example Corp with email john.doe@example.com",
|
||||
agent=salesforce_agent,
|
||||
expected_output="Lead created successfully with lead ID"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[salesforce_agent],
|
||||
tasks=[create_lead_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### استعلامات SOQL المتقدمة وإعداد التقارير
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
data_analyst = Agent(
|
||||
role="Sales Data Analyst",
|
||||
goal="Generate insights from Salesforce data using SOQL queries",
|
||||
backstory="An analytical AI that excels at extracting meaningful insights from CRM data.",
|
||||
apps=['salesforce']
|
||||
)
|
||||
|
||||
# Complex task involving SOQL queries and data analysis
|
||||
analysis_task = Task(
|
||||
description="""
|
||||
1. Execute a SOQL query to find all opportunities closing this quarter
|
||||
2. Search for contacts at companies with opportunities over $100K
|
||||
3. Create a summary report of the sales pipeline status
|
||||
4. Update high-value opportunities with next steps
|
||||
""",
|
||||
agent=data_analyst,
|
||||
expected_output="Comprehensive sales pipeline analysis with actionable insights"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[data_analyst],
|
||||
tasks=[analysis_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Salesforce أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
196
docs/edge/ar/enterprise/integrations/shopify.mdx
Normal file
196
docs/edge/ar/enterprise/integrations/shopify.mdx
Normal file
@@ -0,0 +1,196 @@
|
||||
---
|
||||
title: تكامل Shopify
|
||||
description: "إدارة التجارة الإلكترونية والمتجر الإلكتروني مع تكامل Shopify لـ CrewAI."
|
||||
icon: "shopify"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة عمليات التجارة الإلكترونية عبر Shopify. تعامل مع العملاء والطلبات والمنتجات والمخزون وتحليلات المتجر لتبسيط أعمالك التجارية عبر الإنترنت باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Shopify، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- متجر Shopify بصلاحيات المسؤول المناسبة
|
||||
- ربط متجر Shopify الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
|
||||
|
||||
## إعداد تكامل Shopify
|
||||
|
||||
### 1. ربط متجر Shopify الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Shopify** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة المتجر والمنتجات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الأدوات المتاحة
|
||||
|
||||
### **إدارة العملاء**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="shopify/get_customers">
|
||||
**الوصف:** استرجاع قائمة العملاء من متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `customerIds` (string, اختياري): قائمة معرّفات العملاء مفصولة بفواصل
|
||||
- `limit` (string, اختياري): الحد الأقصى لعدد العملاء (الافتراضي: 250)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="shopify/create_customer">
|
||||
**الوصف:** إنشاء عميل جديد في متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `firstName` (string, مطلوب): الاسم الأول للعميل
|
||||
- `lastName` (string, مطلوب): اسم العائلة للعميل
|
||||
- `email` (string, مطلوب): عنوان البريد الإلكتروني للعميل
|
||||
- `phone` (string, اختياري): رقم الهاتف
|
||||
- `tags` (string, اختياري): الوسوم كمصفوفة أو قائمة مفصولة بفواصل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="shopify/update_customer">
|
||||
**الوصف:** تحديث عميل موجود في متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `customerId` (string, مطلوب): معرّف العميل المراد تحديثه
|
||||
- `firstName` (string, اختياري): الاسم الأول
|
||||
- `lastName` (string, اختياري): اسم العائلة
|
||||
- `email` (string, اختياري): عنوان البريد الإلكتروني
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **إدارة الطلبات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="shopify/get_orders">
|
||||
**الوصف:** استرجاع قائمة الطلبات من متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `orderIds` (string, اختياري): قائمة معرّفات الطلبات مفصولة بفواصل
|
||||
- `limit` (string, اختياري): الحد الأقصى لعدد الطلبات (الافتراضي: 250)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="shopify/create_order">
|
||||
**الوصف:** إنشاء طلب جديد في متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `email` (string, مطلوب): عنوان البريد الإلكتروني للعميل
|
||||
- `lineItems` (object, مطلوب): عناصر سطر الطلب بصيغة JSON
|
||||
- `fulfillmentStatus` (string, اختياري): حالة التنفيذ - الخيارات: fulfilled, null, partial, restocked
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="shopify/get_abandoned_carts">
|
||||
**الوصف:** استرجاع سلال التسوق المهجورة من متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `status` (string, اختياري): عرض عمليات الدفع بالحالة المحددة - الخيارات: open, closed (الافتراضي: open)
|
||||
- `limit` (string, اختياري): الحد الأقصى لعدد السلال (الافتراضي: 250)
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **إدارة المنتجات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="shopify/get_products">
|
||||
**الوصف:** استرجاع قائمة المنتجات من متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `title` (string, اختياري): تصفية حسب عنوان المنتج
|
||||
- `status` (string, اختياري): تصفية حسب الحالة - الخيارات: active, archived, draft
|
||||
- `limit` (string, اختياري): الحد الأقصى لعدد المنتجات (الافتراضي: 250)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="shopify/create_product">
|
||||
**الوصف:** إنشاء منتج جديد في متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `title` (string, مطلوب): عنوان المنتج
|
||||
- `productType` (string, مطلوب): نوع/فئة المنتج
|
||||
- `vendor` (string, مطلوب): مورد المنتج
|
||||
- `productDescription` (string, اختياري): وصف المنتج
|
||||
- `price` (string, اختياري): سعر المنتج
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="shopify/update_product">
|
||||
**الوصف:** تحديث منتج موجود في متجر Shopify.
|
||||
|
||||
**المعاملات:**
|
||||
- `productId` (string, مطلوب): معرّف المنتج المراد تحديثه
|
||||
- `title` (string, اختياري): عنوان المنتج
|
||||
- `price` (string, اختياري): سعر المنتج
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Shopify
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Shopify capabilities
|
||||
shopify_agent = Agent(
|
||||
role="E-commerce Manager",
|
||||
goal="Manage online store operations and customer relationships efficiently",
|
||||
backstory="An AI assistant specialized in e-commerce operations and online store management.",
|
||||
apps=['shopify'] # All Shopify actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new customer
|
||||
create_customer_task = Task(
|
||||
description="Create a new VIP customer Jane Smith with email jane.smith@example.com and phone +1-555-0123",
|
||||
agent=shopify_agent,
|
||||
expected_output="Customer created successfully with customer ID"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[shopify_agent],
|
||||
tasks=[create_customer_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### الحصول على المساعدة
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Shopify أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
170
docs/edge/ar/enterprise/integrations/slack.mdx
Normal file
170
docs/edge/ar/enterprise/integrations/slack.mdx
Normal file
@@ -0,0 +1,170 @@
|
||||
---
|
||||
title: تكامل Slack
|
||||
description: "التواصل الجماعي والتعاون مع تكامل Slack لـ CrewAI."
|
||||
icon: "slack"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة التواصل الجماعي عبر Slack. أرسل الرسائل، وابحث في المحادثات، وأدر القنوات، ونسّق أنشطة الفريق لتبسيط سير عمل التعاون باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Slack، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- مساحة عمل Slack بالصلاحيات المناسبة
|
||||
- ربط مساحة عمل Slack الخاصة بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
|
||||
|
||||
## إعداد تكامل Slack
|
||||
|
||||
### 1. ربط مساحة عمل Slack الخاصة بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Slack** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة للتواصل الجماعي
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الأدوات المتاحة
|
||||
|
||||
### **إدارة المستخدمين**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="slack/list_members">
|
||||
**الوصف:** عرض جميع الأعضاء في قناة Slack.
|
||||
|
||||
**المعاملات:**
|
||||
- لا توجد معاملات مطلوبة
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="slack/get_user_by_email">
|
||||
**الوصف:** البحث عن مستخدم في مساحة عمل Slack بواسطة عنوان بريده الإلكتروني.
|
||||
|
||||
**المعاملات:**
|
||||
- `email` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم في مساحة العمل
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="slack/get_users_by_name">
|
||||
**الوصف:** البحث عن المستخدمين بواسطة اسمهم أو اسم العرض.
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, مطلوب): الاسم الحقيقي للمستخدم للبحث عنه
|
||||
- `displayName` (string, مطلوب): اسم عرض المستخدم للبحث عنه
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **إدارة القنوات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="slack/list_channels">
|
||||
**الوصف:** عرض جميع القنوات في مساحة عمل Slack.
|
||||
|
||||
**المعاملات:**
|
||||
- لا توجد معاملات مطلوبة
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **المراسلة**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="slack/send_message">
|
||||
**الوصف:** إرسال رسالة إلى قناة Slack.
|
||||
|
||||
**المعاملات:**
|
||||
- `channel` (string, مطلوب): اسم القناة أو معرّفها
|
||||
- `message` (string, مطلوب): نص الرسالة المراد إرسالها
|
||||
- `botName` (string, مطلوب): اسم البوت الذي يرسل هذه الرسالة
|
||||
- `botIcon` (string, مطلوب): أيقونة البوت - يمكن أن تكون عنوان URL لصورة أو رمز تعبيري
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="slack/send_direct_message">
|
||||
**الوصف:** إرسال رسالة مباشرة إلى مستخدم محدد في Slack.
|
||||
|
||||
**المعاملات:**
|
||||
- `memberId` (string, مطلوب): معرّف المستخدم المستلم
|
||||
- `message` (string, مطلوب): نص الرسالة المراد إرسالها
|
||||
- `botName` (string, مطلوب): اسم البوت الذي يرسل هذه الرسالة
|
||||
- `botIcon` (string, مطلوب): أيقونة البوت
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **البحث والاكتشاف**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="slack/search_messages">
|
||||
**الوصف:** البحث عن الرسائل عبر مساحة عمل Slack.
|
||||
|
||||
**المعاملات:**
|
||||
- `query` (string, مطلوب): استعلام بحث باستخدام صيغة بحث Slack للعثور على الرسائل المطابقة
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Slack
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Slack capabilities
|
||||
slack_agent = Agent(
|
||||
role="Team Communication Manager",
|
||||
goal="Facilitate team communication and coordinate collaboration efficiently",
|
||||
backstory="An AI assistant specialized in team communication and workspace coordination.",
|
||||
apps=['slack'] # All Slack actions will be available
|
||||
)
|
||||
|
||||
# Task to send project updates
|
||||
update_task = Task(
|
||||
description="Send a project status update to the #general channel with current progress",
|
||||
agent=slack_agent,
|
||||
expected_output="Project update message sent successfully to team channel"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[slack_agent],
|
||||
tasks=[update_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## التواصل مع الدعم
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Slack أو
|
||||
استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
134
docs/edge/ar/enterprise/integrations/snowflake.mdx
Normal file
134
docs/edge/ar/enterprise/integrations/snowflake.mdx
Normal file
@@ -0,0 +1,134 @@
|
||||
---
|
||||
title: تكامل Snowflake
|
||||
description: "ربط وكلاء CrewAI بـ Snowflake Cortex Analyst و Cortex Search وتنفيذ SQL من خلال خادم MCP المُدار من Snowflake."
|
||||
icon: "snowflake"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
اربط وكلاء CrewAI مباشرة ببيانات Snowflake الخاصة بك من خلال [خادم MCP المُدار من Snowflake](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp). يتيح تكامل Snowflake لوكلائك الاستعلام عن البيانات المنظمة باستخدام **Cortex Analyst**، والبحث في البيانات غير المنظمة باستخدام **Cortex Search**، وتنفيذ SQL مُدار على مستودعات البيانات الخاصة بك — كل ذلك دون كتابة أو استضافة أي كود للموصّل.
|
||||
|
||||
داخلياً، تكامل Snowflake هو غلاف مُدار حول دعم [Custom MCP Server](/ar/enterprise/guides/custom-mcp-server) في CrewAI. يكشف Snowflake عن قدرات Cortex AI الخاصة به من خلال نقطة نهاية [Model Context Protocol](https://modelcontextprotocol.io/)، ويتصل CrewAI بها بشكل آمن نيابةً عنك. أي أداة تكشفها على جانب Snowflake — Cortex Analyst أو Cortex Search أو تنفيذ SQL أو Cortex Agents أو أدواتك المخصصة — تصبح متاحة لطواقمك.
|
||||
|
||||
## القدرات الرئيسية
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Cortex Analyst" icon="chart-bar">
|
||||
اطرح أسئلة بلغة طبيعية ودع [Cortex Analyst](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst) يولّد وينفذ SQL على بياناتك **المنظمة** باستخدام نماذج دلالية غنية.
|
||||
</Card>
|
||||
<Card title="Cortex Search" icon="magnifying-glass">
|
||||
استرجع البيانات **غير المنظمة** ذات الصلة لسير عمل RAG والمعرفة باستخدام [Cortex Search](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-search/cortex-search-overview)، خدمة البحث المُدارة بالكامل من Snowflake.
|
||||
</Card>
|
||||
<Card title="تنفيذ SQL" icon="database">
|
||||
نفّذ استعلامات SQL مُدارة مباشرة على مستودعات Snowflake الخاصة بك، مع وضع القراءة فقط القابل للتكوين، والمهلات الزمنية، واختيار المستودع.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
نظراً لأن التكامل يكشف عن أي أدوات ينشرها خادم MCP الخاص بك، يمكنك أيضاً كشف **Cortex Agents** و**الأدوات المخصصة** (الدوال المعرّفة من المستخدم والإجراءات المخزّنة) لوكلاء CrewAI.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Snowflake، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Snowflake مع إمكانية الوصول إلى ميزات Cortex AI
|
||||
- [خادم MCP مُدار من Snowflake](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp) مُكوّن بالأدوات التي تريد كشفها
|
||||
- صلاحيات Snowflake المناسبة (USAGE/SELECT) على خادم MCP والكائنات الأساسية
|
||||
|
||||
## إعداد خادم Snowflake MCP
|
||||
|
||||
يعمل خادم MCP المُدار من Snowflake داخل حساب Snowflake الخاص بك ويحدد الأدوات المتاحة للعملاء الخارجيين مثل CrewAI. أنشئ واحداً باستخدام أمر [`CREATE MCP SERVER`](https://docs.snowflake.com/en/sql-reference/sql/create-mcp-server)، مع سرد خدمات Cortex Search وعروض Cortex Analyst الدلالية وأدوات SQL التي تريد كشفها.
|
||||
|
||||
```sql
|
||||
CREATE MCP SERVER my_mcp_server
|
||||
FROM SPECIFICATION $$
|
||||
tools:
|
||||
- name: "sales_analyst"
|
||||
type: "CORTEX_ANALYST"
|
||||
identifier: "MY_DATABASE.MY_SCHEMA.sales_semantic_view"
|
||||
description: "Answer questions about sales metrics"
|
||||
- name: "docs_search"
|
||||
type: "CORTEX_SEARCH_SERVICE_QUERY"
|
||||
identifier: "MY_DATABASE.MY_SCHEMA.support_docs_search"
|
||||
description: "Search internal support documentation"
|
||||
- name: "run_sql"
|
||||
type: "SQL_EXECUTION"
|
||||
description: "Execute read-only SQL queries"
|
||||
$$;
|
||||
```
|
||||
|
||||
<Note>
|
||||
تتبع نقطة نهاية MCP التنسيق `https://<account_URL>/api/v2/databases/{database}/schemas/{schema}/mcp-servers/{name}`. يبني CrewAI هذا العنوان تلقائياً من **عنوان URL للحساب** و**قاعدة البيانات** و**المخطط** و**اسم خادم MCP** الذي تقدمه عند تكوين التكامل.
|
||||
</Note>
|
||||
|
||||
للمواصفات الكاملة — بما في ذلك Cortex Agents والأدوات المخصصة وحدود حجم الاستجابة وخيارات الحوكمة — راجع [وثائق خادم MCP المُدار من Snowflake](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp).
|
||||
|
||||
## ربط Snowflake في CrewAI AMP
|
||||
|
||||
<Frame>
|
||||
<img src="/images/enterprise/snowflake-configure.png" alt="تكوين تكامل Snowflake في CrewAI AMP" />
|
||||
</Frame>
|
||||
|
||||
<Steps>
|
||||
<Step title="فتح الأدوات والتكاملات">
|
||||
انتقل إلى **الأدوات والتكاملات** في الشريط الجانبي الأيسر لـ CrewAI AMP، وابحث عن **Snowflake** في قائمة التطبيقات، وافتح لوحة التكوين الخاصة به.
|
||||
</Step>
|
||||
|
||||
<Step title="تقديم تفاصيل الاتصال">
|
||||
املأ حقول الاتصال التي يستخدمها CrewAI للوصول إلى خادم Snowflake MCP الخاص بك:
|
||||
|
||||
| الحقل | مطلوب | الوصف |
|
||||
|-------|-------|-------|
|
||||
| **الاسم** | نعم | اسم وصفي لهذا الاتصال (القيمة الافتراضية `Snowflake`). |
|
||||
| **الوصف** | لا | ملخص اختياري لما يوفره هذا الاتصال. |
|
||||
| **عنوان URL للحساب** | نعم | عنوان URL لحساب Snowflake الخاص بك، مثل `xy12345.us-east-1.snowflakecomputing.com`. |
|
||||
| **قاعدة البيانات** | نعم | قاعدة البيانات التي تحتوي على خادم MCP الخاص بك (مثل `MY_DATABASE`). |
|
||||
| **المخطط** | نعم | المخطط الذي يحتوي على خادم MCP الخاص بك (مثل `MY_SCHEMA`). |
|
||||
| **اسم خادم MCP** | نعم | اسم كائن خادم MCP الذي أنشأته في Snowflake (مثل `MY_MCP_SERVER`). |
|
||||
</Step>
|
||||
|
||||
<Step title="اختيار طريقة المصادقة">
|
||||
اختر كيفية مصادقة CrewAI مع Snowflake. يُوصى باستخدام **OAuth**.
|
||||
|
||||
- **استخدام OAuth** — اتصل بشكل آمن باستخدام OAuth 2.0 للمصادقة القائمة على الرموز دون مشاركة بيانات الاعتماد الخاصة بك. يتعامل CrewAI مع تدفق التفويض الكامل ويجدد الرموز تلقائياً. انسخ **عنوان URI لإعادة التوجيه** المعروض في النموذج (`https://oauth.crewai.com/oauth/add`) وسجّله كعنوان URI لإعادة التوجيه المعتمد في [تكامل أمان OAuth](https://docs.snowflake.com/en/user-guide/oauth-custom) في Snowflake.
|
||||
- **استخدام رمز وصول شخصي** — المصادقة باستخدام [رمز وصول برمجي](https://docs.snowflake.com/en/user-guide/programmatic-access-tokens) مُنشأ من إعدادات حساب Snowflake الخاص بك. قم بتعيين دور بأقل صلاحيات للرمز للحد من التعرض.
|
||||
</Step>
|
||||
|
||||
<Step title="المصادقة">
|
||||
انقر على **المصادقة**. بالنسبة لـ OAuth، ستتم إعادة توجيهك إلى Snowflake لتفويض الوصول. بمجرد المصادقة، يظهر خادم Snowflake في قائمة الاتصالات وتصبح أدواته متاحة لطواقمك.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Tip>
|
||||
مع OAuth، يتم مصادقة كل مستخدم بشكل فردي وتُنفّذ الاستعلامات بدور `DEFAULT_ROLE` الخاص به في Snowflake. تأكد من أن المستخدمين المتصلين لديهم دور ومستودع افتراضي محدد (`ALTER USER <username> SET DEFAULT_ROLE = '<role>' DEFAULT_WAREHOUSE = '<warehouse>'`) حتى تتوفر موارد الحوسبة لأدوات Cortex Analyst و SQL.
|
||||
</Tip>
|
||||
|
||||
## استخدام أدوات Snowflake في طواقمك
|
||||
|
||||
بمجرد الاتصال، تظهر الأدوات التي يكشفها خادم MCP الخاص بك إلى جانب الاتصالات المدمجة في صفحة **الأدوات والتكاملات**. يمكنك:
|
||||
|
||||
- **تعيين الأدوات للوكلاء** في طواقمك تماماً مثل أي أداة CrewAI أخرى.
|
||||
- **إدارة الرؤية** للتحكم في أعضاء الفريق الذين يمكنهم استخدام الاتصال.
|
||||
- **تعديل أو إزالة** الاتصال في أي وقت من قائمة الاتصالات.
|
||||
|
||||
يمكن لوكلائك الآن سؤال Cortex Analyst عن المقاييس، وتشغيل Cortex Search على مستنداتك، وتنفيذ SQL — مع تدفق النتائج تلقائياً إلى استدلالهم.
|
||||
|
||||
<Warning>
|
||||
يفرض Snowflake الحوكمة على خادم MCP: يحدد التحكم في الوصول القائم على الأدوار الأدوات التي يمكن للمستخدم اكتشافها واستدعاؤها، وتنطبق حدود على حجم الاستجابة وعدد الأدوات (بحد أقصى 50 لكل خادم) وعمق التكرار. إذا فشل استدعاء أداة، تأكد من أن دور المستخدم المتصل لديه الصلاحيات المطلوبة على خادم MCP والكائنات الأساسية.
|
||||
</Warning>
|
||||
|
||||
## معرفة المزيد
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="خادم MCP المُدار من Snowflake" icon="snowflake" href="https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp">
|
||||
الوثائق الرسمية من Snowflake لإنشاء وإدارة خادم MCP.
|
||||
</Card>
|
||||
<Card title="خوادم Custom MCP في CrewAI" icon="plug" href="/ar/enterprise/guides/custom-mcp-server">
|
||||
تعرّف على كيفية اتصال CrewAI بأي خادم MCP، الأساس الذي يبني عليه تكامل Snowflake.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Card title="تحتاج مساعدة؟" icon="headset" href="mailto:support@crewai.com">
|
||||
تواصل مع فريق الدعم للحصول على المساعدة في تكامل Snowflake أو استكشاف الأخطاء وإصلاحها.
|
||||
</Card>
|
||||
202
docs/edge/ar/enterprise/integrations/stripe.mdx
Normal file
202
docs/edge/ar/enterprise/integrations/stripe.mdx
Normal file
@@ -0,0 +1,202 @@
|
||||
---
|
||||
title: تكامل Stripe
|
||||
description: "معالجة المدفوعات وإدارة الاشتراكات مع تكامل Stripe لـ CrewAI."
|
||||
icon: "stripe"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة المدفوعات والاشتراكات وفواتير العملاء عبر Stripe. تعامل مع بيانات العملاء، ومعالجة الاشتراكات، وإدارة المنتجات، وتتبع المعاملات المالية لتبسيط سير عمل المدفوعات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Stripe، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Stripe بصلاحيات API المناسبة
|
||||
- ربط حساب Stripe الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
|
||||
|
||||
## إعداد تكامل Stripe
|
||||
|
||||
### 1. ربط حساب Stripe الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Stripe** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لمعالجة المدفوعات
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الأدوات المتاحة
|
||||
|
||||
### **إدارة العملاء**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="stripe/create_customer">
|
||||
**الوصف:** إنشاء عميل جديد في حساب Stripe.
|
||||
|
||||
**المعاملات:**
|
||||
- `emailCreateCustomer` (string, مطلوب): عنوان البريد الإلكتروني للعميل
|
||||
- `name` (string, اختياري): الاسم الكامل للعميل
|
||||
- `description` (string, اختياري): وصف العميل للمرجع الداخلي
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="stripe/get_customer_by_id">
|
||||
**الوصف:** استرجاع عميل محدد بواسطة معرّف عميل Stripe.
|
||||
|
||||
**المعاملات:**
|
||||
- `idGetCustomer` (string, مطلوب): معرّف عميل Stripe المراد استرجاعه
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="stripe/get_customers">
|
||||
**الوصف:** استرجاع قائمة العملاء مع تصفية اختيارية.
|
||||
|
||||
**المعاملات:**
|
||||
- `emailGetCustomers` (string, اختياري): تصفية العملاء حسب البريد الإلكتروني
|
||||
- `limitGetCustomers` (string, اختياري): الحد الأقصى لعدد العملاء (الافتراضي: 10)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="stripe/update_customer">
|
||||
**الوصف:** تحديث معلومات عميل موجود.
|
||||
|
||||
**المعاملات:**
|
||||
- `customerId` (string, مطلوب): معرّف العميل المراد تحديثه
|
||||
- `emailUpdateCustomer` (string, اختياري): عنوان البريد الإلكتروني المحدّث
|
||||
- `name` (string, اختياري): اسم العميل المحدّث
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **إدارة الاشتراكات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="stripe/create_subscription">
|
||||
**الوصف:** إنشاء اشتراك جديد لعميل.
|
||||
|
||||
**المعاملات:**
|
||||
- `customerIdCreateSubscription` (string, مطلوب): معرّف العميل الذي سيُنشأ له الاشتراك
|
||||
- `plan` (string, مطلوب): معرّف خطة الاشتراك
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="stripe/get_subscriptions">
|
||||
**الوصف:** استرجاع الاشتراكات مع تصفية اختيارية.
|
||||
|
||||
**المعاملات:**
|
||||
- `customerIdGetSubscriptions` (string, اختياري): تصفية الاشتراكات حسب معرّف العميل
|
||||
- `subscriptionStatus` (string, اختياري): تصفية حسب حالة الاشتراك - الخيارات: incomplete, trialing, active, past_due, canceled, unpaid
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **إدارة المنتجات**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="stripe/create_product">
|
||||
**الوصف:** إنشاء منتج جديد في كتالوج Stripe.
|
||||
|
||||
**المعاملات:**
|
||||
- `productName` (string, مطلوب): اسم المنتج
|
||||
- `description` (string, اختياري): وصف المنتج
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="stripe/get_products">
|
||||
**الوصف:** استرجاع قائمة المنتجات مع تصفية اختيارية.
|
||||
|
||||
**المعاملات:**
|
||||
- `limitGetProducts` (string, اختياري): الحد الأقصى لعدد المنتجات (الافتراضي: 10)
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **العمليات المالية**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="stripe/get_balance_transactions">
|
||||
**الوصف:** استرجاع معاملات الرصيد من حساب Stripe.
|
||||
|
||||
**المعاملات:**
|
||||
- `balanceTransactionType` (string, اختياري): تصفية حسب نوع المعاملة - الخيارات: charge, refund, payment, payment_refund
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="stripe/get_plans">
|
||||
**الوصف:** استرجاع خطط الاشتراك من حساب Stripe.
|
||||
|
||||
**المعاملات:**
|
||||
- `isPlanActive` (boolean, اختياري): تصفية حسب حالة الخطة
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Stripe
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Stripe capabilities
|
||||
stripe_agent = Agent(
|
||||
role="Payment Manager",
|
||||
goal="Manage customer payments, subscriptions, and billing operations efficiently",
|
||||
backstory="An AI assistant specialized in payment processing and subscription management.",
|
||||
apps=['stripe'] # All Stripe actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new customer
|
||||
create_customer_task = Task(
|
||||
description="Create a new premium customer John Doe with email john.doe@example.com",
|
||||
agent=stripe_agent,
|
||||
expected_output="Customer created successfully with customer ID"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[stripe_agent],
|
||||
tasks=[create_customer_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
## مرجع حالات الاشتراك
|
||||
|
||||
فهم حالات الاشتراك:
|
||||
|
||||
- **incomplete** - الاشتراك يتطلب طريقة دفع أو تأكيد الدفع
|
||||
- **trialing** - الاشتراك في فترة تجريبية
|
||||
- **active** - الاشتراك نشط وحالي
|
||||
- **past_due** - فشل الدفع لكن الاشتراك لا يزال نشطاً
|
||||
- **canceled** - تم إلغاء الاشتراك
|
||||
- **unpaid** - فشل الدفع والاشتراك لم يعد نشطاً
|
||||
|
||||
يمكّن هذا التكامل أتمتة شاملة لإدارة المدفوعات والاشتراكات، مما يسمح لوكلاء الذكاء الاصطناعي بالتعامل مع عمليات الفوترة بسلاسة ضمن نظام Stripe البيئي.
|
||||
262
docs/edge/ar/enterprise/integrations/zendesk.mdx
Normal file
262
docs/edge/ar/enterprise/integrations/zendesk.mdx
Normal file
@@ -0,0 +1,262 @@
|
||||
---
|
||||
title: تكامل Zendesk
|
||||
description: "دعم العملاء وإدارة مكتب المساعدة مع تكامل Zendesk لـ CrewAI."
|
||||
icon: "headset"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
مكّن وكلاءك من إدارة عمليات دعم العملاء عبر Zendesk. أنشئ التذاكر وحدّثها، وأدر المستخدمين، وتتبع مقاييس الدعم، وبسّط سير عمل خدمة العملاء باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
|
||||
|
||||
## المتطلبات الأساسية
|
||||
|
||||
قبل استخدام تكامل Zendesk، تأكد من توفر ما يلي:
|
||||
|
||||
- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
|
||||
- حساب Zendesk بصلاحيات API المناسبة
|
||||
- ربط حساب Zendesk الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
|
||||
|
||||
## إعداد تكامل Zendesk
|
||||
|
||||
### 1. ربط حساب Zendesk الخاص بك
|
||||
|
||||
1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||||
2. ابحث عن **Zendesk** في قسم تكاملات المصادقة
|
||||
3. انقر على **Connect** وأكمل عملية OAuth
|
||||
4. امنح الصلاحيات اللازمة لإدارة التذاكر والمستخدمين
|
||||
5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
|
||||
|
||||
### 2. تثبيت الحزمة المطلوبة
|
||||
|
||||
```bash
|
||||
uv add crewai-tools
|
||||
```
|
||||
|
||||
### 3. إعداد متغير البيئة
|
||||
|
||||
<Note>
|
||||
لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
|
||||
`CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
|
||||
```
|
||||
|
||||
أو أضفه إلى ملف `.env`:
|
||||
|
||||
```
|
||||
CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
|
||||
```
|
||||
|
||||
## الأدوات المتاحة
|
||||
|
||||
### **إدارة التذاكر**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="zendesk/create_ticket">
|
||||
**الوصف:** إنشاء تذكرة دعم جديدة في Zendesk.
|
||||
|
||||
**المعاملات:**
|
||||
- `ticketSubject` (string, مطلوب): سطر موضوع التذكرة
|
||||
- `ticketDescription` (string, مطلوب): أول تعليق يظهر على التذكرة
|
||||
- `requesterName` (string, مطلوب): اسم المستخدم الذي يطلب الدعم
|
||||
- `requesterEmail` (string, مطلوب): بريد المستخدم الذي يطلب الدعم
|
||||
- `ticketType` (string, اختياري): نوع التذكرة - الخيارات: problem, incident, question, task
|
||||
- `ticketPriority` (string, اختياري): مستوى الأولوية - الخيارات: urgent, high, normal, low
|
||||
- `ticketStatus` (string, اختياري): حالة التذكرة - الخيارات: new, open, pending, hold, solved, closed
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="zendesk/update_ticket">
|
||||
**الوصف:** تحديث تذكرة دعم موجودة في Zendesk.
|
||||
|
||||
**المعاملات:**
|
||||
- `ticketId` (string, مطلوب): معرّف التذكرة المراد تحديثها
|
||||
- `requesterName` (string, مطلوب): اسم المستخدم الذي طلب هذه التذكرة
|
||||
- `requesterEmail` (string, مطلوب): بريد المستخدم الذي طلب هذه التذكرة
|
||||
- `ticketSubject` (string, اختياري): موضوع التذكرة المحدّث
|
||||
- `ticketPriority` (string, اختياري): الأولوية المحدّثة
|
||||
- `ticketStatus` (string, اختياري): الحالة المحدّثة
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="zendesk/get_ticket_by_id">
|
||||
**الوصف:** استرجاع تذكرة محددة بواسطة معرّفها.
|
||||
|
||||
**المعاملات:**
|
||||
- `ticketId` (string, مطلوب): معرّف التذكرة المراد استرجاعها
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="zendesk/add_comment_to_ticket">
|
||||
**الوصف:** إضافة تعليق أو ملاحظة داخلية إلى تذكرة موجودة.
|
||||
|
||||
**المعاملات:**
|
||||
- `ticketId` (string, مطلوب): معرّف التذكرة لإضافة التعليق إليها
|
||||
- `commentBody` (string, مطلوب): رسالة التعليق
|
||||
- `isInternalNote` (boolean, اختياري): عيّن إلى true للملاحظات الداخلية بدلاً من الردود العامة
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="zendesk/search_tickets">
|
||||
**الوصف:** البحث عن التذاكر باستخدام فلاتر ومعايير مختلفة.
|
||||
|
||||
**المعاملات:**
|
||||
- `ticketSubject` (string, اختياري): تصفية حسب النص في موضوع التذكرة
|
||||
- `ticketStatus` (string, اختياري): تصفية حسب الحالة
|
||||
- `ticketPriority` (string, اختياري): تصفية حسب الأولوية
|
||||
- `sort_by` (string, اختياري): حقل الفرز - الخيارات: created_at, updated_at, priority, status
|
||||
- `sort_order` (string, اختياري): اتجاه الفرز - الخيارات: asc, desc
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **إدارة المستخدمين**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="zendesk/create_user">
|
||||
**الوصف:** إنشاء مستخدم جديد في Zendesk.
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, مطلوب): الاسم الكامل للمستخدم
|
||||
- `email` (string, اختياري): عنوان البريد الإلكتروني
|
||||
- `phone` (string, اختياري): رقم الهاتف
|
||||
- `role` (string, اختياري): دور المستخدم - الخيارات: admin, agent, end-user
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="zendesk/update_user">
|
||||
**الوصف:** تحديث معلومات مستخدم موجود.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): معرّف المستخدم المراد تحديثه
|
||||
- `name` (string, اختياري): اسم المستخدم المحدّث
|
||||
- `email` (string, اختياري): البريد الإلكتروني المحدّث
|
||||
- `role` (string, اختياري): الدور المحدّث
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="zendesk/get_user_by_id">
|
||||
**الوصف:** استرجاع مستخدم محدد بواسطة معرّفه.
|
||||
|
||||
**المعاملات:**
|
||||
- `userId` (string, مطلوب): معرّف المستخدم المراد استرجاعه
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="zendesk/search_users">
|
||||
**الوصف:** البحث عن المستخدمين باستخدام معايير مختلفة.
|
||||
|
||||
**المعاملات:**
|
||||
- `name` (string, اختياري): تصفية حسب اسم المستخدم
|
||||
- `email` (string, اختياري): تصفية حسب البريد الإلكتروني
|
||||
- `role` (string, اختياري): تصفية حسب الدور
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### **أدوات إدارية**
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="zendesk/get_ticket_fields">
|
||||
**الوصف:** استرجاع جميع الحقول القياسية والمخصصة المتاحة للتذاكر.
|
||||
|
||||
**المعاملات:**
|
||||
- `paginationParameters` (object, اختياري): إعدادات الترقيم
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="zendesk/get_ticket_audits">
|
||||
**الوصف:** الحصول على سجلات التدقيق (السجل للقراءة فقط) للتذاكر.
|
||||
|
||||
**المعاملات:**
|
||||
- `ticketId` (string, اختياري): الحصول على سجلات التدقيق لتذكرة محددة
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## مستويات أولوية التذاكر
|
||||
|
||||
فهم مستويات الأولوية:
|
||||
|
||||
- **urgent** - مشاكل حرجة تتطلب اهتماماً فورياً
|
||||
- **high** - مشاكل مهمة يجب معالجتها بسرعة
|
||||
- **normal** - أولوية قياسية لمعظم التذاكر
|
||||
- **low** - مشاكل ثانوية يمكن معالجتها عند الإمكان
|
||||
|
||||
## سير عمل حالة التذكرة
|
||||
|
||||
تقدم حالة التذكرة القياسي:
|
||||
|
||||
- **new** - أُنشئت حديثاً، لم تُعيّن بعد
|
||||
- **open** - يتم العمل عليها بنشاط
|
||||
- **pending** - في انتظار رد العميل أو إجراء خارجي
|
||||
- **hold** - متوقفة مؤقتاً
|
||||
- **solved** - تم حل المشكلة، في انتظار تأكيد العميل
|
||||
- **closed** - اكتملت التذكرة وأُغلقت
|
||||
|
||||
## أمثلة الاستخدام
|
||||
|
||||
### إعداد Agent أساسي لـ Zendesk
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
# Create an agent with Zendesk capabilities
|
||||
zendesk_agent = Agent(
|
||||
role="Support Manager",
|
||||
goal="Manage customer support tickets and provide excellent customer service",
|
||||
backstory="An AI assistant specialized in customer support operations and ticket management.",
|
||||
apps=['zendesk'] # All Zendesk actions will be available
|
||||
)
|
||||
|
||||
# Task to create a new support ticket
|
||||
create_ticket_task = Task(
|
||||
description="Create a high-priority support ticket for John Smith who is unable to access his account after password reset",
|
||||
agent=zendesk_agent,
|
||||
expected_output="Support ticket created successfully with ticket ID"
|
||||
)
|
||||
|
||||
# Run the task
|
||||
crew = Crew(
|
||||
agents=[zendesk_agent],
|
||||
tasks=[create_ticket_task]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
|
||||
### إدارة التذاكر المتقدمة
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
|
||||
ticket_manager = Agent(
|
||||
role="Ticket Manager",
|
||||
goal="Manage support ticket workflows and ensure timely resolution",
|
||||
backstory="An AI assistant that specializes in support ticket triage and workflow optimization.",
|
||||
apps=['zendesk']
|
||||
)
|
||||
|
||||
# Task to manage ticket lifecycle
|
||||
ticket_workflow = Task(
|
||||
description="""
|
||||
1. Create a new support ticket for account access issues
|
||||
2. Add internal notes with troubleshooting steps
|
||||
3. Update ticket priority based on customer tier
|
||||
4. Add resolution comments and close the ticket
|
||||
""",
|
||||
agent=ticket_manager,
|
||||
expected_output="Complete ticket lifecycle managed from creation to resolution"
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[ticket_manager],
|
||||
tasks=[ticket_workflow]
|
||||
)
|
||||
|
||||
crew.kickoff()
|
||||
```
|
||||
99
docs/edge/ar/enterprise/introduction.mdx
Normal file
99
docs/edge/ar/enterprise/introduction.mdx
Normal file
@@ -0,0 +1,99 @@
|
||||
---
|
||||
title: "CrewAI AMP"
|
||||
description: "نشر ومراقبة وتوسيع سير عمل وكلاء الذكاء الاصطناعي"
|
||||
icon: "globe"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
## مقدمة
|
||||
|
||||
توفر منصة CrewAI AMP (منصة إدارة الوكلاء) بيئة لنشر ومراقبة وتوسيع أطقمك ووكلائك في بيئة إنتاجية.
|
||||
|
||||
<Frame>
|
||||
<img
|
||||
src="/images/enterprise/crewai-enterprise-dashboard.png"
|
||||
alt="لوحة تحكم CrewAI AMP"
|
||||
/>
|
||||
</Frame>
|
||||
|
||||
تعمل منصة CrewAI AMP على توسيع قوة إطار العمل مفتوح المصدر بميزات مصممة لعمليات النشر الإنتاجية والتعاون وقابلية التوسع. انشر أطقمك على بنية تحتية مُدارة وراقب تنفيذها في الوقت الفعلي.
|
||||
|
||||
## الميزات الرئيسية
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="نشر الأطقم" icon="rocket">
|
||||
انشر أطقمك على بنية تحتية مُدارة بنقرات قليلة
|
||||
</Card>
|
||||
<Card title="الوصول عبر API" icon="code">
|
||||
الوصول إلى أطقمك المنشورة عبر REST API للتكامل مع الأنظمة الحالية
|
||||
</Card>
|
||||
<Card title="المراقبة" icon="chart-line">
|
||||
راقب أطقمك مع تتبع تفصيلي للتنفيذ والسجلات
|
||||
</Card>
|
||||
<Card title="مستودع الأدوات" icon="toolbox">
|
||||
انشر وثبّت الأدوات لتعزيز قدرات أطقمك
|
||||
</Card>
|
||||
<Card title="بث Webhook" icon="webhook">
|
||||
بث الأحداث والتحديثات في الوقت الفعلي إلى أنظمتك
|
||||
</Card>
|
||||
<Card title="استوديو الأطقم" icon="paintbrush">
|
||||
أنشئ وخصص الأطقم باستخدام واجهة بدون كود/منخفضة الكود
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## خيارات النشر
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="تكامل GitHub" icon="github">
|
||||
اتصل مباشرة بمستودعات GitHub الخاصة بك لنشر الكود
|
||||
</Card>
|
||||
<Card title="استوديو الأطقم" icon="palette">
|
||||
انشر الأطقم المنشأة عبر واجهة استوديو الأطقم بدون كود
|
||||
</Card>
|
||||
<Card title="النشر عبر CLI" icon="terminal">
|
||||
استخدم واجهة سطر أوامر CrewAI لسير عمل نشر أكثر تقدمًا
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## البدء
|
||||
|
||||
<Steps>
|
||||
<Step title="إنشاء حساب">
|
||||
أنشئ حسابك على [app.crewai.com](https://app.crewai.com)
|
||||
<Card title="التسجيل" icon="user" href="https://app.crewai.com/signup">
|
||||
التسجيل
|
||||
</Card>
|
||||
</Step>
|
||||
<Step title="بناء طاقمك الأول">
|
||||
استخدم الكود أو استوديو الأطقم لبناء طاقمك
|
||||
<Card
|
||||
title="بناء طاقم"
|
||||
icon="paintbrush"
|
||||
href="/ar/enterprise/guides/build-crew"
|
||||
>
|
||||
بناء طاقم
|
||||
</Card>
|
||||
</Step>
|
||||
<Step title="نشر طاقمك">
|
||||
انشر طاقمك على منصة Enterprise
|
||||
<Card
|
||||
title="نشر طاقم"
|
||||
icon="rocket"
|
||||
href="/ar/enterprise/guides/deploy-to-amp"
|
||||
>
|
||||
نشر طاقم
|
||||
</Card>
|
||||
</Step>
|
||||
<Step title="الوصول إلى طاقمك">
|
||||
تكامل مع طاقمك عبر نقاط نهاية API المُنشأة
|
||||
<Card
|
||||
title="الوصول عبر API"
|
||||
icon="code"
|
||||
href="/ar/enterprise/guides/kickoff-crew"
|
||||
>
|
||||
استخدام API الطاقم
|
||||
</Card>
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
للحصول على تعليمات مفصلة، اطلع على [دليل النشر](/ar/enterprise/guides/deploy-to-amp) أو انقر على الزر أدناه للبدء.
|
||||
152
docs/edge/ar/enterprise/resources/frequently-asked-questions.mdx
Normal file
152
docs/edge/ar/enterprise/resources/frequently-asked-questions.mdx
Normal file
@@ -0,0 +1,152 @@
|
||||
---
|
||||
title: الأسئلة الشائعة
|
||||
description: "الأسئلة المتكررة حول CrewAI AMP"
|
||||
icon: "circle-question"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="كيف يتم التعامل مع تنفيذ المهام في العملية الهرمية؟">
|
||||
في العملية الهرمية، يتم إنشاء وكيل مدير تلقائيًا ينسق سير العمل، ويفوض المهام ويتحقق من النتائج لتنفيذ مبسط وفعال. يستخدم وكيل المدير الأدوات لتسهيل تفويض المهام وتنفيذها بواسطة الوكلاء تحت إشراف المدير. يُعد نموذج اللغة الخاص بالمدير (LLM) أساسيًا للعملية الهرمية ويجب إعداده بشكل صحيح لضمان العمل السليم.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="أين يمكنني الحصول على أحدث توثيق لـ CrewAI؟">
|
||||
يتوفر أحدث توثيق لـ CrewAI على موقع التوثيق الرسمي: https://docs.crewai.com/
|
||||
<Card href="https://docs.crewai.com/" icon="books">توثيق CrewAI</Card>
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="ما الاختلافات الرئيسية بين العمليات الهرمية والتسلسلية في CrewAI؟">
|
||||
#### العملية الهرمية:
|
||||
- يتم تفويض المهام وتنفيذها بناءً على سلسلة قيادة منظمة
|
||||
- يجب تحديد نموذج لغة المدير (`manager_llm`) لوكيل المدير
|
||||
- يشرف وكيل المدير على تنفيذ المهام والتخطيط والتفويض والتحقق
|
||||
- لا يتم تعيين المهام مسبقًا؛ يقوم المدير بتخصيص المهام للوكلاء بناءً على قدراتهم
|
||||
|
||||
#### العملية التسلسلية:
|
||||
- يتم تنفيذ المهام واحدة تلو الأخرى، مما يضمن إكمال المهام بتقدم منظم
|
||||
- يُستخدم مخرج مهمة واحدة كسياق للمهمة التالية
|
||||
- يتبع تنفيذ المهام الترتيب المحدد مسبقًا في قائمة المهام
|
||||
|
||||
#### أي عملية أفضل للمشاريع المعقدة؟
|
||||
العملية الهرمية أنسب للمشاريع المعقدة لأنها تسمح بـ:
|
||||
- **تخصيص وتفويض ديناميكي للمهام**: يمكن لوكيل المدير تعيين المهام بناءً على قدرات الوكلاء
|
||||
- **التحقق والإشراف المنظم**: يراجع وكيل المدير مخرجات المهام ويضمن إكمالها
|
||||
- **إدارة المهام المعقدة**: تحكم دقيق في توفر الأدوات على مستوى الوكيل
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="ما فوائد استخدام الذاكرة في إطار عمل CrewAI؟">
|
||||
- **التعلم التكيفي**: تصبح الأطقم أكثر كفاءة بمرور الوقت، حيث تتكيف مع المعلومات الجديدة وتحسن نهجها في المهام
|
||||
- **التخصيص المحسن**: تمكّن الذاكرة الوكلاء من تذكر تفضيلات المستخدم والتفاعلات السابقة، مما يؤدي إلى تجارب مخصصة
|
||||
- **تحسين حل المشكلات**: يساعد الوصول إلى مخزن ذاكرة غني الوكلاء في اتخاذ قرارات أكثر استنارة، بالاعتماد على الدروس المستفادة والرؤى السياقية
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="ما الغرض من تعيين حد أقصى لعدد الطلبات في الدقيقة (RPM) للوكيل؟">
|
||||
يمنع تعيين حد أقصى لعدد الطلبات في الدقيقة للوكيل من إجراء عدد كبير جدًا من الطلبات إلى الخدمات الخارجية، مما يساعد في تجنب حدود المعدل وتحسين الأداء.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="ما الدور الذي يلعبه المدخل البشري في تنفيذ المهام داخل طاقم CrewAI؟">
|
||||
يتيح المدخل البشري للوكلاء طلب معلومات إضافية أو توضيحات عند الحاجة. هذه الميزة ضرورية في عمليات صنع القرار المعقدة أو عندما يحتاج الوكلاء إلى مزيد من التفاصيل لإكمال مهمة بفعالية.
|
||||
|
||||
لدمج المدخل البشري في تنفيذ الوكيل، عيّن علامة `human_input` في تعريف المهمة. عند التفعيل، يطلب الوكيل من المستخدم إدخالًا قبل تقديم إجابته النهائية. يمكن أن يوفر هذا الإدخال سياقًا إضافيًا أو يوضح الغموض أو يتحقق من مخرجات الوكيل.
|
||||
|
||||
للحصول على إرشادات تنفيذ مفصلة، راجع [دليل الإنسان في الحلقة](/ar/enterprise/guides/human-in-the-loop).
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="ما خيارات التخصيص المتقدمة المتاحة لتكييف وتعزيز سلوك وقدرات الوكيل في CrewAI؟">
|
||||
يوفر CrewAI مجموعة من خيارات التخصيص المتقدمة:
|
||||
|
||||
- **تخصيص نموذج اللغة**: يمكن تخصيص الوكلاء بنماذج لغوية محددة (`llm`) ونماذج لغوية لاستدعاء الدوال (`function_calling_llm`)
|
||||
- **إعدادات الأداء والتصحيح**: ضبط أداء الوكيل ومراقبة عملياته
|
||||
- **الوضع المفصل**: يتيح تسجيلًا مفصلًا لإجراءات الوكيل، مفيد للتصحيح والتحسين
|
||||
- **حد RPM**: يحدد العدد الأقصى للطلبات في الدقيقة (`max_rpm`)
|
||||
- **الحد الأقصى للتكرارات**: تسمح خاصية `max_iter` للمستخدمين بتحديد العدد الأقصى للتكرارات التي يمكن للوكيل تنفيذها لمهمة واحدة
|
||||
- **التفويض والاستقلالية**: التحكم في قدرة الوكيل على التفويض أو طرح الأسئلة عبر خاصية `allow_delegation` (الافتراضي: True)
|
||||
- **دمج المدخل البشري**: يمكن للوكلاء طلب معلومات إضافية أو توضيحات عند الحاجة
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="في أي سيناريوهات يكون المدخل البشري مفيدًا بشكل خاص في تنفيذ الوكيل؟">
|
||||
يكون المدخل البشري مفيدًا بشكل خاص عندما:
|
||||
- **يحتاج الوكلاء إلى معلومات إضافية أو توضيحات**: عندما يواجه الوكلاء غموضًا أو بيانات غير مكتملة
|
||||
- **يحتاج الوكلاء إلى اتخاذ قرارات معقدة أو حساسة**: يمكن للمدخل البشري المساعدة في صنع القرارات الأخلاقية أو الدقيقة
|
||||
- **الإشراف والتحقق من مخرجات الوكيل**: يمكن للمدخل البشري المساعدة في التحقق من النتائج ومنع الأخطاء
|
||||
- **تخصيص سلوك الوكيل**: يمكن للمدخل البشري توفير ملاحظات لتحسين استجابات الوكيل بمرور الوقت
|
||||
- **تحديد وحل الأخطاء أو القيود**: يساعد المدخل البشري في معالجة فجوات قدرات الوكيل
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="ما أنواع الذاكرة المختلفة المتاحة في CrewAI؟">
|
||||
أنواع الذاكرة المختلفة المتاحة في CrewAI هي:
|
||||
- **الذاكرة قصيرة المدى**: تخزين مؤقت للسياق الفوري
|
||||
- **الذاكرة طويلة المدى**: تخزين دائم للأنماط والمعلومات المكتسبة
|
||||
- **ذاكرة الكيانات**: تخزين مركز على كيانات محددة وخصائصها
|
||||
- **الذاكرة السياقية**: ذاكرة تحافظ على السياق عبر التفاعلات
|
||||
|
||||
تعرف على المزيد حول أنواع الذاكرة المختلفة:
|
||||
<Card href="https://docs.crewai.com/concepts/memory" icon="brain">ذاكرة CrewAI</Card>
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="كيف أستخدم Output Pydantic في مهمة؟">
|
||||
لاستخدام Output Pydantic في مهمة، تحتاج إلى تعريف المخرج المتوقع للمهمة كنموذج Pydantic. إليك مثال سريع:
|
||||
|
||||
<Steps>
|
||||
<Step title="تعريف نموذج Pydantic">
|
||||
```python
|
||||
from pydantic import BaseModel
|
||||
|
||||
class User(BaseModel):
|
||||
name: str
|
||||
age: int
|
||||
```
|
||||
</Step>
|
||||
|
||||
<Step title="إنشاء مهمة مع Output Pydantic">
|
||||
```python
|
||||
from crewai import Task, Crew, Agent
|
||||
from my_models import User
|
||||
|
||||
task = Task(
|
||||
description="Create a user with the provided name and age",
|
||||
expected_output=User, # This is the Pydantic model
|
||||
agent=agent,
|
||||
tools=[tool1, tool2]
|
||||
)
|
||||
```
|
||||
</Step>
|
||||
|
||||
<Step title="تعيين خاصية output_pydantic في الوكيل">
|
||||
```python
|
||||
from crewai import Agent
|
||||
from my_models import User
|
||||
|
||||
agent = Agent(
|
||||
role='User Creator',
|
||||
goal='Create users',
|
||||
backstory='I am skilled in creating user accounts',
|
||||
tools=[tool1, tool2],
|
||||
output_pydantic=User
|
||||
)
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
إليك درسًا تعليميًا حول كيفية الحصول على مخرجات منظمة بشكل متسق من وكلائك:
|
||||
<iframe
|
||||
className="w-full aspect-video rounded-xl"
|
||||
src="https://www.youtube.com/embed/dNpKQk5uxHw"
|
||||
title="المخرجات المنظمة في CrewAI"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="كيف يمكنني إنشاء أدوات مخصصة لوكلاء CrewAI؟">
|
||||
يمكنك إنشاء أدوات مخصصة عن طريق إنشاء فئة فرعية من فئة `BaseTool` المقدمة من CrewAI أو باستخدام مُزخرف الأداة (tool decorator). ينطوي إنشاء الفئة الفرعية على تعريف فئة جديدة ترث من `BaseTool`، مع تحديد الاسم والوصف وطريقة `_run` للمنطق التشغيلي. يتيح لك مُزخرف الأداة إنشاء كائن `Tool` مباشرة مع الخصائص المطلوبة والمنطق الوظيفي.
|
||||
|
||||
<Card href="/ar/learn/create-custom-tools" icon="code">دليل أدوات CrewAI</Card>
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="كيف يمكنك التحكم في العدد الأقصى للطلبات في الدقيقة التي يمكن للطاقم بأكمله تنفيذها؟">
|
||||
تحدد خاصية `max_rpm` العدد الأقصى للطلبات في الدقيقة التي يمكن للطاقم تنفيذها لتجنب حدود المعدل، وستتجاوز إعدادات `max_rpm` الفردية للوكلاء إذا قمت بتعيينها.
|
||||
</Accordion>
|
||||
|
||||
</AccordionGroup>
|
||||
@@ -142,14 +142,14 @@ https://docs.crewai.com/llms.txt
|
||||
```bash
|
||||
crewai deploy --prepare
|
||||
```
|
||||
راجع [دليل التحضير](https://docs-platform.crewai.com/platform/ar/guides/prepare-for-deployment) لتفاصيل الهيكل والمتطلبات.
|
||||
راجع [دليل التحضير](/ar/enterprise/guides/prepare-for-deployment) لتفاصيل الهيكل والمتطلبات.
|
||||
</Step>
|
||||
<Step title="انشر على AMP">
|
||||
ادفع إلى منصة CrewAI AMP:
|
||||
```bash
|
||||
crewai deploy
|
||||
```
|
||||
يمكنك أيضاً النشر عبر [تكامل GitHub](https://docs-platform.crewai.com/platform/ar/guides/deploy-to-amp) أو [Crew Studio](https://docs-platform.crewai.com/platform/ar/guides/enable-crew-studio).
|
||||
يمكنك أيضاً النشر عبر [تكامل GitHub](/ar/enterprise/guides/deploy-to-amp) أو [Crew Studio](/ar/enterprise/guides/enable-crew-studio).
|
||||
</Step>
|
||||
<Step title="الوصول عبر API">
|
||||
يحصل الـ crew المنشور على نقطة نهاية REST. دمجه في أي تطبيق:
|
||||
@@ -163,10 +163,10 @@ https://docs.crewai.com/llms.txt
|
||||
</Steps>
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="النشر على AMP" icon="rocket" href="https://docs-platform.crewai.com/platform/ar/guides/deploy-to-amp">
|
||||
<Card title="النشر على AMP" icon="rocket" href="/ar/enterprise/guides/deploy-to-amp">
|
||||
دليل النشر الكامل — CLI وGitHub وCrew Studio.
|
||||
</Card>
|
||||
<Card title="مقدمة عن AMP" icon="globe" href="https://docs-platform.crewai.com/platform/ar/introduction">
|
||||
<Card title="مقدمة عن AMP" icon="globe" href="/ar/enterprise/introduction">
|
||||
نظرة على المنصة — ما يوفّره AMP لـ crews في الإنتاج.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@@ -67,13 +67,13 @@ mode: "wide"
|
||||
## رحلة المؤسسات
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="نشر الأتمتة" href="https://docs-platform.crewai.com/platform/ar/features/automations" icon="server">
|
||||
<Card title="نشر الأتمتة" href="/ar/enterprise/features/automations" icon="server">
|
||||
إدارة البيئات وإعادة النشر بأمان ومراقبة التشغيل المباشر من لوحة تحكم المؤسسات.
|
||||
</Card>
|
||||
<Card title="المحفزات والـ Flows" href="https://docs-platform.crewai.com/platform/ar/guides/automation-triggers" icon="bolt">
|
||||
<Card title="المحفزات والـ Flows" href="/ar/enterprise/guides/automation-triggers" icon="bolt">
|
||||
ربط Gmail وSlack وSalesforce والمزيد. تمرير بيانات المحفزات إلى Crews وFlows تلقائيًا.
|
||||
</Card>
|
||||
<Card title="إدارة الفريق" href="https://docs-platform.crewai.com/platform/ar/guides/team-management" icon="users-gear">
|
||||
<Card title="إدارة الفريق" href="/ar/enterprise/guides/team-management" icon="users-gear">
|
||||
دعوة أعضاء الفريق وتهيئة التحكم في الوصول المبني على الأدوار وإدارة الوصول إلى أتمتة الإنتاج.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
@@ -81,7 +81,7 @@ mode: "wide"
|
||||
## ما الجديد
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="نظرة عامة على المحفزات" href="https://docs-platform.crewai.com/platform/ar/guides/automation-triggers" icon="sparkles">
|
||||
<Card title="نظرة عامة على المحفزات" href="/ar/enterprise/guides/automation-triggers" icon="sparkles">
|
||||
نظرة شاملة موحدة على Gmail وDrive وOutlook وTeams وOneDrive وHubSpot والمزيد — الآن مع نماذج بيانات وCrews.
|
||||
</Card>
|
||||
<Card title="أدوات التكامل" href="/ar/tools/integration/overview" icon="plug">
|
||||
|
||||
@@ -75,6 +75,6 @@ mode: "wide"
|
||||
|
||||
## ميزات المؤسسات
|
||||
|
||||
<Card title="منصة إدارة HITL للـ Flow" icon="users-gear" href="https://docs-platform.crewai.com/platform/ar/features/flow-hitl-management">
|
||||
يوفر CrewAI Enterprise نظام إدارة HITL شامل لـ Flows مع مراجعة داخل المنصة وتعيين المستجيبين والأذونات وسياسات التصعيد وإدارة SLA والتوجيه الديناميكي والتحليلات الكاملة. [تعلم المزيد](https://docs-platform.crewai.com/platform/ar/features/flow-hitl-management)
|
||||
<Card title="منصة إدارة HITL للـ Flow" icon="users-gear" href="/ar/enterprise/features/flow-hitl-management">
|
||||
يوفر CrewAI Enterprise نظام إدارة HITL شامل لـ Flows مع مراجعة داخل المنصة وتعيين المستجيبين والأذونات وسياسات التصعيد وإدارة SLA والتوجيه الديناميكي والتحليلات الكاملة. [تعلم المزيد](/ar/enterprise/features/flow-hitl-management)
|
||||
</Card>
|
||||
|
||||
@@ -240,11 +240,11 @@ crewai deploy remove <deployment_id>
|
||||
</CodeGroup>
|
||||
|
||||
<Tip>
|
||||
غالبًا ما يستغرق **النشر الأول حوالي دقيقة**. المتطلبات الكاملة ومسار الواجهة الويب في [النشر على AMP](https://docs-platform.crewai.com/platform/ar/guides/deploy-to-amp).
|
||||
غالبًا ما يستغرق **النشر الأول حوالي دقيقة**. المتطلبات الكاملة ومسار الواجهة الويب في [النشر على AMP](/ar/enterprise/guides/deploy-to-amp).
|
||||
</Tip>
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="دليل النشر" icon="book" href="https://docs-platform.crewai.com/platform/ar/guides/deploy-to-amp">
|
||||
<Card title="دليل النشر" icon="book" href="/ar/enterprise/guides/deploy-to-amp">
|
||||
النشر على AMP خطوة بخطوة (CLI ولوحة التحكم).
|
||||
</Card>
|
||||
<Card
|
||||
|
||||
@@ -27,6 +27,10 @@ mode: "wide"
|
||||
|
||||
## توصيات التقوية
|
||||
|
||||
<Warning>
|
||||
تُعد فحوصات القراءة فقط المدمجة طبقة دفاع إضافية، وليست حدًا كاملًا. فهي تفحص نص العبارة، ولغة SQL تختلف باختلاف نظام قواعد البيانات: إذ يمكن لعبارة تبدأ بـ `SELECT` أن تصل إلى نظام ملفات خادم قاعدة البيانات (`SELECT ... INTO OUTFILE`، `pg_read_file()`) أو أن تستدعي دالة ذات آثار جانبية. تُحظر المنافذ المعروفة صراحةً، لكن التحكم الكامل الوحيد هو الصلاحيات التي تمنحها في `db_uri`. **وجّه الأداة إلى دور قاعدة بيانات للقراءة فقط بأقل الصلاحيات الممكنة.**
|
||||
</Warning>
|
||||
|
||||
استخدم جميع الإجراءات التالية في بيئة الإنتاج:
|
||||
|
||||
- استخدم مستخدم قاعدة بيانات للقراءة فقط كلما أمكن
|
||||
@@ -47,7 +51,21 @@ mode: "wide"
|
||||
|
||||
أي محاولة لتنفيذ عملية كتابة (`INSERT`، `UPDATE`، `DELETE`، `DROP`، `CREATE`، `ALTER`، `TRUNCATE`، إلخ) ستُسبب خطأً ما لم يتم تفعيل DML صراحةً.
|
||||
|
||||
كما تُحظر الاستعلامات متعددة العبارات التي تحتوي على فاصلة منقوطة (مثل `SELECT 1; DROP TABLE users`) في وضع القراءة فقط لمنع هجمات الحقن.
|
||||
كما يحظر وضع القراءة فقط الطرق غير المباشرة للكتابة:
|
||||
|
||||
| المحظور في وضع القراءة فقط | مثال |
|
||||
| --- | --- |
|
||||
| الاستعلامات متعددة العبارات | `SELECT 1; DROP TABLE users` |
|
||||
| تعبيرات CTE الكاتبة، بما في ذلك صيغة `MATERIALIZED` | `WITH d AS MATERIALIZED (DELETE FROM users RETURNING *) SELECT * FROM d` |
|
||||
| عملية كتابة تلي تعبير CTE | `WITH d AS (SELECT 1) DELETE FROM users` |
|
||||
| `EXPLAIN ANALYZE`، الذي ينفّذ العبارة التابعة له فعليًا | `EXPLAIN ANALYZE DELETE FROM users` |
|
||||
| الكتابة إلى نظام ملفات خادم قاعدة البيانات | `SELECT * FROM users INTO OUTFILE '/var/www/shell.php'` |
|
||||
| الدوال التي تصل إلى نظام ملفات الخادم أو تفتح اتصالًا جديدًا | `SELECT pg_read_file('/etc/passwd')`، `dblink_exec(...)` |
|
||||
| عبارة `WITH` يتعذّر تحليلها للتأكد من أنها للقراءة فقط | `WITH d AS DELETE FROM users` |
|
||||
|
||||
تُحلَّل العبارات بعد إخفاء النصوص الحرفية والتعليقات، لذا لا تُعامَل كلمة مفتاحية مخبأة داخل نص حرفي على أنها أمر (`SELECT 'DROP TABLE users'` مسموح)، ولا يُخفي تعليقٌ موضوع بين الكلمات المفتاحية أمرًا (`EXPLAIN /*x*/ ANALYZE DELETE ...` محظور). كما أن الفاصلة المنقوطة داخل نص حرفي ليست فاصلًا بين العبارات، لذا فإن `SELECT ';'` عبارة واحدة صحيحة.
|
||||
|
||||
في وضع القراءة فقط، تضع الأداة أيضًا المعاملة في حالة `SET TRANSACTION READ ONLY`، فترفض PostgreSQL وMySQL عمليات الكتابة على مستوى قاعدة البيانات مهما كانت صياغة العبارة. أما الأنظمة التي لا تدعم هذه الصيغة (SQLite، SQL Server، Snowflake) فتُسجّل رسالة تصحيح وتعود إلى الاعتماد على فحص العبارات وحده — وهذا سبب إضافي للاعتماد على دور للقراءة فقط بدلًا من التحليل النصي.
|
||||
|
||||
### تفعيل عمليات الكتابة
|
||||
|
||||
|
||||
@@ -4,27 +4,6 @@ description: "Product updates, improvements, and bug fixes for CrewAI"
|
||||
icon: "clock"
|
||||
mode: "wide"
|
||||
---
|
||||
<Update label="Jul 31, 2026">
|
||||
## v1.15.10
|
||||
|
||||
[View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.10)
|
||||
|
||||
## What's Changed
|
||||
|
||||
### Features
|
||||
- Collect skill usage events
|
||||
|
||||
### Documentation
|
||||
- Remove migrated AMP documentation
|
||||
- Update security reporting guidelines
|
||||
- Snapshot and changelog for v1.15.9
|
||||
|
||||
## Contributors
|
||||
|
||||
@gvieira, @joaomdmoura, @theCyberTech
|
||||
|
||||
</Update>
|
||||
|
||||
<Update label="Jul 29, 2026">
|
||||
## v1.15.9
|
||||
|
||||
|
||||
@@ -545,7 +545,7 @@ Higher priority settings override lower ones.
|
||||
CrewAI CLI handles authentication to the Tool Repository automatically when
|
||||
adding packages to your project. Just append `crewai` before any `uv` command
|
||||
to use it. E.g. `crewai uv add requests`. For more information, see [Tool
|
||||
Repository](https://docs-platform.crewai.com/platform/en/guides/tool-repository) docs.
|
||||
Repository](https://docs.crewai.com/enterprise/features/tool-repository) docs.
|
||||
</Tip>
|
||||
|
||||
<Note>
|
||||
|
||||
@@ -128,7 +128,7 @@ When deploying your Flow, consider the following:
|
||||
### CrewAI Enterprise
|
||||
The easiest way to deploy your Flow is using CrewAI Enterprise. It handles the infrastructure, authentication, and monitoring for you.
|
||||
|
||||
Check out the [Deployment Guide](https://docs-platform.crewai.com/platform/en/guides/deploy-to-amp) to get started.
|
||||
Check out the [Deployment Guide](/en/enterprise/guides/deploy-crew) to get started.
|
||||
|
||||
```bash
|
||||
crewai deploy create
|
||||
|
||||
227
docs/edge/en/enterprise/features/a2a.mdx
Normal file
227
docs/edge/en/enterprise/features/a2a.mdx
Normal file
@@ -0,0 +1,227 @@
|
||||
---
|
||||
title: A2A on AMP
|
||||
description: Production-grade Agent-to-Agent communication with distributed state and multi-scheme authentication
|
||||
icon: "network-wired"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Warning>
|
||||
A2A server agents on AMP are in early release. APIs may change in future versions.
|
||||
</Warning>
|
||||
|
||||
## Overview
|
||||
|
||||
CrewAI AMP extends the open-source [A2A protocol implementation](/en/learn/a2a-agent-delegation) with production infrastructure for deploying distributed agents at scale. AMP supports A2A protocol versions 0.2 and 0.3. When you deploy a crew or agent with A2A server configuration to AMP, the platform automatically provisions distributed state management, authentication, multi-transport endpoints, and lifecycle management.
|
||||
|
||||
<Note>
|
||||
For A2A protocol fundamentals, client/server configuration, and authentication schemes, see the [A2A Agent Delegation](/en/learn/a2a-agent-delegation) documentation. This page covers what AMP adds on top of the open-source implementation.
|
||||
</Note>
|
||||
|
||||
### Usage
|
||||
|
||||
Add `A2AServerConfig` to any agent in your crew and deploy to AMP. The platform detects agents with server configuration and automatically registers A2A endpoints, generates agent cards, and provisions the infrastructure described below.
|
||||
|
||||
```python
|
||||
from crewai import Agent, Crew, Task
|
||||
from crewai.a2a import A2AServerConfig
|
||||
from crewai.a2a.auth import EnterpriseTokenAuth
|
||||
|
||||
agent = Agent(
|
||||
role="Data Analyst",
|
||||
goal="Analyze datasets and provide insights",
|
||||
backstory="Expert data scientist with statistical analysis skills",
|
||||
llm="gpt-4o",
|
||||
a2a=A2AServerConfig(
|
||||
auth=EnterpriseTokenAuth()
|
||||
)
|
||||
)
|
||||
|
||||
task = Task(
|
||||
description="Analyze the provided dataset",
|
||||
expected_output="Statistical summary with key insights",
|
||||
agent=agent
|
||||
)
|
||||
|
||||
crew = Crew(agents=[agent], tasks=[task])
|
||||
```
|
||||
|
||||
After [deploying to AMP](/en/enterprise/guides/deploy-to-amp), the platform registers two levels of A2A endpoints:
|
||||
|
||||
- **Crew-level**: an aggregate agent card at `/.well-known/agent-card.json` where each agent with `A2AServerConfig` is listed as a skill, with a JSON-RPC endpoint at `/a2a`
|
||||
- **Per-agent**: isolated agent cards and JSON-RPC endpoints mounted at `/a2a/agents/{role}/`, each with its own tenancy
|
||||
|
||||
Clients can interact with the crew as a whole or target a specific agent directly. To route a request to a specific agent through the crew-level endpoint, include `"target_agent"` in the message metadata with the agent's slugified role name (e.g., `"data-analyst"` for an agent with role `"Data Analyst"`). If no `target_agent` is provided, the request is handled by the first agent in the crew.
|
||||
|
||||
See [A2A Agent Delegation](/en/learn/a2a-agent-delegation#server-configuration-options) for the full list of `A2AServerConfig` options.
|
||||
|
||||
<Warning>
|
||||
Per the A2A protocol, agent cards are publicly accessible to enable discovery. This includes both the crew-level card at `/.well-known/agent-card.json` and per-agent cards at `/a2a/agents/{role}/.well-known/agent-card.json`. Do not include sensitive information in agent names, descriptions, or skill definitions.
|
||||
</Warning>
|
||||
|
||||
### File Inputs and Structured Output
|
||||
|
||||
A2A on AMP supports passing files and requesting structured output in both directions. Clients can send files as `FilePart`s and request structured responses by embedding a JSON schema in the message. Server agents receive files as `input_files` on the task, and return structured data as `DataPart`s when a schema is provided. See [File Inputs and Structured Output](/en/learn/a2a-agent-delegation#file-inputs-and-structured-output) for details.
|
||||
|
||||
### What AMP Adds
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Distributed State" icon="database">
|
||||
Persistent task, context, and result storage
|
||||
</Card>
|
||||
<Card title="Enterprise Authentication" icon="shield-halved">
|
||||
OIDC, OAuth2, mTLS, and Enterprise token validation beyond simple bearer tokens
|
||||
</Card>
|
||||
<Card title="gRPC Transport" icon="bolt">
|
||||
Full gRPC server with TLS and authentication
|
||||
</Card>
|
||||
<Card title="Context Lifecycle" icon="clock-rotate-left">
|
||||
Automatic idle detection, expiration, and cleanup of long-running conversations
|
||||
</Card>
|
||||
<Card title="Signed Webhooks" icon="signature">
|
||||
HMAC-SHA256 signed push notifications with replay protection
|
||||
</Card>
|
||||
<Card title="Multi-Transport" icon="arrows-split-up-and-left">
|
||||
REST, JSON-RPC, and gRPC endpoints served simultaneously from a single deployment
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
---
|
||||
|
||||
## Distributed State Management
|
||||
|
||||
In the open-source implementation, task and context state lives in memory on a single process. AMP replaces this with persistent, distributed stores.
|
||||
|
||||
### Storage Layers
|
||||
|
||||
| Store | Purpose |
|
||||
|---|---|
|
||||
| **Task Store** | Persists A2A task state and metadata |
|
||||
| **Context Store** | Tracks conversation context, creation time, last activity, and associated tasks |
|
||||
| **Result Store** | Caches task results for retrieval |
|
||||
| **Push Config Store** | Manages webhook subscriptions per task |
|
||||
|
||||
Multiple A2A deployments are automatically isolated from each other, preventing data collisions when sharing infrastructure.
|
||||
|
||||
---
|
||||
|
||||
## Enterprise Authentication
|
||||
|
||||
AMP supports six authentication schemes for incoming A2A requests, configurable per deployment. Authentication works across both HTTP and gRPC transports.
|
||||
|
||||
| Scheme | Description | Use Case |
|
||||
|---|---|---|
|
||||
| **SimpleTokenAuth** | Static bearer token from `AUTH_TOKEN` env var | Development, simple deployments |
|
||||
| **EnterpriseTokenAuth** | Token verification via CrewAI PlusAPI with integration token claims | AMP-to-AMP agent communication |
|
||||
| **OIDCAuth** | OpenID Connect JWT validation with JWKS endpoint caching | Enterprise SSO integration |
|
||||
| **OAuth2ServerAuth** | OAuth2 with configurable scopes | Fine-grained access control |
|
||||
| **APIKeyServerAuth** | API key validation via header or query parameter | Third-party integrations |
|
||||
| **MTLSServerAuth** | Mutual TLS certificate-based authentication | Zero-trust environments |
|
||||
|
||||
The configured auth scheme automatically populates the agent card's `securitySchemes` and `security` fields. Clients discover authentication requirements by fetching the agent card before making requests.
|
||||
|
||||
---
|
||||
|
||||
## Extended Agent Cards
|
||||
|
||||
AMP supports role-based skill visibility through extended agent cards. Unauthenticated users see the standard agent card with public skills. Authenticated users receive an extended card with additional capabilities.
|
||||
|
||||
This enables patterns like:
|
||||
- Public agents that expose basic skills to anyone, with advanced skills available to authenticated clients
|
||||
- Internal agents that advertise different capabilities based on the caller's identity
|
||||
|
||||
---
|
||||
|
||||
## gRPC Transport
|
||||
|
||||
If enabled, AMP provides full gRPC support alongside the default JSON-RPC transport.
|
||||
|
||||
- **TLS termination** with configurable certificate and key paths
|
||||
- **gRPC reflection** for debugging with tools like `grpcurl`
|
||||
- **Authentication** using the same schemes available for HTTP
|
||||
- **Extension validation** ensuring clients support required protocol extensions
|
||||
- **Version negotiation** across A2A protocol versions 0.2 and 0.3
|
||||
|
||||
For deployments exposing multiple agents, AMP automatically allocates per-agent gRPC ports and coordinates TLS, startup, and shutdown across all servers.
|
||||
|
||||
---
|
||||
|
||||
## Context Lifecycle Management
|
||||
|
||||
AMP tracks the lifecycle of A2A conversation contexts and automatically manages cleanup.
|
||||
|
||||
### Lifecycle States
|
||||
|
||||
| State | Condition | Action |
|
||||
|---|---|---|
|
||||
| **Active** | Context has recent activity | None |
|
||||
| **Idle** | No activity for a configured period | Marked idle, event emitted |
|
||||
| **Expired** | Context exceeds its maximum lifetime | Marked expired, associated tasks cleaned up, event emitted |
|
||||
|
||||
A background cleanup task runs hourly to scan for idle and expired contexts. All state transitions emit CrewAI events that integrate with the platform's observability features.
|
||||
|
||||
---
|
||||
|
||||
## Signed Push Notifications
|
||||
|
||||
When an A2A agent sends push notifications to a client webhook, AMP signs each request with HMAC-SHA256 to ensure integrity and prevent tampering.
|
||||
|
||||
### Signature Headers
|
||||
|
||||
| Header | Purpose |
|
||||
|---|---|
|
||||
| `X-A2A-Signature` | HMAC-SHA256 signature in `sha256={hex_digest}` format |
|
||||
| `X-A2A-Signature-Timestamp` | Unix timestamp bound to the signature |
|
||||
| `X-A2A-Notification-Token` | Optional notification auth token |
|
||||
|
||||
### Security Properties
|
||||
|
||||
- **Integrity**: payload cannot be modified without invalidating the signature
|
||||
- **Replay protection**: signatures are timestamp-bound with a configurable tolerance window
|
||||
- **Retry with backoff**: failed deliveries retry with exponential backoff
|
||||
|
||||
---
|
||||
|
||||
## Distributed Event Streaming
|
||||
|
||||
In the open-source implementation, SSE streaming works within a single process. AMP propagates SSE events across instances so that clients receive updates even when the instance holding the streaming connection differs from the instance executing the task.
|
||||
|
||||
---
|
||||
|
||||
## Multi-Transport Endpoints
|
||||
|
||||
AMP serves REST and JSON-RPC by default. gRPC is available as an additional transport if enabled.
|
||||
|
||||
| Transport | Path Convention | Description |
|
||||
|---|---|---|
|
||||
| **REST** | `/v1/message:send`, `/v1/message:stream`, `/v1/tasks` | Google API conventions |
|
||||
| **JSON-RPC** | Standard A2A JSON-RPC endpoint | Default A2A protocol transport |
|
||||
| **gRPC** | Per-agent port allocation | Optional, high-performance binary protocol |
|
||||
|
||||
All active transports share the same authentication, version negotiation, and extension validation. Agent cards are generated from agent and crew metadata — roles, goals, and tools become skills and descriptions — and automatically include interfaces for each active transport. They can also be manually configured via `A2AServerConfig`.
|
||||
|
||||
---
|
||||
|
||||
## Version and Extension Negotiation
|
||||
|
||||
AMP validates A2A protocol versions and extensions at the transport layer.
|
||||
|
||||
### Version Negotiation
|
||||
|
||||
- Clients send the `A2A-Version` header with their preferred version
|
||||
- AMP validates against supported versions (0.2, 0.3) and falls back to 0.3 if unspecified
|
||||
- The negotiated version is returned in the response headers
|
||||
|
||||
### Extension Validation
|
||||
|
||||
- Clients declare supported extensions via the `X-A2A-Extensions` header
|
||||
- AMP validates that clients support all extensions the agent requires
|
||||
- Requests from clients missing required extensions receive an `UnsupportedExtensionError`
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [A2A Agent Delegation](/en/learn/a2a-agent-delegation) — A2A protocol fundamentals and configuration
|
||||
- [A2UI](/en/learn/a2ui) — Interactive UI rendering over A2A
|
||||
- [Deploy to AMP](/en/enterprise/guides/deploy-to-amp) — General deployment guide
|
||||
- [Webhook Streaming](/en/enterprise/features/webhook-streaming) — Event streaming for deployed automations
|
||||
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Watch your Automations"
|
||||
description: "Watch fleet health, LLM consumption, and per-automation behavior from the Automations tab."
|
||||
sidebarTitle: "Monitoring"
|
||||
icon: "gauge"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Info>
|
||||
**ACP (Beta) Docs Navigation**
|
||||
|
||||
- [Overview](/en/enterprise/features/agent-control-plane/overview)
|
||||
- **Monitoring** *(you are here)*
|
||||
- [Policies](/edge/en/enterprise/features/agent-control-plane/policies)
|
||||
</Info>
|
||||
|
||||
## Overview
|
||||
|
||||
The **Automations** tab is the read-only operations view of the [Agent Control Plane](/en/enterprise/features/agent-control-plane/overview). It combines two metric cards, an interactive sankey, and two sub-tables — **Automations** and **Consumption** — that you can search, filter, and sort.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
All charts and tables respect the **Last 24 hours / Last Week / Last 30 days** selector at the top right. Deltas compare the selected window against the previous one of the same length.
|
||||
|
||||
<Note>
|
||||
Rows only show data for deployments on **crewAI v1.13 or higher** — older deployments appear in the *"We've detected N other automations that we can't display"* banner under the sankey and contribute zero metrics until they're updated and re-deployed. See [Overview — Requirements](/en/enterprise/features/agent-control-plane/overview#requirements).
|
||||
</Note>
|
||||
|
||||
## Dashboard
|
||||
|
||||
The header of the page has two metric cards and an interactive sankey. Clicking either card switches the sankey between two modes:
|
||||
|
||||
- **Health mode** — `Total Automations → status buckets (Critical / Warning / Healthy)`. Click a bucket to filter the Automations table to just those deployments.
|
||||
- **Consumption mode** — `Model Providers → Automations → Total Cost`. Click a provider to filter the Consumption table to that provider.
|
||||
|
||||
| Card | What it shows |
|
||||
|------|---------------|
|
||||
| **Automations** | `active` automations (and total count), total `errors` in the window, currently `active executions` (and total in the window), with a delta vs the previous period. |
|
||||
| **Consumption** | Total `cost` and `tokens used`, with a cost delta vs the previous period. |
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## Automations table
|
||||
|
||||
The **Automations** sub-tab is the per-deployment breakdown of fleet health. Each row is one deployed crew or flow.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
| Column | What it shows |
|
||||
|--------|---------------|
|
||||
| **Automation** | Deployment name and any tags assigned to it (e.g. `production`, `financial`). |
|
||||
| **Last execution** | Time since the most recent run. |
|
||||
| **Health Status Breakdown** | Stacked bar of `Critical` / `Warning` / `Healthy` percentages for executions in the window. |
|
||||
| **Executions with Errors** | Total failed executions in the window. |
|
||||
| **PII detection applied** | `Yes` if a per-deployment PII config or a matching [PII policy](/edge/en/enterprise/features/agent-control-plane/policies) is active. |
|
||||
| **Executions** | Total executions in the window. |
|
||||
| **Last updated** | When the deployment was last re-deployed. |
|
||||
| **Crew Version** | The `crewai` version reported by the deployment. An info icon next to versions below `1.13` flags rows that can't contribute metrics. |
|
||||
|
||||
Search by name, filter by `Status` (`Healthy` / `Warning` / `Critical`), and sort by any column header. Click a deployment name to open the **Automation panel** (see below).
|
||||
|
||||
## Consumption table
|
||||
|
||||
The **Consumption** sub-tab is the per-deployment breakdown of LLM spend and token usage.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
| Column | What it shows |
|
||||
|--------|---------------|
|
||||
| **Automation** | Deployment name. |
|
||||
| **Last execution** | Time since the most recent run. |
|
||||
| **Tokens used** | One row per LLM provider used by this automation, with the delta vs the previous period. |
|
||||
| **Cost** | Cost per LLM provider, with the delta vs the previous period. |
|
||||
| **Total cost** | Sum across all providers, with the delta. |
|
||||
| **Executions** | Total executions in the window. |
|
||||
| **Last updated** | When the deployment was last re-deployed. |
|
||||
| **Crew Version** | The `crewai` version reported by the deployment. |
|
||||
|
||||
Filter by **LLM provider** and sort by `Cost`, `Executions`, or `Last run`.
|
||||
|
||||
<Info>
|
||||
**Empty cells (`—` or `$0.00`) usually mean the deployment is below crewAI v1.13.** In the screenshot above, *Automation F* (`1.7.0`) and *Automation I* (`1.12.2`) show blanks for tokens and cost — their executions still run, but they don't emit the provider-level telemetry that powers this table. Update and re-deploy these crews to start collecting consumption data.
|
||||
</Info>
|
||||
|
||||
## Related
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Agent Control Plane — Overview" icon="book-open" href="/en/enterprise/features/agent-control-plane/overview">
|
||||
What ACP is, requirements, plan tiers, and RBAC.
|
||||
</Card>
|
||||
<Card title="Agent Control Plane — Policies" icon="shield-check" href="/edge/en/enterprise/features/agent-control-plane/policies">
|
||||
Apply organization-wide PII Redaction policies across many automations.
|
||||
</Card>
|
||||
<Card title="Traces" icon="timeline" href="/en/enterprise/features/traces">
|
||||
Drill into a single execution to see agent reasoning, tool calls, and token usage.
|
||||
</Card>
|
||||
<Card title="Deploy to AMP" icon="rocket" href="/en/enterprise/guides/deploy-to-amp">
|
||||
Deploy a crew on a crewAI version that supports the Agent Control Plane.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Card title="Need Help?" icon="headset" href="mailto:support@crewai.com">
|
||||
Contact our support team for help interpreting metrics in the Agent Control Plane.
|
||||
</Card>
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
title: Agent Control Plane Overview
|
||||
description: "Single operations hub for live automations — fleet health, LLM consumption, and organization-wide policies in one place."
|
||||
sidebarTitle: Overview
|
||||
icon: "book-open"
|
||||
---
|
||||
|
||||
<Info>
|
||||
**ACP (Beta) Docs Navigation**
|
||||
|
||||
- **Overview** *(you are here)*
|
||||
- [Monitoring](/en/enterprise/features/agent-control-plane/monitoring)
|
||||
- [Policies](/edge/en/enterprise/features/agent-control-plane/policies)
|
||||
</Info>
|
||||
|
||||
## Overview
|
||||
|
||||
The **Agent Control Plane** (ACP) is the operations hub for everything you have running on CrewAI AMP. It is a single screen — split into **Automations** and **Policies** tabs — that lets your team:
|
||||
|
||||
- Monitor the **health** of every live automation (crew or flow), with `Critical` / `Warning` / `Healthy` breakdowns and execution counts.
|
||||
- Track **LLM consumption** — tokens and cost — per automation, per provider, and per model, with a delta vs the previous period.
|
||||
- Drill into any single automation or model provider for time-series charts and per-provider breakdowns.
|
||||
- Apply organization-wide **Policies** (today: PII Redaction and Cost Limit) across many automations at once instead of editing each deployment individually.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
<Note>
|
||||
The Agent Control Plane is currently labeled **Beta** in CrewAI Platform.
|
||||
</Note>
|
||||
|
||||
The two tabs answer two different questions:
|
||||
|
||||
- **Automations** — *"How is my fleet behaving right now, and what is it costing me?"* See [Monitoring](/en/enterprise/features/agent-control-plane/monitoring).
|
||||
- **Policies** — *"How do I enforce a policy (e.g. PII redaction or a spend budget) across many deployments without re-deploying each one?"* See [Policies](/edge/en/enterprise/features/agent-control-plane/policies).
|
||||
|
||||
## Requirements
|
||||
|
||||
<Warning>
|
||||
**crewAI v1.13 or higher** is required for an automation to populate any data on this page — health, executions, errors, tokens, and cost all flow through telemetry that lit up in `crewai==1.13`. Older deployments appear in the *"We've detected N other automations that we can't display"* banner and contribute zero rows until they are updated and re-deployed.
|
||||
</Warning>
|
||||
|
||||
<Warning>
|
||||
**Enterprise Plan or Ultra Plan** is required to create or edit **PII Redaction** [Policies](/edge/en/enterprise/features/agent-control-plane/policies). Lower-tier organizations can open the Policies tab and view existing policies, but the PII editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction policies require an Enterprise plan."* **Cost Limit** policies and Monitoring (the Automations tab) are available on all plans where the feature is enabled.
|
||||
</Warning>
|
||||
|
||||
- The **Agent Control Plane** feature must be enabled for your organization. If you don't see it in the sidebar, ask your account owner to request enablement.
|
||||
- Inside ACP, [RBAC](/en/enterprise/features/rbac) governs access: `read` to view the dashboard and policies, `manage` to create, edit, toggle, or delete policies.
|
||||
- All charts and tables can be scoped to the **Last 24 hours**, **Last Week**, or **Last 30 days** using the time selector at the top right. Deltas (`↑ 8 vs yesterday`, `↓ $20.57 vs yesterday`, etc.) compare the selected window against the previous one of the same length.
|
||||
|
||||
## What you can do here
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Monitoring" icon="gauge" href="/en/enterprise/features/agent-control-plane/monitoring">
|
||||
Watch fleet health and LLM spend with metric cards, an interactive sankey, per-automation tables, and drill-down side panels for any automation or provider.
|
||||
</Card>
|
||||
<Card title="Policies" icon="shield-check" href="/edge/en/enterprise/features/agent-control-plane/policies">
|
||||
Apply organization-wide PII Redaction and Cost Limit policies scoped by tools and tags. Changes take effect on the next execution — no re-deploy required.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Related
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Traces" icon="timeline" href="/en/enterprise/features/traces">
|
||||
Drill into a single execution to see agent reasoning, tool calls, and token usage.
|
||||
</Card>
|
||||
<Card title="RBAC" icon="users" href="/en/enterprise/features/rbac">
|
||||
Manage who can read the Agent Control Plane and who can edit policies.
|
||||
</Card>
|
||||
<Card title="PII Redaction for Traces" icon="lock" href="/en/enterprise/features/pii-trace-redactions">
|
||||
Entity catalog and per-deployment PII configuration referenced by Policies.
|
||||
</Card>
|
||||
<Card title="Deploy to AMP" icon="rocket" href="/en/enterprise/guides/deploy-to-amp">
|
||||
Deploy a crew on a crewAI version that supports the Agent Control Plane.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Card title="Need Help?" icon="headset" href="mailto:support@crewai.com">
|
||||
Contact our support team for help interpreting metrics or designing policies.
|
||||
</Card>
|
||||
@@ -0,0 +1,176 @@
|
||||
---
|
||||
title: "Set up the Policies"
|
||||
description: "Apply organization-wide policies across many automations from a single place."
|
||||
sidebarTitle: "Policies"
|
||||
icon: "shield-check"
|
||||
mode: "wide"
|
||||
---
|
||||
|
||||
<Info>
|
||||
**ACP (Beta) Docs Navigation**
|
||||
|
||||
- [Overview](/en/enterprise/features/agent-control-plane/overview)
|
||||
- [Monitoring](/en/enterprise/features/agent-control-plane/monitoring)
|
||||
- **Policies** *(you are here)*
|
||||
</Info>
|
||||
|
||||
## Overview
|
||||
|
||||
Policies let you enforce organization-wide controls — today **PII Redaction** and **Cost Limit** — across many automations at once, instead of configuring each deployment individually. Open the **Policies** tab in the [Agent Control Plane](/en/enterprise/features/agent-control-plane/overview) to manage them.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
Each policy card shows the name, description, the **scope** the policy applies to (selected tools and tags), and a count of **engaged automations** — deployments that currently match the scope. The toggle on the right enables or disables the policy without deleting it.
|
||||
|
||||
## Requirements
|
||||
|
||||
<Warning>
|
||||
**Enterprise Plan or Ultra Plan** is required to create or edit **PII Redaction** policies. Lower-tier organizations can still open the Policies tab and view existing policies, but the PII editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction policies require an Enterprise plan."* — contact your account owner or sales to upgrade. **Cost Limit** policies are **not** plan-gated and can be created on any plan where the Agent Control Plane is enabled.
|
||||
</Warning>
|
||||
|
||||
- The **Agent Control Plane** feature must be enabled for your organization. See [Overview — Requirements](/en/enterprise/features/agent-control-plane/overview#requirements).
|
||||
- The `manage` [RBAC permission](/en/enterprise/features/rbac) on Agent Control Plane is required to create, edit, toggle, or delete policies. The `read` permission is enough to view them.
|
||||
- All policy changes are versioned for auditing.
|
||||
|
||||
## Policy types
|
||||
|
||||
Every policy is one of the types below. Open the tab for the policy you want to enforce.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="PII Redaction">
|
||||
Applies PII redaction to executions of every matching automation, using the same entity catalog and custom recognizers documented in [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions).
|
||||
|
||||
<Warning>
|
||||
Creating or editing PII Redaction policies requires an **Enterprise** or **Ultra** plan. On lower tiers the PII editor renders read-only with an "Enterprise" lock pill.
|
||||
</Warning>
|
||||
|
||||
**Configuration** — in the **PII Mask Type** table, check each entity type you want covered and choose how to handle it:
|
||||
|
||||
- **Mask** — replaces the match with the entity label (e.g. `<CREDIT_CARD>`).
|
||||
- **Redact** — removes the matched text entirely.
|
||||
|
||||
See [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions) for the full entity catalog and how to add organization-level custom recognizers.
|
||||
</Tab>
|
||||
|
||||
<Tab title="Cost Limit">
|
||||
Emails the recipients you choose when a matching automation's LLM spend exceeds a budget threshold in the selected period. Available on **all plans** where the Agent Control Plane is enabled — it is not Enterprise-gated.
|
||||
|
||||
<Warning>
|
||||
Cost Limit policies are **notify-only**. They never pause, throttle, or stop a run — they only send an email so a human can decide what to do. Adjust the budget or remove the policy if you no longer want the alert.
|
||||
</Warning>
|
||||
|
||||
**Configuration**
|
||||
|
||||
| Field | Description |
|
||||
|-------|-------------|
|
||||
| **Budget period** | The window spend is measured over: **Daily**, **Weekly**, or **Monthly** (default *Monthly*). Spend resets at the start of each calendar period. |
|
||||
| **Threshold (USD)** | The dollar amount that triggers an alert. Must be greater than `0`. The alert fires once the automation's spend for the current period exceeds this value. |
|
||||
| **Recipient emails** | Up to 50 email addresses. Type an address and press **Enter** or comma to add it as a chip; **Backspace** removes the last chip. These do not need to be CrewAI users. |
|
||||
| **Notify roles** | Optionally select organization [roles](/en/enterprise/features/rbac); the alert is sent to every member of the chosen roles. Roles with no members can't be selected. You must provide at least one recipient — an email or a role. |
|
||||
| **Re-alert frequency** | How often the alert can re-fire while an automation stays over budget: **Once per period**, **Every hour while over**, **Every 4h while over**, or **Daily while over**. Re-alerts are capped at 24 per period. |
|
||||
|
||||
**How spend is measured and matched**
|
||||
|
||||
- The threshold is evaluated **per automation**, not summed across the whole scope. Each engaged automation has its own running total for the period.
|
||||
- A policy can match many automations via its conditions (tools/tags), and a single automation can be covered by **multiple** Cost Limit policies at once. Each policy tracks its own budget and alert state independently — they don't merge.
|
||||
- A background check compares each engaged automation's period-to-date spend against the threshold and sends the email when it's exceeded. Because the check runs periodically, expect a short delay between crossing the threshold and the email arriving.
|
||||
|
||||
**The alert email**
|
||||
|
||||
When an automation goes over budget, recipients get an email summarizing the overage — the automation name, the **current spend**, the **budget threshold**, and how far over it is in both dollars and percent (e.g. `$0.38` current vs a `$0.10` budget = `+277%`). The email reiterates that the run was **not** paused.
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
More policy types will be added over time.
|
||||
|
||||
## Creating a policy
|
||||
|
||||
<Tabs>
|
||||
<Tab title="PII Redaction">
|
||||
<Frame>
|
||||
<img src="/images/enterprise/acp-policies-new-side-panel.png" alt="New Policy side panel configured for PII Redaction with the PII mask type table" width="450" />
|
||||
</Frame>
|
||||
</Tab>
|
||||
<Tab title="Cost Limit">
|
||||
<Frame>
|
||||
<img src="/images/enterprise/acp-policies-edit-cost-limit.png" alt="New Policy side panel configured for Cost Limit with budget period, threshold, and recipient emails" width="450" />
|
||||
</Frame>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Steps>
|
||||
<Step title="Open the editor">
|
||||
Click **+ Create new** at the top-right of the Policies tab, or **View Details** on an existing policy card.
|
||||
</Step>
|
||||
|
||||
<Step title="Name and describe the policy">
|
||||
Give the policy a clear name (e.g. *Mask PII (CC)* or *Monthly $100 budget*) and a description explaining when it applies. Both show up on the policy card and in the Engaged Automations modal.
|
||||
</Step>
|
||||
|
||||
<Step title="Pick the type">
|
||||
Choose **PII Redaction** or **Cost Limit**. The type determines which configuration section appears below the conditions. The type is fixed once the policy is created — to switch, create a new policy.
|
||||
</Step>
|
||||
|
||||
<Step title="Set the conditions">
|
||||
Conditions decide which automations the policy engages with. Both are optional and use **set-equality** semantics:
|
||||
|
||||
- **Tools** — only automations whose tool set **exactly matches** the selected tools will engage. Picks from Studio apps, MCPs, OSS tools, and Tool Repository registry tools.
|
||||
- **Automations** — only automations whose tag set **exactly matches** the selected tags will engage.
|
||||
|
||||
Leaving a picker empty means "no filter on this dimension". Leaving both empty means the policy applies to **every** automation in the organization.
|
||||
</Step>
|
||||
|
||||
<Step title="Configure the type-specific section">
|
||||
The editor shows the configuration for the type you picked — the **PII Mask Type** table for PII Redaction, or the budget fields for Cost Limit. See [Policy types](#policy-types) for what each field does.
|
||||
</Step>
|
||||
|
||||
<Step title="Save">
|
||||
The policy applies to **future** executions of every engaged automation as soon as you save. No re-deploy is needed.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Engaged automations
|
||||
|
||||
Click **Engaged N automations** on any policy card to see exactly which deployments the policy is currently matching, along with each one's last execution.
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
This is the fastest way to sanity-check a policy's scope before enabling it — for example, to confirm that a policy scoped to the `production` tag isn't accidentally matching a staging deployment.
|
||||
|
||||
## Org-wide policies vs per-deployment settings
|
||||
|
||||
Both PII Redaction and Cost Limit can be configured in two places: org-wide as a Policy on this page, or per-deployment under that deployment's **Settings**. When an enabled org-wide policy's scope matches a deployment, the policy takes precedence over the deployment-owned setting while it's attached.
|
||||
|
||||
| Policy | Per-deployment setting | What an attached org-wide policy does |
|
||||
|--------|------------------------|-------------------------------------|
|
||||
| **PII Redaction** | **Settings → PII Protection** ([guide](/en/enterprise/features/pii-trace-redactions)) | The policy's entity configuration **overrides** the deployment's PII settings for that deployment's executions. |
|
||||
| **Cost Limit** | **Settings → Cost Alerts** | The deployment's manual cost alert is **paused** and the attached cost policy(s) fire instead. The per-deployment form stays editable as a fallback. |
|
||||
|
||||
Disable or detach the policy (or change its scope so it no longer matches) and the deployment falls back to its own per-deployment settings.
|
||||
|
||||
Prefer org-wide policies when you want to enforce a consistent policy across many deployments; reserve per-deployment configuration for one-off exceptions.
|
||||
|
||||
## Related
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Agent Control Plane — Overview" icon="book-open" href="/en/enterprise/features/agent-control-plane/overview">
|
||||
What ACP is, requirements, plan tiers, and RBAC.
|
||||
</Card>
|
||||
<Card title="Agent Control Plane — Monitoring" icon="gauge" href="/en/enterprise/features/agent-control-plane/monitoring">
|
||||
Monitor automations and LLM consumption across your fleet.
|
||||
</Card>
|
||||
<Card title="PII Redaction for Traces" icon="lock" href="/en/enterprise/features/pii-trace-redactions">
|
||||
Entity catalog, custom recognizers, and per-deployment configuration.
|
||||
</Card>
|
||||
<Card title="RBAC" icon="users" href="/en/enterprise/features/rbac">
|
||||
Manage who can create or edit policies.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Card title="Need Help?" icon="headset" href="mailto:support@crewai.com">
|
||||
Contact our support team for help designing policies for your organization.
|
||||
</Card>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user