Saltar al contenido principal
Desarrolladores Comandos de barra

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 tarjetaResponde con JSON y aparece en el canal como una tarjeta.
  • Sabe quién preguntaRecibes el miembro y sus roles, así que puedes comprobar quién puede hacer qué.
  • Responde en privadoMuestra la respuesta solo al miembro que preguntó.
  • Tómate tu tiempoResponde 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

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

  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.

  2. 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=..."
    }
  3. 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%" }
        ]
      }
    }
    general
    maya18:45
    /weather Amsterdam
    System
    Message from Weekend Crew

    Amsterdam

    14 °C, lluvia débil hasta las 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

Ajustes

Cada trigger tiene estos ajustes en Manage Server → Triggers.

AjusteQué hace
Trigger NameCómo se llama el trigger; se muestra junto al comando en el selector.
Word to MatchEl texto con el que tiene que empezar un mensaje, como /weather. La barra es lo habitual, no es obligatoria.
URL EndpointAdónde envía mssgs el mensaje.
Webhook SecretOpcional. mssgs firma cada petición con él, ver más abajo.
ActiveDesactiva el trigger sin borrarlo.
Post Matching MessageSi el propio /weather Amsterdam del miembro se queda en el canal encima de tu respuesta.
Show Loading ReplyMuestra una tarjeta de carga mientras tu servicio trabaja.
Allowed User GroupsSolo lo activan los miembros con estos roles. Para cualquier otra persona es un mensaje normal.
Se compara el principio del mensaje. Evita comandos en los que uno sea el principio de otro, como /deploy y /deploy-prod: no está garantizado cuál se activa. Los mensajes de bots y los mensajes reenviados nunca activan un trigger.

Qué recibes

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

CampoTipoQué es
server_guidstringLa comunidad.
channel_guidstringEl canal en el que se envió el mensaje.
trigger_matchstringEl comando que ha coincidido, como /weather.
message.contentstringEl mensaje entero, comando incluido.
message.member_guidstringEl miembro que lo envió, en esta comunidad.
message.user_guidstringLa cuenta de esa misma persona, igual en todas las comunidades.
message.group_guidsarrayLos roles que tiene el miembro.
message.cmsnumberCuándo se envió, en milisegundos.
message.is_action_buttonbooleantrue cuando el trigger lo ha activado un botón y no un comando escrito.
message.action_payloadobjectEl payload del botón, en las pulsaciones de botón.
callback_urlstringActualiza o borra tu respuesta más tarde, durante 30 minutos.
stream_urlstringUn stream en directo de las respuestas, reacciones y pulsaciones de botón en tu respuesta, durante 10 minutos.
Si has definido un secreto, la petición lleva X-Mssgs-Signature: sha256=<hex>: un HMAC-SHA256 del cuerpo sin procesar con tu secreto. Calcúlalo tú y compáralo antes de fiarte de la petición.

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.

CampoTipoQué es
message_containerobjectLa 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, ...stringAtajo: los campos de tarjeta en el nivel superior se envuelven en una tarjeta por ti.
actionsarrayBotones bajo la tarjeta. Consulta botones.
visible_to_member_guidsarraySolo estos miembros ven la respuesta. Consulta respuestas privadas.
La cabecera de la tarjeta muestra el nombre de tu comunidad, y su pie dice quién ha usado el comando: "maya triggered /weather command". El avatar es el del miembro.
Responde siempre con una tarjeta: la línea content no se muestra en la tarjeta de una respuesta a un comando, así que pon lo importante en la propia tarjeta.

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 } })
});
Si tu servicio no responde a tiempo, o responde con un error, el miembro que usó el comando ve una tarjeta roja "Failed". Nadie más la ve.

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ímiteValor
Tiempo para responder5 segundos
Tamaño de la respuesta4 MB
Comandos por miembro5 cada 5 segundos
Actualizar la respuesta después30 minutos, mediante callback_url
Stream en directo de la respuesta10 minutos, mediante stream_url

Sigue construyendo