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
Üks päring CI-st, üks kaart kanalis #deploys. Üleval olev nimi on see, mille webhookile andsid.
Kiirstart
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:
urlhttps://mss.gs/api/v1/webhook/{webhook_guid}/{token}/{channel_guid}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.
bashBODY='{"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"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-..." }
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.
{
"content": "Server backup completed at 03:00 UTC",
"color": "green",
"title": "Backup Bot"
}| Väli | Tüüp | Mida see teeb |
|---|---|---|
content | string | Sõnumi tekst. Kohustuslik, kui sa ei saada kaarti ega faile. |
color | string | blue (vaikimisi), green, orange, red, yellow või purple. |
title | string | Pealkiri 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.
{
"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" }
]
}
}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.
{
"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äli | Tüüp | Mida see teeb |
|---|---|---|
name | string | Failinimi, millega fail alla laaditakse. Kohustuslik. Failiteest jäetakse alles ainult viimane osa. |
content_base64 | string | Faili baidid base64-na, toorelt või URI-na data:. mssgs salvestab faili ja jätab sõnumile ainult lingi. |
mime_type | string | Välja content_base64 sisutüüp. Vaikimisi text/plain. |
url | string | mssgs’is juba majutatud fail: tee /static/... või URL https://mss.gs/.... |
content_base64 või url. Mõlemad korraga või mitte kumbki on viga.| Piirang | Väärtus |
|---|---|
| Faile sõnumi kohta | 5 |
| Faili suurus pärast dekodeerimist | 8 MB |
| Failinimi | 200 märki |
| Kogu päring | Umbes 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
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>.
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
});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.
{
"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-..."
}error. Käsitle iga keha, milles on võti error, ebaõnnestumisena, olenemata olekukoodist.HTTP/1.1 200 OK
Content-Type: application/json
{ "error": "ATTACHMENT_TOO_LARGE" }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
| Olek | Millal |
|---|---|
401 | Webhookil on secret ja allkiri puudub või on vale. |
403 | See webhook ei tohi sellesse kanalisse postitada. |
404 | Sellel URL-il pole webhooki. |
413 | Päring on liiga suur. |
429 | Liiga palju päringuid. Võta tempot maha ja proovi uuesti. |
502 | Sõnumit ei õnnestunud kohale toimetada. Proovi uuesti. |
Veakoodid
| Kood | Tähendus |
|---|---|
MISSING_CONTENT | Pole midagi postitada: pole teksti, kaarti ega faile. |
INVALID_MESSAGE_CONTAINER | message_container ei ole objekt. |
INVALID_MESSAGE_CONTAINER_TYPE | Kaardi tüüp ei ole embed_message ega system_message. |
MISSING_MESSAGE_CONTAINER_DESCRIPTION | Kaardil peab olema kirjeldus, kui see pole laadija. |
MISSING_MESSAGE_CONTAINER_LOADER_TEXT | Laadimiskaardil peab olema loader_text. |
INVALID_WEBHOOK_BINDING | See webhook ei tohi sellesse kanalisse postitada. |
INVALID_SIGNATURE | Allkirja päis puudub või on vale. |
REQUEST_BODY_TOO_LARGE | Päring ületab suuruspiirangu. |
PUBLISH_FAILED | Sõ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_ALLOWED | Mõne nupuga on midagi valesti. Vaata lehte nupud. |
Failivead
| Kood | Tähendus |
|---|---|
INVALID_ATTACHMENTS_FORMAT | attachments ei ole loend või mõni kirje ei ole objekt. |
TOO_MANY_ATTACHMENTS | Rohkem kui viis faili. |
MISSING_ATTACHMENT_NAME | Failil puudub nimi. |
INVALID_ATTACHMENT_NAME | Nimest ei jää alles midagi kasutatavat, näiteks ... |
MISSING_ATTACHMENT_SOURCE | Pole ei url ega content_base64. |
AMBIGUOUS_ATTACHMENT_SOURCE | Nii url kui ka content_base64. |
INVALID_ATTACHMENT_BASE64 | Base64 ei ole dekodeeritav. |
ATTACHMENT_TOO_LARGE | Fail on pärast dekodeerimist üle 8 MB. |
INVALID_ATTACHMENT_URL | url ei ole mssgs’i aadress. |
Piirangud
| Piirang | Väärtus |
|---|---|
| Päringu suurus | Umbes 10 MB |
| Faile sõnumi kohta | 5, igaüks kuni 8 MB |
| Kaardi kirjeldus | Kuni 50 000 baiti. Üle 1000 baidi puhul näevad liikmed algust ja nuppu Show more. |
| Sõnumi hilisem uuendamine | 30 minutit, aadressi callback_url kaudu |
| Nuppudega sõnumi reaalajas voog | 10 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.
| Allikas | Mille järgi tuvastatakse | Mida see postitab |
|---|---|---|
| GitHub | Päis x-github-event | Pushid, 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 Protect | User agent protect-alarm-manager | Uksekella helinad, liikumine ning sinu kaamerate tuvastatud inimesed, sõidukid või pakid. |
| App Store Connect | Selle teavituse keha või päis x-apple-signature | App Store Connecti teavitused. |