Dodaj slash naredbe
Daj svojoj zajednici vlastite /naredbe. Kad član upiše jednu od njih, mssgs šalje poruku tvojoj web-usluzi i objavljuje ono što ona odgovori: karticu, gumbe ili odgovor koji vidi samo ta osoba.
Što možeš napraviti
- Odgovori karticomOdgovori JSON-om i u kanalu se pojavi kartica.
- Znaj tko pitaDobivaš člana i njegove uloge, pa možeš provjeriti tko smije što.
- Odgovaraj privatnoPrikaži odgovor samo članu koji je pitao.
- Bez žurbeOdgovori loaderom u roku od 5 sekundi, a ostatak dovrši preko callback URL-a.
U aplikaciji
Upiši / i pojavit će se naredbe zajednice
Tvoja usluga odgovara, mssgs objavljuje karticu
Popis za odabir i kartica dolaze iz same aplikacije. Podnožje kaže tko je upotrijebio koju naredbu.
Brzi početak
Izradi trigger
U aplikaciji za računalo otvori u svojoj zajednici Manage Server → Triggers i dodaj trigger: naredbu na koju reagira, primjerice
/weather, i URL svoje web-usluge.Primi poruku
Kad član pošalje poruku koja počinje s
/weather, mssgs je šalje POST zahtjevom na tvoj 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=..." }Odgovori JSON-om
Odgovori u roku od 5 sekundi sa statusom 2xx i JSON-om. U kanalu postaje kartica.
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
Postavke
Svaki trigger ima ove postavke u Manage Server → Triggers.
| Postavka | Što radi |
|---|---|
| Trigger Name | Kako se trigger zove, prikazano pored naredbe na popisu za odabir. |
| Word to Match | Tekst kojim poruka mora započeti, primjerice /weather. Kosa crta je uobičajena, ali nije obavezna. |
| URL Endpoint | Kamo mssgs šalje poruku. |
| Webhook Secret | Neobavezno. mssgs njime potpisuje svaki zahtjev, pogledaj u nastavku. |
| Active | Isključi trigger bez brisanja. |
| Post Matching Message | Ostaje li članova poruka, primjerice /weather Amsterdam, u kanalu iznad tvog odgovora. |
| Show Loading Reply | Prikazuje karticu učitavanja dok tvoja usluga radi. |
| Allowed User Groups | Pokreću ga samo članovi s tim ulogama. Za sve ostale to je obična poruka. |
/deploy i /deploy-prod: nije unaprijed određeno koja će se pokrenuti. Poruke botova i proslijeđene poruke nikad ne pokreću trigger.Što primaš
POST zahtjev s JSON tijelom. Među zaglavljima je i User-Agent: mssgs-webhook/1.0.
| Polje | Tip | Što je to |
|---|---|---|
server_guid | string | Zajednica. |
channel_guid | string | Kanal u kojem je poruka poslana. |
trigger_match | string | Naredba koja se podudarila, primjerice /weather. |
message.content | string | Cijela poruka, zajedno s naredbom. |
message.member_guid | string | Član koji ju je poslao, u ovoj zajednici. |
message.user_guid | string | Račun iste osobe, isti u svakoj zajednici. |
message.group_guids | array | Uloge koje član ima. |
message.cms | number | Kada je poslana, u milisekundama. |
message.is_action_button | boolean | true kad je trigger pokrenuo gumb, a ne upisana naredba. |
message.action_payload | object | payload gumba, kod pritisaka gumba. |
callback_url | string | Kasnije ažuriraj ili izbriši svoj odgovor, u roku od 30 minuta. |
stream_url | string | Stream uživo s odgovorima, reakcijama i pritiscima gumba na tvoj odgovor, 10 minuta. |
X-Mssgs-Signature: sha256=<hex>: HMAC-SHA256 sirovog tijela s tvojim tajnim ključem. Izračunaj ga sam i usporedi prije nego što povjeruješ zahtjevu.Provjera tko smije što
Usporedi message.group_guids s ulogama kojima vjeruješ, primjerice da samo moderatori mogu pokrenuti /ban. Da naredba uopće ne bude dostupna nikome drugome, postavi njezine uloge u postavkama triggera.
Što odgovaraš
Bilo koji status 2xx s JSON tijelom, do 4 MB. Pošalji barem jedno od polja message_container ili actions.
| Polje | Tip | Što je to |
|---|---|---|
message_container | object | Kartica. Ovdje radi svako polje kartica poruka, uključujući oznaku statusa, značku, statistiku diffa i sklopljeno razmišljanje. |
title, description, color, ... | string | Prečac: polja kartice na najvišoj razini automatski se pakiraju u karticu. |
actions | array | Gumbi ispod kartice. Pogledaj gumbe. |
visible_to_member_guids | array | Odgovor vide samo ti članovi. Pogledaj privatne odgovore. |
content ne prikazuje se na kartici odgovora na naredbu, pa ono što je važno stavi u samu karticu.Pet sekundi
mssgs na tvoj odgovor čeka 5 sekundi. Ako ti treba više vremena, odmah odgovori karticom s loaderom i dovrši preko callback_url, koji vrijedi 30 minuta.
// 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 } })
});Privatni odgovori
Stavi id-jeve članova u visible_to_member_guids i samo će oni vidjeti tvoj odgovor. Upotrijebi member_guid iz zahtjeva da odgovoriš samo osobi koja je pitala.
{
"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>"]
}Potpuni primjer
Naredba /weather u Node.js-u s Expressom, koja odgovara karticom.
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);Ograničenja
| Ograničenje | Vrijednost |
|---|---|
| Vrijeme za odgovor | 5 sekundi |
| Veličina odgovora | 4 MB |
| Naredbe po članu | 5 svakih 5 sekundi |
| Naknadno ažuriranje odgovora | 30 minuta, preko callback_url |
| Stream odgovora uživo | 10 minuta, preko stream_url |