Pular para o conteúdo principal
Desenvolvedores Comandos de barra

Adicione comandos de barra

Dê à sua comunidade os próprios /comandos. Quando um membro digita um deles, o mssgs envia a mensagem ao seu serviço web e publica o que ele responder: um cartão, botões ou uma resposta que só essa pessoa vê.

O que você pode fazer

  • Responda com um cartãoResponda com JSON e ele aparece no canal como um cartão.
  • Saiba quem pediuVocê recebe o membro e os cargos dele, para verificar quem pode fazer o quê.
  • Responda em particularMostre a resposta só para o membro que pediu.
  • Sem pressaResponda com um loader em 5 segundos e termine pela callback URL.

No app

Digite / e os comandos da comunidade aparecem

O seu serviço responde, o mssgs publica o cartão

A lista e o cartão são do próprio app. O rodapé diz quem usou qual comando.

Início rápido

  1. Crie o trigger

    No app para computador, abra Manage Server → Triggers da sua comunidade e adicione um: o comando ao qual ele reage, como /weather, e a URL do seu serviço web.

  2. Receba a mensagem

    Quando um membro envia uma mensagem que começa com /weather, o mssgs faz um POST dela para a sua 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. Responda com JSON

    Responda em até 5 segundos com um status 2xx e JSON. Isso vira um cartão no 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, chuva fraca até as 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

Configurações

Cada trigger tem estas configurações em Manage Server → Triggers.

ConfiguraçãoO que faz
Trigger NameO nome do trigger, mostrado ao lado do comando na lista.
Word to MatchO texto com que a mensagem precisa começar, como /weather. A barra é o costume, não uma exigência.
URL EndpointPara onde o mssgs envia a mensagem.
Webhook SecretOpcional. O mssgs assina cada requisição com ele, veja abaixo.
ActiveDesliga o trigger sem apagá-lo.
Post Matching MessageSe o /weather Amsterdam do próprio membro fica no canal acima da sua resposta.
Show Loading ReplyMostra um cartão de carregamento enquanto o seu serviço trabalha.
Allowed User GroupsSó membros com esses cargos o disparam. Para qualquer outra pessoa, é uma mensagem comum.
A correspondência é feita no começo da mensagem. Evite comandos em que um é o começo do outro, como /deploy e /deploy-prod: qual deles dispara não é garantido. Mensagens de bots e mensagens encaminhadas nunca disparam um trigger.

O que você recebe

Um POST com corpo JSON. Os headers incluem User-Agent: mssgs-webhook/1.0.

CampoTipoO que é
server_guidstringA comunidade.
channel_guidstringO canal em que a mensagem foi enviada.
trigger_matchstringO comando que correspondeu, como /weather.
message.contentstringA mensagem inteira, com o comando.
message.member_guidstringO membro que a enviou, nesta comunidade.
message.user_guidstringA conta da mesma pessoa, igual em todas as comunidades.
message.group_guidsarrayOs cargos do membro.
message.cmsnumberQuando foi enviada, em milissegundos.
message.is_action_buttonbooleantrue quando um botão disparou o trigger, e não um comando digitado.
message.action_payloadobjectO payload do botão, quando é um toque em botão.
callback_urlstringAtualize ou apague a sua resposta depois, por 30 minutos.
stream_urlstringUm stream ao vivo das respostas, reações e toques em botões na sua resposta, por 10 minutos.
Com um secret definido, a requisição traz X-Mssgs-Signature: sha256=<hex>: um HMAC-SHA256 do corpo bruto com o seu secret. Calcule você mesmo e compare antes de confiar na requisição.

Verificar quem pode fazer o quê

Compare message.group_guids com os cargos em que você confia, por exemplo para que só moderadores possam rodar /ban. Para esconder um comando de todos os outros, defina os cargos dele nas configurações do trigger.

O que você responde

Qualquer status 2xx com um corpo JSON, de até 4 MB. Envie pelo menos um de message_container ou actions.

CampoTipoO que é
message_containerobjectO cartão. Todos os campos dos cartões de mensagem funcionam aqui, incluindo a pílula de status, o selo, as estatísticas de diff e o raciocínio recolhido.
title, description, color, ...stringAtalho: campos de cartão no nível superior são embrulhados num cartão para você.
actionsarrayBotões embaixo do cartão. Veja botões.
visible_to_member_guidsarraySó esses membros veem a resposta. Veja respostas privadas.
O cabeçalho do cartão mostra o nome da sua comunidade, e o rodapé diz quem usou o comando: “maya triggered /weather command”. O avatar é o do membro.
Responda sempre com um cartão: a linha content não aparece no cartão de uma resposta a comando, então coloque o que importa no próprio cartão.

Cinco segundos

O mssgs espera 5 segundos pela sua resposta. Se você precisar de mais tempo, responda na hora com um cartão de loader e termine pela callback_url, que vale por 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 } })
});
Se o seu serviço não responder a tempo, ou responder com um erro, o membro que usou o comando vê um cartão vermelho “Failed”. Mais ninguém vê.

Respostas privadas

Coloque ids de membros em visible_to_member_guids e só eles veem a sua resposta. Use o member_guid da requisição para responder só a quem pediu.

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

Um exemplo completo

Um comando /weather em Node.js com Express, respondendo com um cartão.

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

Limites

LimiteValor
Tempo para responder5 segundos
Tamanho da resposta4 MB
Comandos por membro5 a cada 5 segundos
Atualizar a resposta depois30 minutos, pela callback_url
Stream ao vivo da resposta10 minutos, pela stream_url

Continue criando