---
title: "Слэш-команды: добавьте /commands в сообщество mssgs"
description: "Дайте сообществу mssgs свои слэш-команды. mssgs передаёт сообщение вашему веб-сервису и публикует JSON-ответ карточкой. Настройка, запрос, ответ и лимиты."
canonical: https://mss.gs/ru/docs/commands
language: ru
---

# Добавьте слэш-команды

Дайте своему сообществу собственные /commands . Когда участник вводит одну из них, mssgs отправляет сообщение вашему веб-сервису и публикует то, что он ответил: карточку, кнопки или ответ, который видит только этот участник.

## Что можно сделать

- **Отвечайте карточкой** Ответьте JSON, и он появится в канале как карточка.

- **Знайте, кто спросил** Вы получаете участника и его роли, так что можете проверить, кому что разрешено.

- **Отвечайте приватно** Показывайте ответ только тому участнику, который спросил.

- **Не торопитесь** Ответьте индикатором загрузки за 5 секунд, а закончите через callback URL.

В приложении

Введите /, и появятся команды сообщества

#### Amsterdam

Ваш сервис отвечает, mssgs публикует карточку

Список команд и карточку рисует само приложение. В нижней строке указано, кто и какую команду использовал.

- [Быстрый старт](#quick-start)

- [Настройки](#settings)

- [Что вы получаете](#request)

- [Что вы отвечаете](#reply)

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

- [Приватные ответы](#private)

- [Полный пример](#example)

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

## Быстрый старт

- 1 Создайте триггер В настольном приложении откройте в своём сообществе **Управление сервером → Триггеры** и добавьте триггер: команду, на которую он реагирует, например /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

## Настройки

У каждого триггера есть эти настройки в разделе **Управление сервером → Триггеры**.

| Настройка | Что делает |
| --- | --- |
| Название триггера | Как называется триггер; показывается рядом с командой в списке команд. |
| Слово для совпадения | Текст, с которого должно начинаться сообщение, например /weather . Слэш в начале привычен, но не обязателен. |
| URL-адрес | Куда mssgs отправляет сообщение. |
| Секрет вебхука | Необязательно. mssgs подписывает им каждый запрос, см. ниже. |
| Активен | Позволяет выключить триггер, не удаляя его. |
| Публиковать подходящее сообщение | Остаётся ли в канале над вашим ответом собственное сообщение участника /weather Amsterdam . |
| Показывать ответ с загрузкой | Показывать карточку загрузки, пока ваш сервис работает. |
| Разрешённые группы пользователей | Триггер срабатывает только для участников из этих групп (ролей). Для всех остальных это обычное сообщение. |

## Что вы получаете

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 |

## Что дальше
