---
name: Salesforce CRM
priority: 2
keywords: salesforce, sf, sfdc, force.com, lightning, soql, لياد, lead, opportunity, opportunities, account, contact, salesforce crm
---

# Salesforce CRM Integration

## متى تستخدم / When to use
أي طلب يخص Salesforce: leads, accounts, contacts, opportunities, custom objects، أو SOQL queries، أو تحديث records بالـbulk.

## المصادقة
- **Connected App + OAuth2**: عادةً username/password flow أو client_credentials.
- خزّن: `SF_TOKEN`, `SF_INSTANCE` (مثل `https://yourcompany.my.salesforce.com`)
- Base: `$SF_INSTANCE/services/data/v60.0`

## العمليات الأساسية

### SOQL Queries (الأقوى)
```bash
# آخر 10 leads
exec_command "curl -s -G -H 'Authorization: Bearer $SF_TOKEN' \
  --data-urlencode 'q=SELECT Id, FirstName, LastName, Email, Phone, Status FROM Lead ORDER BY CreatedDate DESC LIMIT 10' \
  '$SF_INSTANCE/services/data/v60.0/query'"

# Opportunities المغلقة الفائزة هذا الشهر
exec_command "curl -s -G -H 'Authorization: Bearer $SF_TOKEN' \
  --data-urlencode 'q=SELECT Id, Name, Amount, StageName, CloseDate FROM Opportunity WHERE StageName=\"Closed Won\" AND CloseDate = THIS_MONTH' \
  '$SF_INSTANCE/services/data/v60.0/query'"

# بحث عن account بالاسم
exec_command "curl -s -G -H 'Authorization: Bearer $SF_TOKEN' \
  --data-urlencode 'q=SELECT Id, Name, Phone, BillingCity FROM Account WHERE Name LIKE \"%TaseesAI%\"' \
  '$SF_INSTANCE/services/data/v60.0/query'"
```

### Create / Update
```bash
# إنشاء Lead
exec_command "curl -s -X POST -H 'Authorization: Bearer $SF_TOKEN' -H 'Content-Type: application/json' \
  -d '{\"FirstName\":\"Ahmed\",\"LastName\":\"Al-Saudi\",\"Email\":\"ahmed@example.com\",\"Company\":\"TaseesAI\",\"Phone\":\"+966500000000\",\"Status\":\"Open - Not Contacted\",\"LeadSource\":\"Web\"}' \
  '$SF_INSTANCE/services/data/v60.0/sobjects/Lead/'"

# تحديث Opportunity stage
exec_command "curl -s -X PATCH -H 'Authorization: Bearer $SF_TOKEN' -H 'Content-Type: application/json' \
  -d '{\"StageName\":\"Closed Won\",\"CloseDate\":\"2026-05-30\"}' \
  '$SF_INSTANCE/services/data/v60.0/sobjects/Opportunity/$OPP_ID'"

# تحويل Lead إلى Account/Contact/Opportunity
exec_command "curl -s -X POST -H 'Authorization: Bearer $SF_TOKEN' -H 'Content-Type: application/json' \
  -d '{\"leadId\":\"$LEAD_ID\",\"convertedStatus\":\"Qualified\"}' \
  '$SF_INSTANCE/services/data/v60.0/sobjects/LeadConvert'"
```

### Bulk operations (للأعداد الكبيرة)
استخدم Bulk API 2.0: `$SF_INSTANCE/services/data/v60.0/jobs/ingest`. 
إنشاء job → upload CSV → close → poll status. مفيد لاستيراد آلاف الـleads.

## التقارير
```bash
# قائمة التقارير المتاحة
exec_command "curl -s -H 'Authorization: Bearer $SF_TOKEN' '$SF_INSTANCE/services/data/v60.0/analytics/reports'"

# تشغيل تقرير معين
exec_command "curl -s -H 'Authorization: Bearer $SF_TOKEN' '$SF_INSTANCE/services/data/v60.0/analytics/reports/$REPORT_ID'"
```

## أمثلة / Examples
- "كم Lead جديد هذا الأسبوع" → SOQL: `WHERE CreatedDate = THIS_WEEK AND IsConverted=false`.
- "أنشئ Lead لـ ahmed@... من حملة Snapchat" → POST بـLeadSource='Snapchat'.
- "حوّل Lead 00Q... إلى Opportunity" → POST LeadConvert.
- "تقرير الإيرادات هذا الربع" → SOQL مجموع `Amount` على Opportunities `WHERE CloseDate = THIS_QUARTER AND StageName='Closed Won'`.

## القواعد الذهبية
- ❌ **ممنوع** الـmass delete بدون نسخة احتياطية (Salesforce يحتفظ بحذف 15 يوم في Recycle Bin، لكن لا تعتمد).
- ❌ **لا تستخدم WHERE غير مقيد** على objects كبيرة (ممكن يطلع 10K+ records).
- ✅ **استخدم `LIMIT`** دائماً في SOQL.
- ✅ **سجّل CreatedById = Muassis** عبر custom field عشان تتبع نشاط الوكيل.
