> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Salesforce

## Überblick

Verbinden Sie Ihre ElevenLabs-KI-Agenten mit Salesforce CRM, um auf Kundendaten zuzugreifen, Leads zu verwalten und Opportunities zu erstellen. Diese Integration ermöglicht Ihren Agenten, vorhandene Kundeneinträge abzurufen, neue Leads und Kontakte zu erstellen und Salesforce-Objekte während Unterhaltungen abzufragen.

## Funktionen

| Funktion                  | Unterstützung                                                                                                      |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Zero Retention Mode (ZRM) | Nicht unterstützt                                                                                                  |
| Anhänge in Triggern       | Nicht unterstützt — Anhänge in eingehenden Case-Kommentaren und E-Mails werden nicht an den Agenten weitergeleitet |
| Anhänge in Tools          | Nicht unterstützt — Tools verarbeiten nur Text                                                                     |

## Einrichtung

Diese Integration verwendet **Salesforce OAuth 2.0 Client Credentials** zur Authentifizierung. Sie müssen in Salesforce eine External Client App erstellen.

#### External Client App erstellen

1. Melden Sie sich als Administrator bei Ihrer Salesforce-Organisation an.
2. Gehen Sie zu **Setup** > **External Client App Manager**.
3. Klicken Sie auf **New External Client App**.
4. Geben Sie **External Client App Name** (z. B. `ElevenLabs Agents`), **API Name** und **Contact Email** ein.
5. Unter **API (Enable OAuth Settings)**:
   * Aktivieren Sie **Enable OAuth** und **Enable Client Credentials Flow**.
   * **Callback URL**: `https://api.elevenlabs.io/oauth/callback`
   * **OAuth Start URL**: `https://api.elevenlabs.io/oauth/start`
   * **Selected OAuth Scopes**: Fügen Sie diese Scopes hinzu:
     * **Full access (full)**
     * **Perform requests on your behalf at any time (refresh_token, offline_access)**
     * **Manage user data via api**
6. Klicken Sie auf **Create**.
7. Öffnen Sie auf der App-Seite den Tab **Settings**, gehen Sie zu **OAuth Settings** und klicken Sie auf **Consumer Key and Secret**.
8. Kopieren Sie **Consumer Key** und **Consumer Secret** — Sie benötigen diese für die Authentifizierung.

#### OAuth-Client-Credentials-Flow konfigurieren

> **Warning**
>
> Der Client Credentials Flow wird für Server-zu-Server-Integrationen ohne erforderliche
> Nutzerinteraktion empfohlen. Stellen Sie sicher, dass Ihr Salesforce-Administrator diesen Flow aktiviert hat.

1. Klicken Sie in Ihrer External Client App auf **Edit**.
2. Aktivieren Sie **Enable Client Credentials Flow** — ein Feld **Run As** wird angezeigt.
3. Setzen Sie **Run As** auf Ihren Administratornutzer oder ein dediziertes Servicekonto — dies bestimmt die Berechtigungen für alle API-Aufrufe.
4. Setzen Sie **Permitted Users** auf **Admin approved users are pre-authorized**.
5. Klicken Sie auf **Save**.

Der Nutzer unter **Run As** bestimmt die Berechtigungen für alle API-Aufrufe. Wählen Sie einen Nutzer mit dem Profil System Administrator oder einem benutzerdefinierten Profil mit API-Zugriff und Berechtigungen für die Objekte, die Ihr Agent benötigt (Contact, Lead, Account usw.). Die Berechtigung **API Enabled** muss im Nutzerdatensatz aktiviert sein.

#### Ihre Salesforce-Domain finden

Ihre Salesforce-Domain wird für API-Aufrufe benötigt.

**Methode 1: Aktuelle URL prüfen**

Sehen Sie sich nach der Anmeldung bei Salesforce die Adressleiste Ihres Browsers an:

* **Lightning Experience**: `https://acme.lightning.force.com/`
* **My Domain**: `https://acme.my.salesforce.com/`

**Methode 2: Setup > Company Information**

Gehen Sie zu **Setup** > **Company Information** und suchen Sie nach der URL Ihrer **My Domain** oder Organisationsinformationen.

**Methode 3: Setup > Domain Management**

