Πρόσθεσε εντολές slash
Δώσε στην κοινότητά σου τις δικές της /εντολές. Όταν ένα μέλος πληκτρολογεί μία, το mssgs στέλνει το μήνυμα στη web υπηρεσία σου και δημοσιεύει ό,τι απαντήσει: μια κάρτα, κουμπιά ή μια απάντηση που βλέπει μόνο εκείνο το μέλος.
Τι μπορείς να κάνεις
- Απάντησε με κάρταΑπάντησε με JSON και εμφανίζεται στο κανάλι ως κάρτα.
- Μάθε ποιος ρώτησεΠαίρνεις το μέλος και τους ρόλους του, ώστε να ελέγχεις ποιος μπορεί να κάνει τι.
- Απάντησε ιδιωτικάΔείξε την απάντηση μόνο στο μέλος που ρώτησε.
- Πάρε τον χρόνο σουΑπάντησε με loader μέσα σε 5 δευτερόλεπτα και ολοκλήρωσε αργότερα μέσω του callback URL.
Στην εφαρμογή
Πληκτρολόγησε / και εμφανίζονται οι εντολές της κοινότητας
Η υπηρεσία σου απαντά, το mssgs δημοσιεύει την κάρτα
Η λίστα επιλογής και η κάρτα είναι της ίδιας της εφαρμογής. Το υποσέλιδο λέει ποιος χρησιμοποίησε ποια εντολή.
Γρήγορη εκκίνηση
Δημιούργησε το trigger
Στην εφαρμογή για υπολογιστή, άνοιξε στην κοινότητά σου Manage Server → Triggers και πρόσθεσε ένα: την εντολή στην οποία αντιδρά, όπως
/weather, και το URL της web υπηρεσίας σου.Λάβε το μήνυμα
Όταν ένα μέλος στέλνει μήνυμα που ξεκινά με
/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 δευτερόλεπτα με status 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
Ρυθμίσεις
Κάθε trigger έχει αυτές τις ρυθμίσεις στο Manage Server → Triggers.
| Ρύθμιση | Τι κάνει |
|---|---|
| Trigger Name | Πώς λέγεται το trigger. Εμφανίζεται δίπλα στην εντολή στη λίστα επιλογής. |
| Word to Match | Το κείμενο με το οποίο πρέπει να ξεκινά ένα μήνυμα, όπως /weather. Η κάθετος συνηθίζεται, αλλά δεν είναι υποχρεωτική. |
| URL Endpoint | Πού στέλνει το mssgs το μήνυμα. |
| Webhook Secret | Προαιρετικό. Το mssgs υπογράφει με αυτό κάθε αίτημα, δες παρακάτω. |
| Active | Απενεργοποιεί το trigger χωρίς να το διαγράψεις. |
| Post Matching Message | Αν το ίδιο το /weather Amsterdam του μέλους μένει στο κανάλι πάνω από την απάντησή σου. |
| Show Loading Reply | Δείχνει μια κάρτα φόρτωσης όσο δουλεύει η υπηρεσία σου. |
| Allowed User Groups | Μόνο μέλη με αυτούς τους ρόλους το ενεργοποιούν. Για όλους τους άλλους είναι ένα συνηθισμένο μήνυμα. |
/deploy και /deploy-prod: ποια θα ενεργοποιηθεί δεν είναι καθορισμένο. Μηνύματα από bots και προωθημένα μηνύματα δεν ενεργοποιούν ποτέ trigger.Τι λαμβάνεις
Ένα 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 όταν το trigger το ενεργοποίησε ένα κουμπί και όχι μια πληκτρολογημένη εντολή. |
message.action_payload | object | Το payload του κουμπιού, για πατήματα κουμπιών. |
callback_url | string | Ενημέρωσε ή διάγραψε την απάντησή σου αργότερα, για 30 λεπτά. |
stream_url | string | Μια ζωντανή ροή με απαντήσεις, αντιδράσεις και πατήματα κουμπιών στην απάντησή σου, για 10 λεπτά. |
X-Mssgs-Signature: sha256=<hex>: ένα HMAC-SHA256 του ακατέργαστου σώματος με το μυστικό σου. Υπολόγισέ το κι εσύ και σύγκρινε πριν εμπιστευτείς το αίτημα.Έλεγχος του ποιος μπορεί να κάνει τι
Σύγκρινε το message.group_guids με τους ρόλους που εμπιστεύεσαι, για παράδειγμα ώστε μόνο οι συντονιστές να μπορούν να τρέξουν το /ban. Για να κρατήσεις μια εντολή εντελώς μακριά από όλους τους άλλους, όρισε τους ρόλους της στις ρυθμίσεις του trigger.
Τι απαντάς
Οποιοδήποτε status 2xx με σώμα JSON, έως 4 MB. Στείλε τουλάχιστον ένα από τα message_container ή actions.
| Πεδίο | Τύπος | Τι είναι |
|---|---|---|
message_container | object | Η κάρτα. Κάθε πεδίο των καρτών μηνυμάτων λειτουργεί εδώ, μαζί με την ένδειξη κατάστασης, το badge, τα στατιστικά diff και τον διπλωμένο συλλογισμό. |
title, description, color, ... | string | Συντομογραφία: τα πεδία κάρτας στο ανώτερο επίπεδο τυλίγονται για σένα σε μια κάρτα. |
actions | array | Κουμπιά κάτω από την κάρτα. Δες τα κουμπιά. |
visible_to_member_guids | array | Μόνο αυτά τα μέλη βλέπουν την απάντηση. Δες τις ιδιωτικές απαντήσεις. |
content δεν εμφανίζεται στην κάρτα μιας απάντησης εντολής, οπότε βάλε ό,τι μετράει μέσα στην ίδια την κάρτα.Πέντε δευτερόλεπτα
Το mssgs περιμένει 5 δευτερόλεπτα για την απάντησή σου. Αν χρειάζεσαι περισσότερο χρόνο, απάντησε αμέσως με μια κάρτα loader και ολοκλήρωσε μέσω του 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 } })
});Ιδιωτικές απαντήσεις
Βάλε ids μελών στο 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 |