Liigu põhisisu juurde
Arendajad Webhookid

Postita sõnumeid webhookiga

Webhook on URL, mis postitab sinu kogukonda. Saada sellele JSON kõigest, mis oskab HTTP-päringut teha, näiteks CI-st, monitooringust, cron-tööst või skriptist, ja sõnum ilmub kanalisse.

Mida saad teha

  • Postita tekst või kaartLihttekst või kaart pealkirja, värvi, markdowni, väljade ja piltidega.
  • Lisa faileKuni viis faili sõnumi kohta: logid, raportid, ekraanipildid.
  • Lisa nuppeLingid või nupud, mis muudavad kaarti või jõuavad sinu teenuseni.
  • Muuda seda hiljemVastuses on callback URL, millega sõnumit uuendada või kustutada.

Rakenduses

$ curl -X POST "$MSSGS_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-H "X-Mssgs-Signature: sha256=$SIG" \
-d '{"message_container": {"title": "Build #1847 õnnestus", ...}}'
{"success": true, "message_id": "aZZ1a2b-..."}

Üks päring CI-st, üks kaart kanalis #deploys. Üleval olev nimi on see, mille webhookile andsid.

Kiirstart

  1. Loo webhook

    Ava arvutirakenduses oma kogukonna Manage Server → Webhooks, loo webhook, vali kanalid, kuhu see tohib postitada, ja kopeeri kanali URL. See näeb välja selline:

    url
    https://mss.gs/api/v1/webhook/{webhook_guid}/{token}/{channel_guid}
  2. Saada sõnum

    Allkirjasta JSON webhooki secretiga ja saada see POST-päringuga. Arvutirakenduses loodud webhookil on secret alati olemas: kopeeri see webhooki seadetest väljalt Webhook Secret.

    bash
    BODY='{"content": "Build #1847 passed on main"}'
    SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$MSSGS_WEBHOOK_SECRET" | sed 's/^.* //')
    
    curl -X POST "$MSSGS_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -H "X-Mssgs-Signature: sha256=$SIG" \
      -d "$BODY"
  3. Loe vastust

    Vastusest saad sõnumi id ja aadressi callback_url, millega sõnumit hiljem muuta.

    json
    {
      "success": true,
      "message_id": "aZZ1a2b-...",
      "callback_url": "https://mss.gs/api/v1/trigger-callback/8f14e45f-...",
      "stream_url": "https://mss.gs/api/v1/instant/6b1e...c0?token=a1b2c3d4-..."
    }
Igaüks, kellel on URL ja secret, saab sellesse kanalisse postitada. Hoia mõlemad eemal avalikest repositooriumidest ja kliendipoolsest koodist.

Mida saad saata

Sõnum on kas lühivormis (tekst pealkirja ja värviga) või täielik kaart ning kumbki võib kanda nuppe ja faile. Kaardi ülaosas on alati webhooki enda nimi. Webhooki seadetes otsustad ka, kas see tohib postitada pilte ja inimesi mainida.

Lühivorm

Enamiku hoiatuste jaoks piisab sellest.

json
{
  "content": "Server backup completed at 03:00 UTC",
  "color": "green",
  "title": "Backup Bot"
}
VäliTüüpMida see teeb
contentstringSõnumi tekst. Kohustuslik, kui sa ei saada kaarti ega faile.
colorstringblue (vaikimisi), green, orange, red, yellow või purple.
titlestringPealkiri teksti kohal. Vaikimisi webhooki nimi.

Täielik kaart

Saada message_container, et saada kaart lingitud pealkirja, alapealkirja, markdowni, väljade ja piltidega. Webhooki kaudu võtab kaart vastu väljad type, color, title, title_url, sub_title, description, fields, avatar_url, image_url, image_base64, images ja laadija väljad. Olekusilt, märk, diff-statistika ja kokkuvolditud arutluskäik on käskude vastuste jaoks. Kõik väljad leiad lehelt sõnumikaardid.

json
{
  "message_container": {
    "type": "embed_message",
    "color": "green",
    "title": "Build #1847 passed",
    "title_url": "https://ci.example.com/builds/1847",
    "description": "All 212 tests green on **main**.",
    "fields": [
      { "field": "Duration", "value": "2m 34s" },
      { "field": "Commit", "value": "1a2b3c4" }
    ]
  }
}
deploys
System
Message from CI

Build #1847 õnnestus

Kõik 212 testi on harus main rohelised.
Duration
2m 34s
Commit
1a2b3c4

Nupud

Lisa massiiv actions, et panna nupud sõnumi alla. Kuidas need töötavad, loe lehelt nupud.

Failid

Postita sõnumiga päris faile: logi, raport, ekraanipilt. Need paistavad nagu iga teine manus, allalaadimisreana või piltide, video ja heli puhul otse sõnumis. Ka ainult failidega sõnum sobib: jäta content ja kaart ära.