Gehen Sie zu **Setup** > **Domain Management** > **My Domain**. Ihre Domain wird oben auf der Seite angezeigt.

**Gängige Domainformate:**

* `https://acme.my.salesforce.com` (My Domain)
* `https://acme.lightning.force.com` (Lightning)
* `https://acme.develop.my.salesforce.com` (Sandbox)

> **Note**
>
> Verwenden Sie die vollständige Domain ohne abschließenden Schrägstrich.

#### In ElevenLabs verbinden

Geben Sie in der ElevenLabs-Integrationseinrichtung Ihren Salesforce-**Instanz-Hostnamen** (z. B. `acme.my.salesforce.com`), die **Client ID** (Consumer Key) und das **Client Secret** (Consumer Secret) ein.

## Demovideo

> **Note**
>
> Diese Demo verwendet ältere Webhook-Tools. Wenn Sie die native Salesforce-Integration nutzen, werden die Tools
> automatisch konfiguriert — eine manuelle Webhook-Einrichtung ist nicht erforderlich.

## So funktioniert es

#### Überblick

#### Erste Kundenanfrage

Der Agent erfasst Kundeninformationen und stellt relevante Fragen, um Geschäftsanforderungen und aktuelle Herausforderungen zu erkennen.

#### Kundendaten abrufen

Der Agent prüft mit `salesforce_search_records` vorhandene Datensätze, um Kontakte, Accounts oder Leads zu finden. Mit `salesforce_get_record` ruft er vollständige Details ab und nutzt diese Informationen, um das Gespräch zu personalisieren.

#### Lead-Qualifizierung

Handelt es sich um einen neuen Kunden, erfasst der Agent Kontaktdaten, bewertet die geschäftlichen Anforderungen und bestimmt den passenden Vertriebsprozess oder die Weiterleitung.

#### Datensatz erstellen

Der Agent erstellt mit `salesforce_create_record` den passenden Datensatz (Lead, Kontakt oder Opportunity), bestätigt die Erstellung mit dem Kunden und erläutert die nächsten Schritte.

#### Detaillierter System-Prompt

```text
# Personality

You are a helpful sales assistant responsible for managing customer relationships and creating records in Salesforce using the available tools. Be friendly, professional, and consultative in your approach.

# Environment

You operate in a sales setting via voice or chat interface, where you engage with potential customers to gather information, check for existing CRM data, and create Salesforce records when necessary.

# Tone

Begin by asking about the customer's business needs and current challenges.

Then, ask relevant qualification questions to understand their requirements, one question at a time, and wait for their response before proceeding.

Once you have basic information about the customer, say you will check for any existing records in the system.

Use any existing information to personalize the conversation and avoid asking for data you already have.

When discussing opportunities, always reference them by name (e.g., "Q1 Enterprise Deal") rather than by ID.

# Goal

After checking existing records, qualify the customer by gathering:
- Company name and size
- Industry and business type
- Current challenges and pain points
- Budget and timeline information
- Decision-making authority

Once you have qualified the customer, gather the following contact details:
- Full name and job title
- Business email address (ensure it's formatted correctly)
- Phone number
- Company name and address

Read the email back to the customer to confirm accuracy.

Once all information is confirmed, explain that you will create a record in our system.

Create the appropriate record (Lead, Contact, or Opportunity) using the `salesforce_create_record` tool.

Thank the customer and explain the next steps in the sales process.

# Guardrails

- Always check for existing records before creating new ones.
- If the customer asks to proceed, do so with the existing information.
- Qualify leads appropriately based on their responses.
- Do not discuss topics outside of business solutions and sales.
- Always maintain professional communication.
- Protect customer privacy and handle data securely.

# Tools

- Call `salesforce_search_records` to look for existing contacts, accounts, or leads (always include Name fields and human-readable information in your SOQL queries).
- If found, call `salesforce_get_record` to get detailed information about the existing record.
- Use `salesforce_create_record` to generate Leads, Contacts, or Opportunities after qualification.
```

> **Tip**
>
> Die Tool-Autorisierung kann über Workplace Auth Connections verwaltet werden, die die Token-Aktualisierung
> automatisch übernehmen. Die Tools geben zur besseren Gesprächsqualität lesbare Namen und Beschreibungen statt technischer IDs zurück.

