Dodaj komendy z ukośnikiem
Daj swojej społeczności własne /komendy. Gdy członek wpisze jedną z nich, mssgs wysyła wiadomość do twojej usługi sieciowej i publikuje jej odpowiedź: kartę, przyciski albo odpowiedź widoczną tylko dla tej osoby.
Co możesz z tym zrobić
- Odpowiedz kartąOdpowiedz JSON-em, a na kanale pojawi się karta.
- Wiedz, kto pytaDostajesz członka i jego role, więc możesz sprawdzić, komu co wolno.
- Odpowiadaj prywatniePokaż odpowiedź tylko osobie, która pytała.
- Bez pośpiechuOdpowiedz loaderem w ciągu 5 sekund, a resztę dokończ przez callback URL.
W aplikacji
Wpisz /, a pojawią się komendy społeczności
Twoja usługa odpowiada, mssgs publikuje kartę
Lista wyboru i karta pochodzą z samej aplikacji. Stopka mówi, kto użył której komendy.
Szybki start
Utwórz trigger
W aplikacji desktopowej przejdź w swojej społeczności do Manage Server → Triggers i dodaj trigger: komendę, na którą reaguje, np.
/weather, oraz URL twojej usługi sieciowej.Odbierz wiadomość
Gdy członek wyśle wiadomość zaczynającą się od
/weather, mssgs wysyła ją żądaniem POST na twój 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=..." }Odpowiedz JSON-em
Odpowiedz w ciągu 5 sekund ze statusem 2xx i JSON-em. Na kanale zamieni się on w kartę.
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
Ustawienia
Każdy trigger ma te ustawienia w Manage Server → Triggers.
| Ustawienie | Co robi |
|---|---|
| Trigger Name | Nazwa triggera, widoczna obok komendy na liście wyboru. |
| Word to Match | Tekst, od którego musi się zaczynać wiadomość, np. /weather. Ukośnik jest zwyczajowy, ale nie wymagany. |
| URL Endpoint | Dokąd mssgs wysyła wiadomość. |
| Webhook Secret | Opcjonalny. mssgs podpisuje nim każde żądanie, zobacz niżej. |
| Active | Wyłącza trigger bez usuwania go. |
| Post Matching Message | Czy wiadomość członka, np. /weather Amsterdam, zostaje na kanale nad twoją odpowiedzią. |
| Show Loading Reply | Pokazuje kartę ładowania, gdy twoja usługa pracuje. |
| Allowed User Groups | Uruchamiają go tylko członkowie z tymi rolami. Dla wszystkich innych to zwykła wiadomość. |
/deploy i /deploy-prod: nie wiadomo z góry, która się uruchomi. Wiadomości od botów i przekazane wiadomości nigdy nie uruchamiają triggera.Co otrzymujesz
Żądanie POST z treścią JSON. Wśród nagłówków jest User-Agent: mssgs-webhook/1.0.
| Pole | Typ | Co to jest |
|---|---|---|
server_guid | string | Społeczność. |
channel_guid | string | Kanał, na którym wysłano wiadomość. |
trigger_match | string | Dopasowana komenda, np. /weather. |
message.content | string | Cała wiadomość, razem z komendą. |
message.member_guid | string | Nadawca jako członek tej społeczności. |
message.user_guid | string | Konto tej samej osoby, takie samo w każdej społeczności. |
message.group_guids | array | Role członka. |
message.cms | number | Czas wysłania, w milisekundach. |
message.is_action_button | boolean | true, gdy trigger uruchomił przycisk, a nie wpisana komenda. |
message.action_payload | object | payload przycisku, przy naciśnięciach przycisków. |
callback_url | string | Zaktualizuj albo usuń swoją odpowiedź później, przez 30 minut. |
stream_url | string | Strumień na żywo z odpowiedziami, reakcjami i naciśnięciami przycisków dotyczącymi twojej odpowiedzi, przez 10 minut. |
X-Mssgs-Signature: sha256=<hex>: HMAC-SHA256 surowej treści z twoim secretem. Oblicz go samodzielnie i porównaj, zanim zaufasz żądaniu.Sprawdzanie, komu co wolno
Porównaj message.group_guids z rolami, którym ufasz, np. żeby tylko moderatorzy mogli uruchamiać /ban. Żeby komenda w ogóle nie działała dla nikogo innego, ustaw jej role w ustawieniach triggera.
Co odpowiadasz
Dowolny status 2xx z treścią JSON, do 4 MB. Wyślij co najmniej jedno z pól message_container lub actions.
| Pole | Typ | Co to jest |
|---|---|---|
message_container | object | Karta. Działa tu każde pole kart wiadomości, łącznie z pigułką statusu, plakietką, statystykami diffu i zwiniętym rozumowaniem. |
title, description, color, ... | string | Skrót: pola karty podane na najwyższym poziomie zostaną za ciebie zapakowane w kartę. |
actions | array | Przyciski pod kartą. Zobacz przyciski. |
visible_to_member_guids | array | Odpowiedź widzą tylko ci członkowie. Zobacz prywatne odpowiedzi. |
content nie jest pokazywana na karcie odpowiedzi na komendę, więc to, co ważne, umieść w samej karcie.Pięć sekund
mssgs czeka na twoją odpowiedź 5 sekund. Jeśli potrzebujesz więcej czasu, odpowiedz od razu kartą z loaderem i dokończ przez callback_url, który jest ważny przez 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 } })
});Prywatne odpowiedzi
Wpisz identyfikatory członków w visible_to_member_guids, a tylko oni zobaczą twoją odpowiedź. Użyj member_guid z żądania, żeby odpowiedzieć tylko osobie, która pytała.
{
"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>"]
}Pełny przykład
Komenda /weather w Node.js z Expressem, odpowiadająca kartą.
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 | Wartość |
|---|---|
| Czas na odpowiedź | 5 sekund |
| Rozmiar odpowiedzi | 4 MB |
| Komendy na członka | 5 co 5 sekund |
| Późniejsza aktualizacja odpowiedzi | 30 minut, przez callback_url |
| Strumień odpowiedzi na żywo | 10 minut, przez stream_url |