# Elemente in Nachrichten

Schalter, Eingabefelder, Diagramme und Tabellen direkt in einer Nachricht.

Eine Nachricht kann mehr als Text und Knöpfe enthalten: einen Button, einen Schalter, ein Eingabefeld, ein Diagramm, eine Tabelle. Diese Elemente gibt es nur in Nachrichten.

**Du brauchst:** [Nachricht senden](https://packlets.app/docs/senden.md). Für bedienbare Elemente zusätzlich einen [Webhook](https://packlets.app/docs/webhook.md).

## Elemente mitschicken

Elemente stehen im Feld `elements`, bis zu 12 pro Nachricht. Jedes hat einen `type` und eine `id`, die in der Nachricht eindeutig ist:

```bash
curl https://api.packlets.app/v1/push \
  -H "Authorization: Bearer $SAMY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Fehlerrate nach Deploy",
    "text": "Seit Deploy v2.14 schlagen 6 % der Anfragen fehl.",
    "elements": [
      {"type": "button", "id": "rollback", "label": "Auf v2.13 zurückrollen"},
      {"type": "toggle", "id": "auto_deploy", "label": "Automatische Deploys", "value": true},
      {"type": "chart", "id": "fehler", "label": "Fehlerrate", "unit": "%", "chart": "line",
       "points": [{"label": "9:00", "value": 0.2}, {"label": "10:00", "value": 6.2}]}
    ]
  }'
```

```python
import os, requests

requests.post("https://api.packlets.app/v1/push", timeout=10,
              headers={"Authorization": f"Bearer {os.environ['SAMY_KEY']}"},
              json={"title": "Fehlerrate nach Deploy",
                    "text": "Seit Deploy v2.14 schlagen 6 % der Anfragen fehl.",
                    "elements": [
                        {"type": "button", "id": "rollback", "label": "Auf v2.13 zurückrollen"},
                        {"type": "toggle", "id": "auto_deploy", "label": "Automatische Deploys", "value": True},
                        {"type": "chart", "id": "fehler", "label": "Fehlerrate", "unit": "%", "chart": "line",
                         "points": [{"label": "9:00", "value": 0.2}, {"label": "10:00", "value": 6.2}]},
                    ]}).raise_for_status()
```

```typescript
await fetch("https://api.packlets.app/v1/push", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.SAMY_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    title: "Fehlerrate nach Deploy",
    text: "Seit Deploy v2.14 schlagen 6 % der Anfragen fehl.",
    elements: [
      { type: "button", id: "rollback", label: "Auf v2.13 zurückrollen" },
      { type: "toggle", id: "auto_deploy", label: "Automatische Deploys", value: true },
      { type: "chart", id: "fehler", label: "Fehlerrate", unit: "%", chart: "line",
        points: [{ label: "9:00", value: 0.2 }, { label: "10:00", value: 6.2 }] },
    ],
  }),
});
```

Welche Elemente es gibt und welche Felder sie haben, steht in der Referenz [Elemente](https://packlets.app/docs/elemente.md).

## Auf Bedienung reagieren

Tippst du den Button, legst den Schalter um oder schickst ein Eingabefeld ab, bekommt dein Webhook das Ereignis `ui`:

```json
{
  "type": "ui",
  "packlet_id": "9d2f7c10-3a5b-4c8e-9f21-6b7d8e9f0a12",
  "message_id": "5b0c1a52-7c1e-4a43-9d0b-2f6f0c7d1e11",
  "element_id": "auto_deploy",
  "value": false,
  "changed_at": "2026-11-10T18:00:00.000Z"
}
```

`element_id` sagt, welches Element es war, `value` den neuen Wert. Beim Button ist `value` gleich `null`. An `message_id` erkennst du, aus welcher Nachricht die Bedienung kommt.

Wie dein Tool das Ereignis empfängt, steht unter [Webhook einrichten](https://packlets.app/docs/webhook.md).

## Knöpfe oder Elemente

| | [Knöpfe](https://packlets.app/docs/knoepfe.md) (`buttons`) | Elemente (`elements`) |
|---|---|---|
| Wie oft bedienbar | einmal pro Nachricht | beliebig oft |
| Was geht | Link öffnen oder eine Aktion | Button, Schalter, Eingabefeld, dazu Diagramm, Tabelle, Text |
| Die Nachricht zeigt danach | welcher Knopf gewählt wurde | den aktuellen Zustand, zum Beispiel den Schalter |

Beides zusammen in einer Nachricht geht auch.

## Was du wissen solltest

- **Nachträglich ändern geht nicht.** Die Werte in einer Nachricht ändern sich nur, wenn du sie in der App bedienst. Dein Tool kann sie nicht aktualisieren. Schick stattdessen eine neue Nachricht. Brauchst du eine Ansicht, die immer aktuell ist, bau eine [eigene App](https://packlets.app/docs/apps.md).
- **Es ist schmal.** Eine Nachricht ist schmaler als der Bildschirm. Lass Elemente am besten auf voller Breite (ohne `width`) und halt Beschriftungen kurz. Mehr dazu unter [Layout der Elemente](https://packlets.app/docs/layout.md).
- **Fertige Beispiele** zum Kopieren stehen unter [Vorlagen](https://packlets.app/docs/vorlagen.md).
- **Im Push** steht nur der Text. Elemente siehst du erst in der App.