## Tool-Konfigurationen

Drei Webhook-Tools sind verfügbar: `salesforce_search_records`, `salesforce_get_record` und `salesforce_create_record`. Konfigurieren Sie die Autorisierung für jedes Tool über eine Workplace Auth Connection.

### Autorisierung – Workplace-OAuth2-Verbindung

#### Zu Workplace Auth Connections navigieren

Gehen Sie in Ihrem ElevenLabs-Dashboard zu **Agents** > **Workplace Auth Connections** und klicken Sie auf **Add Auth**.

#### Salesforce-Verbindung konfigurieren

Füllen Sie für Ihre Salesforce-Integration die folgenden Felder aus:

**Connection Name**: `Salesforce CRM`

**Client ID**

* Ihr Consumer Key aus der External Client App
* Beispiel: `3MVG9JJlvRU3L4pRiOu8pQt5xXB4xGZGm0yW...`

**Client Secret**

* Ihr Consumer Secret aus der External Client App
* Beispiel: `1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF...`

**Token URL**

* Der OAuth-Token-Endpunkt Ihrer Salesforce-Domain
* Format: `https://{domain}.my.salesforce.com/services/oauth2/token`
* Beispiel: `https://acme.my.salesforce.com/services/oauth2/token`

**Scopes (optional)**

* OAuth-Scopes für Salesforce-API-Zugriff
* Empfohlen: `full, api, refresh_token`
* Lassen Sie das Feld leer, um die Standard-Scopes Ihrer External Client App zu verwenden.

**Extra Parameters (JSON)**

* Zusätzliche OAuth-Parameter für Ihre Einrichtung
* Beispiel für den Client-Credentials-Flow:

```json
{
  "grant_type": "client_credentials"
}
```

#### Auth-Verbindung erstellen

Klicken Sie auf **Create auth connection**, um Ihre Konfiguration hinzuzufügen.

#### In Tool-Konfigurationen verwenden

Sobald die Verbindung erfolgreich hergestellt wurde, speichern Sie sie und referenzieren sie in den Konfigurationen Ihrer Webhook-Tools im Abschnitt **Authentication**.

> **Tip**
>
> Workplace Auth Connections übernimmt die Token-Aktualisierung automatisch. Sie müssen Tokens daher nicht manuell verwalten.

### Webhook-Tool-Konfigurationen

Fügen Sie im Abschnitt **Authentication** jedem Tool eine Workplace Auth Connection (OAuth2) hinzu. Über die Tabs unten können Sie die Konfiguration jedes Tools prüfen.

#### salesforce_search_records

**Name:** salesforce_search_records
**Beschreibung:** Sucht mit SOQL-Abfragen nach vorhandenen Datensätzen in Salesforce. Gibt immer lesbare Informationen einschließlich Namen zurück, nicht nur IDs.
**Methode:** GET
**URL:** `https://acme.my.salesforce.com/services/data/v58.0/query/?q={soql_query}`

**Header:**

* **Content-Type:** `application/json`

**Abfrageparameter:**

* **q:** SOQL-Abfragezeichenfolge (z. B. "SELECT Id, Name, Email FROM Contact WHERE Email = '[example@email.com](mailto:example@email.com)'")

**Tool-JSON:**

```json
{
  "type": "webhook",
  "name": "salesforce_search_records",
  "description": "Searches for existing records in Salesforce using SOQL queries. Always returns human-readable names and details, not just IDs.",
  "api_schema": {
    "url": "https://acme.my.salesforce.com/services/data/v58.0/query/",
    "method": "GET",
    "path_params_schema": [],
    "query_params_schema": [
      {
        "id": "q",
        "type": "string",
        "description": "SOQL query string to search for records. Always include Name fields and other human-readable information. Example: SELECT Id, Name, Email, Phone, Company FROM Contact WHERE Email = 'customer@example.com'. For Opportunities, include: SELECT Id, Name, StageName, Amount, CloseDate, Account.Name FROM Opportunity",
        "dynamic_variable": "",
        "constant_value": "",
        "required": true,
        "value_type": "llm_prompt"
      }
    ],
    "request_body_schema": null,
    "request_headers": [
      {
        "type": "value",
        "name": "Content-Type",
        "value": "application/json"
      }
    ]
  },
  "response_timeout_secs": 30,
  "dynamic_variables": {
    "dynamic_variable_placeholders": {}
  }
}
```

