---
title: "Konektor Salesforce"
description: "Panduan lengkap integrasi Salesforce CRM untuk menyinkronkan lead, kontak, akun, opportunity, dan custom object dengan Brevo melalui Tajo."
url: https://tajo.io/in/docs/connectors/crm/salesforce/
markdown: https://tajo.io/in/docs/connectors/crm/salesforce.md
lang: id-ID
robots: noindex
---

Ajukan akses awal

Masukkan nama depan dan alamat email kerja Anda. Kami akan mengirim tautan untuk mengonfirmasi permintaan akses Tajo.

# Konektor Salesforce

Status konektor: Direncanakan Belum dibangun. Tajo belum menjalankan konektor ini.

| Field sumber | Field tujuan | Nilai contoh |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Hubungkan Salesforce CRM Anda ke Brevo melalui Tajo untuk sinkronisasi kontak kelas enterprise, pengelolaan lead, pelacakan opportunity, dan otomatisasi marketing yang digerakkan oleh data CRM Anda.

## Ikhtisar

| Properti | Nilai |
| --- | --- |
| **Platform** | Salesforce |
| **Kategori** | CRM |
| **Kompleksitas setup** | Lanjutan |
| **Integrasi resmi** | Tidak |
| **Data yang disinkronkan** | Kontak, Lead, Akun, Opportunity, Event |
| **API Base URL** | `https://yourInstance.salesforce.com/services/data/vXX.0` |

## Fitur

- **Sinkronisasi kontak/lead dua arah** - Sinkronkan kontak dan lead Salesforce dengan daftar kontak Brevo
- **Pelacakan opportunity** - Petakan tahap dan nilai deal untuk segmentasi berbasis pendapatan
- **Hierarki akun** - Sinkronkan akun perusahaan untuk account-based marketing di Brevo
- **Pemetaan custom object** - Petakan custom object Salesforce ke atribut dan event Brevo
- **Sinkronisasi campaign member** - Sinkronkan campaign member Salesforce dengan daftar Brevo
- **Pelacakan aktivitas** - Sinkronkan task, event, dan aktivitas email untuk penilaian engagement
- **Streaming real-time** - Gunakan Salesforce Streaming API untuk pembaruan data seketika
- **Dukungan kueri SOQL** - Saring data yang disinkronkan dengan kueri SOQL kustom

## Prasyarat

Sebelum memulai, pastikan Anda memiliki:

1. Org Salesforce (edisi apa pun yang memiliki akses API)
2. Connected App yang dikonfigurasi di Salesforce Setup
3. Akses API yang aktif untuk profil pengguna Salesforce Anda
4. Akun Brevo dengan akses API
5. Akun Tajo

## Autentikasi

### OAuth 2.0 Web Server Flow (direkomendasikan)

Paling cocok untuk integrasi produksi yang memerlukan otorisasi pengguna.

```bash
# Step 1: Authorize
https://login.salesforce.com/services/oauth2/authorize?
  response_type=code&
  client_id={consumer_key}&
  redirect_uri={callback_url}

# Step 2: Exchange code for tokens
curl -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

Untuk integrasi server-ke-server tanpa interaksi pengguna.

```bash
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 mewajibkan Anda menambahkan security token di belakang password untuk username-password flow. Reset token Anda melalui Setup > My Personal Information > Reset My Security Token.

## Konfigurasi

### Setup dasar

```yaml
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
```

### Pemetaan field

Petakan field Salesforce ke atribut kontak Brevo:

#### Pemetaan Bawaan

| Parameter | Type | Description |
| --- | --- | --- |
| `Email` required | string | Email kontak/lead (pengenal unik untuk Brevo) |
| `FirstName` optional | string | Dipetakan ke atribut FIRSTNAME di Brevo |
| `LastName` optional | string | Dipetakan ke atribut LASTNAME di Brevo |
| `Phone` optional | string | Dipetakan ke atribut SMS untuk pesan WhatsApp/SMS |
| `Account.Name` optional | string | Nama akun/perusahaan yang terkait |
| `LeadSource` optional | string | Sumber akuisisi lead |
| `StageName` optional | string | Tahap opportunity untuk pelacakan deal |
| `OwnerId` optional | string | Sales rep yang ditugaskan untuk routing |

#### Pemetaan field kustom

```yaml
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_TIER
```

## Endpoint API

### Resource REST API

| Method | Endpoint | Deskripsi |
| --- | --- | --- |
| `GET` | `/services/data/vXX.0/sobjects/Contact` | Mengkueri kontak |
| `POST` | `/services/data/vXX.0/sobjects/Contact` | Membuat kontak |
| `PATCH` | `/services/data/vXX.0/sobjects/Contact/{id}` | Memperbarui kontak |
| `GET` | `/services/data/vXX.0/sobjects/Lead` | Mengkueri lead |
| `GET` | `/services/data/vXX.0/sobjects/Account` | Mengkueri akun |
| `GET` | `/services/data/vXX.0/sobjects/Opportunity` | Mengkueri opportunity |
| `GET` | `/services/data/vXX.0/query?q={SOQL}` | Menjalankan kueri SOQL |
| `POST` | `/services/data/vXX.0/composite/sobjects` | Membuat/memperbarui secara batch |

### Bulk API

| Method | Endpoint | Deskripsi |
| --- | --- | --- |
| `POST` | `/services/data/vXX.0/jobs/ingest` | Membuat job bulk ingest |
| `PUT` | `/services/data/vXX.0/jobs/ingest/{jobId}/batches` | Mengunggah data batch |
| `GET` | `/services/data/vXX.0/jobs/ingest/{jobId}` | Memeriksa status job |

