Přidej příkazy s lomítkem
Dej své komunitě vlastní /příkazy. Když člen jeden z nich napíše, mssgs pošle zprávu tvé webové službě a zveřejní, co odpoví: kartu, tlačítka nebo odpověď, kterou uvidí jen on.
Co s tím můžeš dělat
- Odpověz kartouOdpověz JSONem a v kanálu se objeví karta.
- Věz, kdo se ptáDostaneš člena i jeho role, takže si ověříš, kdo smí co dělat.
- Odpovídej soukroměUkaž odpověď jen členovi, který se ptal.
- Bez spěchuDo 5 sekund odpověz loaderem a pak to dokonči přes callback URL.
V aplikaci
Napiš / a objeví se příkazy komunity
Tvoje služba odpoví, mssgs zveřejní kartu
Výběr příkazů i karta jsou přímo z aplikace. V patičce je, kdo použil který příkaz.
Rychlý start
Vytvoř trigger
V desktopové aplikaci otevři ve své komunitě Manage Server → Triggers a přidej trigger: příkaz, na který reaguje, třeba
/weather, a URL tvé webové služby.Přijmi zprávu
Když člen pošle zprávu, která začíná na
/weather, mssgs ji pošle metodou POST na tvou 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=..." }Odpověz JSONem
Do 5 sekund odpověz se statusem 2xx a JSONem. V kanálu se z něj stane karta.
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
Nastavení
Každý trigger má v Manage Server → Triggers tato nastavení.
| Nastavení | Co dělá |
|---|---|
| Trigger Name | Jméno triggeru, zobrazené vedle příkazu ve výběru. |
| Word to Match | Text, kterým musí zpráva začínat, třeba /weather. Lomítko je zvykem, ale není povinné. |
| URL Endpoint | Kam mssgs zprávu pošle. |
| Webhook Secret | Volitelný. mssgs jím podepíše každý požadavek, viz níže. |
| Active | Vypne trigger, aniž by bylo nutné ho smazat. |
| Post Matching Message | Jestli členova vlastní zpráva /weather Amsterdam zůstane v kanálu nad tvou odpovědí. |
| Show Loading Reply | Zobrazí kartu načítání, zatímco tvoje služba pracuje. |
| Allowed User Groups | Spustí ho jen členové s těmito rolemi. Pro všechny ostatní je to obyčejná zpráva. |
/deploy a /deploy-prod: který se spustí, není dané. Zprávy od botů a přeposlané zprávy trigger nikdy nespustí.Co dostaneš
Požadavek POST s tělem v JSONu. Mezi hlavičkami je User-Agent: mssgs-webhook/1.0.
| Pole | Typ | Co to je |
|---|---|---|
server_guid | string | Komunita. |
channel_guid | string | Kanál, do kterého byla zpráva poslána. |
trigger_match | string | Příkaz, který se shodoval, třeba /weather. |
message.content | string | Celá zpráva, včetně příkazu. |
message.member_guid | string | Člen, který ji poslal, v této komunitě. |
message.user_guid | string | Účet téže osoby, stejný v každé komunitě. |
message.group_guids | array | Role, které člen má. |
message.cms | number | Kdy byla zpráva poslána, v milisekundách. |
message.is_action_button | boolean | true, když trigger spustilo tlačítko, a ne napsaný příkaz. |
message.action_payload | object | payload tlačítka, u stisků tlačítek. |
callback_url | string | Aktualizuj nebo smaž svou odpověď i později, po dobu 30 minut. |
stream_url | string | Živý stream odpovědí, reakcí a stisků tlačítek u tvé odpovědi, po dobu 10 minut. |
X-Mssgs-Signature: sha256=<hex>: HMAC-SHA256 surového těla s tvým tajným klíčem. Spočítej ho na své straně a porovnej, než požadavku uvěříš.Kontrola, kdo smí co dělat
Porovnej message.group_guids s rolemi, kterým věříš, třeba aby /ban mohli spouštět jen moderátoři. Pokud má příkaz pro všechny ostatní úplně zmizet, nastav jeho role v nastavení triggeru.
Co odpovíš
Jakýkoli status 2xx s tělem v JSONu, až 4 MB. Pošli aspoň jedno z message_container a actions.
| Pole | Typ | Co to je |
|---|---|---|
message_container | object | Karta. Funguje tu každé pole karet zpráv, včetně štítku stavu, odznaku, statistik diffu a sbaleného uvažování. |
title, description, color, ... | string | Zkratka: pole karty na nejvyšší úrovni se za tebe zabalí do karty. |
actions | array | Tlačítka pod kartou. Viz tlačítka. |
visible_to_member_guids | array | Odpověď uvidí jen tito členové. Viz soukromé odpovědi. |
content se na kartě odpovědi na příkaz nezobrazí, takže všechno důležité dej přímo do karty.Pět sekund
mssgs čeká na tvou odpověď 5 sekund. Pokud potřebuješ víc času, odpověz hned kartou s loaderem a dokonči to přes callback_url, která platí 30 minut.
// 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 } })
});Soukromé odpovědi
Dej id členů do visible_to_member_guids a tvou odpověď uvidí jen oni. Použij member_guid z požadavku a odpovíš jen tomu, kdo se ptal.
{
"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>"]
}Celý příklad
Příkaz /weather v Node.js s Expressem, který odpovídá kartou.
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);Limity
| Limit | Hodnota |
|---|---|
| Čas na odpověď | 5 sekund |
| Velikost odpovědi | 4 MB |
| Příkazů na člena | 5 za 5 sekund |
| Pozdější úprava odpovědi | 30 minut, přes callback_url |
| Živý stream odpovědi | 10 minut, přes stream_url |