Перейти до основного вмісту
Розробникам Слеш-команди

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

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

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

  • Відповідайте карткоюВідповідайте JSON, і він з’явиться в каналі як картка.
  • Знайте, хто запитавВи отримуєте учасника та його ролі, тож можете перевірити, кому що дозволено.
  • Відповідайте приватноПоказуйте відповідь лише учаснику, який запитав.
  • Не поспішайтеВідповідайте індикатором завантаження за 5 секунд, а потім завершуйте через callback URL.

У застосунку

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

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

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

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

  1. Створіть тригер

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

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

    Коли учасник надсилає повідомлення, що починається з /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=..."
    }
  3. Відповідайте 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%" }
        ]
      }
    }
    general
    maya18:45
    /weather Amsterdam
    System
    Повідомлення від Weekend Crew

    Amsterdam

    14 °C, невеликий дощ до 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

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

Кожен тригер має такі налаштування в 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Тригер спрацьовує лише для учасників із цими ролями. Для всіх інших це звичайне повідомлення.
Збіг перевіряється за початком повідомлення. Уникайте команд, одна з яких є початком іншої, як-от /deploy і /deploy-prod: яка з них спрацює, не визначено. Повідомлення від ботів і переслані повідомлення ніколи не запускають тригер.

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

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

ПолеТипЩо це
server_guidstringСпільнота.
channel_guidstringКанал, у якому надіслано повідомлення.
trigger_matchstringКоманда, що збіглася, наприклад /weather.
message.contentstringУсе повідомлення разом із командою.
message.member_guidstringУчасник, який його надіслав, у цій спільноті.
message.user_guidstringОбліковий запис тієї самої людини, однаковий у кожній спільноті.
message.group_guidsarrayРолі учасника.
message.cmsnumberКоли його надіслано, у мілісекундах.
message.is_action_buttonbooleantrue, коли тригер запустила кнопка, а не введена команда.
message.action_payloadobjectpayload кнопки, для натискань кнопок.
callback_urlstringЩоб оновити або видалити вашу відповідь згодом, протягом 30 хвилин.
stream_urlstringПотік наживо з відповідями, реакціями й натисканнями кнопок на вашій відповіді, протягом 10 хвилин.
Якщо задано секрет, запит містить X-Mssgs-Signature: sha256=<hex>: HMAC-SHA256 сирого тіла з вашим секретом. Обчисліть його самі й порівняйте, перш ніж довіряти запиту.

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

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

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

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

ПолеТипЩо це
message_containerobjectКартка. Тут працює кожне поле карток повідомлень, зокрема плашка статусу, бейдж, статистика diff і згорнуті міркування.
title, description, color, ...stringСкорочення: поля картки на верхньому рівні автоматично загортаються в картку.
actionsarrayКнопки під карткою. Див. кнопки.
visible_to_member_guidsarrayВідповідь бачать лише ці учасники. Див. приватні відповіді.
Шапка картки показує назву вашої спільноти, а нижній рядок каже, хто використав команду: «maya triggered /weather command». Аватар належить учаснику.
Завжди відповідайте карткою: рядок content не показується на картці відповіді на команду, тож кладіть усе важливе в саму картку.

П’ять секунд

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 } })
});
Якщо ваш сервіс не відповість вчасно або відповість помилкою, учасник, який використав команду, побачить червону картку «Failed». Більше її ніхто не бачить.

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

Вкажіть 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

Що далі