Pridaj príkazy s lomkou
Daj svojej komunite vlastné /príkazy. Keď ho člen napíše, mssgs pošle správu tvojej webovej službe a uverejní, čo odpovie: kartu, tlačidlá alebo odpoveď, ktorú uvidí iba ten, kto sa pýtal.
Čo s tým môžeš robiť
- Odpovedz kartouOdpovedz JSON-om a v kanáli sa objaví ako karta.
- Vieš, kto sa pýtaDostaneš člena a jeho roly, takže si overíš, kto smie čo robiť.
- Odpovedaj súkromneUkáž odpoveď iba členovi, ktorý sa pýtal.
- Nikam sa neponáhľajDo 5 sekúnd odpovedz loaderom a zvyšok dokonči cez callback URL.
V aplikácii
Napíš / a objavia sa príkazy komunity
Tvoja služba odpovie, mssgs uverejní kartu
Výber príkazov aj karta sú priamo z aplikácie. Päta hovorí, kto použil ktorý príkaz.
Rýchly štart
Vytvor trigger
V desktopovej aplikácii otvor vo svojej komunite Manage Server → Triggers a pridaj trigger: príkaz, na ktorý reaguje, napríklad
/weather, a URL tvojej webovej služby.Prijmi správu
Keď člen pošle správu, ktorá začína na
/weather, mssgs ju cez POST pošle na tvoju 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=..." }Odpovedz JSON-om
Do 5 sekúnd odpovedz so stavom 2xx a JSON-om. V kanáli sa z neho 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
Nastavenia
Každý trigger má tieto nastavenia v Manage Server → Triggers.
| Nastavenie | Čo robí |
|---|---|
| Trigger Name | Názov triggera, zobrazený vedľa príkazu vo výbere. |
| Word to Match | Text, ktorým musí správa začínať, napríklad /weather. Lomka je zvykom, nie je povinná. |
| URL Endpoint | Kam mssgs pošle správu. |
| Webhook Secret | Voliteľný tajný kľúč. mssgs ním podpíše každú požiadavku, pozri nižšie. |
| Active | Vypne trigger bez toho, aby sa zmazal. |
| Post Matching Message | Či vlastná správa člena, napríklad /weather Amsterdam, zostane v kanáli nad tvojou odpoveďou. |
| Show Loading Reply | Zobrazí kartu načítavania, kým tvoja služba pracuje. |
| Allowed User Groups | Spustia ho iba členovia s týmito rolami. Pre všetkých ostatných je to obyčajná správa. |
/deploy a /deploy-prod: ktorý sa spustí, nie je pevne dané. Správy od botov a preposlané správy trigger nikdy nespustia.Čo dostaneš
POST s telom vo formáte JSON. Medzi hlavičkami je User-Agent: mssgs-webhook/1.0.
| Pole | Typ | Čo to je |
|---|---|---|
server_guid | string | Komunita. |
channel_guid | string | Kanál, v ktorom bola správa poslaná. |
trigger_match | string | Príkaz, ktorý sa zhodoval, napríklad /weather. |
message.content | string | Celá správa vrátane príkazu. |
message.member_guid | string | Člen, ktorý ju poslal, v tejto komunite. |
message.user_guid | string | Účet tej istej osoby, rovnaký v každej komunite. |
message.group_guids | array | Roly, ktoré člen má. |
message.cms | number | Kedy bola poslaná, v milisekundách. |
message.is_action_button | boolean | true, keď trigger spustilo tlačidlo, nie napísaný príkaz. |
message.action_payload | object | payload tlačidla, pri stlačení tlačidla. |
callback_url | string | Cez ňu odpoveď neskôr aktualizuješ alebo zmažeš, počas 30 minút. |
stream_url | string | Živý stream odpovedí, reakcií a stlačení tlačidiel na tvojej odpovedi, počas 10 minút. |
X-Mssgs-Signature: sha256=<hex>: HMAC-SHA256 surového tela s tvojím tajným kľúčom. Vypočítaj ho na svojej strane a porovnaj, skôr než požiadavke uveríš.Kto smie čo robiť
Porovnaj message.group_guids s rolami, ktorým dôveruješ, napríklad aby /ban mohli spúšťať iba moderátori. Ak má byť príkaz pre všetkých ostatných úplne nedostupný, nastav jeho roly v nastaveniach triggera.
Čo odpovieš
Ľubovoľný stav 2xx s telom JSON, najviac 4 MB. Pošli aspoň jedno z polí message_container alebo actions.
| Pole | Typ | Čo to je |
|---|---|---|
message_container | object | Karta. Funguje tu každé pole z kariet správ vrátane stavového štítka, odznaku, štatistík diffu a zbaleného uvažovania. |
title, description, color, ... | string | Skratka: polia karty na najvyššej úrovni sa za teba zabalia do karty. |
actions | array | Tlačidlá pod kartou. Pozri tlačidlá. |
visible_to_member_guids | array | Odpoveď uvidia iba títo členovia. Pozri súkromné odpovede. |
content sa na karte odpovede na príkaz nezobrazí, takže to podstatné daj do samotnej karty.Päť sekúnd
mssgs na tvoju odpoveď čaká 5 sekúnd. Ak potrebuješ viac času, odpovedz hneď kartou s loaderom a dokonči to cez callback_url, ktorá platí 30 minút.
// 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 } })
});Súkromné odpovede
Daj id členov do visible_to_member_guids a tvoju odpoveď uvidia iba oni. Použi member_guid z požiadavky a odpovieš iba tomu, kto sa pýtal.
{
"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ý príklad
Príkaz /weather v Node.js s Expressom, ktorý odpovedá 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 odpoveď | 5 sekúnd |
| Veľkosť odpovede | 4 MB |
| Príkazy na člena | 5 za 5 sekúnd |
| Neskoršia úprava odpovede | 30 minút, cez callback_url |
| Živý stream odpovede | 10 minút, cez stream_url |