---
title: "Buttons: interaktive Nachrichten in mssgs"
description: "Buttons unter mssgs-Karten: Links öffnen, die Karte per Tipp für alle ändern, jeden Druck live hören, Befehle ausführen. Felder, Schritte, Events, Fehler."
canonical: https://mss.gs/de/docs/buttons
language: de
---

# Buttons hinzufügen

Setz Buttons unter jede Karte. Ein Button öffnet einen Link, ändert die Karte für alle, sobald jemand tippt, oder sagt deinem Dienst, dass er gedrückt wurde.

## Was du damit machen kannst

- **Einen Link öffnen** Schick Leute auf eine Seite, ein Dashboard oder einen Pull Request.

- **Die Karte per Tipp ändern** Bearbeiten, entfernen, reagieren oder antworten, direkt beim Drücken, ohne eigenen Server.

- **Jeden Druck mitbekommen** Dein Dienst erfährt live, wer was gedrückt hat.

- **Einen Befehl ausführen** Ein Button kann einen der Slash-Befehle der Community auslösen, mit Daten.

In der App

#### Haustür

Jemand klingelt: Die Karte erscheint

#### Haustür

Ein Tipp auf Tor öffnen: Die Karte ändert sich für alle

Für die Änderung selbst braucht es keinen Server: Die Schritte sind mit der Nachricht gespeichert. Deine Torsteuerung hört den Druck und öffnet das Tor.