json
{
  "message_container": {
    "color": "orange",
    "title": "Log dump: ios",
    "description": "DMs stopped arriving after switching networks"
  },
  "attachments": [
    {
      "name": "mssgs-logs-20260803-141205.log",
      "content_base64": "MjAyNi0wOC0wMyAxNDoxMjowNSBbV1NdIGNvbm5lY3RlZAo=",
      "mime_type": "text/plain"
    }
  ]
}
VäliTüüpMida see teeb
namestringFailinimi, millega fail alla laaditakse. Kohustuslik. Failiteest jäetakse alles ainult viimane osa.
content_base64stringFaili baidid base64-na, toorelt või URI-na data:. mssgs salvestab faili ja jätab sõnumile ainult lingi.
mime_typestringVälja content_base64 sisutüüp. Vaikimisi text/plain.
urlstringmssgs’is juba majutatud fail: tee /static/... või URL https://mss.gs/....
Saada iga faili kohta täpselt üks neist: content_base64 või url. Mõlemad korraga või mitte kumbki on viga.
PiirangVäärtus
Faile sõnumi kohta5
Faili suurus pärast dekodeerimist8 MB
Failinimi200 märki
Kogu päringUmbes 10 MB. Base64 teeb faili kolmandiku võrra suuremaks, nii et üksik fail, mis on suurem kui umbes 7 MB, ei mahu.

Miks url võtab vastu ainult mssgs’i aadresse

Webhooki URL satub sageli teiste teenuste juhtpaneelidele. Lekkinud URL ei tohi lasta kellelgi panna iga liikme rakendust faili tooma serverist, mille tema valis. Kui sinu fail asub mujal, saada see väljana content_base64 ja mssgs majutab selle.

Ebaõnnestunud üleslaadimine ei nurjata sõnumit

Failid kontrollitakse kohe, aga laaditakse üles hiljem. Kui üleslaadimine ebaõnnestub, jäetakse see fail välja ja ülejäänud sõnum postitatakse ikkagi, ilma veata: parem kaotada fail kui raport. Kui fail on oluline, kontrolli, et see kohale jõudis.

Fail käsurealt

bash
BODY='{"attachments":[{"name":"report.csv","content_base64":"'"$(base64 < report.csv | tr -d '\n')"'","mime_type":"text/csv"}]}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$MSSGS_WEBHOOK_SECRET" | sed 's/^.* //')

printf '%s' "$BODY" | curl -sS -X POST "$MSSGS_WEBHOOK_URL" \
  -H 'Content-Type: application/json' \
  -H "X-Mssgs-Signature: sha256=$SIG" \
  --data-binary @-

Päringute allkirjastamine

Secretiga webhook võtab vastu ainult päringuid, mis tõestavad, et teavad seda, ja arvutirakenduses loodud webhookil on secret alati olemas (Webhook Secret selle seadetes). Allkirjasta toores päringukeha secreti abil algoritmiga HMAC-SHA256 ja saada väiketähtedega hex-räsi päises X-Mssgs-Signature kujul sha256=<hex>.

javascript
import crypto from 'node:crypto';

const body = JSON.stringify({ content: 'Deploy finished' });
const signature = crypto.createHmac('sha256', process.env.MSSGS_WEBHOOK_SECRET)
  .update(body)
  .digest('hex');

await fetch(process.env.MSSGS_WEBHOOK_URL, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Mssgs-Signature': `sha256=${signature}`
  },
  body
});
Kehtiva allkirjata päring saab vastuseks 401 ja {"error": "INVALID_SIGNATURE"}. Allkirjastamata päringuid võtab vastu ainult secretita webhook, näiteks selline, mis on loodud MCP kaudu ilma väljata webhook_secret.

Vastu võetakse ka GitHubi enda päis X-Hub-Signature-256, nii et sama secretiga GitHubi webhook töötab muutmata kujul. Allkirjas pole ajatemplit, nii et see ei takista kinni püütud päringu uuesti saatmist: tegelik saladus on endiselt URL.

Vastused ja vead

Postitatud sõnum tuleb tagasi koos oma id ja aadressiga callback_url, millega saad seda 30 minuti jooksul uuendada või kustutada.

json
{
  "success": true,
  "message_id": "aZZ1a2b-...",
  "callback_url": "https://mss.gs/api/v1/trigger-callback/8f14e45f-...",
  "stream_url": "https://mss.gs/api/v1/instant/6b1e...c0?token=a1b2c3d4-..."
}
Loe nii olekukoodi kui ka keha. Tagasi lükatud payload kannab põhjust kehas veakoodina error. Käsitle iga keha, milles on võti error, ebaõnnestumisena, olenemata olekukoodist.
http
HTTP/1.1 200 OK
Content-Type: application/json

