mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-02 21:58:11 +00:00
* feat: adopt directory-based docs versioning with Edge channel Switch docs.crewai.com from navigation-only versioning (every version selector entry rendered the same docs/<lang>/* source files) to Mintlify's directory-based versioning so each version selector entry renders its own snapshot. Add an "Edge" channel under docs/edge/<lang>/* that always reflects main HEAD for unreleased work, eliminating pre-release leakage onto frozen release labels. External links to canonical /<lang>/* URLs are preserved via wildcard redirects that always land on the current default version. Layout: - docs/edge/<lang>/* rolling source (you edit here) - docs/edge/enterprise-api.*.yaml - docs/v<X.Y.Z>/<lang>/* frozen, immutable snapshots - docs/v<X.Y.Z>/enterprise-api.*.yaml - docs/images/ shared, append-only - docs/docs.json nav + redirects URLs follow the Mintlify-idiomatic shape: /edge/<lang>/<page> for Edge, /v<X.Y.Z>/<lang>/<page> for every frozen snapshot. The wildcard redirects /<lang>/:slug* -> /<default>/<lang>/:slug* keep stale links working, and every freeze rewrites them (plus all per-section/per-page redirects) so destinations always resolve to the current default without depending on a second redirect hop. Release flow integration (devtools release): - New module crewai_devtools.docs_versioning.freeze() materialises docs/v<X.Y.Z>/ from docs/edge/, rewrites openapi: refs inside the snapshot, inserts the version into every language block in docs.json, and refreshes all redirect destinations. - _update_docs_and_create_pr() in cli.py now calls that freeze during Phase 2 of devtools release. Edge changelogs are updated first (so the snapshot freeze picks them up), then the snapshot is staged alongside docs.json, branched as docs/freeze-v<X.Y.Z>, and the PR is titled [docs-freeze] docs: snapshot and changelog for v<X.Y.Z> — the title prefix the new CI guard reads. - The PR still gates tag, GitHub release, PyPI publish, and the enterprise release as before; no new PRs are added. - Pre-releases (1.X.YaN, 1.X.YbN, ...) skip the snapshot — they ride Edge — and the docs PR title omits the [docs-freeze] prefix. - docs_check (AI-generated docs scaffolding) writes to docs/edge/<lang>/* so newly-generated unreleased docs land in Edge and never accidentally touch a frozen snapshot. Migration scripts (one-shot): - scripts/docs/freeze_historical_versions.py reconstructs all 16 historical snapshots (v1.10.0 .. v1.14.7) from git tags via git archive | tar, rewriting openapi: MDX refs so each snapshot reads its own enterprise-api YAML rather than the live one. - scripts/docs/prefix_version_paths.py one-shot-migrates docs.json: rewrites every page path in 16 versioned blocks to point under docs/v<X.Y.Z>/, inserts a new Edge entry per language, tags v1.14.7 as Latest (default), prunes pages whose target file doesn't exist in the snapshot (e.g. docs/ar/ didn't exist before v1.12.0), and writes the wildcard + per-section redirects. - scripts/docs/freeze_current_edge.py is now a thin CLI wrapper around docs_versioning.freeze for manual one-off freezes (e.g. retroactively snapshotting a forgotten release). CI guards (.github/workflows/docs-snapshots.yml): - Frozen snapshots under docs/v[0-9]*/ are immutable; only PRs whose title contains [docs-freeze] (i.e. release-cut PRs generated by devtools release or the manual wrapper) may modify them. - Images under docs/images/ are append-only since snapshots share a single image directory. Deleting or renaming an image breaks every historical snapshot that still references it. Restored docs/images/crewai-otel-export.png from PR #3673; it was deleted in PR #4908 but v1.10.0 / v1.10.1 snapshots still reference it. Restoring instead of editing the snapshots preserves historical rendering fidelity and validates the new append-only rule retroactively. Tests: - lib/devtools/tests/test_docs_versioning.py covers the freeze: file copy, openapi rewrite, version insertion, default demotion, redirect upserts, per-section redirect rewriting, idempotency, and invalid inputs. Verified locally with mintlify broken-links: 0 broken links across the full site (Edge + 16 frozen versions, 4 locales). AGENTS.md (repo root) is the contributor guide for the new model; RELEASING.md is the release-cut runbook; README's Contribution section links to both. Co-authored-by: Cursor <cursoragent@cursor.com> * style: resolve linter issues --------- Co-authored-by: Cursor <cursoragent@cursor.com>
379 lines
15 KiB
Plaintext
379 lines
15 KiB
Plaintext
---
|
|
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>
|