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
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" } ] }deploysElige 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 |
{
"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:
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:
{
"actions": [
{
"type": "trigger:5f2c9a1e-trigger-guid",
"text": "Check status",
"color": "blue",
"payload": { "order_id": "12345" }
}
]
}{
"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=..."
}payload.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?
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.