Preskoči na glavni sadržaj
Programeri Slash naredbe

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

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

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

    Amsterdam

    14 °C, slaba kiša do 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

Postavke

Svaki trigger ima ove postavke u Manage Server → Triggers.

PostavkaŠto radi
Trigger NameKako se trigger zove, prikazano pored naredbe na popisu za odabir.
Word to MatchTekst kojim poruka mora započeti, primjerice /weather. Kosa crta je uobičajena, ali nije obavezna.
URL EndpointKamo mssgs šalje poruku.
Webhook SecretNeobavezno. mssgs njime potpisuje svaki zahtjev, pogledaj u nastavku.
ActiveIsključi trigger bez brisanja.
Post Matching MessageOstaje li članova poruka, primjerice /weather Amsterdam, u kanalu iznad tvog odgovora.
Show Loading ReplyPrikazuje karticu učitavanja dok tvoja usluga radi.
Allowed User GroupsPokreću ga samo članovi s tim ulogama. Za sve ostale to je obična poruka.
Uspoređuje se početak poruke. Izbjegavaj naredbe od kojih jedna počinje drugom, poput /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.

PoljeTipŠto je to
server_guidstringZajednica.
channel_guidstringKanal u kojem je poruka poslana.
trigger_matchstringNaredba koja se podudarila, primjerice /weather.
message.contentstringCijela poruka, zajedno s naredbom.
message.member_guidstringČlan koji ju je poslao, u ovoj zajednici.
message.user_guidstringRačun iste osobe, isti u svakoj zajednici.
message.group_guidsarrayUloge koje član ima.
message.cmsnumberKada je poslana, u milisekundama.
message.is_action_buttonbooleantrue kad je trigger pokrenuo gumb, a ne upisana naredba.
message.action_payloadobjectpayload gumba, kod pritisaka gumba.
callback_urlstringKasnije ažuriraj ili izbriši svoj odgovor, u roku od 30 minuta.
stream_urlstringStream uživo s odgovorima, reakcijama i pritiscima gumba na tvoj odgovor, 10 minuta.
Ako je postavljen tajni ključ, zahtjev nosi 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.

PoljeTipŠto je to
message_containerobjectKartica. Ovdje radi svako polje kartica poruka, uključujući oznaku statusa, značku, statistiku diffa i sklopljeno razmišljanje.
title, description, color, ...stringPrečac: polja kartice na najvišoj razini automatski se pakiraju u karticu.
actionsarrayGumbi ispod kartice. Pogledaj gumbe.
visible_to_member_guidsarrayOdgovor vide samo ti članovi. Pogledaj privatne odgovore.
Zaglavlje kartice prikazuje ime tvoje zajednice, a podnožje kaže tko je upotrijebio naredbu: „maya triggered /weather command“. Avatar je avatar člana.
Uvijek odgovaraj karticom: redak 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.

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 } })
});
Ako tvoja usluga ne odgovori na vrijeme ili odgovori pogreškom, član koji je upotrijebio naredbu vidi crvenu karticu „Failed“. Nitko drugi je ne vidi.

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.

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>"]
}

Potpuni primjer

Naredba /weather u Node.js-u s Expressom, koja odgovara karticom.

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);

Ograničenja

OgraničenjeVrijednost
Vrijeme za odgovor5 sekundi
Veličina odgovora4 MB
Naredbe po članu5 svakih 5 sekundi
Naknadno ažuriranje odgovora30 minuta, preko callback_url
Stream odgovora uživo10 minuta, preko stream_url

Nastavi graditi