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

# Trigger erstellen

> Füge einen Trigger zu einer Integration hinzu, der Workflows oder Agent-Konversationen starten kann

<Info>
  **Nutzt du unsere API über ein Dedicated Deployment?** Ersetze einfach `api.langdock.com` mit der Basis-URL deines Deployments: **`<deployment-url>/api/public`**
</Info>

Erstellt einen neuen Trigger für eine Integration. Triggers ermöglichen es Integrationen, Workflows oder Agent-Konversationen basierend auf externen Events zu starten, typischerweise durch Polling eines externen Systems auf Änderungen.

## Erforderliche Scopes

Dieser Endpoint erfordert den `INTEGRATION_API` Scope.

## Pfad-Parameter

| Parameter       | Typ    | Erforderlich | Beschreibung         |
| --------------- | ------ | ------------ | -------------------- |
| `integrationId` | string | Ja           | UUID der Integration |

## Request Body

| Parameter     | Typ    | Erforderlich | Beschreibung                                                      |
| ------------- | ------ | ------------ | ----------------------------------------------------------------- |
| `name`        | string | Ja           | Trigger-Name (max. 100 Zeichen)                                   |
| `description` | string | Nein         | Trigger-Beschreibung (max. 90 Zeichen)                            |
| `pollingCode` | string | Nein         | JavaScript-Code zum Polling von neuen Events (max. 1.000 Zeichen) |
| `inputFields` | array  | Nein         | Eingabefelder zur Konfiguration des Triggers                      |

### Eingabefeld-Schema

Jedes Eingabefeld hat die folgenden Eigenschaften:

| Eigenschaft        | Typ     | Erforderlich | Beschreibung                                   |
| ------------------ | ------- | ------------ | ---------------------------------------------- |
| `label`            | string  | Ja           | Feld-Label (max. 100 Zeichen)                  |
| `type`             | string  | Nein         | Feldtyp (Standard: "TEXT")                     |
| `description`      | string  | Nein         | Feld-Beschreibung (max. 500 Zeichen)           |
| `placeholder`      | string  | Nein         | Platzhaltertext (max. 200 Zeichen)             |
| `required`         | boolean | Nein         | Ob das Feld erforderlich ist (Standard: false) |
| `options`          | array   | Nein         | Optionen für SELECT-Felder                     |
| `allowMultiSelect` | boolean | Nein         | Mehrfachauswahl für SELECT-Felder erlauben     |

### Feldtypen

| Typ               | Beschreibung                |
| ----------------- | --------------------------- |
| `TEXT`            | Einzeilige Texteingabe      |
| `MULTI_LINE_TEXT` | Mehrzeilige Texteingabe     |
| `NUMBER`          | Numerische Eingabe          |
| `BOOLEAN`         | Wahr/Falsch-Umschalter      |
| `SELECT`          | Dropdown-Auswahl            |
| `PASSWORD`        | Passwort-Eingabe (maskiert) |
| `VECTOR`          | Vektor-Eingabe              |

## Beispiel

```javascript theme={null}
const axios = require("axios");

async function createTrigger(integrationId) {
  const response = await axios.post(
    `https://api.langdock.com/integrations/v1/${integrationId}/triggers/create`,
    {
      name: "New Issue Created",
      description: "Triggers when a new issue is created in the project tracker",
      pollingCode: `
        const response = await fetch('https://api.example.com/issues?since=' + lastPollTime, {
          headers: {
            'Authorization': 'Bearer ' + secrets.API_TOKEN
          }
        });

        if (!response.ok) {
          throw new Error('Failed to fetch issues');
        }

        const issues = await response.json();
        return issues.map(issue => ({
          id: issue.id,
          title: issue.title,
          description: issue.description,
          createdAt: issue.created_at
        }));
      `,
      inputFields: [
        {
          label: "Project ID",
          type: "TEXT",
          description: "The ID of the project to monitor",
          placeholder: "e.g., proj_123",
          required: true
        },
        {
          label: "Priority Filter",
          type: "SELECT",
          description: "Only trigger for issues with this priority",
          options: [
            { label: "All", value: "all" },
            { label: "High", value: "high" },
            { label: "Medium", value: "medium" },
            { label: "Low", value: "low" }
          ],
          required: false
        }
      ]
    },
    {
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
      }
    }
  );

  console.log("Created trigger:", response.data.trigger);
}

createTrigger("550e8400-e29b-41d4-a716-446655440000");
```

## Antwortformat

### Erfolgreiche Antwort (201 Created)

```typescript theme={null}
{
  trigger: {
    id: string;           // UUID des erstellten Triggers
    name: string;         // Trigger-Name
    slug: string;         // URL-freundliche Kennung (automatisch generiert)
    description: string;  // Trigger-Beschreibung
    type: string;         // Trigger-Typ
    pollingCode: string | null;  // JavaScript-Polling-Code
    inputFields: Array<{
      slug: string;       // Feld-Kennung
      label: string;      // Anzeige-Label
      type: string;       // Feldtyp
      description: string;
      placeholder: string | null;
      required: boolean;
      options: Array<{label: string, value: string}> | null;
      allowMultiSelect: boolean | null;
    }>;
  };
}
```

## Fehlerbehandlung

| Status Code | Beschreibung                                                      |
| ----------- | ----------------------------------------------------------------- |
| 400         | Ungültiger Request Body oder ungültige Integration-ID             |
| 401         | Ungültiger oder fehlender API-Schlüssel                           |
| 403         | Kein Zugriff auf diese Integration                                |
| 404         | Integration nicht gefunden                                        |
| 409         | Ein Trigger mit diesem Namen existiert bereits in der Integration |
| 429         | Rate Limit überschritten                                          |
| 500         | Interner Serverfehler                                             |

## Polling-Code-Umgebung

Trigger-Polling-Code läuft in einer isolierten JavaScript-Umgebung mit Zugriff auf:

* `inputs` - Objekt mit den Werten der vom Nutzer konfigurierten Eingabefelder
* `secrets` - Objekt mit konfigurierten Secrets für die Integration
* `lastPollTime` - Zeitstempel des letzten erfolgreichen Polls (für inkrementelles Abrufen)
* `fetch` - Standard fetch API für HTTP-Anfragen
* Standard JavaScript-Built-ins

Der Polling-Code sollte ein Array von Events zurückgeben. Jedes zurückgegebene Event löst den zugehörigen Workflow oder die Agent-Konversation aus.

<Warning>
  Polling-Code sollte Fehler sauber behandeln. Unbehandelte Fehler führen dazu, dass der Trigger fehlschlägt und Events möglicherweise verpasst werden.
</Warning>

<Info>
  Langdock blockiert bewusst Browser-basierte Anfragen, um deinen API-Schlüssel zu schützen und die Sicherheit deiner Anwendungen zu gewährleisten. Weitere Informationen findest du in unserem Guide zu [Best Practices für API-Schlüssel](/de/admin/ai-adoption-and-rollout/best-practices/api-key-best-practices).
</Info>
