Zum Hauptinhalt springen
Entwickler Buttons

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 öffnenSchick Leute auf eine Seite, ein Dashboard oder einen Pull Request.
  • Die Karte per Tipp ändernBearbeiten, entfernen, reagieren oder antworten, direkt beim Drücken, ohne eigenen Server.
  • Jeden Druck mitbekommenDein Dienst erfährt live, wer was gedrückt hat.
  • Einen Befehl ausführenEin Button kann einen der Slash-Befehle der Community auslösen, mit Daten.

In der App

Jemand klingelt: Die Karte erscheint

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

  1. Eine actions-Liste hinzufügen

    Buttons gehören in actions, neben die Karte: in einem Post per Webhook, in der Antwort auf einen Befehl oder in einem Update.

    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" }
      ]
    }
    deploys
    System
    Nachricht von Deploybot

    v2.1 in Produktion deployen?

    Angefragt von maya.
  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.

TypWas ein Druck tutKommt bei dir an
url:{url}Öffnet den Link.Nein
webhook_actionFü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.

SchrittWas er tut, für alleFelder
update_messageErsetzt die Karte und ihre Buttons. Sende "actions": [], um die Buttons zu entfernen.message_container, actions, content
remove_messageLöscht die Nachricht.Keine
add_reactionFügt eine Reaktion hinzu, im Namen des Mitglieds, das gedrückt hat.emoji
add_replyPostet 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:" }
      ]
    }
  ]
}
Die Schritte werden aus der gespeicherten Nachricht gelesen, nie aus der App des Mitglieds, ein Druck kann also nur tun, was du dort hinterlegt hast.
Die Schritte laufen der Reihe nach, und jeder wird versucht: Schlägt einer fehl, laufen die übrigen trotzdem.

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.

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=..."
}
Was der Trigger antwortet, wird als neue Karte gepostet. Der Request sagt nicht, an welcher Nachricht der Button hing: Pack alles, was du brauchst, in payload.

Felder

FeldTypWas es tut
typestringurl:{url}, webhook_action oder trigger:{guid}. Pflicht.
textstringDie Beschriftung des Buttons. Pflicht; label geht auch.
colorstringDie Farbe des Buttons, siehe unten.
idstringFür webhook_action: welcher Button gedrückt wurde. Innerhalb der Nachricht eindeutig.
payloadobjectDeine Daten, die du bei einem Druck zurückbekommst.
triggersarrayFür webhook_action: die Schritte, die laufen sollen.
disabledbooleanZeigt 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:

CodeBedeutung
INVALID_ACTIONS_FORMATactions ist keine Liste von Objekten.
INVALID_ACTION_MISSING_FIELDSEin Button hat keinen type oder keinen text.
DUPLICATE_ACTION_IDZwei Buttons haben dieselbe id.
INVALID_TRIGGERS_FORMATtriggers ist keine Liste von Schritten.
INVALID_TRIGGER_MISSING_ACTIONEin Schritt hat keine action.
INVALID_TRIGGER_ACTION_NOT_ALLOWEDEin anderer Schritt als die vier oben.

Wenn jemand drückt

CodeBedeutung
MESSAGE_NOT_FOUNDDie Nachricht wurde inzwischen gelöscht.
ACTION_NOT_FOUNDDie Nachricht hat keinen Button mit dieser ID.
ACTION_DISABLEDDer Button ist deaktiviert.
TRIGGER_NOT_FOUND, TRIGGER_NOT_ACTIVEDer Trigger, auf den ein Button zeigt, ist weg oder abgeschaltet.
TRIGGER_NOT_ALLOWEDDas Mitglied hat keine Rolle, die diesen Trigger benutzen darf.

Kommst du von der alten Doku?

Buttons vom Typ button mit ws:send-Schritten, local:update_message und local:remove_message, previous:success-Bedingungen und expire_in_seconds funktionieren für externe Absender nicht mehr. Nimm webhook_action mit den Schritten oben: Die erreichen alle, nicht nur die Person, die gedrückt hat.

Weiterbauen