Przejdź do treści głównej
Deweloperzy Komendy z ukośnikiem

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

  1. 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.

  2. 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=..."
    }
  3. 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
    maya18:45
    /weather Amsterdam
    System
    Message from Weekend Crew

    Amsterdam

    14 °C, lekki deszcz do 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

Ustawienia

Każdy trigger ma te ustawienia w Manage Server → Triggers.

UstawienieCo robi
Trigger NameNazwa triggera, widoczna obok komendy na liście wyboru.
Word to MatchTekst, od którego musi się zaczynać wiadomość, np. /weather. Ukośnik jest zwyczajowy, ale nie wymagany.
URL EndpointDokąd mssgs wysyła wiadomość.
Webhook SecretOpcjonalny. mssgs podpisuje nim każde żądanie, zobacz niżej.
ActiveWyłącza trigger bez usuwania go.
Post Matching MessageCzy wiadomość członka, np. /weather Amsterdam, zostaje na kanale nad twoją odpowiedzią.
Show Loading ReplyPokazuje kartę ładowania, gdy twoja usługa pracuje.
Allowed User GroupsUruchamiają go tylko członkowie z tymi rolami. Dla wszystkich innych to zwykła wiadomość.
Dopasowywany jest początek wiadomości. Unikaj komend, z których jedna jest początkiem drugiej, jak /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.

PoleTypCo to jest
server_guidstringSpołeczność.
channel_guidstringKanał, na którym wysłano wiadomość.
trigger_matchstringDopasowana komenda, np. /weather.
message.contentstringCała wiadomość, razem z komendą.
message.member_guidstringNadawca jako członek tej społeczności.
message.user_guidstringKonto tej samej osoby, takie samo w każdej społeczności.
message.group_guidsarrayRole członka.
message.cmsnumberCzas wysłania, w milisekundach.
message.is_action_buttonbooleantrue, gdy trigger uruchomił przycisk, a nie wpisana komenda.
message.action_payloadobjectpayload przycisku, przy naciśnięciach przycisków.
callback_urlstringZaktualizuj albo usuń swoją odpowiedź później, przez 30 minut.
stream_urlstringStrumień na żywo z odpowiedziami, reakcjami i naciśnięciami przycisków dotyczącymi twojej odpowiedzi, przez 10 minut.
Gdy ustawisz secret, żądanie zawiera 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.

PoleTypCo to jest
message_containerobjectKarta. Działa tu każde pole kart wiadomości, łącznie z pigułką statusu, plakietką, statystykami diffu i zwiniętym rozumowaniem.
title, description, color, ...stringSkrót: pola karty podane na najwyższym poziomie zostaną za ciebie zapakowane w kartę.
actionsarrayPrzyciski pod kartą. Zobacz przyciski.
visible_to_member_guidsarrayOdpowiedź widzą tylko ci członkowie. Zobacz prywatne odpowiedzi.
Nagłówek karty pokazuje nazwę twojej społeczności, a stopka mówi, kto użył komendy: „maya triggered /weather command”. Awatar jest awatarem członka.
Zawsze odpowiadaj kartą: linia 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.

javascript
// 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 } })
});
Jeśli twoja usługa nie odpowie na czas albo odpowie błędem, osoba, która użyła komendy, zobaczy czerwoną kartę „Failed”. Nikt inny jej nie widzi.

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.

json
{
  "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ą.

javascript
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

LimitWartość
Czas na odpowiedź5 sekund
Rozmiar odpowiedzi4 MB
Komendy na członka5 co 5 sekund
Późniejsza aktualizacja odpowiedzi30 minut, przez callback_url
Strumień odpowiedzi na żywo10 minut, przez stream_url

Buduj dalej