Saltar al contenido principal
Desarrolladores Botones

Añade botones

Pon botones bajo cualquier tarjeta. Un botón abre un enlace, cambia la tarjeta para todos en cuanto alguien lo toca o le dice a tu servicio que se ha pulsado.

Qué puedes hacer

  • Abre un enlaceLleva a la gente a una página, un dashboard o una pull request.
  • Cambia la tarjeta con un toqueEdítala, bórrala, reacciona o responde, directamente desde la pulsación, sin servidor propio.
  • Recibe cada pulsaciónTu servicio se entera en directo de quién ha pulsado qué.
  • Ejecuta un comandoUn botón puede lanzar uno de los comandos de barra de la comunidad, con datos.

En la app

Alguien llama: aparece la tarjeta

Un toque en Abrir la verja: la tarjeta cambia para todos

El cambio en sí no necesita servidor: los pasos se guardan con el mensaje. El controlador de tu verja recibe la pulsación y abre la verja.

Inicio rápido

  1. Añade una lista actions

    Los botones van en actions, junto a la tarjeta, en una publicación de webhook, en la respuesta a un comando o en una actualización.

    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 from Deploybot

    ¿Desplegar v2.1 en producción?

    Lo ha pedido maya.
  2. Elige qué hace una pulsación

    Un enlace, un cambio en la tarjeta o una llamada a tu servicio. Los tres tipos están más abajo.

Tres tipos de botón

El type decide qué hace una pulsación.

TipoQué hace una pulsaciónTe llega
url:{url}Abre el enlace.No
webhook_actionEjecuta los pasos que guardaste con él, para todos en el canal.Sí, en la stream_url del mensaje
trigger:{guid}Lanza uno de los triggers de la comunidad con el payload del botón.Sí, como una petición nueva a la URL de ese trigger

Cambiar la tarjeta con un toque

Un botón webhook_action lleva una lista de pasos en triggers. Al pulsarlo se ejecutan en el servidor de mssgs, en orden, y todos en el canal ven el resultado.

PasoQué hace, para todosCampos
update_messageSustituye la tarjeta y sus botones. Envía "actions": [] para quitar los botones.message_container, actions, content
remove_messageBorra el mensaje.Ninguno
add_reactionAñade una reacción en nombre del miembro que ha pulsado.emoji
add_replyPublica una respuesta en nombre del miembro que ha pulsado.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:" }
      ]
    }
  ]
}
Los pasos se leen del mensaje guardado, nunca de la app del miembro, así que una pulsación solo puede hacer lo que tú pusiste ahí.
Los pasos se ejecutan en orden y se intenta cada uno: si uno falla, los demás se ejecutan igualmente.

Recibir la pulsación

Un mensaje con botones vuelve del webhook con una stream_url. Mantenla abierta y cada pulsación llega como un evento de tipo action, con el id del botón, el botón guardado y su payload, y quién lo ha pulsado:

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

Haz el trabajo de verdad, como abrir la verja, y luego fija el estado final de la tarjeta mediante callback_url. Cómo funcionan el stream y el callback se explica en actualizaciones en directo.

Ejecutar un comando desde un botón

Un botón trigger:{guid} lanza uno de los triggers de tu comunidad, como si alguien hubiera escrito el comando, y le pasa el payload del botón. El trigger recibe:

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=..."
}
Lo que responde el trigger se publica como una tarjeta nueva. La petición no dice en qué mensaje estaba el botón: pon lo que necesites en payload.

Campos

CampoTipoQué hace
typestringurl:{url}, webhook_action o trigger:{guid}. Obligatorio.
textstringLa etiqueta del botón. Obligatorio; label también funciona.
colorstringEl color del botón, ver más abajo.
idstringPara webhook_action: qué botón se ha pulsado. Único dentro del mensaje.
payloadobjectTus datos, que te devolvemos en cada pulsación.
triggersarrayPara webhook_action: los pasos que se ejecutan.
disabledbooleanMuestra el botón en gris y se rechazan las pulsaciones.

Colores

green, blue y purple dibujan un botón principal, relleno. red, orange y yellow dibujan uno secundario: úsalos para "Rechazar", "Cancelar" y otras opciones delicadas.

Errores

Cuando publicas un mensaje con botones, mssgs los comprueba primero:

CódigoSignificado
INVALID_ACTIONS_FORMATactions no es una lista de objetos.
INVALID_ACTION_MISSING_FIELDSA un botón le falta type o text.
DUPLICATE_ACTION_IDDos botones comparten un id.
INVALID_TRIGGERS_FORMATtriggers no es una lista de pasos.
INVALID_TRIGGER_MISSING_ACTIONUn paso no tiene action.
INVALID_TRIGGER_ACTION_NOT_ALLOWEDUn paso distinto de los cuatro de arriba.

Cuando alguien pulsa

CódigoSignificado
MESSAGE_NOT_FOUNDEl mensaje se ha borrado mientras tanto.
ACTION_NOT_FOUNDNo hay ningún botón con ese id en el mensaje.
ACTION_DISABLEDEl botón está desactivado.
TRIGGER_NOT_FOUND, TRIGGER_NOT_ACTIVEEl trigger al que apunta un botón ya no existe o está desactivado.
TRIGGER_NOT_ALLOWEDEl miembro no tiene ningún rol que pueda usar ese trigger.

¿Vienes de la documentación antigua?

Los botones de tipo button con pasos ws:send, local:update_message y local:remove_message, las condiciones previous:success y expire_in_seconds ya no funcionan para remitentes externos. Usa webhook_action con los pasos de arriba: llegan a todos, no solo a quien ha pulsado.

Sigue construyendo