Добавете slash команди
Дайте на общността си собствени /команди. Когато член напише някоя от тях, mssgs изпраща съобщението до вашата уеб услуга и публикува отговора ѝ: карта, бутони или отговор, който вижда само той.
Какво можете да направите
- Отговаряйте с картаОтговорете с JSON и той се появява в канала като карта.
- Знайте кой питаПолучавате члена и ролите му, така че можете да проверите кой какво може да прави.
- Отговаряйте насамеПокажете отговора само на члена, който е попитал.
- Не бързайтеОтговорете с индикатор за зареждане до 5 секунди, а после довършете чрез callback URL.
В приложението
Напишете / и командите на общността се появяват
Вашата услуга отговаря, mssgs публикува картата
Списъкът и картата са тези на самото приложение. Долната част на картата показва кой е използвал коя команда.
Бърз старт
Създайте тригера
В настолното приложение отворете 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%" } ] } }general
Настройки
Всеки тригер има тези настройки в 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_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 минути. |
X-Mssgs-Signature: sha256=<hex>: HMAC-SHA256 на суровото тяло с вашия таен ключ. Изчислете го сами и сравнете, преди да се доверите на заявката.Проверка кой какво може да прави
Сравнете message.group_guids с ролите, на които имате доверие, например за да позволите само на модераторите да изпълняват /ban. За да скриете команда напълно от всички останали, задайте ролите ѝ в настройките на тригера.
Какво отговаряте
Всеки статус 2xx с JSON тяло, до 4 MB. Изпратете поне едно от двете: message_container или actions.
| Поле | Тип | Какво е |
|---|---|---|
message_container | object | Картата. Тук работи всяко поле от картите на съобщения, включително етикетът за статус, значката, статистиката на diff и сгънатите разсъждения. |
title, description, color, ... | string | Съкратен запис: полетата на картата на най-горното ниво се опаковат в карта вместо вас. |
actions | array | Бутони под картата. Вижте бутони. |
visible_to_member_guids | array | Само тези членове виждат отговора. Вижте частни отговори. |
content не се показва в картата на отговор на команда, така че сложете важното в самата карта.Пет секунди
mssgs чака отговора ви 5 секунди. Ако ви трябва повече време, отговорете веднага с карта със зареждане и довършете чрез callback_url, който е валиден 30 минути.
// 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 от заявката, за да отговорите само на човека, който е попитал.
{
"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, която отговаря с карта.
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 MB |
| Команди на член | 5 на всеки 5 секунди |
| Обновяване на отговора след това | 30 минути, чрез callback_url |
| Поток на живо за отговора | 10 минути, чрез stream_url |