Sari la conținutul principal
Dezvoltatori Comenzi slash

Adaugă comenzi slash

Dă-i comunității tale propriile /comenzi. Când un membru tastează una, mssgs trimite mesajul la serviciul tău web și postează ce răspunde acesta: un card, butoane sau un răspuns pe care doar membrul respectiv îl vede.

Ce poți face

  • Răspunde cu un cardRăspunde cu JSON, iar acesta apare în canal ca un card.
  • Află cine a întrebatPrimești membrul și rolurile lui, așa că poți verifica cine ce are voie să facă.
  • Răspunde în privatArată răspunsul doar membrului care a întrebat.
  • Fără grabăRăspunde cu un loader în 5 secunde, apoi termină prin URL-ul de callback.

În aplicație

Tastează / și apar comenzile comunității

Serviciul tău răspunde, mssgs postează cardul

Lista de comenzi și cardul sunt chiar cele din aplicație. Subsolul arată cine a folosit ce comandă.

Start rapid

  1. Creează triggerul

    În aplicația desktop, deschide în comunitatea ta Manage Server → Triggers și adaugă unul: comanda la care reacționează, de exemplu /weather, și URL-ul serviciului tău web.

  2. Primește mesajul

    Când un membru trimite un mesaj care începe cu /weather, mssgs îl trimite cu POST la URL-ul tău:

    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. Răspunde cu JSON

    Răspunde în 5 secunde cu un status 2xx și JSON. Acesta devine un card în 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, ploaie slabă până la 16:00
    Wind
    SW 18 km/h
    Humidity
    82%

Setări

Fiecare trigger are aceste setări în Manage Server → Triggers.

SetareCe face
Trigger NameNumele triggerului, afișat lângă comandă în lista de comenzi.
Word to MatchTextul cu care trebuie să înceapă un mesaj, de exemplu /weather. Slash-ul este obișnuit, nu obligatoriu.
URL EndpointUnde trimite mssgs mesajul.
Webhook SecretOpțional. mssgs semnează cu el fiecare cerere, vezi mai jos.
ActiveDezactivează triggerul fără să-l ștergi.
Post Matching MessageDacă mesajul membrului, de exemplu /weather Amsterdam, rămâne în canal deasupra răspunsului tău.
Show Loading ReplyAfișează un card de încărcare cât timp lucrează serviciul tău.
Allowed User GroupsDoar membrii cu aceste roluri îl declanșează. Pentru oricine altcineva este un mesaj obișnuit.
Potrivirea se face pe începutul mesajului. Evită comenzile care încep una cu cealaltă, precum /deploy și /deploy-prod: nu este stabilit care dintre ele se declanșează. Mesajele de la boți și mesajele redirecționate nu declanșează niciodată un trigger.

Ce primești

Un POST cu un corp JSON. Printre antete se află User-Agent: mssgs-webhook/1.0.

CâmpTipCe este
server_guidstringComunitatea.
channel_guidstringCanalul în care a fost trimis mesajul.
trigger_matchstringComanda care s-a potrivit, de exemplu /weather.
message.contentstringÎntregul mesaj, inclusiv comanda.
message.member_guidstringMembrul care l-a trimis, în această comunitate.
message.user_guidstringContul aceleiași persoane, același în fiecare comunitate.
message.group_guidsarrayRolurile pe care le are membrul.
message.cmsnumberCând a fost trimis, în milisecunde.
message.is_action_buttonbooleantrue când triggerul a fost declanșat de un buton, nu de o comandă tastată.
message.action_payloadobjectpayload-ul butonului, la apăsările de butoane.
callback_urlstringActualizează sau șterge răspunsul tău mai târziu, timp de 30 de minute.
stream_urlstringUn flux live cu răspunsurile, reacțiile și apăsările de butoane de pe răspunsul tău, timp de 10 minute.
Cu un secret setat, cererea conține X-Mssgs-Signature: sha256=<hex>: un HMAC-SHA256 al corpului brut cu secretul tău. Calculează-l tu și compară-l înainte să ai încredere în cerere.

Verificarea a cine ce are voie

Compară message.group_guids cu rolurile în care ai încredere, de exemplu ca doar moderatorii să poată rula /ban. Ca o comandă să nu fie deloc la îndemâna altora, setează-i rolurile în setările triggerului.

Ce răspunzi

Orice status 2xx cu un corp JSON, de până la 4 MB. Trimite cel puțin unul dintre message_container și actions.

CâmpTipCe este
message_containerobjectCardul. Aici funcționează toate câmpurile cardurilor de mesaj, inclusiv eticheta de status, badge-ul, statisticile de diff și raționamentul pliat.
title, description, color, ...stringScurtătură: câmpurile de card puse la nivelul de sus sunt împachetate automat într-un card.
actionsarrayButoane sub card. Vezi butoane.
visible_to_member_guidsarrayDoar acești membri văd răspunsul. Vezi răspunsuri private.
Antetul cardului arată numele comunității tale, iar subsolul spune cine a folosit comanda: „maya triggered /weather command”. Avatarul este al membrului.
Răspunde întotdeauna cu un card: linia content nu apare pe cardul unui răspuns la o comandă, așa că pune ce contează în cardul propriu-zis.

Cinci secunde

mssgs așteaptă răspunsul tău 5 secunde. Dacă ai nevoie de mai mult, răspunde imediat cu un card de tip loader și termină prin callback_url, care rămâne valabil 30 de minute.

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 } })
});
Dacă serviciul tău nu răspunde la timp sau răspunde cu o eroare, membrul care a folosit comanda vede un card roșu „Failed”. Nimeni altcineva nu îl vede.

Răspunsuri private

Pune id-uri de membri în visible_to_member_guids și doar ei îți vor vedea răspunsul. Folosește member_guid din cerere ca să-i răspunzi doar persoanei care a întrebat.

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 exemplu complet

O comandă /weather în Node.js cu Express, care răspunde cu un card.

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

Limite

LimităValoare
Timp de răspuns5 secunde
Dimensiunea răspunsului4 MB
Comenzi per membru5 la fiecare 5 secunde
Actualizarea răspunsului ulterior30 de minute, prin callback_url
Fluxul live al răspunsului10 minute, prin stream_url

Construiește mai departe