Μετάβαση στο κύριο περιεχόμενο
Προγραμματιστές Εντολές slash

Πρόσθεσε εντολές slash

Δώσε στην κοινότητά σου τις δικές της /εντολές. Όταν ένα μέλος πληκτρολογεί μία, το mssgs στέλνει το μήνυμα στη web υπηρεσία σου και δημοσιεύει ό,τι απαντήσει: μια κάρτα, κουμπιά ή μια απάντηση που βλέπει μόνο εκείνο το μέλος.

Τι μπορείς να κάνεις

  • Απάντησε με κάρταΑπάντησε με JSON και εμφανίζεται στο κανάλι ως κάρτα.
  • Μάθε ποιος ρώτησεΠαίρνεις το μέλος και τους ρόλους του, ώστε να ελέγχεις ποιος μπορεί να κάνει τι.
  • Απάντησε ιδιωτικάΔείξε την απάντηση μόνο στο μέλος που ρώτησε.
  • Πάρε τον χρόνο σουΑπάντησε με loader μέσα σε 5 δευτερόλεπτα και ολοκλήρωσε αργότερα μέσω του callback URL.

Στην εφαρμογή

Πληκτρολόγησε / και εμφανίζονται οι εντολές της κοινότητας

Η υπηρεσία σου απαντά, το mssgs δημοσιεύει την κάρτα

Η λίστα επιλογής και η κάρτα είναι της ίδιας της εφαρμογής. Το υποσέλιδο λέει ποιος χρησιμοποίησε ποια εντολή.

Γρήγορη εκκίνηση

  1. Δημιούργησε το trigger

    Στην εφαρμογή για υπολογιστή, άνοιξε στην κοινότητά σου Manage Server → Triggers και πρόσθεσε ένα: την εντολή στην οποία αντιδρά, όπως /weather, και το URL της web υπηρεσίας σου.

  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 δευτερόλεπτα με 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
    maya18:45
    /weather Amsterdam
    System
    Message from Weekend Crew

    Amsterdam

    14 °C, ελαφριά βροχή έως τις 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

Ρυθμίσεις

Κάθε 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_guidstringΗ κοινότητα.
channel_guidstringΤο κανάλι όπου στάλθηκε το μήνυμα.
trigger_matchstringΗ εντολή που ταίριαξε, όπως /weather.
message.contentstringΟλόκληρο το μήνυμα, μαζί με την εντολή.
message.member_guidstringΤο μέλος που το έστειλε, σε αυτή την κοινότητα.
message.user_guidstringΟ λογαριασμός του ίδιου ατόμου, ίδιος σε κάθε κοινότητα.
message.group_guidsarrayΟι ρόλοι του μέλους.
message.cmsnumberΠότε στάλθηκε, σε χιλιοστά του δευτερολέπτου.
message.is_action_buttonbooleantrue όταν το trigger το ενεργοποίησε ένα κουμπί και όχι μια πληκτρολογημένη εντολή.
message.action_payloadobjectΤο payload του κουμπιού, για πατήματα κουμπιών.
callback_urlstringΕνημέρωσε ή διάγραψε την απάντησή σου αργότερα, για 30 λεπτά.
stream_urlstringΜια ζωντανή ροή με απαντήσεις, αντιδράσεις και πατήματα κουμπιών στην απάντησή σου, για 10 λεπτά.
Όταν έχεις ορίσει μυστικό, το αίτημα φέρει X-Mssgs-Signature: sha256=<hex>: ένα HMAC-SHA256 του ακατέργαστου σώματος με το μυστικό σου. Υπολόγισέ το κι εσύ και σύγκρινε πριν εμπιστευτείς το αίτημα.

Έλεγχος του ποιος μπορεί να κάνει τι

Σύγκρινε το message.group_guids με τους ρόλους που εμπιστεύεσαι, για παράδειγμα ώστε μόνο οι συντονιστές να μπορούν να τρέξουν το /ban. Για να κρατήσεις μια εντολή εντελώς μακριά από όλους τους άλλους, όρισε τους ρόλους της στις ρυθμίσεις του trigger.

Τι απαντάς

Οποιοδήποτε status 2xx με σώμα JSON, έως 4 MB. Στείλε τουλάχιστον ένα από τα message_container ή actions.

ΠεδίοΤύποςΤι είναι
message_containerobjectΗ κάρτα. Κάθε πεδίο των καρτών μηνυμάτων λειτουργεί εδώ, μαζί με την ένδειξη κατάστασης, το badge, τα στατιστικά diff και τον διπλωμένο συλλογισμό.
title, description, color, ...stringΣυντομογραφία: τα πεδία κάρτας στο ανώτερο επίπεδο τυλίγονται για σένα σε μια κάρτα.
actionsarrayΚουμπιά κάτω από την κάρτα. Δες τα κουμπιά.
visible_to_member_guidsarrayΜόνο αυτά τα μέλη βλέπουν την απάντηση. Δες τις ιδιωτικές απαντήσεις.
Η κεφαλίδα της κάρτας δείχνει το όνομα της κοινότητάς σου και το υποσέλιδο λέει ποιος χρησιμοποίησε την εντολή: «maya triggered /weather command». Το avatar είναι του μέλους.
Απάντα πάντα με κάρτα: η γραμμή content δεν εμφανίζεται στην κάρτα μιας απάντησης εντολής, οπότε βάλε ό,τι μετράει μέσα στην ίδια την κάρτα.

Πέντε δευτερόλεπτα

Το mssgs περιμένει 5 δευτερόλεπτα για την απάντησή σου. Αν χρειάζεσαι περισσότερο χρόνο, απάντησε αμέσως με μια κάρτα loader και ολοκλήρωσε μέσω του 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». Κανείς άλλος δεν τη βλέπει.

Ιδιωτικές απαντήσεις

Βάλε ids μελών στο 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 MB
Εντολές ανά μέλος5 ανά 5 δευτερόλεπτα
Ενημέρωση της απάντησης αργότερα30 λεπτά, μέσω callback_url
Ζωντανή ροή της απάντησης10 λεπτά, μέσω stream_url

Συνέχισε να φτιάχνεις