Salesforce Connector
Salesforce Connector
เชื่อมต่อ Salesforce CRM กับ Brevo ผ่าน Tajo สำหรับการซิงค์ผู้ติดต่อระดับองค์กร การจัดการลีด การติดตามโอกาส และระบบอัตโนมัติทางการตลาดที่ขับเคลื่อนด้วยข้อมูล CRM ของคุณ
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | Salesforce |
| หมวดหมู่ | CRM |
| ความซับซ้อนในการตั้งค่า | ขั้นสูง |
| การผสานรวมอย่างเป็นทางการ | ใช่ |
| ข้อมูลที่ซิงค์ | ผู้ติดต่อ ลีด บัญชี โอกาส เหตุการณ์ |
| API Base URL | https://yourInstance.salesforce.com/services/data/vXX.0 |
ฟีเจอร์
- การซิงค์ผู้ติดต่อ/ลีดแบบสองทิศทาง - ซิงค์ผู้ติดต่อและลีด Salesforce กับรายการผู้ติดต่อ Brevo
- การติดตามโอกาส - แมปขั้นตอนดีลและจำนวนเงินสำหรับการแบ่งกลุ่มตามรายได้
- ลำดับชั้นบัญชี - ซิงค์บัญชีบริษัทสำหรับการตลาดตามบัญชีใน Brevo
- การแมปอ็อบเจกต์แบบกำหนดเอง - แมป Salesforce custom objects กับแอตทริบิวต์และเหตุการณ์ Brevo
- การซิงค์สมาชิกแคมเปญ - ซิงค์สมาชิกแคมเปญ Salesforce กับรายการ Brevo
- การติดตามกิจกรรม - ซิงค์งาน เหตุการณ์ และกิจกรรมอีเมลสำหรับการให้คะแนนการมีส่วนร่วม
- การสตรีมแบบเรียลไทม์ - ใช้ Salesforce Streaming API สำหรับการอัปเดตข้อมูลทันที
- รองรับ SOQL query - กรองข้อมูลที่ซิงค์ด้วย SOQL queries แบบกำหนดเอง
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- Salesforce org (ฉบับใดก็ได้ที่มีสิทธิ์เข้าถึง API)
- Connected App ที่กำหนดค่าใน Salesforce Setup
- เปิดใช้การเข้าถึง API สำหรับโปรไฟล์ผู้ใช้ Salesforce ของคุณ
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo
การยืนยันตัวตน
OAuth 2.0 Web Server Flow (แนะนำ)
เหมาะที่สุดสำหรับการผสานรวมในการผลิตที่มีการอนุญาตจากผู้ใช้
# Step 1: Authorizehttps://login.salesforce.com/services/oauth2/authorize? response_type=code& client_id={consumer_key}& redirect_uri={callback_url}
# Step 2: Exchange code for tokenscurl -X POST https://login.salesforce.com/services/oauth2/token \ -d "grant_type=authorization_code" \ -d "code={auth_code}" \ -d "client_id={consumer_key}" \ -d "client_secret={consumer_secret}" \ -d "redirect_uri={callback_url}"Username-Password Flow
สำหรับการผสานรวมระหว่างเซิร์ฟเวอร์โดยไม่ต้องมีการโต้ตอบจากผู้ใช้
curl -X POST https://login.salesforce.com/services/oauth2/token \ -d "grant_type=password" \ -d "client_id={consumer_key}" \ -d "client_secret={consumer_secret}" \ -d "username={username}" \ -d "password={password}{security_token}"Security Token
Salesforce กำหนดให้ต่อท้าย security token กับรหัสผ่านของคุณสำหรับ username-password flow รีเซ็ต token ของคุณจาก Setup > My Personal Information > Reset My Security Token
การกำหนดค่า
การตั้งค่าพื้นฐาน
connectors: salesforce: enabled: true instance_url: "https://yourorg.my.salesforce.com" api_version: "v59.0" auth: type: oauth2 consumer_key: "${SF_CONSUMER_KEY}" consumer_secret: "${SF_CONSUMER_SECRET}" refresh_token: "${SF_REFRESH_TOKEN}"
# Data sync options sync: contacts: true leads: true accounts: true opportunities: true campaigns: true
# Sync direction direction: salesforce_to_brevo
# Brevo list assignment lists: all_leads: 15 qualified_leads: 16 customers: 17การแมปฟิลด์
แมปฟิลด์ Salesforce กับแอตทริบิวต์ผู้ติดต่อ Brevo:
การแมปค่าเริ่มต้น
| Parameter | Type | Description |
|---|---|---|
Email required | string | อีเมลผู้ติดต่อ/ลีด (ตัวระบุเฉพาะสำหรับ Brevo) |
FirstName optional | string | แมปกับแอตทริบิวต์ FIRSTNAME ใน Brevo |
LastName optional | string | แมปกับแอตทริบิวต์ LASTNAME ใน Brevo |
Phone optional | string | แมปกับแอตทริบิวต์ SMS สำหรับการส่งข้อความ WhatsApp/SMS |
Account.Name optional | string | ชื่อบัญชี/บริษัทที่เกี่ยวข้อง |
LeadSource optional | string | แหล่งที่มาการได้มาซึ่งลีด |
StageName optional | string | ขั้นตอนโอกาสสำหรับการติดตามดีล |
OwnerId optional | string | ตัวแทนขายที่ได้รับมอบหมายสำหรับการกำหนดเส้นทาง |
การแมปฟิลด์แบบกำหนดเอง
field_mapping: # Standard fields Email: email FirstName: FIRSTNAME LastName: LASTNAME Phone: SMS
# CRM fields LeadSource: LEAD_SOURCE Lead_Score__c: LEAD_SCORE Account.Name: COMPANY_NAME Account.Industry: INDUSTRY
# Opportunity fields Amount: DEAL_VALUE StageName: DEAL_STAGE CloseDate: EXPECTED_CLOSE_DATE
# Custom fields Preferred_Channel__c: PREFERRED_CHANNEL Customer_Tier__c: VIP_TIERAPI Endpoints
REST API Resources
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /services/data/vXX.0/sobjects/Contact | Query ผู้ติดต่อ |
POST | /services/data/vXX.0/sobjects/Contact | สร้างผู้ติดต่อ |
PATCH | /services/data/vXX.0/sobjects/Contact/{id} | อัปเดตผู้ติดต่อ |
GET | /services/data/vXX.0/sobjects/Lead | Query ลีด |
GET | /services/data/vXX.0/sobjects/Account | Query บัญชี |
GET | /services/data/vXX.0/sobjects/Opportunity | Query โอกาส |
GET | /services/data/vXX.0/query?q={SOQL} | ดำเนิน SOQL query |
POST | /services/data/vXX.0/composite/sobjects | สร้าง/อัปเดตแบบ Batch |
Bulk API
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
POST | /services/data/vXX.0/jobs/ingest | สร้าง bulk ingest job |
PUT | /services/data/vXX.0/jobs/ingest/{jobId}/batches | อัปโหลดข้อมูล batch |
GET | /services/data/vXX.0/jobs/ingest/{jobId} | ตรวจสอบสถานะ job |
Streaming API
| Endpoint | คำอธิบาย |
|---|---|
/cometd/XX.0 | CometD long-polling สำหรับเหตุการณ์แบบเรียลไทม์ |
| PushTopic | สมัครรับการเปลี่ยนแปลงบันทึกผ่าน SOQL-based topics |
| Change Data Capture | สตรีมการเปลี่ยนแปลงระดับฟิลด์แบบละเอียด |
| Platform Events | สถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์แบบกำหนดเอง |
เหตุการณ์
เหตุการณ์บันทึก (Change Data Capture)
| เหตุการณ์ | ทริกเกอร์ | กรณีใช้งาน |
|---|---|---|
ContactChangeEvent | สร้าง/อัปเดต/ลบผู้ติดต่อ | การซิงค์ผู้ติดต่อแบบเรียลไทม์ |
LeadChangeEvent | สร้าง/อัปเดต/แปลงลีด | การติดตามวงจรชีวิตลีด |
OpportunityChangeEvent | เปลี่ยนขั้นตอนโอกาส | ระบบอัตโนมัติไปป์ไลน์ดีล |
AccountChangeEvent | แก้ไขบันทึกบัญชี | การซิงค์ข้อมูลบริษัท |
Platform Events
| เหตุการณ์ | ทริกเกอร์ | กรณีใช้งาน |
|---|---|---|
Lead_Converted__e | แปลงลีดเป็นผู้ติดต่อ | การบ่มเพาะหลังการแปลง |
Deal_Won__e | โอกาสปิดสำเร็จ | โฟลว์การเริ่มต้นใช้งานลูกค้า |
Deal_Lost__e | โอกาสปิดไม่สำเร็จ | แคมเปญดึงลูกค้ากลับ |
ตัวอย่างโค้ด
เริ่มต้น Connector
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Salesforceawait tajo.connectors.connect('salesforce', { instanceUrl: 'https://yourorg.my.salesforce.com', consumerKey: process.env.SF_CONSUMER_KEY, consumerSecret: process.env.SF_CONSUMER_SECRET, refreshToken: process.env.SF_REFRESH_TOKEN});ซิงค์ผู้ติดต่อด้วยตัวกรอง SOQL
// Sync only qualified leads from Salesforceawait tajo.connectors.sync('salesforce', { type: 'filtered', resources: ['leads'], filter: "SELECT Id, Email, FirstName, LastName, LeadScore__c FROM Lead WHERE Status = 'Qualified' AND Email != null", brevoListId: 16});
// Check sync statusconst status = await tajo.connectors.status('salesforce');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsSynced: 18400,// leadsSynced: 7200,// opportunitiesSynced: 3100// }การสตรีมแบบเรียลไทม์
// Subscribe to Salesforce Change Data Captureawait tajo.connectors.stream('salesforce', { channels: [ '/data/ContactChangeEvent', '/data/LeadChangeEvent', '/data/OpportunityChangeEvent' ], handler: async (event) => { console.log(`Change detected: ${event.entity} ${event.changeType}`); // Automatically synced to Brevo by Tajo }});ขีดจำกัดอัตรา
ขีดจำกัด Salesforce REST API ขึ้นอยู่กับฉบับและจำนวนใบอนุญาตของคุณ:
| ฉบับ | คำขอ API ต่อ 24 ชั่วโมง |
|---|---|
| Developer | 15,000 |
| Enterprise | 1,000 ต่อใบอนุญาตผู้ใช้ (ขั้นต่ำ 15,000) |
| Unlimited | 5,000 ต่อใบอนุญาตผู้ใช้ (ขั้นต่ำ 15,000) |
| Performance | 5,000 ต่อใบอนุญาตผู้ใช้ (ขั้นต่ำ 15,000) |
ขีดจำกัดเพิ่มเติม:
- ขีดจำกัด Concurrent API: 25 คำขอที่ทำงานนาน
- Bulk API: 15,000 batches ต่อ 24 ชั่วโมง
- Streaming API: 2,000 เหตุการณ์ต่อวัน (สามารถเพิ่มได้)
- Composite API: 25 subrequests ต่อ composite request
การตรวจสอบการใช้งาน API
ตรวจสอบการใช้งาน API ของคุณใน Salesforce Setup > System Overview Tajo ใช้ bulk API สำหรับการซิงค์ขนาดใหญ่เพื่อประหยัดขีดจำกัด API ของคุณ
การแก้ไขปัญหา
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| INVALID_SESSION_ID | Token หมดอายุ | รีเฟรช OAuth token โดยอัตโนมัติ |
| REQUEST_LIMIT_EXCEEDED | ถึงขีดจำกัด API รายวัน | ใช้ Bulk API หรือลดความถี่ในการซิงค์ |
| FIELD_INTEGRITY_EXCEPTION | ฟิลด์ที่จำเป็นหายไป | แมปฟิลด์ที่จำเป็นทั้งหมดในการกำหนดค่า |
| DUPLICATES_DETECTED | กฎรายการซ้ำใช้งานอยู่ | กำหนดค่าการตั้งค่าการจัดการรายการซ้ำ |
| INSUFFICIENT_ACCESS | สิทธิ์อ็อบเจกต์ขาดหาย | ให้สิทธิ์ API เข้าถึงในโปรไฟล์ Salesforce |
โหมด Debug
เปิดใช้การบันทึกข้อมูลแบบละเอียด:
connectors: salesforce: debug: true log_level: verbose log_api_calls: trueทดสอบการเชื่อมต่อ
tajo connectors test salesforce# ✓ OAuth token valid# ✓ Contacts accessible# ✓ Leads accessible# ✓ Accounts accessible# ✓ Opportunities accessible# ✓ Bulk API enabledแนวทางปฏิบัติที่ดีที่สุด
- ใช้ Bulk API สำหรับการซิงค์ขนาดใหญ่ - เปลี่ยนเป็น Bulk API 2.0 สำหรับชุดข้อมูลที่มีมากกว่า 2,000 รายการ
- ใช้ Change Data Capture - ใช้ CDC สำหรับการซิงค์แบบเรียลไทม์แทนการ polling
- แมปเฉพาะฟิลด์ที่จำเป็น - ลดการใช้งาน API โดยซิงค์เฉพาะฟิลด์ที่จำเป็น
- จัดการการรีเฟรช token - ใช้ตรรกะการรีเฟรช OAuth token โดยอัตโนมัติ
- ใช้ composite requests - รวมการเรียก API ที่เกี่ยวข้องเพื่อลดจำนวนคำขอ
- ทดสอบใน sandbox ก่อน - ใช้ Salesforce sandbox org ก่อนการใช้งานจริง
ความปลอดภัย
- OAuth 2.0 - การอนุญาตตามมาตรฐานอุตสาหกรรมพร้อมประเภทการอนุญาตหลายแบบ
- ข้อจำกัด IP - Salesforce รองรับช่วง IP การเข้าสู่ระบบและการตั้งค่า IP ที่เชื่อถือได้
- TLS 1.2+ - การสื่อสาร API ทั้งหมดเข้ารหัสด้วย TLS 1.2 ขั้นต่ำ
- ความปลอดภัยระดับฟิลด์ - การควบคุมการเข้าถึงฟิลด์แบบละเอียดต่อโปรไฟล์
- การจัดการ Session - การหมดเวลา session ที่กำหนดค่าได้และขีดจำกัด session พร้อมกัน