# Journey-Objekt

Die Methoden [lifecycle](/de/developer/api-reference/customer-journey-api/lifecycle/), [create, and update](/de/developer/api-reference/customer-journey-api/create-update/) geben alle ein Journey-Objekt mit der gleichen Top-Level-Struktur zurück:

```json title="Struktur"
{
  "info": { ... },        // schreibgeschützte Metadaten (nur in Antworten)
  "params": { ... },      // Journey-weite Konfiguration (erstellen / aktualisieren)
  "points": [ ... ],      // Canvas-Knoten und ihre Verbindungen
  "comments": [ ... ]     // Canvas-Kommentare
}
```

Wenn Sie eine Journey **erstellen** oder **aktualisieren**, senden Sie `title`, `params`, `points` und `comments`. Antworten geben `info` (welches `params` enthält) sowie `points` und `comments` zurück.

## Info

Schreibgeschützte Journey-Metadaten. Wird von jeder v3-Methode zurückgegeben. Nicht Teil des Request-Bodys.

| Feld | Typ | Beschreibung |
|---|---|---|
| `uuid` | string | [Journey-ID](/de/developer/api-reference/api-identifiers/#journey-id). |
| `title` | string | Name der Journey. |
| `status` | [`JourneyStatus`](#journeystatus-enum) | Aktueller Status. |
| `created_at` | string | Erstellungszeitstempel (ISO 8601). |
| `updated_at` | string | Zeitstempel der letzten Aktualisierung (ISO 8601). |
| `is_first_activated` | bool | Ob die Journey mindestens einmal gestartet wurde. |
| `params` | [`JourneyParams`](#journeyparams) | Journey-weite Konfiguration. |
| `category_uuid` | string | UUID der Kategorie, oder leer, wenn nicht kategorisiert. |
| `pointCounts` | map&lt;string, uint32&gt; | Anzahl der Points nach Typ. |
| `campaign_type` | [`CampaignType`](#campaigntype-enum) | Wie Benutzer in die Journey eintreten. |
| `stop_reason` | string | Grund für den Stopp der Journey, falls zutreffend. |
| `last_edited_by` | `User` | Benutzer, der die Journey zuletzt bearbeitet hat. |
| `dynamic_entry` | bool | Ob der dynamische Eintritt aktiviert ist. |

## JourneyParams

Journey-weite Konfiguration. Wird beim Erstellen/Aktualisieren gesendet und innerhalb von `info.params` zurückgegeben.

| Feld | Typ | Beschreibung |
|---|---|---|
| `application_code` | string | [Anwendungscode](/de/developer/api-reference/api-identifiers/#application-code), zu dem die Journey gehört. Erforderlich beim Erstellen. |
| `silent_hours` | [`SilentHours`](#silenthours) | Stunden, in denen Nachrichten pro Kanal unterdrückt werden. |
| `capping` | [`EntryCapping`](#entrycapping) | Begrenzungen, wie oft ein Benutzer erneut in die Journey eintreten kann. |
| `conversion_window` | [`ConversionWindow`](#conversionwindow) | Fenster zur Zuordnung von Ziel-Conversions. |
| `user_id_track_change_policy` | [`UserIDTrackChangePolicy`](#useridtrackchangepolicy-enum) | Wie mit der Änderung der ID eines Benutzers mitten in der Journey umgegangen wird. |

### SilentHours

Unterdrückt das Senden während der Ruhezeiten. Konfiguriert **pro Kanal**: Jeder Kanal verwendet seine eigenen `SilentHoursParams`:

| Feld | Typ | Beschreibung |
|---|---|---|
| `push_params` | `SilentHoursParams` | Ruhezeiten für Push-Benachrichtigungen. |
| `inapp_params` | `SilentHoursParams` | Ruhezeiten für In-App-Nachrichten. |
| `email_params` | `SilentHoursParams` | Ruhezeiten für E-Mails. |
| `sms_params` | `SilentHoursParams` | Ruhezeiten für SMS. |
| `whatsapp_params` | `SilentHoursParams` | Ruhezeiten für WhatsApp. |
| `line_params` | `SilentHoursParams` | Ruhezeiten für LINE. |

Jeder `SilentHoursParams` ist:

| Feld | Typ | Beschreibung |
|---|---|---|
| `enabled` | bool | Ob Ruhezeiten für diesen Kanal gelten. |
| `from_time` | `Time` | Beginn des Ruhezeitfensters: `{ "hour": 0–23, "minute": 0–59 }`. |
| `to_time` | `Time` | Ende des Ruhezeitfensters. |
| `week_days` | bool[] | Sieben boolesche Werte für die Tage, an denen das Fenster gilt (Montag = Index 0). |
| `behavior` | enum | Was zu tun ist, wenn eine Nachricht in die Ruhezeit fällt: `WaitAndSend` (anhalten, dann senden, wenn das Fenster endet), `DropAndGo` (Nachricht überspringen, Journey sofort fortsetzen) oder `WaitAndDrop` (das Fenster abwarten, dann fortfahren, ohne zu senden). |

### EntryCapping

Begrenzt, wie oft derselbe Benutzer in die Journey eintreten kann.

| Feld | Typ | Beschreibung |
|---|---|---|
| `is_enabled` | bool | Ob die Eintrittsbegrenzung aktiviert ist. |
| `period` | uint64 | Minimale Anzahl von Sekunden zwischen den Eintritten eines Benutzers. |

### ConversionWindow

| Feld | Typ | Beschreibung |
|---|---|---|
| `seconds` | uint64 | Wie lange nach dem Eintritt in eine Journey der Abschluss eines Ziels durch einen Benutzer noch als Conversion zählt. |

## Point

Ein Point ist ein Knoten auf dem Journey-Canvas: ein Eintrittspunkt, eine Nachricht, eine Verzögerung, ein Splitter und so weiter.

| Feld | Typ | Beschreibung |
|---|---|---|
| `uuid` | string | Eindeutige ID des Points innerhalb der Journey. Muss eine kanonische [RFC 4122](https://www.rfc-editor.org/rfc/rfc4122) UUID sein: 32 Hex-Ziffern in 8-4-4-4-12-Gruppen. |
| `title` | string | Anzeigename des Points. |
| `point_type` | [`PointType`](#pointtype-enum) | Die Art des Knotens. |
| `outputs` | array of [`PointOutput`](#pointoutput) | Verbindungen zu nachgelagerten Points. |
| `position` | [`Position`](#position) | Canvas-Koordinaten. |
| `point_data` | object | Genau ein verschachtelter Schlüssel, der mit `point_type` übereinstimmt (siehe Tabelle der [Point-Typen](#point-types-and-point_data)). |

<Aside type="note">
Alle UUIDs (`info.uuid`, jeder Point-`uuid` und der `next_point_uuid` jedes Outputs) müssen kanonische RFC 4122 UUIDs sein (8-4-4-4-12 Hex-Gruppen).
</Aside>

### PointOutput

Die Outputs eines Points sind seine ausgehenden Zweige. Ihre Schlüssel sind **nicht frei wählbar**. Der Validator erwartet für jeden Point-Typ einen exakten Satz von Schlüsseln und lehnt eine Journey ab, deren Point die falsche Anzahl von Outputs oder einen nicht erkannten Schlüssel hat.

| Feld | Typ | Beschreibung |
|---|---|---|
| `identity.key` | string | Schlüssel des Zweiges. Muss den nachstehenden [Regeln für Output-Schlüssel](#output-keys) folgen. |
| `identity.order` | int | Anzeigereihenfolge des Zweiges. |
| `info.title` | string | Optionale Bezeichnung des Zweiges. |
| `info.next_point_uuid` | string | UUID des nächsten Points, mit dem dieser Zweig verbunden ist. |

#### Output-Schlüssel

Der Standardzweig (der erste) heißt immer `"default"`. Zusätzliche Zweige heißen `"output1"`, `"output2"`, … (das Präfix `output` gefolgt von einem 1-basierten Index). Zwei Point-Typen brechen diese Regel, wie unten vermerkt.

| Point-Typ | Erwartete Output-Schlüssel |
|---|---|
| Eintrittspunkte (`START_BY_SEGMENT`, `START_BY_API`, `EVENT`), `INAPP`, `SET_TAGS`, `WEBHOOK`, `AUDIENCE_SYNC` und Nachrichtenpunkte ohne Splitter (`SEND_PUSH`, `SEND_EMAIL`, `SEND_SMS`, `SEND_WHATSAPP`, `SEND_LINE`, `SEND_KAKAO`, `SEND_TELEGRAM`, `SEND_DATA`) | `default` |
| `GOAL_EVENT`, `EXIT` | keine (keine Outputs) |
| `FILTER` | `default`, `output1` |
| `BOOLEAN_SPLITTER` | `default`, dann `output1` … `outputN` (ein zusätzlicher Zweig pro Bedingung. Ein einfacher Ja/Nein-Split ist `default` + `output1`) |
| `WAIT` (Verzögerung) | `default`. Eine dynamische Verzögerung mit Zweigaufteilung fügt `output1` hinzu |
| `WAIT_EVENT` | `default` ist der Zweig für **nicht ausgelöstes Ereignis**. `output1` (oder, mit einem Bedingungsskript, ein Zweig pro Bedingung) ist der ausgelöste Pfad |
| `SEND_PUSH` mit einem Splitter | `default`, `output1` (und `output2`, wenn sowohl der Nachrichten- als auch der Zustellungs-Splitter aktiviert sind) |
| `SEND_EMAIL` / `SEND_SMS` / `SEND_LINE` / `SEND_WHATSAPP` mit einem Splitter | `default`, `output1` |
| `SEND_WHATSAPP` mit einer Schnellantwort-Voreinstellung | `default`, plus ein Zweig pro Schnellantwort. Der Schlüssel ist der Wert der Schnellantwort selbst |
| `AB_SPLITTER` | `output0`, `output1`, `output2`, … (einer pro Variante. **Es gibt keinen `default`-Zweig**) |

### Position

| Feld | Typ | Beschreibung |
|---|---|---|
| `x` | float | Horizontale Koordinate auf dem Canvas. |
| `y` | float | Vertikale Koordinate auf dem Canvas. |

## Point-Typen und point_data

`point_data` ist ein One-of: Es enthält genau ein verschachteltes Objekt, dessen Schlüssel durch den `point_type` des Points bestimmt wird.

| `point_type` | `point_data`-Schlüssel | Zweck |
|---|---|---|
| `POINT_TYPE_START_BY_SEGMENT` | `start_by_segment` | Eintritt: Benutzer, die einem Segment entsprechen. |
| `POINT_TYPE_EVENT` | `message_bus` | Eintritt: Benutzer, die ein Ereignis auslösen. |
| `POINT_TYPE_START_BY_API` | `start_by_api` | Eintritt: Benutzer, die über den [Start by API](/de/developer/api-reference/customer-journey-api/start-by-api/)-Aufruf eingefügt werden. |
| `POINT_TYPE_WAIT` | `delay` | Warten für ein festes oder dynamisches Intervall. |
| `POINT_TYPE_WAIT_EVENT` | `wait_event` | Warten, bis ein Ereignis eintritt. |
| `POINT_TYPE_SEND_PUSH` | `send_push` | Eine Push-Benachrichtigung senden. |
| `POINT_TYPE_SEND_EMAIL` | `send_email` | Eine E-Mail senden. |
| `POINT_TYPE_SEND_SMS` | `send_sms` | Eine SMS senden. |
| `POINT_TYPE_SEND_WHATSAPP` | `send_whatsapp` | Eine WhatsApp-Nachricht senden. |
| `POINT_TYPE_SEND_TELEGRAM` | `send_telegram` | Eine Telegram-Nachricht senden. |
| `POINT_TYPE_SEND_KAKAO` | `send_kakao` | Eine Kakao-Nachricht senden. |
| `POINT_TYPE_SEND_LINE` | `send_line` | Eine LINE-Nachricht senden. |
| `POINT_TYPE_SEND_DATA` | `send_data` | Eine stille Datennachricht senden. |
| `POINT_TYPE_INAPP` | `inapp` | Eine In-App-Nachricht anzeigen. |
| `POINT_TYPE_BOOLEAN_SPLITTER` | `boolean_splitter` | Benutzer nach einer Bedingung aufteilen (Segment, Tags oder Ereignis). |
| `POINT_TYPE_AB_SPLITTER` | `ab_splitter` | Benutzer in A/B-Gruppen aufteilen. |
| `POINT_TYPE_FILTER` | `filter` | Nur Benutzern, die einem Filter entsprechen, das Fortfahren erlauben. |
| `POINT_TYPE_SET_TAGS` | `set_tags` | Benutzer-Tags aktualisieren. |
| `POINT_TYPE_WEBHOOK` | `web_hook` | Eine ausgehende HTTP-Anfrage senden. |
| `POINT_TYPE_GOAL_EVENT` | `goal_event` | Ein Conversion-Ziel verfolgen. |
| `POINT_TYPE_AUDIENCE_SYNC` | `audience_sync` | Benutzer mit einer externen Audience synchronisieren. |
| `POINT_TYPE_EXIT` | `terminator` | Die Journey verlassen. |

<Aside type="note">
Die `point_data`-Payloads pro Typ sind in der [Point-Referenz](/de/developer/api-reference/customer-journey-api/point-reference/) dokumentiert. Eintritts-, Timing-, Splitting- und Aktionspunkte werden dort vollständig behandelt. Nachrichtenpunkte werden auf der Envelope-Ebene mit Links zu den relevanten Kanaldokumentationen behandelt.
</Aside>

### Beispiel-Point

Ein "Set Tags"-Point mit einer einzigen nachgelagerten Verbindung:

```json
{
  "uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "title": "Tag as engaged",
  "point_type": "POINT_TYPE_SET_TAGS",
  "position": { "x": 480, "y": 120 },
  "outputs": [
    {
      "identity": { "key": "default", "order": 0 },
      "info": { "title": "", "next_point_uuid": "ffffffff-1111-2222-3333-444444444444" }
    }
  ],
  "point_data": {
    "set_tags": {
      "application_code": "XXXXX-XXXXX",
      "tags": [ { "name": "engaged", "value": "true" } ]
    }
  }
}
```

## JourneyComment

| Feld | Typ | Beschreibung |
|---|---|---|
| `id` | string | Kommentar-UUID. |
| `message` | string | Kommentartext. |
| `position` | [`Position`](#position) | Canvas-Koordinaten. |
| `index` | int | Anzeigereihenfolge. |
| `created_at` | string | Erstellungszeitstempel (ISO 8601). |
| `deleted` | bool | Ob der Kommentar gelöscht ist. |

## Enums

### JourneyStatus enum

`STATUS_DRAFT`, `STATUS_RUNNING`, `STATUS_FINISHED`, `STATUS_ARCHIVED`, `STATUS_PAUSED`, `STATUS_UNKNOWN`.

### CampaignType enum

- `TriggerBased`: Benutzer treten bei einem Ereignis ein.
- `AudienceBased`: Benutzer treten aus einem Segment ein.
- `APIBased`: Benutzer treten über den Start by API-Aufruf ein.
- `Mixed`: mehr als ein Eintrittstyp.
- `Unknown`: Eintrittstyp nicht bestimmt.

### PointType enum

Siehe die Tabelle der [Point-Typen](#point-types-and-point_data) oben für die vollständige Liste und den `point_data`-Schlüssel, dem jeder Typ zugeordnet ist.

### UserIDTrackChangePolicy enum

Steuert, was mit einem Benutzer passiert, der sich mitten in einer Journey befindet, wenn sich seine [Benutzer-ID](/de/developer/api-reference/api-identifiers/#user-id) ändert:

- `DEFAULT`: Standardverhalten.
- `TRACK`: den Benutzer unter der neuen ID weiterverfolgen.
- `DROP`: den Benutzer aus der Journey entfernen, wenn sich seine ID ändert.

## Verwandte Themen

<CardGrid>
  <LinkCard title="Point-Referenz" href="/developer/api-reference/customer-journey-api/point-reference/" />
  <LinkCard title="Erstellen und Aktualisieren" href="/developer/api-reference/customer-journey-api/create-update/" />
  <LinkCard title="Lifecycle" href="/developer/api-reference/customer-journey-api/lifecycle/" />
</CardGrid>