- [Schnellstart](#quick-start)

- [Drei Arten](#kinds)

- [Die Karte ändern](#steps)

- [Den Druck hören](#listen)

- [Einen Befehl ausführen](#trigger)

- [Felder](#fields)

- [Fehler](#errors)

## Schnellstart

### Eine actions-Liste hinzufügen

Buttons gehören in actions , neben die Karte: in einem Post per [Webhook](https://mss.gs/de/docs/webhooks), in der Antwort auf einen [Befehl](https://mss.gs/de/docs/commands) oder in einem [Update](https://mss.gs/de/docs/live-updates).

```json
{
  "message_container": {
    "color": "yellow",
    "title": "Deploy v2.1 to production?",
    "description": "Requested by maya."
  },
  "actions": [
    { "type": "url:https://ci.example.com/deploys/218", "text": "View changes", "color": "blue" }
  ]
}
```

#### v2.1 in Produktion deployen?

- 2 Festlegen, was ein Druck tut Ein Link, eine Änderung an der Karte oder ein Aufruf deines Diensts. Die drei Arten stehen unten.

## Drei Arten von Buttons

Der type entscheidet, was ein Druck tut.

| Typ | Was ein Druck tut | Kommt bei dir an |
| --- | --- | --- |
| url:{url} | Öffnet den Link. | Nein |
| webhook_action | Führt die Schritte aus, die du mit ihm gespeichert hast, für alle im Kanal. | Ja, über die stream_url der Nachricht |
| trigger:{guid} | Löst einen der Trigger der Community mit der payload des Buttons aus. | Ja, als neuer Request an die URL dieses Triggers |

## Die Karte per Tipp ändern

Ein webhook_action -Button trägt in triggers eine Liste von Schritten. Bei einem Druck laufen sie der Reihe nach auf dem mssgs-Server, und alle im Kanal sehen das Ergebnis.

| Schritt | Was er tut, für alle | Felder |
| --- | --- | --- |
| update_message | Ersetzt die Karte und ihre Buttons. Sende "actions": [] , um die Buttons zu entfernen. | message_container , actions , content |
| remove_message | Löscht die Nachricht. | Keine |
| add_reaction | Fügt eine Reaktion hinzu, im Namen des Mitglieds, das gedrückt hat. | emoji |
| add_reply | Postet eine Antwort, im Namen des Mitglieds, das gedrückt hat. | content |

```json
{
  "message_container": { "color": "yellow", "title": "Front door", "description": "Someone rang the bell." },
  "actions": [
    {
      "type": "webhook_action",
      "id": "open_gate",
      "text": "Open gate",
      "color": "green",
      "payload": { "door": "front" },
      "triggers": [
        {
          "action": "update_message",
          "message_container": { "color": "blue", "title": "Front door", "description": "Opening…" },
          "actions": []
        },
        { "action": "add_reaction", "emoji": ":white_check_mark:" }
      ]
    }
  ]
}
```

## Den Druck hören

Eine Nachricht mit Buttons kommt vom Webhook mit einer stream_url zurück. Halte sie offen, und jeder Druck kommt als Event vom Typ action an, mit der ID des Buttons, dem gespeicherten Button samt payload und der Person, die gedrückt hat:

```sse
data: {"type": "action", "message_id": "...", "action_id": "open_gate", "action": {"id": "open_gate", "payload": {"door": "front"}, ...}, "member_guid": "member-guid", "member": {...}, "ts": 1790000000000}
```

Erledige die eigentliche Arbeit, etwa das Tor öffnen, und setz dann über callback_url den Endzustand der Karte. Wie Stream und Callback funktionieren, steht unter [Live-Updates](https://mss.gs/de/docs/live-updates).

## Einen Befehl per Button ausführen

Ein trigger:{guid} -Button löst einen der Trigger deiner Community aus, als hätte jemand den Befehl getippt, und übergibt die payload des Buttons. Der Trigger bekommt:

```json
{
  "actions": [
    {
      "type": "trigger:5f2c9a1e-trigger-guid",
      "text": "Check status",
      "color": "blue",
      "payload": { "order_id": "12345" }
    }
  ]
}
```

```json
{
  "trigger_match": "/status",
  "message": {
    "content": "[Action Triggered]",
    "member_guid": "member-guid",
    "is_action_button": true,
    "action_payload": { "order_id": "12345" }
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/...",
  "stream_url": "https://mss.gs/api/v1/instant/...?token=..."
}
```

## Felder

| Feld | Typ | Was es tut |
| --- | --- | --- |
| type | string | url:{url} , webhook_action oder trigger:{guid} . Pflicht. |
| text | string | Die Beschriftung des Buttons. Pflicht; label geht auch. |
| color | string | Die Farbe des Buttons, siehe unten. |
| id | string | Für webhook_action : welcher Button gedrückt wurde. Innerhalb der Nachricht eindeutig. |
| payload | object | Deine Daten, die du bei einem Druck zurückbekommst. |
| triggers | array | Für webhook_action : die Schritte, die laufen sollen. |
| disabled | boolean | Zeigt den Button ausgegraut, und Drücke werden abgelehnt. |

### Farben

green , blue und purple ergeben einen gefüllten, primären Button. red , orange und yellow ergeben einen sekundären: Nimm sie für „Ablehnen“, „Abbrechen“ und andere vorsichtige Entscheidungen.

## Fehler

Wenn du eine Nachricht mit Buttons postest, prüft mssgs sie zuerst:

| Code | Bedeutung |
| --- | --- |
| INVALID_ACTIONS_FORMAT | actions ist keine Liste von Objekten. |
| INVALID_ACTION_MISSING_FIELDS | Ein Button hat keinen type oder keinen text . |
| DUPLICATE_ACTION_ID | Zwei Buttons haben dieselbe id . |
| INVALID_TRIGGERS_FORMAT | triggers ist keine Liste von Schritten. |
| INVALID_TRIGGER_MISSING_ACTION | Ein Schritt hat keine action . |
| INVALID_TRIGGER_ACTION_NOT_ALLOWED | Ein anderer Schritt als die vier oben. |

### Wenn jemand drückt

| Code | Bedeutung |
| --- | --- |
| MESSAGE_NOT_FOUND | Die Nachricht wurde inzwischen gelöscht. |
| ACTION_NOT_FOUND | Die Nachricht hat keinen Button mit dieser ID. |
| ACTION_DISABLED | Der Button ist deaktiviert. |
| TRIGGER_NOT_FOUND , TRIGGER_NOT_ACTIVE | Der Trigger, auf den ein Button zeigt, ist weg oder abgeschaltet. |
| TRIGGER_NOT_ALLOWED | Das Mitglied hat keine Rolle, die diesen Trigger benutzen darf. |

## Kommst du von der alten Doku?

## Weiterbauen
