---
title: "Slash-Befehle: eigene /Befehle für deine mssgs-Community"
description: "Eigene Slash-Befehle für deine mssgs-Community: mssgs schickt die Nachricht an deinen Webdienst und postet die JSON-Antwort als Karte. Einrichtung und Limits."
canonical: https://mss.gs/de/docs/commands
language: de
---

# Slash-Befehle hinzufügen

Gib deiner Community ihre eigenen /Befehle . Tippt ein Mitglied einen davon, schickt mssgs die Nachricht an deinen Webdienst und postet, was er antwortet: eine Karte, Buttons, eine Antwort, die nur dieses Mitglied sieht.

## Was du damit machen kannst

- **Mit einer Karte antworten** Antworte mit JSON, und es erscheint als Karte im Kanal.

- **Wissen, wer fragt** Du bekommst das Mitglied und seine Rollen und kannst so prüfen, wer was darf.

- **Privat antworten** Zeig die Antwort nur dem Mitglied, das gefragt hat.

- **Lass dir Zeit** Antworte innerhalb von 5 Sekunden mit einem Loader und mach dann über die Callback-URL fertig.

In der App

Tipp / und die Befehle der Community erscheinen

#### Amsterdam

Dein Dienst antwortet, mssgs postet die Karte

Die Auswahlliste und die Karte stammen aus der App selbst. Die Fußzeile zeigt, wer welchen Befehl benutzt hat.

