Eğik çizgi komutları ekle
Topluluğuna kendi /komutlarını ver. Bir üye bunlardan birini yazdığında mssgs mesajı web servisine gönderir ve servisin verdiği yanıtı paylaşır: bir kart, düğmeler ya da yalnızca o üyenin görebileceği bir yanıt.
Neler yapabilirsin
- Kartla yanıt verJSON ile yanıt ver, yanıtın kanalda bir kart olarak görünsün.
- Kimin sorduğunu bilÜyeyi ve rollerini alırsın, böylece kimin neyi yapabileceğini kontrol edebilirsin.
- Özel yanıt verYanıtı yalnızca soran üyeye göster.
- Acele etme5 saniye içinde bir yükleme kartıyla yanıt ver, sonra işi callback URL üzerinden bitir.
Uygulamada
/ yaz, topluluğun komutları görünsün
Servisin yanıt verir, mssgs kartı paylaşır
Seçici de kart da uygulamanın kendisine ait. Alt bilgi kimin hangi komutu kullandığını söyler.
Hızlı başlangıç
Tetikleyiciyi oluştur
Masaüstü uygulamasında topluluğunun Manage Server → Triggers bölümünü aç ve bir tetikleyici ekle: tepki vereceği komut, örneğin
/weather, ve web servisinin URL’si.Mesajı al
Bir üye
/weatherile başlayan bir mesaj gönderdiğinde mssgs onu bir POST isteğiyle URL’ine gönderir: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 ile yanıt ver
5 saniye içinde 2xx durum koduyla ve JSON ile yanıt ver. Yanıtın kanalda bir karta dönüşür.
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
Ayarlar
Her tetikleyicinin Manage Server → Triggers içinde şu ayarları vardır.
| Ayar | Ne yapar |
|---|---|
| Trigger Name | Tetikleyicinin adı; seçicide komutun yanında görünür. |
| Word to Match | Mesajın başlaması gereken metin, örneğin /weather. Eğik çizgi alışılmış olandır ama zorunlu değildir. |
| URL Endpoint | mssgs’in mesajı gönderdiği adres. |
| Webhook Secret | İsteğe bağlı. mssgs her isteği bununla imzalar, aşağıya bak. |
| Active | Tetikleyiciyi silmeden kapatır. |
| Post Matching Message | Üyenin kendi /weather Amsterdam mesajının kanalda senin yanıtının üstünde kalıp kalmayacağı. |
| Show Loading Reply | Servisin çalışırken bir yükleme kartı gösterir. |
| Allowed User Groups | Yalnızca bu rollerdeki üyeler onu tetikler. Diğer herkes için sıradan bir mesajdır. |
/deploy ve /deploy-prod: hangisinin tetikleneceği belli değildir. Botlardan gelen mesajlar ve iletilen mesajlar asla bir tetikleyiciyi çalıştırmaz.Sana gelen
JSON gövdeli bir POST isteği. Başlıklar arasında User-Agent: mssgs-webhook/1.0 bulunur.
| Alan | Tür | Nedir |
|---|---|---|
server_guid | string | Topluluk. |
channel_guid | string | Mesajın gönderildiği kanal. |
trigger_match | string | Eşleşen komut, örneğin /weather. |
message.content | string | Komut dahil mesajın tamamı. |
message.member_guid | string | Mesajı gönderen üye, bu topluluktaki haliyle. |
message.user_guid | string | Aynı kişinin hesabı; her toplulukta aynıdır. |
message.group_guids | array | Üyenin sahip olduğu roller. |
message.cms | number | Gönderildiği zaman, milisaniye cinsinden. |
message.is_action_button | boolean | Tetikleyiciyi yazılan bir komut değil de bir düğme çalıştırdıysa true. |
message.action_payload | object | Düğme basışlarında düğmenin payload verisi. |
callback_url | string | Yanıtını 30 dakika boyunca sonradan güncelle ya da sil. |
stream_url | string | Yanıtına gelen yanıtların, tepkilerin ve düğme basışlarının 10 dakika boyunca canlı akışı. |
X-Mssgs-Signature: sha256=<hex> başlığını taşır: ham gövdenin, gizli anahtarınla hesaplanmış HMAC-SHA256 değeri. İsteğe güvenmeden önce bunu kendin hesapla ve karşılaştır.Kimin neyi yapabileceğini kontrol etmek
message.group_guids değerini güvendiğin rollerle karşılaştır, örneğin /ban komutunu yalnızca moderatörler çalıştırabilsin diye. Bir komutu diğer herkesten tamamen uzak tutmak için rollerini tetikleyicinin ayarlarında belirle.
Senin yanıtın
JSON gövdeli herhangi bir 2xx durum kodu, en fazla 4 MB. message_container ya da actions alanlarından en az birini gönder.
| Alan | Tür | Nedir |
|---|---|---|
message_container | object | Kart. Mesaj kartlarındaki her alan burada çalışır; durum kapsülü, rozet, diff istatistikleri ve katlanmış akıl yürütme dahil. |
title, description, color, ... | string | Kısayol: en üst düzeydeki kart alanları senin için bir karta sarılır. |
actions | array | Kartın altındaki düğmeler. Düğmelere bak. |
visible_to_member_guids | array | Yanıtı yalnızca bu üyeler görür. Özel yanıtlara bak. |
content satırı gösterilmez, bu yüzden önemli olanı kartın kendisine koy.Beş saniye
mssgs yanıtın için 5 saniye bekler. Daha fazla zamana ihtiyacın varsa hemen bir yükleme kartıyla yanıt ver ve işi 30 dakika geçerli kalan callback_url üzerinden bitir.
// 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 } })
});Özel yanıtlar
Üye kimliklerini visible_to_member_guids içine koy, yanıtını yalnızca onlar görsün. Yalnızca soran kişiye yanıt vermek için istekteki member_guid değerini kullan.
{
"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>"]
}Tam bir örnek
Node.js ve Express ile yazılmış, kartla yanıt veren bir /weather komutu.
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);Limitler
| Limit | Değer |
|---|---|
| Yanıt süresi | 5 saniye |
| Yanıt boyutu | 4 MB |
| Üye başına komut | 5 saniyede 5 |
| Yanıtı sonradan güncelleme | callback_url üzerinden 30 dakika |
| Yanıtın canlı akışı | stream_url üzerinden 10 dakika |