---
title: "Слеш-команди: додайте /команди у свою спільноту mssgs"
description: "Власні слеш-команди для спільноти mssgs: mssgs надсилає повідомлення вашому сервісу й публікує JSON-відповідь карткою. Налаштування, запит, відповідь, ліміти."
canonical: https://mss.gs/uk/docs/commands
language: uk
---

# Додайте слеш-команди

Дайте своїй спільноті власні /команди . Коли учасник вводить одну з них, mssgs надсилає повідомлення вашому вебсервісу й публікує те, що той відповість: картку, кнопки або відповідь, яку бачить лише цей учасник.

## Що можна зробити

- **Відповідайте карткою** Відповідайте JSON, і він з’явиться в каналі як картка.

- **Знайте, хто запитав** Ви отримуєте учасника та його ролі, тож можете перевірити, кому що дозволено.

- **Відповідайте приватно** Показуйте відповідь лише учаснику, який запитав.

- **Не поспішайте** Відповідайте індикатором завантаження за 5 секунд, а потім завершуйте через callback URL.

У застосунку

Введіть /, і з’являться команди спільноти

#### Amsterdam

Ваш сервіс відповідає, mssgs публікує картку

Список команд і картка належать самому застосунку. Нижній рядок каже, хто використав яку команду.

- [Швидкий старт](#quick-start)

- [Налаштування](#settings)

- [Що ви отримуєте](#request)

- [Що ви відповідаєте](#reply)

- [П’ять секунд](#timing)

- [Приватні відповіді](#private)

- [Повний приклад](#example)

- [Ліміти](#limits)

## Швидкий старт

- 1 Створіть тригер У настільному застосунку відкрийте у своїй спільноті **Manage Server → Triggers** (керування сервером, тригери) і додайте тригер: команду, на яку він реагує, наприклад /weather , і URL вашого вебсервісу.

### Отримайте повідомлення

Коли учасник надсилає повідомлення, що починається з /weather , mssgs надсилає його методом POST на ваш 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=..."
}
```

### Відповідайте JSON

Відповідайте протягом 5 секунд зі статусом 2xx і JSON. Відповідь стане карткою в каналі.

```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

## Налаштування

Кожен тригер має такі налаштування в **Manage Server → Triggers**.

| Налаштування | Що робить |
| --- | --- |
| Trigger Name | Як називається тригер; показується поруч із командою в списку команд. |
| Word to Match | Текст, з якого має починатися повідомлення, наприклад /weather . Скісна риска на початку звична, але не обов’язкова. |
| URL Endpoint | Куди mssgs надсилає повідомлення. |
| Webhook Secret | Необов’язковий. mssgs підписує ним кожен запит, див. нижче. |
| Active | Вимикає тригер, не видаляючи його. |
| Post Matching Message | Чи залишається власне /weather Amsterdam учасника в каналі над вашою відповіддю. |
| Show Loading Reply | Показує картку завантаження, поки ваш сервіс працює. |
| Allowed User Groups | Тригер спрацьовує лише для учасників із цими ролями. Для всіх інших це звичайне повідомлення. |

## Що ви отримуєте

POST-запит із JSON-тілом. Серед заголовків є User-Agent: mssgs-webhook/1.0 .

| Поле | Тип | Що це |
| --- | --- | --- |
| server_guid | string | Спільнота. |
| channel_guid | string | Канал, у якому надіслано повідомлення. |
| trigger_match | string | Команда, що збіглася, наприклад /weather . |
| message.content | string | Усе повідомлення разом із командою. |
| message.member_guid | string | Учасник, який його надіслав, у цій спільноті. |
| message.user_guid | string | Обліковий запис тієї самої людини, однаковий у кожній спільноті. |
| message.group_guids | array | Ролі учасника. |
| message.cms | number | Коли його надіслано, у мілісекундах. |
| message.is_action_button | boolean | true , коли тригер запустила кнопка, а не введена команда. |
| message.action_payload | object | payload кнопки, для натискань кнопок. |
| callback_url | string | Щоб оновити або видалити вашу відповідь згодом, протягом 30 хвилин. |
| stream_url | string | Потік наживо з відповідями, реакціями й натисканнями кнопок на вашій відповіді, протягом 10 хвилин. |

### Перевірка, кому що дозволено

Порівнюйте message.group_guids із ролями, яким довіряєте, наприклад щоб лише модератори могли виконувати /ban . Щоб повністю приховати команду від усіх інших, задайте її ролі в налаштуваннях тригера.

## Що ви відповідаєте

Будь-який статус 2xx із JSON-тілом розміром до 4 МБ. Надішліть щонайменше одне з полів: message_container або actions .

| Поле | Тип | Що це |
| --- | --- | --- |
| message_container | object | Картка. Тут працює кожне поле карток повідомлень, зокрема плашка статусу, бейдж, статистика diff і згорнуті міркування. |
| title , description , color , ... | string | Скорочення: поля картки на верхньому рівні автоматично загортаються в картку. |
| actions | array | Кнопки під карткою. Див. кнопки. |
| visible_to_member_guids | array | Відповідь бачать лише ці учасники. Див. приватні відповіді. |

## П’ять секунд

mssgs чекає на вашу відповідь 5 секунд. Якщо вам потрібно більше часу, одразу відповідайте карткою з індикатором завантаження й завершуйте через callback_url , який залишається дійсним 30 хвилин.

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

## Приватні відповіді

Вкажіть id учасників у visible_to_member_guids , і вашу відповідь бачитимуть лише вони. Використовуйте member_guid із запиту, щоб відповісти лише тому, хто запитав.

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

## Повний приклад

Команда /weather на Node.js з Express, що відповідає карткою.

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

## Ліміти

| Ліміт | Значення |
| --- | --- |
| Час на відповідь | 5 секунд |
| Розмір відповіді | 4 МБ |
| Команд на учасника | 5 кожні 5 секунд |
| Оновлення відповіді згодом | 30 хвилин, через callback_url |
| Потік наживо для відповіді | 10 хвилин, через stream_url |

## Що далі
