Ga naar hoofdinhoud
Developers Slash-commando's

Slash-commando's toevoegen

Geef je community eigen /commando's. Typt een lid er een, dan stuurt mssgs het bericht naar je webservice en post wat die antwoordt: een kaart, knoppen, een antwoord dat alleen dat lid ziet.

Wat je kunt doen

  • Antwoorden met een kaartAntwoord met JSON en het verschijnt als kaart in het kanaal.
  • Weten wie het vroegJe krijgt het lid en zijn rollen mee, zodat je kunt controleren wie wat mag.
  • Privé antwoordenToon het antwoord alleen aan het lid dat het vroeg.
  • Neem de tijdAntwoord binnen 5 seconden met een loader en maak het daarna af via de callback-URL.

In de app

Typ / en de commando's van de community verschijnen

Je service antwoordt, mssgs post de kaart

De lijst en de kaart zijn precies zoals de app ze toont. De voettekst zegt wie welk commando gebruikte.

Snel aan de slag

  1. Maak de trigger aan

    Open in de desktop-app bij je community Server beheren → Triggers en voeg er een toe: het commando waarop hij reageert, zoals /weather, en de URL van je webservice.

  2. Ontvang het bericht

    Stuurt een lid een bericht dat begint met /weather, dan POST mssgs het naar je 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=..."
    }
  3. Antwoord met JSON

    Antwoord binnen 5 seconden met een 2xx-status en JSON. Dat wordt een kaart in het kanaal.

    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%" }
        ]
      }
    }
    general
    maya18:45
    /weather Amsterdam
    System
    Bericht van Weekend Crew

    Amsterdam

    14 °C, lichte regen tot 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

Instellingen

Elke trigger heeft deze instellingen in Server beheren → Triggers.

InstellingWat het doet
TriggernaamHoe de trigger heet, getoond naast het commando in de lijst.
Woord om te matchenDe tekst waarmee een bericht moet beginnen, zoals /weather. Een slash is gebruikelijk, niet verplicht.
URL-eindpuntWaar mssgs het bericht naartoe stuurt.
Webhook-secretOptioneel. mssgs ondertekent er elk request mee, zie hieronder.
ActiefZet de trigger uit zonder hem te verwijderen.
Origineel bericht postenOf het eigen bericht van het lid, zoals /weather Amsterdam, boven je antwoord in het kanaal blijft staan.
Laadbericht tonenToon een laadkaart terwijl je service bezig is.
Toegestane gebruikersgroepenAlleen leden met deze rollen activeren hem. Voor iedereen anders is het een gewoon bericht.
Er wordt gekeken naar het begin van het bericht. Vermijd commando's die met elkaar beginnen, zoals /deploy en /deploy-prod: welke dan reageert, ligt niet vast. Berichten van bots en doorgestuurde berichten activeren nooit een trigger.

Wat je ontvangt

Een POST met een JSON-body. In de headers staat onder meer User-Agent: mssgs-webhook/1.0.

VeldTypeWat het is
server_guidstringDe community.
channel_guidstringHet kanaal waarin het bericht is verstuurd.
trigger_matchstringHet commando dat overeenkwam, zoals /weather.
message.contentstringHet hele bericht, inclusief het commando.
message.member_guidstringHet lid dat het stuurde, in deze community.
message.user_guidstringHet account van diezelfde persoon, hetzelfde in elke community.
message.group_guidsarrayDe rollen die het lid heeft.
message.cmsnumberWanneer het is verstuurd, in milliseconden.
message.is_action_buttonbooleantrue als een knop de trigger activeerde, geen getypt commando.
message.action_payloadobjectDe payload van de knop, bij knopdrukken.
callback_urlstringWerk je antwoord later bij of verwijder het, 30 minuten lang.
stream_urlstringEen live stream van antwoorden, reacties en knopdrukken op je antwoord, 10 minuten lang.
Met een secret bevat het request X-Mssgs-Signature: sha256=<hex>: een HMAC-SHA256 van de ruwe body met jouw secret. Bereken hem zelf en vergelijk hem voordat je het request vertrouwt.

Controleren wie wat mag

Vergelijk message.group_guids met de rollen die je vertrouwt, bijvoorbeeld om alleen moderators /ban te laten gebruiken. Wil je een commando helemaal afschermen voor alle anderen, stel dan de rollen in bij de instellingen van de trigger.

Wat je antwoordt

Elke 2xx-status met een JSON-body, tot 4 MB. Stuur minstens een van message_container of actions.

VeldTypeWat het is
message_containerobjectDe kaart. Elk veld van berichtkaarten werkt hier, ook de statuspill, de badge, de diff-stats en de ingeklapte redenering.
title, description, color, ...stringVerkorte vorm: kaartvelden op het hoogste niveau worden voor je in een kaart gezet.
actionsarrayKnoppen onder de kaart. Zie knoppen.
visible_to_member_guidsarrayAlleen deze leden zien het antwoord. Zie privé antwoorden.
De kop van de kaart toont de naam van je community, en de voettekst zegt wie het commando gebruikte: "maya triggered /weather command". De avatar is die van het lid.
Antwoord altijd met een kaart: de content-regel wordt op de kaart van een antwoord op een commando niet getoond, dus zet wat belangrijk is in de kaart zelf.

Vijf seconden

mssgs wacht 5 seconden op je antwoord. Heb je meer tijd nodig, antwoord dan meteen met een loaderkaart en maak het af via callback_url, die 30 minuten geldig blijft.

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 } })
});
Antwoordt je service niet op tijd, of met een fout, dan ziet het lid dat het commando gebruikte een rode foutkaart. Niemand anders ziet die.

Privé antwoorden

Zet member-id's in visible_to_member_guids en alleen die leden zien je antwoord. Gebruik de member_guid uit het request om alleen degene te antwoorden die het vroeg.

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>"]
}

Een volledig voorbeeld

Een /weather-commando in Node.js met Express, dat antwoordt met een kaart.

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);

Limieten

LimietWaarde
Tijd om te antwoorden5 seconden
Grootte van het antwoord4 MB
Commando's per lid5 per 5 seconden
Het antwoord achteraf bijwerken30 minuten, via callback_url
Live stream van het antwoord10 minuten, via stream_url

Verder bouwen