> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.deepmask.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Salesforce-Integration einrichten

## Überblick

Diese Anleitung führt Sie durch die Erstellung einer Salesforce **External Client App** (ECA) in Ihrer Organisation. Am Ende haben Sie einen **Consumer Key** und ein **Consumer Secret**, die Sie in den Salesforce-Konnektor von DeepMask einfügen — so können Ihre Nutzer Datensätze durchsuchen, Opportunitys prüfen und Aktivitäten direkt in DeepMask protokollieren.

| Was Sie erhalten | Details |
| - | - |
| **External Client App** | Eine Salesforce-App, mit der DeepMask im Namen Ihrer Nutzer Zugriff anfordert. |
| **Delegiertes OAuth** | Jeder Nutzer meldet sich mit seinen eigenen Salesforce-Anmeldedaten an. Er sieht nur Datensätze, die Profil, Berechtigungssätze und Freigaberegeln bereits erlauben. |
| **Consumer Key** | Die öffentliche Client-ID der App. Fügen Sie diese in DeepMask ein. |
| **Consumer Secret** | Das vertrauliche Client-Secret der App. Fügen Sie es in DeepMask ein. Behandeln Sie es wie ein Passwort. |

<Info>
  DeepMask verwendet delegierte OAuth-2.0-Authentifizierung (Authorization Code + PKCE). DeepMask speichert niemals Salesforce-Passwörter. Jede Aktion läuft als der angemeldete Nutzer — DeepMask sieht nicht mehr, als dieser Nutzer in Salesforce bereits sieht.
</Info>

<Note>
  Eine DeepMask-Verbindung entspricht **einer Salesforce-Organisation**. Ein Nutzer, der in mehreren Organisationen arbeitet, verbindet jede Organisation separat.
</Note>

<Tip>
  Bereits verbunden? Siehe die [Salesforce-(Enterprise-)Konnektor-Aktionen](/de/connectors/Salesforce/overview) für alles, was die KI in Salesforce tun kann — Datensätze finden, Pipeline auswerten, Aktivitäten protokollieren und mehr.
</Tip>

***

## Voraussetzungen

### Erforderlicher Zugriff

* **Salesforce-Organisation mit API-Zugriff** — Jede Lightning-/Salesforce-Cloud-Edition, die die REST-API nutzen kann (einschließlich Developer Edition, Enterprise, Unlimited und Sandboxes).
* **Berechtigung zum Erstellen von External Client Apps** — Ein Systemadministrator oder ein Nutzer, der **Setup → External Client App Manager** öffnen kann.
* **API aktiviert** bei jedem Nutzer, der sich verbindet — dies ist ein Profil-/Berechtigungssatz-Flag in Salesforce.

### Was Sie nicht benötigen

* Kein verwaltetes Salesforce-Paket (für eine lokale/eigene App)
* Keine Entwicklertools oder Befehlszeile
* Kein Servicekonto oder gemeinsam genutzter Integrationsnutzer

<Warning>
  Eine **lokale** External Client App autorisiert nur Nutzer der Organisation, die sie erstellt hat. Das ist die richtige Einrichtung für eine einzelne Kundenorganisation oder eine Sandbox. Das Verbinden einer zweiten, nicht verwandten Organisation erfordert entweder eine paketierte ECA oder eine separate lokale ECA in dieser Organisation.
</Warning>

***

## Schritt 1 — External Client Apps zulassen

<Steps>
  <Step title="Salesforce-Setup öffnen">
    Melden Sie sich in der Organisation an, die Sie verbinden möchten. Klicken Sie auf das Zahnradsymbol und wählen Sie **Setup**.
  </Step>

  <Step title="ECA-Erstellung aktivieren">
    Geben Sie in Quick Find **External Client App Settings** ein. Öffnen Sie es und erlauben Sie Nutzern, External Client Apps zu erstellen, falls dieser Schalter aus ist.
  </Step>
</Steps>

***

## Schritt 2 — External Client App erstellen

<Steps>
  <Step title="External Client App Manager öffnen">
    Geben Sie in Quick Find **External Client App Manager** ein und klicken Sie auf **New External Client App**.
  </Step>

  <Step title="Grunddaten ausfüllen">
    | Feld | Wert |
    | - | - |
    | **External Client App Name** | `DeepMask Salesforce Connector` |
    | **API Name** | Standard übernehmen (`DeepMask_Salesforce_Connector`) |
    | **Contact Email** | Ihre Admin-E-Mail |
    | **Distribution State** | **Local** |
  </Step>
