---
title: "Comandos de barra: añade /comandos a tu comunidad de mssgs"
description: "Dale a tu comunidad de mssgs sus propios comandos de barra: mssgs envía el mensaje a tu servicio web y publica tu respuesta JSON como tarjeta."
canonical: https://docs.mss.gs/es/commands
language: es
---

# Añade comandos de barra

Dale a tu comunidad sus propios /comandos . Cuando un miembro escribe uno, mssgs envía el mensaje a tu servicio web y publica lo que responde: una tarjeta, botones o una respuesta que solo ve esa persona.

## Qué puedes hacer

- **Responde con una tarjeta** Responde con JSON y aparece en el canal como una tarjeta.

- **Sabe quién pregunta** Recibes el miembro y sus roles, así que puedes comprobar quién puede hacer qué.

- **Responde en privado** Muestra la respuesta solo al miembro que preguntó.

- **Tómate tu tiempo** Responde con un loader en 5 segundos y termina después a través de la callback URL.

En la app

Escribe / y aparecen los comandos de la comunidad

#### Amsterdam

Tu servicio responde, mssgs publica la tarjeta

El selector y la tarjeta son los de la propia app. El pie indica quién ha usado qué comando.

- [Inicio rápido](#quick-start)

- [Ajustes](#settings)

- [Qué recibes](#request)

- [Qué respondes](#reply)

- [Cinco segundos](#timing)

- [Respuestas privadas](#private)

- [Un ejemplo completo](#example)

- [Límites](#limits)

## Inicio rápido

- 1 Crea el trigger En la app de escritorio, abre **Manage Server → Triggers** en tu comunidad y añade uno: el comando al que reacciona, como /weather , y la URL de tu servicio web.

### Recibe el mensaje

Cuando un miembro envía un mensaje que empieza por /weather , mssgs lo envía con POST a tu 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=..."
}
```

### Responde con JSON

Responde en 5 segundos con un estado 2xx y JSON. Se convierte en una tarjeta en el canal.

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

#### Amsterdam

## Ajustes

Cada trigger tiene estos ajustes en **Manage Server → Triggers**.

| Ajuste | Qué hace |
| --- | --- |
| Trigger Name | Cómo se llama el trigger; se muestra junto al comando en el selector. |
| Word to Match | El texto con el que tiene que empezar un mensaje, como /weather . La barra es lo habitual, no es obligatoria. |
| URL Endpoint | Adónde envía mssgs el mensaje. |
| Webhook Secret | Opcional. mssgs firma cada petición con él, ver más abajo. |
| Active | Desactiva el trigger sin borrarlo. |
| Post Matching Message | Si el propio /weather Amsterdam del miembro se queda en el canal encima de tu respuesta. |
| Show Loading Reply | Muestra una tarjeta de carga mientras tu servicio trabaja. |
| Allowed User Groups | Solo lo activan los miembros con estos roles. Para cualquier otra persona es un mensaje normal. |

## Qué recibes

Un POST con un cuerpo JSON. Entre las cabeceras va User-Agent: mssgs-webhook/1.0 .

| Campo | Tipo | Qué es |
| --- | --- | --- |
| server_guid | string | La comunidad. |
| channel_guid | string | El canal en el que se envió el mensaje. |
| trigger_match | string | El comando que ha coincidido, como /weather . |
| message.content | string | El mensaje entero, comando incluido. |
| message.member_guid | string | El miembro que lo envió, en esta comunidad. |
| message.user_guid | string | La cuenta de esa misma persona, igual en todas las comunidades. |
| message.group_guids | array | Los roles que tiene el miembro. |
| message.cms | number | Cuándo se envió, en milisegundos. |
| message.is_action_button | boolean | true cuando el trigger lo ha activado un botón y no un comando escrito. |
| message.action_payload | object | El payload del botón, en las pulsaciones de botón. |
| callback_url | string | Actualiza o borra tu respuesta más tarde, durante 30 minutos. |
| stream_url | string | Un stream en directo de las respuestas, reacciones y pulsaciones de botón en tu respuesta, durante 10 minutos. |

### Comprobar quién puede hacer qué

Compara message.group_guids con los roles de los que te fías, por ejemplo para que solo los moderadores puedan ejecutar /ban . Para que un comando no funcione en absoluto para nadie más, define sus roles en los ajustes del trigger.

## Qué respondes

Cualquier estado 2xx con un cuerpo JSON, de hasta 4 MB. Envía al menos uno de message_container o actions .

| Campo | Tipo | Qué es |
| --- | --- | --- |
| message_container | object | La tarjeta. Aquí funcionan todos los campos de las tarjetas de mensaje, incluidos la píldora de estado, el distintivo, las estadísticas de diff y el razonamiento plegado. |
| title , description , color , ... | string | Atajo: los campos de tarjeta en el nivel superior se envuelven en una tarjeta por ti. |
| actions | array | Botones bajo la tarjeta. Consulta botones. |
| visible_to_member_guids | array | Solo estos miembros ven la respuesta. Consulta respuestas privadas. |

## Cinco segundos

mssgs espera 5 segundos tu respuesta. Si necesitas más, responde de inmediato con una tarjeta de loader y termina a través de callback_url , que sigue siendo válida durante 30 minutos.

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

## Respuestas privadas

Pon ids de miembros en visible_to_member_guids y solo ellos verán tu respuesta. Usa el member_guid de la petición para responder solo a quien preguntó.

```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 ejemplo completo

Un comando /weather en Node.js con Express, que responde con una tarjeta.

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

## Límites

| Límite | Valor |
| --- | --- |
| Tiempo para responder | 5 segundos |
| Tamaño de la respuesta | 4 MB |
| Comandos por miembro | 5 cada 5 segundos |
| Actualizar la respuesta después | 30 minutos, mediante callback_url |
| Stream en directo de la respuesta | 10 minutos, mediante stream_url |

## Sigue construyendo