### Streaming API

| Endpoint | Deskripsi |
| --- | --- |
| `/cometd/XX.0` | Long-polling CometD untuk event real-time |
| PushTopic | Berlangganan perubahan record melalui topik berbasis SOQL |
| Change Data Capture | Streaming perubahan terperinci pada level field |
| Platform Events | Arsitektur event-driven kustom |

## Event

### Event record (Change Data Capture)

| Event | Pemicu | Kasus penggunaan |
| --- | --- | --- |
| `ContactChangeEvent` | Kontak dibuat/diperbarui/dihapus | Sinkronisasi kontak real-time |
| `LeadChangeEvent` | Lead dibuat/diperbarui/dikonversi | Pelacakan lifecycle lead |
| `OpportunityChangeEvent` | Tahap opportunity berubah | Otomatisasi pipeline deal |
| `AccountChangeEvent` | Record akun diubah | Sinkronisasi data perusahaan |

### Platform Events

| Event | Pemicu | Kasus penggunaan |
| --- | --- | --- |
| `Lead_Converted__e` | Lead dikonversi menjadi kontak | Nurture pasca-konversi |
| `Deal_Won__e` | Opportunity closed-won | Alur onboarding pelanggan |
| `Deal_Lost__e` | Opportunity closed-lost | Kampanye win-back |

## Contoh kode

### Inisialisasi konektor

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect Salesforce
await 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
});
```

### Menyinkronkan kontak dengan filter SOQL

```javascript
// Sync only qualified leads from Salesforce
await 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 status
const status = await tajo.connectors.status('salesforce');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-01-15T10:30:00Z',
//   contactsSynced: 18400,
//   leadsSynced: 7200,
//   opportunitiesSynced: 3100
// }
```

### Streaming real-time

```javascript
// Subscribe to Salesforce Change Data Capture
await 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
  }
});
```

## Rate limit

Batas Salesforce REST API bergantung pada edisi dan jumlah lisensi Anda:

| Edisi | Request API per 24 jam |
| --- | --- |
| Developer | 15.000 |
| Enterprise | 1.000 per lisensi pengguna (minimal 15.000) |
| Unlimited | 5.000 per lisensi pengguna (minimal 15.000) |
| Performance | 5.000 per lisensi pengguna (minimal 15.000) |

Batasan tambahan:

- **Batas API bersamaan**: 25 request berdurasi panjang
- **Bulk API**: 15.000 batch per 24 jam
- **Streaming API**: 2.000 event per hari (dapat ditingkatkan)
- **Composite API**: 25 subrequest per composite request

Pemantauan penggunaan API

Pantau penggunaan API Anda di Salesforce Setup > System Overview. Tajo menggunakan bulk API untuk sinkronisasi besar agar batas API Anda tetap hemat.

## Pemecahan masalah

### Masalah umum

| Masalah | Penyebab | Solusi |
| --- | --- | --- |
| INVALID\_SESSION\_ID | Token kedaluwarsa | Segarkan token OAuth secara otomatis |
| REQUEST\_LIMIT\_EXCEEDED | Batas API harian tercapai | Gunakan Bulk API atau kurangi frekuensi sinkronisasi |
| FIELD\_INTEGRITY\_EXCEPTION | Field wajib tidak ada | Petakan seluruh field wajib dalam konfigurasi |
| DUPLICATES\_DETECTED | Aturan duplikat aktif | Konfigurasikan preferensi penanganan duplikat |
| INSUFFICIENT\_ACCESS | Izin objek kurang | Berikan akses API pada profil Salesforce |

### Mode debug

Aktifkan logging terperinci:

```yaml
connectors:
  salesforce:
    debug: true
    log_level: verbose
    log_api_calls: true
```

### Uji koneksi

```bash
tajo connectors test salesforce
# ✓ OAuth token valid
# ✓ Contacts accessible
# ✓ Leads accessible
# ✓ Accounts accessible
# ✓ Opportunities accessible
# ✓ Bulk API enabled
```

## Praktik terbaik

1. **Gunakan Bulk API untuk sinkronisasi besar** - Beralih ke Bulk API 2.0 untuk dataset di atas 2.000 record
2. **Terapkan Change Data Capture** - Gunakan CDC untuk sinkronisasi real-time alih-alih polling
3. **Petakan hanya field yang diperlukan** - Kurangi penggunaan API dengan menyinkronkan hanya field yang dibutuhkan
4. **Tangani refresh token** - Terapkan logika refresh token OAuth otomatis
5. **Gunakan composite request** - Gabungkan panggilan API terkait untuk menekan jumlah request
6. **Uji di sandbox terlebih dahulu** - Gunakan org sandbox Salesforce sebelum penerapan ke produksi

## Keamanan

- **OAuth 2.0** - Otorisasi standar industri dengan beragam grant type
- **Pembatasan IP** - Salesforce mendukung rentang IP login dan pengaturan trusted IP
- **TLS 1.2+** - Seluruh komunikasi API dienkripsi dengan TLS minimal 1.2
- **Keamanan level field** - Kontrol akses field yang granular per profil
- **Manajemen sesi** - Batas waktu sesi dan jumlah sesi bersamaan yang dapat dikonfigurasi

## Sumber terkait

- [Dokumentasi Salesforce REST API](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_rest.htm)
- [Panduan Salesforce Bulk API 2.0](https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/asynch_api_intro.htm)
- [Konektor HubSpot](https://tajo.io/in/docs/connectors/crm/hubspot)
- [Skill Customer Sync](https://tajo.io/in/docs/skills/data-sync/customer-sync)
- [Brevo Contacts API](https://tajo.io/in/docs/contact-management)
