---
title: "Webhookid: postita sõnumeid mssgs’i kanalisse"
description: "Saada sõnum või kaart mssgs’i kanalisse CI-st, monitooringust või skriptist ühe HTTP-päringuga. Vormingud, failid, allkirjad, vead ja piirangud."
canonical: https://docs.mss.gs/et/webhooks
language: et
---

# 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 kaart** Lihttekst või kaart pealkirja, värvi, markdowni, väljade ja piltidega.

- **Lisa faile** Kuni viis faili sõnumi kohta: logid, raportid, ekraanipildid.

- **Lisa nuppe** Lingid või nupud, mis muudavad kaarti või jõuavad sinu teenuseni.

- **Muuda seda hiljem** Vastuses on callback URL, millega sõnumit uuendada või kustutada.

Rakenduses

#### Build #1847 õnnestus

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

- [Kiirstart](#quick-start)

- [Mida saad saata](#format)

- [Failid](#attachments)

- [Allkirjastamine](#signing)

- [Vastused ja vead](#responses)

- [Piirangud](#limits)

- [GitHub, UniFi, App Store](#special)

## 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:

```url
https://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**.

```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"
```

### 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.

```json
{
  "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](https://docs.mss.gs/et/bots).

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

#### Build #1847 õnnestus

### Nupud

Lisa massiiv actions , et panna nupud sõnumi alla. Kuidas need töötavad, loe lehelt [nupud](https://docs.mss.gs/et/buttons).

## 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ä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/... . |

| 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

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

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-..."
}
```

```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](https://docs.mss.gs/et/live-updates).

### 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](https://docs.mss.gs/et/buttons). |

### 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](https://mss.gs/et/integrations). 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. |

## Ehita edasi