#### salesforce_get_record

**Name:** salesforce_get_record
**Beschreibung:** Ruft detaillierte Informationen zu einem bestimmten Salesforce-Datensatz ab.
**Methode:** GET
**URL:** `https://acme.my.salesforce.com/services/data/v58.0/sobjects/{object_type}/{record_id}`

**Header:**

* **Content-Type:** `application/json`

**Pfadparameter:**

* **object_type:** Der Salesforce-Objekttyp (Contact, Lead, Account usw.)
* **record_id:** Die eindeutige Salesforce-Datensatz-ID

**Tool-JSON:**

```json
{
  "type": "webhook",
  "name": "salesforce_get_record",
  "description": "Retrieves detailed information about a specific Salesforce record.",
  "api_schema": {
    "url": "https://acme.my.salesforce.com/services/data/v58.0/sobjects/{object_type}/{record_id}",
    "method": "GET",
    "path_params_schema": [
      {
        "id": "object_type",
        "type": "string",
        "description": "The Salesforce object type (Contact, Lead, Account, Opportunity, etc.)",
        "dynamic_variable": "",
        "constant_value": "",
        "required": true,
        "value_type": "llm_prompt"
      },
      {
        "id": "record_id",
        "type": "string",
        "description": "The unique Salesforce record ID obtained from search results",
        "dynamic_variable": "",
        "constant_value": "",
        "required": true,
        "value_type": "llm_prompt"
      }
    ],
    "query_params_schema": [],
    "request_body_schema": null,
    "request_headers": [
      {
        "type": "value",
        "name": "Content-Type",
        "value": "application/json"
      }
    ]
  },
  "response_timeout_secs": 30,
  "dynamic_variables": {
    "dynamic_variable_placeholders": {}
  }
}
```

#### salesforce_create_record

**Name:** salesforce_create_record
**Beschreibung:** Erstellt einen neuen Datensatz in Salesforce.
**Methode:** POST
**URL:** `https://acme.my.salesforce.com/services/data/v58.0/sobjects/{object_type}/`

**Header:**

* **Content-Type:** `application/json`

**Pfadparameter:**

* **object_type:** Der zu erstellende Salesforce-Objekttyp (Lead, Contact, Account usw.)

**Body-Parameter:**

* **Dynamisches JSON-Objekt** mit den Datensatzfeldern und -werten

**Tool-JSON:**

```json
{
  "type": "webhook",
  "name": "salesforce_create_record",
  "description": "Creates a new record in Salesforce (Lead, Contact, Account, Opportunity, etc.)",
  "api_schema": {
    "url": "https://acme.my.salesforce.com/services/data/v58.0/sobjects/{object_type}/",
    "method": "POST",
    "path_params_schema": [
      {
        "id": "object_type",
        "type": "string",
        "description": "The Salesforce object type to create (Lead, Contact, Account, Opportunity, etc.)",
        "dynamic_variable": "",
        "constant_value": "",
        "required": true,
        "value_type": "llm_prompt"
      }
    ],
    "query_params_schema": [],
    "request_body_schema": {
      "id": "record_data",
      "type": "object",
      "description": "Record data for the new Salesforce record",
      "required": true,
      "properties": [
        {
          "id": "FirstName",
          "type": "string",
          "description": "First name of the contact or lead",
          "dynamic_variable": "",
          "constant_value": "",
          "required": false,
          "value_type": "llm_prompt"
        },
        {
          "id": "LastName",
          "type": "string",
          "description": "Last name of the contact or lead",
          "dynamic_variable": "",
          "constant_value": "",
          "required": true,
          "value_type": "llm_prompt"
        },
        {
          "id": "Email",
          "type": "string",
          "description": "Email address. Must be properly formatted: user@domain.com",
          "dynamic_variable": "",
          "constant_value": "",
          "required": true,
          "value_type": "llm_prompt"
        },
        {
          "id": "Phone",
          "type": "string",
          "description": "Phone number of the contact or lead",
          "dynamic_variable": "",
          "constant_value": "",
          "required": false,
          "value_type": "llm_prompt"
        },
        {
          "id": "Company",
          "type": "string",
          "description": "Company name (required for Lead object)",
          "dynamic_variable": "",
          "constant_value": "",
          "required": false,
          "value_type": "llm_prompt"
        },
        {
          "id": "Title",
          "type": "string",
          "description": "Job title of the contact or lead",
          "dynamic_variable": "",
          "constant_value": "",
          "required": false,
          "value_type": "llm_prompt"
        },
        {
          "id": "Industry",
          "type": "string",
          "description": "Industry of the lead's company",
          "dynamic_variable": "",
          "constant_value": "",
          "required": false,
          "value_type": "llm_prompt"
        },
        {
          "id": "Description",
          "type": "string",
          "description": "Additional notes or description about the lead/contact",
          "dynamic_variable": "",
          "constant_value": "",
          "required": false,
          "value_type": "llm_prompt"
        }
      ]
    },
    "request_headers": [
      {
        "type": "value",
        "name": "Content-Type",
        "value": "application/json"
      }
    ]
  },
  "response_timeout_secs": 30,
  "dynamic_variables": {
    "dynamic_variable_placeholders": {}
  }
}
```

