---
title: "Botones: mensajes interactivos en mssgs"
description: "Pon botones bajo una tarjeta de mssgs: abre un enlace, cambia la tarjeta para todos con un toque, recibe cada pulsación en directo o ejecuta otro comando."
canonical: https://docs.mss.gs/es/buttons
language: es
---

# 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 enlace** Lleva a la gente a una página, un dashboard o una pull request.

- **Cambia la tarjeta con un toque** Edítala, bórrala, reacciona o responde, directamente desde la pulsación, sin servidor propio.

- **Recibe cada pulsación** Tu servicio se entera en directo de quién ha pulsado qué.

- **Ejecuta un comando** Un botón puede lanzar uno de los comandos de barra de la comunidad, con datos.

En la app

#### Puerta principal

Alguien llama: aparece la tarjeta

#### Puerta principal

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](#quick-start)

- [Tres tipos](#kinds)

- [Cambiar la tarjeta](#steps)

- [Recibir la pulsación](#listen)

- [Ejecutar un comando](#trigger)

- [Campos](#fields)

- [Errores](#errors)

## Inicio rápido

### Añade una lista actions

Los botones van en actions , junto a la tarjeta, en una publicación de [webhook](https://docs.mss.gs/es/webhooks), en la respuesta a un [comando](https://docs.mss.gs/es/commands) o en una [actualización](https://docs.mss.gs/es/live-updates).

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

#### ¿Desplegar v2.1 en producción?

- 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.

| Tipo | Qué hace una pulsación | Te llega |
| --- | --- | --- |
| url:{url} | Abre el enlace. | No |
| webhook_action | Ejecuta 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.

| Paso | Qué hace, para todos | Campos |
| --- | --- | --- |
| update_message | Sustituye la tarjeta y sus botones. Envía "actions": [] para quitar los botones. | message_container , actions , content |
| remove_message | Borra el mensaje. | Ninguno |
| add_reaction | Añade una reacción en nombre del miembro que ha pulsado. | emoji |
| add_reply | Publica 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:" }
      ]
    }
  ]
}
```

## 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](https://docs.mss.gs/es/live-updates).

## 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=..."
}
```

## Campos

| Campo | Tipo | Qué hace |
| --- | --- | --- |
| type | string | url:{url} , webhook_action o trigger:{guid} . Obligatorio. |
| text | string | La etiqueta del botón. Obligatorio; label también funciona. |
| color | string | El color del botón, ver más abajo. |
| id | string | Para webhook_action : qué botón se ha pulsado. Único dentro del mensaje. |
| payload | object | Tus datos, que te devolvemos en cada pulsación. |
| triggers | array | Para webhook_action : los pasos que se ejecutan. |
| disabled | boolean | Muestra 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ódigo | Significado |
| --- | --- |
| INVALID_ACTIONS_FORMAT | actions no es una lista de objetos. |
| INVALID_ACTION_MISSING_FIELDS | A un botón le falta type o text . |
| DUPLICATE_ACTION_ID | Dos botones comparten un id . |
| INVALID_TRIGGERS_FORMAT | triggers no es una lista de pasos. |
| INVALID_TRIGGER_MISSING_ACTION | Un paso no tiene action . |
| INVALID_TRIGGER_ACTION_NOT_ALLOWED | Un paso distinto de los cuatro de arriba. |

### Cuando alguien pulsa

| Código | Significado |
| --- | --- |
| MESSAGE_NOT_FOUND | El mensaje se ha borrado mientras tanto. |
| ACTION_NOT_FOUND | No hay ningún botón con ese id en el mensaje. |
| ACTION_DISABLED | El botón está desactivado. |
| TRIGGER_NOT_FOUND , TRIGGER_NOT_ACTIVE | El trigger al que apunta un botón ya no existe o está desactivado. |
| TRIGGER_NOT_ALLOWED | El miembro no tiene ningún rol que pueda usar ese trigger. |

## ¿Vienes de la documentación antigua?

## Sigue construyendo
