Přeskočit na hlavní obsah
Vývojáři Příkazy s lomítkem

Přidej příkazy s lomítkem

Dej své komunitě vlastní /příkazy. Když člen jeden z nich napíše, mssgs pošle zprávu tvé webové službě a zveřejní, co odpoví: kartu, tlačítka nebo odpověď, kterou uvidí jen on.

Co s tím můžeš dělat

  • Odpověz kartouOdpověz JSONem a v kanálu se objeví karta.
  • Věz, kdo se ptáDostaneš člena i jeho role, takže si ověříš, kdo smí co dělat.
  • Odpovídej soukroměUkaž odpověď jen členovi, který se ptal.
  • Bez spěchuDo 5 sekund odpověz loaderem a pak to dokonči přes callback URL.

V aplikaci

Napiš / a objeví se příkazy komunity

Tvoje služba odpoví, mssgs zveřejní kartu

Výběr příkazů i karta jsou přímo z aplikace. V patičce je, kdo použil který příkaz.

Rychlý start

  1. Vytvoř trigger

    V desktopové aplikaci otevři ve své komunitě Manage Server → Triggers a přidej trigger: příkaz, na který reaguje, třeba /weather, a URL tvé webové služby.

  2. Přijmi zprávu

    Když člen pošle zprávu, která začíná na /weather, mssgs ji pošle metodou POST na tvou 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. Odpověz JSONem

    Do 5 sekund odpověz se statusem 2xx a JSONem. V kanálu se z něj 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
    maya18:45
    /weather Amsterdam
    System
    Message from Weekend Crew

    Amsterdam

    14 °C, slabý déšť do 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

Nastavení

Každý trigger má v Manage Server → Triggers tato nastavení.

NastaveníCo dělá
Trigger NameJméno triggeru, zobrazené vedle příkazu ve výběru.
Word to MatchText, kterým musí zpráva začínat, třeba /weather. Lomítko je zvykem, ale není povinné.
URL EndpointKam mssgs zprávu pošle.
Webhook SecretVolitelný. mssgs jím podepíše každý požadavek, viz níže.
ActiveVypne trigger, aniž by bylo nutné ho smazat.
Post Matching MessageJestli členova vlastní zpráva /weather Amsterdam zůstane v kanálu nad tvou odpovědí.
Show Loading ReplyZobrazí kartu načítání, zatímco tvoje služba pracuje.
Allowed User GroupsSpustí ho jen členové s těmito rolemi. Pro všechny ostatní je to obyčejná zpráva.
Porovnává se začátek zprávy. Vyhni se příkazům, z nichž jeden začíná druhým, jako /deploy a /deploy-prod: který se spustí, není dané. Zprávy od botů a přeposlané zprávy trigger nikdy nespustí.

Co dostaneš

Požadavek POST s tělem v JSONu. Mezi hlavičkami je User-Agent: mssgs-webhook/1.0.

PoleTypCo to je
server_guidstringKomunita.
channel_guidstringKanál, do kterého byla zpráva poslána.
trigger_matchstringPříkaz, který se shodoval, třeba /weather.
message.contentstringCelá zpráva, včetně příkazu.
message.member_guidstringČlen, který ji poslal, v této komunitě.
message.user_guidstringÚčet téže osoby, stejný v každé komunitě.
message.group_guidsarrayRole, které člen má.
message.cmsnumberKdy byla zpráva poslána, v milisekundách.
message.is_action_buttonbooleantrue, když trigger spustilo tlačítko, a ne napsaný příkaz.
message.action_payloadobjectpayload tlačítka, u stisků tlačítek.
callback_urlstringAktualizuj nebo smaž svou odpověď i později, po dobu 30 minut.
stream_urlstringŽivý stream odpovědí, reakcí a stisků tlačítek u tvé odpovědi, po dobu 10 minut.
Když nastavíš tajný klíč, požadavek nese X-Mssgs-Signature: sha256=<hex>: HMAC-SHA256 surového těla s tvým tajným klíčem. Spočítej ho na své straně a porovnej, než požadavku uvěříš.

Kontrola, kdo smí co dělat

Porovnej message.group_guids s rolemi, kterým věříš, třeba aby /ban mohli spouštět jen moderátoři. Pokud má příkaz pro všechny ostatní úplně zmizet, nastav jeho role v nastavení triggeru.

Co odpovíš

Jakýkoli status 2xx s tělem v JSONu, až 4 MB. Pošli aspoň jedno z message_container a actions.

PoleTypCo to je
message_containerobjectKarta. Funguje tu každé pole karet zpráv, včetně štítku stavu, odznaku, statistik diffu a sbaleného uvažování.
title, description, color, ...stringZkratka: pole karty na nejvyšší úrovni se za tebe zabalí do karty.
actionsarrayTlačítka pod kartou. Viz tlačítka.
visible_to_member_guidsarrayOdpověď uvidí jen tito členové. Viz soukromé odpovědi.
Záhlaví karty ukazuje jméno tvé komunity a patička říká, kdo příkaz použil: „maya triggered /weather command“. Avatar je avatar člena.
Vždy odpovídej kartou: řádek content se na kartě odpovědi na příkaz nezobrazí, takže všechno důležité dej přímo do karty.

Pět sekund

mssgs čeká na tvou odpověď 5 sekund. Pokud potřebuješ víc času, odpověz hned kartou s loaderem a dokonči to přes callback_url, která platí 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 } })
});
Když tvoje služba neodpoví včas nebo odpoví chybou, člen, který příkaz použil, uvidí červenou kartu „Failed“. Nikdo jiný ji neuvidí.

Soukromé odpovědi

Dej id členů do visible_to_member_guids a tvou odpověď uvidí jen oni. Použij member_guid z požadavku a odpovíš jen tomu, kdo se ptal.

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

Celý příklad

Příkaz /weather v Node.js s Expressem, který odpovídá kartou.

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

LimitHodnota
Čas na odpověď5 sekund
Velikost odpovědi4 MB
Příkazů na člena5 za 5 sekund
Pozdější úprava odpovědi30 minut, přes callback_url
Živý stream odpovědi10 minut, přes stream_url

Tvoř dál