Trình Kết Nối Salesforce
Trình Kết Nối Salesforce
Kết nối Salesforce với Brevo qua Tajo để hợp nhất dữ liệu CRM doanh nghiệp với marketing automation, đồng bộ leads và liên hệ, và kết nối kết quả bán hàng với mức độ tương tác marketing.
Tổng Quan
| Thuộc Tính | Giá Trị |
|---|---|
| Nền Tảng | Salesforce |
| Danh Mục | CRM |
| Độ Phức Tạp Thiết Lập | Nâng Cao |
| Tích Hợp Chính Thức | Có |
| Dữ Liệu Đồng Bộ | Liên Hệ, Leads, Cơ Hội, Sự Kiện |
| URL API Cơ Sở | https://[instance].salesforce.com/services/data/v58.0 |
Tính Năng
- Đồng bộ liên hệ và lead - Đồng bộ hai chiều giữa Salesforce và Brevo
- Theo dõi cơ hội - Ánh xạ giai đoạn cơ hội sang vòng đời liên hệ Brevo
- Đồng bộ tài khoản - Liên kết dữ liệu tài khoản Salesforce với hồ sơ công ty Brevo
- Tích hợp campaign - Ánh xạ thành viên Salesforce Campaign sang danh sách Brevo
- Truy vấn SOQL - Đồng bộ đối tượng tùy chỉnh qua Salesforce Object Query Language
- Bulk API - Xuất và nhập dữ liệu khối lượng lớn hiệu quả
- Streaming API - Nhận cập nhật thời gian thực qua Platform Events
- Custom Objects - Đồng bộ bất kỳ đối tượng Salesforce tùy chỉnh nào
Yêu Cầu
Trước khi bắt đầu, hãy đảm bảo bạn có:
- Tài khoản Salesforce (Professional, Enterprise, Unlimited, hoặc Developer)
- Người dùng tích hợp với quyền API
- Connected App với OAuth 2.0 đã cấu hình
- Tài khoản Brevo với quyền truy cập API
- Tài khoản Tajo
Xác Thực
OAuth 2.0 (Khuyến Nghị)
Salesforce sử dụng OAuth 2.0 cho xác thực API.
# Bước 1: Authorization URLhttps://login.salesforce.com/services/oauth2/authorize ?response_type=code &client_id=YOUR_CONSUMER_KEY &redirect_uri=YOUR_CALLBACK_URL
# Bước 2: Đổi mã lấy tokencurl -X POST https://login.salesforce.com/services/oauth2/token \ -d "grant_type=authorization_code" \ -d "client_id=CONSUMER_KEY" \ -d "client_secret=CONSUMER_SECRET" \ -d "redirect_uri=CALLBACK_URL" \ -d "code=AUTHORIZATION_CODE"Xác Thực Username-Password
Cho server-to-server (ít được khuyến nghị hơn):
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=YOUR_USERNAME" \ -d "password=YOUR_PASSWORD_PLUS_SECURITY_TOKEN"Security Token
Khi xác thực bằng username/password từ IP không tin cậy, nối Security Token vào sau mật khẩu. Lấy trong Salesforce Settings > My Personal Information > Reset My Security Token.
Cấu Hình
Thiết Lập Cơ Bản
connectors: salesforce: enabled: true instance_url: "https://yourorg.salesforce.com" oauth: client_id: "${SF_CONSUMER_KEY}" client_secret: "${SF_CONSUMER_SECRET}" refresh_token: "${SF_REFRESH_TOKEN}"
# Tùy chọn đồng bộ dữ liệu sync: contacts: true leads: true opportunities: true accounts: true campaigns: true
# Ánh xạ danh sách Brevo list_mapping: "All Contacts": 10 "Marketing Qualified": 11 "Sales Qualified": 12Ánh Xạ Trường
Ánh xạ trường Salesforce sang thuộc tính liên hệ Brevo:
Ánh Xạ Mặc Định
| Parameter | Type | Description |
|---|---|---|
Email required | string | Địa chỉ email liên hệ (định danh duy nhất) |
FirstName optional | string | Ánh xạ sang thuộc tính FIRSTNAME |
LastName optional | string | Ánh xạ sang thuộc tính LASTNAME |
Phone optional | string | Ánh xạ sang thuộc tính SMS |
Account.Name optional | string | Tên tài khoản liên quan |
LeadSource optional | string | Nguồn gốc của lead |
Status optional | string | Trạng thái lead hoặc liên hệ |
Ánh Xạ Trường Tùy Chỉnh
field_mapping: # Trường tiêu chuẩn Email: email FirstName: FIRSTNAME LastName: LASTNAME Phone: SMS
# Trường CRM Account.Name: COMPANY_NAME LeadSource: LEAD_SOURCE Status: LEAD_STATUS
# Trường cơ hội Opportunity.Amount: DEAL_VALUE Opportunity.StageName: DEAL_STAGE
# Trường tùy chỉnh Custom_Plan__c: PLAN_TYPE Custom_Industry__c: INDUSTRYAPI Endpoints
REST API
| Phương Thức | Endpoint | Mô Tả |
|---|---|---|
GET | /services/data/v58.0/sobjects/Contact | Metadata đối tượng liên hệ |
GET | /services/data/v58.0/query?q=SOQL | Truy vấn SOQL |
POST | /services/data/v58.0/sobjects/Contact | Tạo liên hệ |
PATCH | /services/data/v58.0/sobjects/Contact/{id} | Cập nhật liên hệ |
POST | /services/data/v58.0/composite/batch | Thao tác lô |
Bulk API 2.0
| Phương Thức | Endpoint | Mô Tả |
|---|---|---|
POST | /services/data/v58.0/jobs/ingest | Tạo job nhập liệu |
GET | /services/data/v58.0/jobs/ingest/{id} | Trạng thái job |
POST | /services/data/v58.0/jobs/query | Tạo job truy vấn |
GET | /services/data/v58.0/jobs/query/{id}/results | Lấy kết quả truy vấn |
Sự Kiện
| Sự Kiện | Kích Hoạt | Trường Hợp Sử Dụng |
|---|---|---|
Contact.created | Liên hệ mới được tạo | Kích hoạt email chào mừng |
Contact.updated | Trường liên hệ thay đổi | Cập nhật thuộc tính Brevo |
Lead.converted | Lead được chuyển đổi | Di chuyển sang danh sách khách hàng |
Opportunity.closed_won | Giao dịch được đóng | Kích hoạt email onboarding |
Opportunity.stage_changed | Giai đoạn thay đổi | Cập nhật vòng đời liên hệ |
Ví Dụ Code
Khởi Tạo Trình Kết Nối
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Kết nối Salesforceawait tajo.connectors.connect('salesforce', { instanceUrl: process.env.SF_INSTANCE_URL, clientId: process.env.SF_CONSUMER_KEY, clientSecret: process.env.SF_CONSUMER_SECRET, refreshToken: process.env.SF_REFRESH_TOKEN});Truy Vấn Liên Hệ Bằng SOQL
// Truy vấn liên hệ bằng SOQLconst contacts = await tajo.connectors.query('salesforce', { soql: ` SELECT Id, Email, FirstName, LastName, Phone, Account.Name, LeadSource, CreatedDate FROM Contact WHERE CreatedDate > 2024-01-01T00:00:00Z AND Email != null ORDER BY CreatedDate DESC LIMIT 1000 `});Đồng Bộ Hàng Loạt Sang Brevo
// Đồng bộ Salesforce sang Brevo bằng Bulk APIawait tajo.connectors.sync('salesforce', { type: 'full', resources: ['contacts', 'leads'], useBulkApi: true, options: { includeCustomFields: true, mapListMemberships: true }});
const status = await tajo.connectors.status('salesforce');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsSynced: 145000,// leadsSynced: 28000,// opportunitiesSynced: 9500// }Giới Hạn Tốc Độ
| Tài Nguyên | Giới Hạn | Chi Tiết |
|---|---|---|
| API Calls (REST) | 15,000/ngày | Mỗi org trên gói Developer |
| API Calls (Enterprise) | 1,000,000+/ngày | Dựa trên số giấy phép |
| Bulk API Jobs | 10,000/ngày | Mỗi org |
| Bulk API Records | Không giới hạn | Xử lý bất đồng bộ |
| Concurrent API Requests | 25 | Mỗi org |
| SOQL Query Timeout | 120 giây | Mỗi query |
Giám Sát Sử Dụng API
Theo dõi sử dụng API trong Salesforce Setup > System Overview. Việc vượt giới hạn sẽ trả về lỗi 503. Dùng Bulk API cho các thao tác khối lượng lớn.
Khắc Phục Sự Cố
Sự Cố Phổ Biến
| Sự Cố | Nguyên Nhân | Giải Pháp |
|---|---|---|
INVALID_SESSION_ID | Token hết hạn | Refresh OAuth token tự động |
REQUEST_LIMIT_EXCEEDED | Vượt giới hạn API | Chuyển sang Bulk API cho lượng lớn |
QUERY_TIMEOUT | SOQL phức tạp | Thêm điều kiện WHERE hoặc giới hạn trường |
| Trường tùy chỉnh bị thiếu | Tên API không đúng | Sử dụng tên API (kết thúc bằng __c), không phải label |
| Bulk job thất bại | Vấn đề định dạng dữ liệu | Kiểm tra báo cáo lỗi trong kết quả job |
Chế Độ Debug
connectors: salesforce: debug: true log_level: verbose log_api_calls: true log_bulk_jobs: trueKiểm Tra Kết Nối
tajo connectors test salesforce# ✓ OAuth authentication successful# ✓ REST API accessible# ✓ Contacts queryable# ✓ Bulk API available# ✓ Custom fields loadedThực Hành Tốt Nhất
- Dùng Bulk API cho số lượng lớn - Sử dụng Bulk API cho hơn 10.000 bản ghi
- Bộ nhớ đệm metadata - Cache schema đối tượng để giảm lời gọi API
- Đồng bộ tăng dần - Sử dụng
SystemModstampđể lọc bản ghi thay đổi gần đây - Người dùng tích hợp - Tạo người dùng Salesforce chuyên dụng cho tích hợp API
- Theo dõi giới hạn API - Thiết lập cảnh báo khi sử dụng API đạt 80%
- Xử lý lỗi - Triển khai retry với backoff hàm mũ
Bảo Mật
- OAuth 2.0 - Xác thực dựa trên token với refresh tokens
- Người dùng tích hợp - Tài khoản Salesforce chuyên dụng với quyền tối thiểu
- Connected App - Kiểm soát phạm vi và IP allowlist
- Mã hóa TLS - Tất cả giao tiếp API được mã hóa
- Nhật ký kiểm tra - Theo dõi truy cập API trong Salesforce Login History