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

# CRM-Synchronisierung

> Audience-Kontakte mit dem CRM abgleichen und Anrufergebnisse über Automationen zurückschreiben.

<Warning>
  CRM sync (Revenue Autopilot) is a beta feature. A workspace admin must enable
  **Beta features**, and the workspace needs the **Revenue Autopilot** add-on
  (or Include free on the plan) plus CRM sync capacity limits.
</Warning>

CRM Sync importiert Datensätze wiederkehrend aus einem CRM in Audience.
Agenten, Kampagnen, Segmente und Automationen können dadurch aktuelle
Kontaktattribute ohne CSV-Uploads verwenden.

| Richtung        | Verhalten                                                                                  |
| --------------- | ------------------------------------------------------------------------------------------ |
| CRM → Plattform | CRM Sync importiert Kontakte, Leads, Deals und zugeordnete Attribute.                      |
| Plattform → CRM | Automation-Actions erstellen oder aktualisieren CRM-Datensätze nach Anrufen und Workflows. |

## Unterstützte CRMs

* HubSpot
* HighLevel
* Salesforce
* Pipedrive
* Close
* Zoho CRM
* Attio
* Keap
* Twenty Cloud und selbst gehostetes Twenty

Twenty Cloud verwendet `https://api.twenty.com`. Für eine selbst gehostete
Instanz ist die öffentliche HTTPS-URL des Twenty-Servers erforderlich. Private,
Loopback-, Link-Local- und Cloud-Metadaten-Ziele werden abgelehnt.

## HighLevel-Marketplace-App einrichten

Wähle **Sub-account** als Zielbenutzer und trage unter **Advanced Settings →
Auth** exakt diese Redirect-URL ein:

```text theme={null}
https://www.ouraicalling.de/api/oauth/crm/callback
```

Der neutrale Pfad ist beabsichtigt: Der Marketplace lehnt Redirect-URLs mit
einer HighLevel-Markenreferenz ab.

Wähle nur diese Scopes:

```text theme={null}
contacts.readonly
contacts.write
opportunities.readonly
opportunities.write
calendars.readonly
calendars/events.readonly
calendars/events.write
locations.readonly
locations/customFields.readonly
locations/tags.readonly
users.readonly
```

Hinterlege `HIGHLEVEL_CLIENT_ID` und `HIGHLEVEL_CLIENT_SECRET` in der
Plattform-Umgebung und setze
`HIGHLEVEL_OAUTH_REDIRECT_BASE_URL=https://www.ouraicalling.de`. Danach
verwendest du
**Automations → Connections → HighLevel → Authorize HighLevel**. Eine
OAuth-Freigabe wird für CRM Sync und alle HighLevel-Automations-Nodes
wiederverwendet; rotierende Access- und Refresh-Tokens werden automatisch
aktualisiert.

Die Kalender-Nodes listen Kalender und freie Zeiten und können Termine
erstellen, aktualisieren oder stornieren. `calendars.write` wird absichtlich
nicht angefordert, da die Integration keine Kalenderdefinitionen erstellt oder
ändert.

Trage unter **Advanced Settings → Webhooks** exakt diese **Default Webhook URL**
ein:

```text theme={null}
https://www.ouraicalling.de/api/webhooks/crm
```

Lasse die **Custom Webhook URL** bei den einzelnen Events leer, damit sie die
Default-URL übernehmen. Aktiviere für CRM- und Termin-Automationen:

```text theme={null}
AppointmentCreate
AppointmentUpdate
AppointmentDelete
ContactCreate
ContactUpdate
ContactDelete
ContactDndUpdate
ContactTagUpdate
NoteCreate
NoteUpdate
NoteDelete
OpportunityCreate
OpportunityUpdate
OpportunityDelete
OpportunityStatusUpdate
OpportunityAssignedToUpdate
OpportunityMonetaryValueUpdate
OpportunityStageUpdate
```

Nicht benötigte Conversation-, Rechnungs-, Produkt-, Zahlungs-, Voice-AI- oder
Knowledge-Base-Events bleiben deaktiviert, bis ein Workflow sie benötigt. Der
Endpoint prüft die aktuelle Ed25519-Signatur in `X-GHL-Signature` und
unterstützt während der HighLevel-Übergangsphase zusätzlich die alte Signatur.

## Sync anlegen

1. Unter **Automations → Connections** eine API-Verbindung zum CRM anlegen.
   Kompatible Verbindungen tragen unter **Verbindung hinzufügen** den Tag **CRM Sync**.
2. **Audience → CRM Sync** öffnen.
3. Verbindung und CRM-Objekt beziehungsweise Quelle auswählen.
4. CRM-Felder auf `name`, `phone`, `email`, `tags` oder ein eigenes Audience-
   Attribut wie `custom.lifecycle_stage` abbilden. Mehrere Quellfelder können
   demselben Ziel zugeordnet und kombiniert werden.
5. Bis zu drei schreibgeschützte CRM-Beispiele nach der Zuordnung prüfen.
6. Intervall wählen und den Sync starten.

