Aller au contenu principal
Développeurs Boutons

Ajouter des boutons

Place des boutons sous n’importe quelle carte. Un bouton ouvre un lien, modifie la carte pour tout le monde dès que quelqu’un appuie dessus, ou prévient ton service qu’il a été pressé.

Ce que vous pouvez faire

  • Ouvrir un lienEnvoie les gens vers une page, un tableau de bord ou une pull request.
  • Modifier la carte d’un appuiLa modifier, la supprimer, réagir ou répondre, directement à l’appui, sans serveur à toi.
  • Capter chaque appuiTon service apprend en direct qui a appuyé sur quoi.
  • Lancer une commandeUn bouton peut lancer l’une des commandes slash de la communauté, avec des données.

Dans l'app

Quelqu’un sonne : la carte apparaît

Un appui sur Ouvrir le portail : la carte change pour tout le monde

Pas besoin de serveur pour le changement lui-même : les étapes sont stockées avec le message. Ton contrôleur de portail capte l’appui et ouvre le portail.

Démarrage rapide

  1. Ajoute une liste actions

    Les boutons vont dans actions, à côté de la carte, dans une publication par webhook, une réponse de commande ou une mise à jour.

    json
    {
      "message_container": {
        "color": "yellow",
        "title": "Deploy v2.1 to production?",
        "description": "Requested by maya."
      },
      "actions": [
        { "type": "url:https://ci.example.com/deploys/218", "text": "View changes", "color": "blue" }
      ]
    }
    deploys
    System
    Message de Deploybot

    Déployer la v2.1 en production ?

    Demandé par maya.
  2. Choisis ce que fait un appui

    Un lien, une modification de la carte, ou un appel à ton service. Les trois types sont décrits plus bas.

Trois types de bouton

Le type décide de ce que fait un appui.

TypeCe que fait un appuiTe parvient
url:{url}Ouvre le lien.Non
webhook_actionExécute les étapes que tu as stockées avec lui, pour tout le monde dans le salon.Oui, sur la stream_url du message
trigger:{guid}Lance l’un des déclencheurs de la communauté avec le payload du bouton.Oui, sous forme de nouvelle requête vers l’URL de ce déclencheur

Modifier la carte d’un appui

Un bouton webhook_action porte une liste d’étapes dans triggers. À l’appui, elles s’exécutent sur le serveur mssgs, dans l’ordre, et tout le monde dans le salon voit le résultat.

ÉtapeCe qu’elle fait, pour tout le mondeChamps
update_messageRemplace la carte et ses boutons. Envoie "actions": [] pour retirer les boutons.message_container, actions, content
remove_messageSupprime le message.Aucun
add_reactionAjoute une réaction, au nom du membre qui a appuyé.emoji
add_replyPublie une réponse, au nom du membre qui a appuyé.content
json
{
  "message_container": { "color": "yellow", "title": "Front door", "description": "Someone rang the bell." },
  "actions": [
    {
      "type": "webhook_action",
      "id": "open_gate",
      "text": "Open gate",
      "color": "green",
      "payload": { "door": "front" },
      "triggers": [
        {
          "action": "update_message",
          "message_container": { "color": "blue", "title": "Front door", "description": "Opening…" },
          "actions": []
        },
        { "action": "add_reaction", "emoji": ":white_check_mark:" }
      ]
    }
  ]
}
Les étapes sont lues dans le message stocké, jamais dans l’application du membre : un appui ne peut donc faire que ce que tu y as mis.
Les étapes s’exécutent dans l’ordre et chacune est tentée : si l’une échoue, les autres s’exécutent quand même.

Capter l’appui

Un message avec des boutons revient du webhook avec une stream_url. Garde-la ouverte et chaque appui arrive sous forme d’événement de type action, avec l’id du bouton, le bouton stocké et son payload, et la personne qui a appuyé :

sse
data: {"type": "action", "message_id": "...", "action_id": "open_gate", "action": {"id": "open_gate", "payload": {"door": "front"}, ...}, "member_guid": "member-guid", "member": {...}, "ts": 1790000000000}

Fais le vrai travail, comme ouvrir le portail, puis fixe l’état final de la carte via callback_url. Le fonctionnement du flux et du callback est expliqué sur mises à jour en direct.

Lancer une commande depuis un bouton

Un bouton trigger:{guid} lance l’un des déclencheurs de ta communauté, comme si quelqu’un avait tapé la commande, et lui transmet le payload du bouton. Le déclencheur reçoit :

json
{
  "actions": [
    {
      "type": "trigger:5f2c9a1e-trigger-guid",
      "text": "Check status",
      "color": "blue",
      "payload": { "order_id": "12345" }
    }
  ]
}
json
{
  "trigger_match": "/status",
  "message": {
    "content": "[Action Triggered]",
    "member_guid": "member-guid",
    "is_action_button": true,
    "action_payload": { "order_id": "12345" }
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/...",
  "stream_url": "https://mss.gs/api/v1/instant/...?token=..."
}
Ce que répond le déclencheur est publié comme une nouvelle carte. La requête n’indique pas sur quel message se trouvait le bouton : mets ce dont tu as besoin dans payload.

Champs

ChampTypeCe qu’il fait
typestringurl:{url}, webhook_action ou trigger:{guid}. Obligatoire.
textstringLe libellé du bouton. Obligatoire ; label fonctionne aussi.
colorstringLa couleur du bouton, voir plus bas.
idstringPour webhook_action : quel bouton a été pressé. Unique dans le message.
payloadobjectTes données, renvoyées lors d’un appui.
triggersarrayPour webhook_action : les étapes à exécuter.
disabledbooleanAffiche le bouton grisé, et les appuis sont refusés.

Couleurs

green, blue et purple dessinent un bouton plein, principal. red, orange et yellow en dessinent un secondaire : utilise-les pour « Refuser », « Annuler » et les autres choix qui demandent de la prudence.

Erreurs

Quand tu publies un message avec des boutons, mssgs les vérifie d’abord :

CodeSignification
INVALID_ACTIONS_FORMATactions n’est pas une liste d’objets.
INVALID_ACTION_MISSING_FIELDSUn bouton n’a pas de type ou pas de text.
DUPLICATE_ACTION_IDDeux boutons ont le même id.
INVALID_TRIGGERS_FORMATtriggers n’est pas une liste d’étapes.
INVALID_TRIGGER_MISSING_ACTIONUne étape n’a pas d’action.
INVALID_TRIGGER_ACTION_NOT_ALLOWEDUne étape autre que les quatre ci-dessus.

Quand quelqu’un appuie

CodeSignification
MESSAGE_NOT_FOUNDLe message a été supprimé entre-temps.
ACTION_NOT_FOUNDAucun bouton avec cet id sur le message.
ACTION_DISABLEDLe bouton est désactivé.
TRIGGER_NOT_FOUND, TRIGGER_NOT_ACTIVELe déclencheur visé par un bouton n’existe plus ou est désactivé.
TRIGGER_NOT_ALLOWEDLe membre n’a aucun rôle autorisé à utiliser ce déclencheur.

Tu viens de l’ancienne documentation ?

Les boutons de type button avec des étapes ws:send, local:update_message et local:remove_message, les conditions previous:success et expire_in_seconds ne fonctionnent plus pour les expéditeurs externes. Utilise webhook_action avec les étapes ci-dessus : elles s’appliquent pour tout le monde, pas seulement pour la personne qui a appuyé.

Continuer