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
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.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=..." }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
Instellingen
Elke trigger heeft deze instellingen in Server beheren → Triggers.
| Instelling | Wat het doet |
|---|---|
| Triggernaam | Hoe de trigger heet, getoond naast het commando in de lijst. |
| Woord om te matchen | De tekst waarmee een bericht moet beginnen, zoals /weather. Een slash is gebruikelijk, niet verplicht. |
| URL-eindpunt | Waar mssgs het bericht naartoe stuurt. |
| Webhook-secret | Optioneel. mssgs ondertekent er elk request mee, zie hieronder. |
| Actief | Zet de trigger uit zonder hem te verwijderen. |
| Origineel bericht posten | Of het eigen bericht van het lid, zoals /weather Amsterdam, boven je antwoord in het kanaal blijft staan. |
| Laadbericht tonen | Toon een laadkaart terwijl je service bezig is. |
| Toegestane gebruikersgroepen | Alleen leden met deze rollen activeren hem. Voor iedereen anders is het een gewoon bericht. |
/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.
| Veld | Type | Wat het is |
|---|---|---|
server_guid | string | De community. |
channel_guid | string | Het kanaal waarin het bericht is verstuurd. |
trigger_match | string | Het commando dat overeenkwam, zoals /weather. |
message.content | string | Het hele bericht, inclusief het commando. |
message.member_guid | string | Het lid dat het stuurde, in deze community. |
message.user_guid | string | Het account van diezelfde persoon, hetzelfde in elke community. |
message.group_guids | array | De rollen die het lid heeft. |
message.cms | number | Wanneer het is verstuurd, in milliseconden. |
message.is_action_button | boolean | true als een knop de trigger activeerde, geen getypt commando. |
message.action_payload | object | De payload van de knop, bij knopdrukken. |
callback_url | string | Werk je antwoord later bij of verwijder het, 30 minuten lang. |
stream_url | string | Een live stream van antwoorden, reacties en knopdrukken op je antwoord, 10 minuten lang. |
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.
| Veld | Type | Wat het is |
|---|---|---|
message_container | object | De kaart. Elk veld van berichtkaarten werkt hier, ook de statuspill, de badge, de diff-stats en de ingeklapte redenering. |
title, description, color, ... | string | Verkorte vorm: kaartvelden op het hoogste niveau worden voor je in een kaart gezet. |
actions | array | Knoppen onder de kaart. Zie knoppen. |
visible_to_member_guids | array | Alleen deze leden zien het antwoord. Zie privé antwoorden. |
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.
// 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 } })
});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.
{
"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.
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
| Limiet | Waarde |
|---|---|
| Tijd om te antwoorden | 5 seconden |
| Grootte van het antwoord | 4 MB |
| Commando's per lid | 5 per 5 seconden |
| Het antwoord achteraf bijwerken | 30 minuten, via callback_url |
| Live stream van het antwoord | 10 minuten, via stream_url |