Aller au contenu principal
Développeurs Commandes slash

Ajouter des commandes slash

Donne à ta communauté ses propres /commandes. Quand un membre en tape une, mssgs envoie le message à ton service web et publie ce qu’il répond : une carte, des boutons, une réponse que seul ce membre voit.

Ce que vous pouvez faire

  • Répondre avec une carteRéponds en JSON et ta réponse apparaît dans le salon sous forme de carte.
  • Savoir qui a demandéTu reçois le membre et ses rôles, pour vérifier qui a le droit de faire quoi.
  • Répondre en privéMontre la réponse uniquement au membre qui a demandé.
  • Prendre ton tempsRéponds avec un chargement en 5 secondes, puis termine via l’URL de callback.

Dans l'app

Tape / et les commandes de la communauté apparaissent

Ton service répond, mssgs publie la carte

Le sélecteur et la carte sont ceux de l’application. Le pied de carte indique qui a utilisé quelle commande.

Démarrage rapide

  1. Crée le déclencheur

    Dans l’application de bureau, ouvre Gérer le serveur → Déclencheurs dans ta communauté et ajoutes-en un : la commande à laquelle il réagit, comme /weather, et l’URL de ton service web.

  2. Reçois le message

    Quand un membre envoie un message qui commence par /weather, mssgs l’envoie en POST à ton 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. Réponds en JSON

    Réponds en moins de 5 secondes avec un statut 2xx et du JSON. Ta réponse devient une carte dans le salon.

    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 de Weekend Crew

    Amsterdam

    14 °C, pluie légère jusqu’à 16 h
    Wind
    SW 18 km/h
    Humidity
    82%

Réglages

Chaque déclencheur a ces réglages dans Gérer le serveur → Déclencheurs.

RéglageCe qu’il fait
Nom du déclencheurLe nom du déclencheur, affiché à côté de la commande dans le sélecteur.
Mot à reconnaîtreLe texte par lequel un message doit commencer, comme /weather. La barre oblique est l’usage, pas une obligation.
Point d’accès URLL’adresse où mssgs envoie le message.
Secret du webhookFacultatif. mssgs signe chaque requête avec, voir plus bas.
ActifDésactive le déclencheur sans le supprimer.
Publier le message reconnuIndique si le /weather Amsterdam du membre reste dans le salon au-dessus de ta réponse.
Afficher une réponse de chargementAffiche une carte de chargement pendant que ton service travaille.
Groupes d’utilisateurs autorisésSeuls les membres qui ont ces rôles le déclenchent. Pour tous les autres, c’est un message ordinaire.
La correspondance se fait sur le début du message. Évite les commandes qui commencent l’une par l’autre, comme /deploy et /deploy-prod : on ne sait pas d’avance laquelle se déclenche. Les messages de bots et les messages transférés ne lancent jamais de déclencheur.

Ce que tu reçois

Un POST avec un corps JSON. Les en-têtes contiennent User-Agent: mssgs-webhook/1.0.

ChampTypeCe que c’est
server_guidstringLa communauté.
channel_guidstringLe salon où le message a été envoyé.
trigger_matchstringLa commande qui a correspondu, comme /weather.
message.contentstringLe message entier, commande comprise.
message.member_guidstringLe membre qui l’a envoyé, dans cette communauté.
message.user_guidstringLe compte de cette même personne, identique dans chaque communauté.
message.group_guidsarrayLes rôles du membre.
message.cmsnumberLe moment de l’envoi, en millisecondes.
message.is_action_buttonbooleantrue quand c’est un bouton qui a lancé le déclencheur, pas une commande tapée.
message.action_payloadobjectLe payload du bouton, pour les appuis sur un bouton.
callback_urlstringPour mettre à jour ou supprimer ta réponse plus tard, pendant 30 minutes.
stream_urlstringUn flux en direct des réponses, réactions et appuis sur les boutons de ta réponse, pendant 10 minutes.
Avec un secret défini, la requête porte X-Mssgs-Signature: sha256=<hex> : un HMAC-SHA256 du corps brut avec ton secret. Calcule-le toi-même et compare avant de faire confiance à la requête.

Vérifier qui a le droit de faire quoi

Compare message.group_guids aux rôles en qui tu as confiance, par exemple pour que seuls les modérateurs puissent lancer /ban. Pour tenir une commande complètement à l’écart de tous les autres, définis ses rôles dans les réglages du déclencheur.

Ce que tu réponds

N’importe quel statut 2xx avec un corps JSON, jusqu’à 4 Mo. Envoie au moins l’un des deux, message_container ou actions.

ChampTypeCe que c’est
message_containerobjectLa carte. Chaque champ des cartes de message fonctionne ici, y compris la pastille de statut, le badge, les stats de diff et le raisonnement replié.
title, description, color, ...stringRaccourci : les champs de carte placés au premier niveau sont regroupés dans une carte pour toi.
actionsarrayDes boutons sous la carte. Voir boutons.
visible_to_member_guidsarraySeuls ces membres voient la réponse. Voir réponses privées.
L’en-tête de la carte affiche le nom de ta communauté, et son pied indique qui a utilisé la commande : « maya triggered /weather command ». L’avatar est celui du membre.
Réponds toujours avec une carte : la ligne content n’apparaît pas sur la carte d’une réponse de commande, alors mets l’essentiel dans la carte elle-même.

Cinq secondes

mssgs attend ta réponse 5 secondes. S’il te faut plus longtemps, réponds tout de suite avec une carte de chargement et termine via callback_url, qui reste valable 30 minutes.

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 } })
});
Si ton service ne répond pas à temps, ou répond avec une erreur, le membre qui a utilisé la commande voit une carte rouge « Failed ». Personne d’autre ne la voit.

Réponses privées

Mets des ids de membres dans visible_to_member_guids et eux seuls voient ta réponse. Utilise le member_guid de la requête pour ne répondre qu’à la personne qui a demandé.

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>"]
}

Un exemple complet

Une commande /weather en Node.js avec Express, qui répond avec une carte.

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);

Limites

LimiteValeur
Délai de réponse5 secondes
Taille de la réponse4 Mo
Commandes par membre5 toutes les 5 secondes
Modifier la réponse ensuite30 minutes, via callback_url
Flux en direct de la réponse10 minutes, via stream_url

Continuer