Der Mapper schlägt Standardfelder vor und erkennt vorhandene eigene Attribute
anhand ihres Namens. Mit **Eigener Wert** lassen sich CRM-Feld-Chips und Text in
der gewünschten Reihenfolge kombinieren. So kann etwa `Anrede + Vorname +
Nachname` den Wert `name` bilden und `Ländervorwahl + Telefonnummer` den Wert
`phone`. Mindestens `phone` oder `email` ist erforderlich, damit der erste
CRM-Datensatz sicher einem Audience-Kontakt zugeordnet werden kann.

Für nationale Telefonnummern wird ein **Standardland für Telefonnummern**
gewählt, zum Beispiel Deutschland. Vorschau und echter Lauf verwenden denselben
länderabhängigen Parser und speichern E.164 (`+49152…`). Internationale Nummern
mit `+` oder `00` ignorieren das Standardland. Stellt das CRM ein separates
ISO-Land (`DE`) oder eine Ländervorwahl (`+49`) bereit, wird dieses Feld in
derselben `phone`-Kombination vor dem Nummernfeld angeordnet. Ungültige Telefon-
und E-Mail-Kombinationen werden bereits in der schreibgeschützten Vorschau
markiert.

Public API und MCP behalten die einfache Mapping-Struktur. Ein einzelnes
Quellfeld bleibt ein normaler Feldschlüssel. Kombinationen verwenden sichere
`{{field}}`-Tokens mit optionalem festem Text; es wird kein Code ausgeführt:

```json theme={null}
{
  "{{salutation}} {{firstName}} {{lastName}}": "name",
  "{{phones.primaryPhoneCallingCode}}{{phones.primaryPhoneNumber}}": "phone",
  "email": "email"
}
```

Ein CRM-Label- oder Tag-Feld kann auf `tags` abgebildet werden. Die normalisierten
Tags werden in Kleinbuchstaben mit bestehenden manuellen Tags zusammengeführt
und erscheinen direkt im Audience-Tag-Filter.

Der erste Lauf importiert die ausgewählte Quelle. Folgeläufe verwenden, falls
verfügbar, den Cursor des Anbieters. Anbieter ohne inkrementellen Cursor lesen
die Quelle erneut und überspringen unveränderte Datensätze sicher. Läufe sind
dauerhaft: Pagination, Wiederholungen und Checkpoints werden auch nach einem
Server-Neustart fortgesetzt.

## Sync bearbeiten

Über die Stift-Aktion auf einer Sync-Karte lassen sich Name, Objekt, Quelle,
Intervall, Standardland und Feldzuordnung ändern. Danach erscheint dieselbe
Vorschau der zugeordneten Daten wie beim Anlegen. **Nur speichern** behält den
bestehenden Zeitplan bei. **Speichern & synchronisieren** speichert dieselben
Änderungen und startet sofort einen manuellen Lauf. Wenn Objekt, Quelle oder
Feldzuordnung geändert werden, wird der Anbieter-Cursor
zurückgesetzt, damit der nächste Lauf die neue Zuordnung auch auf bestehende
CRM-Datensätze anwendet.

## Identität und Konflikte

Die stabile CRM-Datensatz-ID ist die primäre Identität. Die Plattform speichert
eine Workspace-bezogene Verknüpfung zwischen dieser ID und dem Audience-
Kontakt. E-Mail und Telefonnummer dienen nur für eine sichere erste Zuordnung.
Mehrdeutige Treffer werden als Konflikt gemeldet, statt fremde Personen
zusammenzuführen.

CRM Sync löscht niemals einen Audience-Kontakt. Ein Full-Snapshot-Lauf kann die
Sync-Mitgliedschaft von Datensätzen deaktivieren, die nicht mehr in der
ausgewählten CRM-Quelle enthalten sind. Lokale Compliance-Daten wie Sperrliste
und Einwilligungen werden nie durch CRM-Daten entfernt.

## Ergebnisse zurückschreiben

Nach einem Anruf oder Qualifizierungsschritt kann eine CRM-Action in der
Automation verwendet werden. Jedes unterstützte CRM besitzt – soweit die
Anbieter-API es zulässt – Actions zum Suchen/Abrufen, Erstellen und
Aktualisieren von Datensätzen.

CRM-Webhook-Trigger starten Automationen aus Anbieterereignissen. HighLevel
verwendet den globalen Marketplace-Endpoint oben; Verbindung und Ereignis
werden in den Trigger-Einstellungen ausgewählt. Andere CRM-Anbieter verwenden
derzeit die im Trigger angezeigte Automation-Webhook-URL und das Secret.

## Public API und MCP

Dieselben Operationen stehen bereit über:

* `GET|POST /api/v1/crm-syncs`
* `POST /api/v1/crm-syncs/discover`
* `GET|PATCH|DELETE /api/v1/crm-syncs/{id}`
* `GET|POST /api/v1/crm-syncs/{id}/runs`
* MCP-Tools zum Auflisten, Anlegen, Ändern, Löschen und Starten von CRM-Syncs

API-Keys benötigen `automations:read` beziehungsweise `automations:write`.
Secrets und Anbieter-Tokens werden nie ausgegeben.