## Gängige Salesforce-Objekte

| Objekt          | Zweck                                                | Häufige Felder                                               |
| --------------- | ---------------------------------------------------- | ------------------------------------------------------------ |
| **Lead**        | Potenzielle, noch nicht qualifizierte Kunden         | FirstName, LastName, Email, Phone, Company, Industry, Status |
| **Contact**     | Qualifizierte Personen, die Accounts zugeordnet sind | FirstName, LastName, Email, Phone, AccountId, Title          |
| **Account**     | Organisationen oder Unternehmen                      | Name, Type, Industry, Phone, BillingAddress                  |
| **Opportunity** | Laufende Verkaufschancen                             | Name, StageName, Amount, CloseDate, AccountId                |
| **Case**        | Kundenserviceanfragen                                | Subject, Description, Status, Priority, ContactId            |

## Häufige SOQL-Abfragen

Nutzen Sie diese SOQL-Abfragen als Ausgangspunkt, wenn Sie den System-Prompt Ihres Agenten anpassen. Alle Abfragen geben für Menschen lesbare Informationen statt technischer IDs zurück:

### Kontakte nach E-Mail-Adresse suchen

```sql
SELECT Id, Name, Email, Phone, Title, Account.Name, Account.Type FROM Contact WHERE Email = 'customer@example.com'
```

### Leads nach E-Mail-Adresse oder Telefonnummer suchen

```sql
SELECT Id, Name, Email, Phone, Company, Industry, Status, LeadSource, Title FROM Lead WHERE Email = 'customer@example.com' OR Phone = '+1234567890'
```

### Accounts nach Name suchen

```sql
SELECT Id, Name, Type, Industry, Phone, BillingCity, BillingState, Website FROM Account WHERE Name LIKE '%Company Name%'
```

### Nach aktuellen Opportunities suchen

```sql
SELECT Id, Name, StageName, Amount, CloseDate, Account.Name, Account.Type, Owner.Name, Description FROM Opportunity WHERE CreatedDate = THIS_MONTH
```

### Opportunities nach Account suchen

```sql
SELECT Id, Name, StageName, Amount, CloseDate, Probability, NextStep, Owner.Name FROM Opportunity WHERE Account.Name LIKE '%Company Name%'
```

## Integration testen

Testen Sie Ihre External Client App und die Integration nach der Einrichtung, bevor Sie sie in der Produktion bereitstellen:

1. **Suchfunktion**: Bitten Sie Ihren Agenten, nach bestehenden Kontakten zu suchen.
2. **Datensatzerstellung**: Lassen Sie Ihren Agenten einen neuen Lead oder Kontakt erstellen.
3. **Datenabruf**: Prüfen Sie, ob Ihr Agent detaillierte Kundeninformationen abrufen kann.

## Auslöser für Fallkommentare: E-Mail-Antworten für Email-to-Case