- [Schnellstart](#quick-start)

- [Einstellungen](#settings)

- [Was du bekommst](#request)

- [Was du antwortest](#reply)

- [Fünf Sekunden](#timing)

- [Private Antworten](#private)

- [Ein vollständiges Beispiel](#example)

- [Limits](#limits)

## Schnellstart

- 1 Trigger anlegen Öffne in der Desktop-App bei deiner Community **Server verwalten → Trigger** und füg einen hinzu: den Befehl, auf den er reagiert, etwa /weather , und die URL deines Webdiensts.

### Die Nachricht empfangen

Sendet ein Mitglied eine Nachricht, die mit /weather beginnt, schickt mssgs sie per POST an deine URL:

```json
{
  "server_guid": "abc12345-...",
  "channel_guid": "def67890-...",
  "trigger_match": "/weather",
  "message": {
    "id": "d01ZZdef6-...",
    "content": "/weather Amsterdam",
    "member_guid": "member-guid",
    "user_guid": "user-guid",
    "group_guids": ["group-guid-1", "group-guid-2"],
    "cms": 1790000000000
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/...",
  "stream_url": "https://mss.gs/api/v1/instant/...?token=..."
}
```

### Mit JSON antworten

Antworte innerhalb von 5 Sekunden mit einem 2xx-Status und JSON. Daraus wird eine Karte im Kanal.

```json
{
  "message_container": {
    "color": "blue",
    "title": "Amsterdam",
    "description": "14 °C, light rain until 16:00",
    "fields": [
      { "field": "Wind", "value": "SW 18 km/h" },
      { "field": "Humidity", "value": "82%" }
    ]
  }
}
```

#### Amsterdam

## Einstellungen

Jeder Trigger hat diese Einstellungen unter **Server verwalten → Trigger**.

| Einstellung | Was sie tut |
| --- | --- |
| Name des Triggers | Wie der Trigger heißt, angezeigt neben dem Befehl in der Auswahlliste. |
| Wort, das passen soll | Der Text, mit dem eine Nachricht beginnen muss, etwa /weather . Ein Schrägstrich ist üblich, aber keine Pflicht. |
| URL-Endpunkt | Wohin mssgs die Nachricht schickt. |
| Webhook-Secret | Optional. mssgs signiert damit jeden Request, siehe unten. |
| Aktiv | Schalte den Trigger ab, ohne ihn zu löschen. |
| Passende Nachricht posten | Ob das /weather Amsterdam des Mitglieds über deiner Antwort im Kanal stehen bleibt. |
| Ladeantwort zeigen | Zeig eine Ladekarte, während dein Dienst arbeitet. |
| Erlaubte Benutzergruppen | Nur Mitglieder mit diesen Rollen lösen ihn aus. Für alle anderen ist es eine gewöhnliche Nachricht. |

## Was du bekommst

Einen POST mit JSON-Body. Unter den Headern ist User-Agent: mssgs-webhook/1.0 .

| Feld | Typ | Was es ist |
| --- | --- | --- |
| server_guid | string | Die Community. |
| channel_guid | string | Der Kanal, in den die Nachricht gesendet wurde. |
| trigger_match | string | Der Befehl, der gepasst hat, etwa /weather . |
| message.content | string | Die ganze Nachricht, samt Befehl. |
| message.member_guid | string | Das Mitglied, das sie gesendet hat, in dieser Community. |
| message.user_guid | string | Das Konto derselben Person, in jeder Community gleich. |
| message.group_guids | array | Die Rollen des Mitglieds. |
| message.cms | number | Wann sie gesendet wurde, in Millisekunden. |
| message.is_action_button | boolean | true , wenn ein Button den Trigger ausgelöst hat und kein getippter Befehl. |
| message.action_payload | object | Die payload des Buttons, bei Button-Drücken. |
| callback_url | string | Aktualisiere oder lösche deine Antwort später, 30 Minuten lang. |
| stream_url | string | Ein Live-Stream der Antworten, Reaktionen und Button-Drücke auf deine Antwort, 10 Minuten lang. |

### Prüfen, wer was darf

Vergleiche message.group_guids mit den Rollen, denen du vertraust, etwa damit nur Moderatoren /ban ausführen können. Soll ein Befehl für alle anderen gar nicht erst funktionieren, stell seine Rollen in den Einstellungen des Triggers ein.

## Was du antwortest

Einen beliebigen 2xx-Status mit JSON-Body, bis zu 4 MB. Sende mindestens eines von message_container oder actions .

| Feld | Typ | Was es ist |
| --- | --- | --- |
| message_container | object | Die Karte. Jedes Feld aus den Nachrichtenkarten funktioniert hier, auch Status-Pille, Badge, Diff-Statistik und eingeklappter Denkprozess. |
| title , description , color , ... | string | Kurzform: Kartenfelder auf oberster Ebene werden für dich in eine Karte verpackt. |
| actions | array | Buttons unter der Karte. Siehe Buttons. |
| visible_to_member_guids | array | Nur diese Mitglieder sehen die Antwort. Siehe private Antworten. |

## Fünf Sekunden

mssgs wartet 5 Sekunden auf deine Antwort. Brauchst du länger, antworte sofort mit einer Loader-Karte und mach über callback_url fertig, die 30 Minuten gültig bleibt.

```javascript
// Answer within 5 seconds with a loader...
res.json({ message_container: { loader: true, loader_text: 'Looking it up…' } });

// ...then finish in your own time with the callback URL.
await fetch(req.body.callback_url, {
  method: 'PUT',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ message_container: { color: 'blue', title: 'Done', description: result } })
});
```

## Private Antworten

Trag Mitglieds-IDs in visible_to_member_guids ein, und nur diese Mitglieder sehen deine Antwort. Nimm die member_guid aus dem Request, um nur der Person zu antworten, die gefragt hat.

```json
{
  "message_container": {
    "color": "green",
    "title": "You're on the list",
    "description": "Only you can see this reply."
  },
  "visible_to_member_guids": ["<message.member_guid from the request>"]
}
```

## Ein vollständiges Beispiel

Ein /weather -Befehl in Node.js mit Express, der mit einer Karte antwortet.

```javascript
import express from 'express';

const app = express();
app.use(express.json());

app.post('/mssgs/weather', async (req, res) => {
  const city = req.body.message.content.replace('/weather', '').trim() || 'Amsterdam';
  const w = await getWeather(city); // your own lookup

  res.json({
    message_container: {
      color: 'blue',
      title: city,
      description: `${w.temp} °C, ${w.summary}`,
      fields: [
        { field: 'Wind', value: w.wind },
        { field: 'Humidity', value: `${w.humidity}%` }
      ]
    }
  });
});

app.listen(3000);
```

## Limits

| Limit | Wert |
| --- | --- |
| Zeit für die Antwort | 5 Sekunden |
| Größe der Antwort | 4 MB |
| Befehle pro Mitglied | 5 alle 5 Sekunden |
| Die Antwort nachträglich aktualisieren | 30 Minuten, über callback_url |
| Live-Stream der Antwort | 10 Minuten, über stream_url |

## Weiterbauen