</Steps>

<Info>
  **Local** bedeutet, dass diese App nur zu dieser Organisation gehört. Wechseln Sie den Distribution State nicht auf Packaged, es sei denn, Sie veröffentlichen ein verwaltetes Paket für viele Kundenorganisationen.
</Info>

***

## Schritt 3 — OAuth-Einstellungen konfigurieren

Noch auf der neuen App (oder **Settings → OAuth Settings** nach dem Speichern) aktivieren Sie OAuth und wenden **genau** diese Werte an.

### Callback-URL

Geben Sie diesen Wert **exakt** ein (kein abschließender Schrägstrich). DeepMask leitet nach der Salesforce-Anmeldung hierher weiter.

```
https://chat.deepmask.io/api/user/connectors/oauth/callback
```

Das Feld akzeptiert mehrere URLs, eine pro Zeile. Für [chat.deepmask.io](https://chat.deepmask.io) benötigen Sie nur diese eine Zeile.

### OAuth-Berechtigungen (Scopes)

Verschieben Sie **genau diese drei** in **Selected OAuth Scopes**. Das Anfordern eines Scopes, den die App nicht gewährt, lässt die gesamte Anmeldung mit `invalid_scope` fehlschlagen.

| Ausgewählter Scope (Salesforce-Bezeichnung) | Warum er erforderlich ist |
| - | - |
| Manage user data via APIs (`api`) | REST-API-Zugriff als der angemeldete Nutzer |
| Perform requests at any time (`refresh_token`, `offline_access`) | Damit DeepMask ein neues Access-Token erzeugen kann, ohne dass sich der Nutzer jedes Mal neu anmelden muss |
| Access unique user identifiers (`openid`) | Löst den angemeldeten Nutzer auf („me") und verifiziert die Verbindung |

Belassen Sie alle anderen Scopes unter **Available** (fügen Sie keine Full access, Web, Chatter, Visualforce oder benutzerdefinierten Berechtigungen hinzu).

### Flow Enablement

Stimmen Sie diese Checkbox-Auswahl ab:

| Einstellung | Wert |
| - | - |
| **Enable Client Credentials Flow** | An |
| **Enable Authorization Code and Credentials Flow** | An |
| **Require user credentials in the POST body for Authorization Code and Credentials Flow** | An |
| **Enable Device Flow** | Aus |
| **Enable JWT Bearer Flow** | Aus |
| **Enable Token Exchange Flow** | Aus |

<Info>
  Der Konnektor von DeepMask verwendet **Authorization Code** (der Nutzer meldet sich an) plus die **Client ID** und das **Client Secret**, die Sie in DeepMask einfügen. Nutzeraktionen laufen weiterhin als dieser Salesforce-Nutzer — nicht als ein Client-Credentials-Servicekonto.
</Info>

### Sicherheit

Stimmen Sie diese Checkbox-Auswahl ab:

| Einstellung | Wert |
| - | - |
| **Require secret for Web Server Flow** | An |
| **Require secret for Refresh Token Flow** | Aus |
| **Require Proof Key for Code Exchange (PKCE) extension for Supported Authorization Flows** | An (von Salesforce vorgeschrieben; zum Ändern den Support kontaktieren) |
| **Enable Refresh Token Rotation** | An (von Salesforce vorgeschrieben; zum Ändern den Support kontaktieren) |
| **Issue JSON Web Token (JWT)-based access tokens for named users** | Aus — Access-Tokens undurchsichtig halten |
| **Limit Idle Refresh Token Time-to-Live (TTL) to 90 Days** | An (von Salesforce vorgeschrieben; zum Ändern den Support kontaktieren) |
| **Enforce Refresh Token IP Allowlist** | Aus |

<Check>
  PKCE und Refresh-Token-Rotation bleiben an. JWT-basierte Access-Tokens bleiben aus. DeepMask speichert das jeweils neueste Refresh-Token, wenn Salesforce es rotiert.
</Check>

Speichern Sie die App. Salesforce benötigt oft **2–10 Minuten**, um eine neue ECA zu propagieren, bevor die erste Anmeldung funktioniert.

***

## Schritt 4 — OAuth-Richtlinien festlegen

Öffnen Sie die App → **Policies** (oder **OAuth Policies**) und setzen Sie:

| Richtlinie | Wert |
| - | - |
| **Permitted Users** | All users may self-authorize |
| **IP Relaxation** | Relax IP restrictions |
| **Refresh Token Policy** | Organisationsstandards folgen. Rotation und die 90-Tage-Idle-TTL sind bereits unter **Security** (Schritt 3) gesetzt. |

<Info>
  „All users may self-authorize" lässt jeden Teamkollegen seinen eigenen Salesforce-Nutzer verbinden. Wenn Sie dies auf vorab autorisierte Nutzer beschränken, muss ein Admin jede DeepMask-Verbindung genehmigen.
</Info>

***

## Schritt 5 — Consumer Key und Secret kopieren

<Steps>
  <Step title="OAuth-Einstellungen öffnen">
    Öffnen Sie im External Client App Manager **DeepMask Salesforce Connector** → **Settings** → **OAuth Settings**.
  </Step>

  <Step title="Anmeldedaten anzeigen">
    Klicken Sie auf **Consumer Key and Secret**. Salesforce fordert Sie möglicherweise auf, Ihre Identität zu bestätigen.
  </Step>

  <Step title="Beide Werte kopieren">
    Der Salesforce-Konnektor von DeepMask fragt nach **Client ID** und **Secret**. Ordnen Sie die Salesforce-Bezeichnungen so zu:

    | Salesforce-Bezeichnung | In DeepMask einfügen als |
    | - | - |
    | **Consumer Key** | **Client ID** |
    | **Consumer Secret** | **Secret** |
  </Step>
</Steps>

<Warning>
  Das Consumer Secret ist geheim. Geben Sie es nicht in Chats, Tickets oder ein öffentliches Repository. Nur die Konnektor-Einstellungen von DeepMask (oder Ihr eigener Secret-Speicher) sollten es enthalten.
</Warning>

***

## Schritt 6 — Salesforce in DeepMask verbinden

<Steps>
  <Step title="DeepMask öffnen">
    Gehen Sie zu [chat.deepmask.io](https://chat.deepmask.io) und melden Sie sich an.
  </Step>

  <Step title="Konnektoren öffnen">
    Klicken Sie in der Chat-Symbolleiste auf **Konnektoren hinzufügen** (oder **Konnektoren** in der linken Navigation).
  </Step>

  <Step title="Salesforce-Konnektor starten">
    Suchen Sie die **Salesforce**-Kachel und klicken Sie auf **Verbinden**.
  </Step>

  <Step title="Client ID und Secret einfügen">
    DeepMask fragt nach zwei Feldern:

    * **Client ID** — der Consumer Key aus Schritt 5
    * **Secret** — das Consumer Secret aus Schritt 5

    Falls DeepMask auch nach einer Umgebung fragt, wählen Sie **Production** (`login.salesforce.com`) oder **Sandbox** (`test.salesforce.com`).
  </Step>

  <Step title="Speichern und bei Salesforce anmelden">
    Klicken Sie auf **Save & Connect**. Ein Salesforce-Anmeldefenster öffnet sich. Melden Sie sich als der Salesforce-Nutzer an, dem diese Verbindung gehören soll, und genehmigen Sie die angeforderten Scopes.
  </Step>

  <Step title="Bestätigen">
    Sie kehren zu DeepMask zurück. Die Salesforce-Kachel zeigt **Verbunden**. Die KI kann Salesforce nun in diesem Workspace nutzen, beschränkt auf die Datensätze dieses Nutzers.
  </Step>
</Steps>

<Check>
  Fragen Sie etwas wie „Was steht heute in Salesforce für mich an?" oder „Finde offene Opportunitys, die mir gehören." Wenn der Konnektor aktiv ist, ruft DeepMask Salesforce auf und gibt Datensätze mit Lightning-Links zurück.
</Check>

<Note>
  **Lokale/Developer-Edition-Organisationen:** Wenn Salesforce *Cross-org OAuth flows are not supported* zurückgibt, starten Sie die Anmeldung an der **My Domain** der Organisation (`https://<mydomain>.my.salesforce.com`) statt an `login.salesforce.com`. Sandboxes verwenden `test.salesforce.com` oder die Sandbox-My-Domain.
</Note>

***

## Fehlerbehebung

### „invalid\_scope" bei der Anmeldung

**Ursache:** DeepMask hat `api`, `refresh_token` und `openid` angefordert, aber die ECA gewährt einen davon nicht (meist `openid`).

**Lösung:** Bearbeiten Sie die OAuth-Scopes der ECA, aktivieren Sie alle drei, speichern Sie, warten Sie einige Minuten und versuchen Sie es erneut.

***

### „Cross-org OAuth flows are not supported"

**Ursache:** Eine **lokale** ECA kann OAuth bei `login.salesforce.com`/`test.salesforce.com` für einige Developer-Edition- und Scratch-Organisationen nicht abschließen.

**Lösung:** Autorisieren Sie an der **My Domain** der Organisation (`https://<name>.my.salesforce.com/services/oauth2/authorize`). Paketierte Produktions-Apps verwenden `login.salesforce.com`.

***

### Redirect-URI-Konflikt

**Ursache:** Die Callback-URL in der ECA stimmt nicht exakt mit der URL überein, die DeepMask sendet.

**Lösung:** In den OAuth Settings muss die Callback-URL exakt lauten:

`https://chat.deepmask.io/api/user/connectors/oauth/callback`

Kein abschließender Schrägstrich. Keine `http://`-Variante.

***

### Nutzer verbindet sich, sieht aber keine (oder nur einige) Datensätze

**Ursache:** Salesforce-Freigabe, Feldebenen-Sicherheit oder eine fehlende **API aktiviert**-Berechtigung — kein DeepMask-Fehler.

**Lösung:**

* Bestätigen Sie, dass der Nutzer dieselben Datensätze in der Salesforce-Oberfläche sehen kann.
* Bestätigen Sie, dass sein Profil **API aktiviert** hat.
* Benutzerdefinierte Objekte müssen abfragbar und für dieses Profil sichtbar sein.

***

### „Need admin approval" oder Nutzer können sich nicht selbst autorisieren

**Ursache:** **Permitted Users** ist nicht auf „All users may self-authorize" gesetzt, oder die Organisation verlangt admin-genehmigte Apps.

**Lösung:** Setzen Sie Permitted Users auf **All users may self-authorize**, oder autorisieren Sie jeden Nutzer vorab auf der ECA-Policies-Seite.

***

### Anmeldung funktioniert in Salesforce, aber DeepMask meldet weiterhin nicht autorisiert

**Ursache:** Das Access-Token ist abgelaufen, das Refresh-Token wurde widerrufen, oder die auf der Verbindung gespeicherte **Instanz-URL** der Organisation ist veraltet.

**Lösung:** Trennen und erneut verbinden. Nach einer Sandbox-Aktualisierung oder My-Domain-Änderung müssen Nutzer sich neu verbinden, damit DeepMask die neue `instance_url` speichert.

***

## Sicherheit & Datenschutz

### Delegierte Authentifizierung

* Jeder Salesforce-Aufruf läuft als der angemeldete Nutzer.
* Salesforce erzwingt Profil, Berechtigungssätze, Freigaberegeln und Feldebenen-Sicherheit. DeepMask fügt keine zusätzliche Sichtbarkeit hinzu.
* Das Entfernen des Salesforce-Zugriffs eines Nutzers entfernt sofort das, was er in DeepMask sehen kann.

### Keine gespeicherten Passwörter

DeepMask speichert ein Refresh-Token und den Organisations-Host (`instance_url`), verschlüsselt im Ruhezustand. Es speichert nicht das Salesforce-Passwort des Nutzers.

### Schreibvorgänge werden bestätigt; es gibt kein Löschen

Nutzer können Datensätze erstellen und aktualisieren (und Anrufe/Meetings protokollieren). Aktualisierungen und Mehrfach-Erstellungen erfordern nach einer Vorschau eine ausdrückliche Bestätigung. **DeepMask kann keine Salesforce-Datensätze löschen.**

### Zugriff widerrufen

* In DeepMask → **Konnektoren** → **Salesforce** → **Trennen**.
* In den Salesforce-Einstellungen → **External Client App Manager** → Ihre App → App widerrufen oder löschen.

Beide Aktionen machen Tokens ungültig. Nutzer müssen sich erneut verbinden, um den Zugriff wiederherzustellen.

<Info>
  Fragen zu Datenresidenz, Compliance oder Sicherheit? Kontaktieren Sie den DeepMask-Support unter [support@deepmask.io](mailto:support@deepmask.io).
</Info>