Wenn Sie den Trigger **Salesforce Case Comment** aktiviert haben (automatische Agentenantwort auf Service-Cloud-Fälle), werden Antworten auf Fälle mit mindestens einer eingehenden E-Mail als echte E-Mail im selben Thread an den Kunden gesendet — nicht nur als interner Fallkommentar. Dies basiert darauf, ob der Fall eine eingehende E-Mail hat, nicht auf dem Wert der Auswahlliste **Origin** des Falls. Daher funktioniert es auch, wenn Ihre Organisation einen angepassten Origin-Wert wie „Email - Returns“ statt des exakten Werts „Email“ verwendet. Fälle ohne eingehende E-Mail werden weiterhin unverändert als öffentlicher Fallkommentar veröffentlicht. Alle Adressen, die in der ursprünglichen E-Mail des Kunden in CC gesetzt wurden, erhalten auch die Antwort automatisch in CC. Das entspricht dem Verhalten von „Allen antworten“ eines menschlichen Agenten — mit Ausnahme der Email-to-Case-Routing-Adresse(n) Ihrer Organisation. Diese werden bewusst nicht in CC gesetzt, damit die Antwort nicht erneut von Email-to-Case erfasst wird und den Agenten für seine eigene Nachricht erneut auslöst.

Das Senden von E-Mail-Antworten erfordert zusätzliche Einrichtungsschritte, die für Fallkommentare allein nicht nötig sind:

* Das Profil oder Berechtigungsset des **Run As**-Benutzers muss zusätzlich zur bereits für die Integration erforderlichen Berechtigung **API Enabled** die Systemberechtigung **Send Email** aktiviert haben (`Setup` > `Users` > `Profiles`, unter System Permissions).
* Die Einstellung **Email Deliverability** Ihrer Organisation (`Setup` > `Email` > `Deliverability`) muss externe E-Mails erlauben. In Sandboxes ist standardmäßig eine eingeschränkte Einstellung aktiv, die ausgehende E-Mails ohne Hinweis blockiert.
* Wenn Antworten von einem Support-Alias statt aus dem eigenen Postfach des Run As-Benutzers kommen sollen, setzen Sie im Trigger das Feld **Org-Wide Email Address Id** auf die Id einer **Organization-Wide Email Address** (`Setup` > `Organization-Wide Addresses` > klicken Sie auf die Adresse > kopieren Sie die Id aus der URL). Lassen Sie das Feld leer, um vom eigenen Postfach des Run As-Benutzers zu senden.
* Setzen Sie im Trigger das Feld **Email-to-Case Routing Address(es)** auf die Email-to-Case-Adresse(n) Ihrer Organisation (bei mehreren Adressen durch Kommas getrennt, `Setup` > `Email-to-Case`). Ohne diese Angabe versucht die Integration, die Routing-Adresse anhand der E-Mail des Kunden zu erraten (deren `To`-Adresse). Das schlägt fehl, wenn Ihre Routing-Adresse nur in CC und nicht der primäre Empfänger war — sie in dieser Situation bei einer Antwort erneut in CC zu setzen, würde den Agenten für seine eigene Nachricht erneut auslösen.

Wenn die Organisation eines Kunden dies nicht konfiguriert hat, wird bei einem Fehler beim E-Mail-Versand stattdessen ein öffentlicher Fallkommentar veröffentlicht. Dadurch geht eine Antwort nie unbemerkt verloren — der Kunde erhält sie jedoch erst per E-Mail, wenn die oben genannten Einstellungen vorgenommen wurden.

## Sicherheitsaspekte

* Verwenden Sie HTTPS-Endpunkte für alle API-Aufrufe.
* Stellen Sie sicher, dass in Salesforce eine korrekte Sicherheit auf Feldebene konfiguriert ist.
* Die Berechtigungen des Run As-Benutzers bestimmen, auf welche Daten die Integration zugreifen kann — beschränken Sie sie entsprechend.
* Prüfen Sie API-Zugriff und -Nutzung regelmäßig.

## Nützliche Links

* [Dokumentation zur Salesforce REST API](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/)
* [Referenz zur SOQL-Abfragesprache](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/)
* [External Client Apps und OAuth 2.0](https://help.salesforce.com/s/articleView?id=sf.connected_app_overview.htm)
* [Best Practices für Salesforce-Sicherheit](https://help.salesforce.com/s/articleView?id=sf.security_overview.htm)