---
title: "Slash naredbe: vlastite /naredbe u mssgs zajednici"
description: "Daj svojoj mssgs zajednici vlastite slash naredbe: mssgs šalje poruku tvojoj web-usluzi i objavljuje tvoj JSON odgovor kao karticu. Postavljanje i ograničenja."
canonical: https://docs.mss.gs/hr/commands
language: hr
---

# 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 karticom** Odgovori JSON-om i u kanalu se pojavi kartica.

- **Znaj tko pita** Dobivaš člana i njegove uloge, pa možeš provjeriti tko smije što.

- **Odgovaraj privatno** Prikaži odgovor samo članu koji je pitao.

- **Bez žurbe** Odgovori loaderom u roku od 5 sekundi, a ostatak dovrši preko callback URL-a.

U aplikaciji

Upiši / i pojavit će se naredbe zajednice

#### Amsterdam

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](#quick-start)

- [Postavke](#settings)

- [Što primaš](#request)

- [Što odgovaraš](#reply)

- [Pet sekundi](#timing)

- [Privatni odgovori](#private)

- [Potpuni primjer](#example)

- [Ograničenja](#limits)

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

### 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%" }
    ]
  }
}
```

#### Amsterdam

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

## Š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. |

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

## 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 } })
});
```

## 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č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 |

## Nastavi graditi