{ "error": "ATTACHMENT_TOO_LARGE" }
javascript
const res = await fetch(webhookUrl, { method: 'POST', headers, body });
const reply = await res.json().catch(() => null);

// A rejected payload still comes back as 200: read the body.
if (!res.ok || (reply && reply.error)) {
  throw new Error(`webhook rejected: ${reply?.error ?? res.status}`);
}

Kui sõnumil on nupud, on vastuses ka stream_url: selle sõnumi vastuste, reaktsioonide ja nupuvajutuste reaalajas voog, mis on avatud 10 minutit või tund, kui saadad "sse_event_extended_timeout": true. Vaata lehte reaalajas uuendused.

Olekukoodid

OlekMillal
401Webhookil on secret ja allkiri puudub või on vale.
403See webhook ei tohi sellesse kanalisse postitada.
404Sellel URL-il pole webhooki.
413Päring on liiga suur.
429Liiga palju päringuid. Võta tempot maha ja proovi uuesti.
502Sõnumit ei õnnestunud kohale toimetada. Proovi uuesti.

Veakoodid

KoodTähendus
MISSING_CONTENTPole midagi postitada: pole teksti, kaarti ega faile.
INVALID_MESSAGE_CONTAINERmessage_container ei ole objekt.
INVALID_MESSAGE_CONTAINER_TYPEKaardi tüüp ei ole embed_message ega system_message.
MISSING_MESSAGE_CONTAINER_DESCRIPTIONKaardil peab olema kirjeldus, kui see pole laadija.
MISSING_MESSAGE_CONTAINER_LOADER_TEXTLaadimiskaardil peab olema loader_text.
INVALID_WEBHOOK_BINDINGSee webhook ei tohi sellesse kanalisse postitada.
INVALID_SIGNATUREAllkirja päis puudub või on vale.
REQUEST_BODY_TOO_LARGEPäring ületab suuruspiirangu.
PUBLISH_FAILEDSõnumit ei õnnestunud kohale toimetada.
INVALID_ACTIONS_FORMAT, INVALID_ACTION_MISSING_FIELDS, DUPLICATE_ACTION_ID, INVALID_TRIGGERS_FORMAT, INVALID_TRIGGER_MISSING_ACTION, INVALID_TRIGGER_ACTION_NOT_ALLOWEDMõne nupuga on midagi valesti. Vaata lehte nupud.

Failivead

KoodTähendus
INVALID_ATTACHMENTS_FORMATattachments ei ole loend või mõni kirje ei ole objekt.
TOO_MANY_ATTACHMENTSRohkem kui viis faili.
MISSING_ATTACHMENT_NAMEFailil puudub nimi.
INVALID_ATTACHMENT_NAMENimest ei jää alles midagi kasutatavat, näiteks ...
MISSING_ATTACHMENT_SOURCEPole ei url ega content_base64.
AMBIGUOUS_ATTACHMENT_SOURCENii url kui ka content_base64.
INVALID_ATTACHMENT_BASE64Base64 ei ole dekodeeritav.
ATTACHMENT_TOO_LARGEFail on pärast dekodeerimist üle 8 MB.
INVALID_ATTACHMENT_URLurl ei ole mssgs’i aadress.

Piirangud

PiirangVäärtus
Päringu suurusUmbes 10 MB
Faile sõnumi kohta5, igaüks kuni 8 MB
Kaardi kirjeldusKuni 50 000 baiti. Üle 1000 baidi puhul näevad liikmed algust ja nuppu Show more.
Sõnumi hilisem uuendamine30 minutit, aadressi callback_url kaudu
Nuppudega sõnumi reaalajas voog10 minutit või soovi korral tund

Päringute sagedus on piiratud. Kui saad vastuseks 429, oota enne uuesti saatmist ja koonda hooga saabuvad hoiatused üheks sõnumiks.

GitHub, UniFi ja App Store Connect

Suuna mõni neist teenustest webhooki URL-ile ja mssgs tunneb selle ära ning postitab korraliku kaardi, ilma et peaksid payloadi kirjutama. Vaata integratsioone. Need saavad vastuseks {"success": true} ja callback URL-i ei tule.

AllikasMille järgi tuvastatakseMida see postitab
GitHubPäis x-github-eventPushid, pull requestid ja ülevaatused, issue’d ja kommentaarid, harud ja sildid, väljalasked. Ühe issue või pull requesti kiired järjestikused muudatused koondatakse üheks kaardiks.
UniFi ProtectUser agent protect-alarm-managerUksekella helinad, liikumine ning sinu kaamerate tuvastatud inimesed, sõidukid või pakid.
App Store ConnectSelle teavituse keha või päis x-apple-signatureApp Store Connecti teavitused.

Ehita edasi