---
title: "Webhooky: posielaj správy do kanála mssgs"
description: "Pošli správu alebo kartu do kanála mssgs z CI, monitoringu či skriptu jednou HTTP požiadavkou. Formáty, súbory, podpisy, chyby a limity."
canonical: https://docs.mss.gs/sk/webhooks
language: sk
---

# Posielaj správy cez webhook

Webhook je URL adresa, ktorá posiela správy do tvojej komunity. Pošli na ňu JSON z čohokoľvek, čo vie urobiť HTTP požiadavku, napríklad z CI, monitoringu, cron úlohy alebo skriptu, a správa sa objaví v kanáli.

## Čo s tým môžeš robiť

- **Pošli text alebo kartu** Obyčajný text alebo kartu s nadpisom, farbou, markdownom, poľami a obrázkami.

- **Prilož súbory** Až päť súborov na správu: logy, reporty, snímky obrazovky.

- **Pridaj tlačidlá** Odkazy alebo tlačidlá, ktoré zmenia kartu alebo zavolajú tvoju službu.

- **Zmeň ju neskôr** Odpoveď obsahuje callback URL, cez ktorú správu aktualizuješ alebo zmažeš.

V aplikácii

#### Build #1847 prešiel

Jedna požiadavka z CI, jedna karta v #deploys. Meno navrchu je názov, ktorý má webhook.

- [Rýchly štart](#quick-start)

- [Čo môžeš poslať](#format)

- [Súbory](#attachments)

- [Podpisovanie](#signing)

- [Odpovede a chyby](#responses)

- [Limity](#limits)

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

## Rýchly štart

### Vytvor webhook

V desktopovej aplikácii otvor vo svojej komunite **Manage Server → Webhooks**, vytvor webhook, vyber kanály, do ktorých môže posielať, a skopíruj URL pre kanál. Vyzerá takto:

```url
https://mss.gs/api/v1/webhook/{webhook_guid}/{token}/{channel_guid}
```

### Pošli správu

Podpíš JSON tajným kľúčom webhooku a pošli ho cez POST. Webhook vytvorený v desktopovej aplikácii ho má vždy: skopíruj ho z poľa **Webhook Secret** v nastaveniach webhooku.

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

### Prečítaj odpoveď

Odpoveď obsahuje id správy a callback_url , cez ktorú správu neskôr zmeníš.

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

## Čo môžeš poslať

Správa je buď krátka forma (text s nadpisom a farbou), alebo plná karta, a obe môžu niesť tlačidlá a súbory. Meno navrchu karty je vždy vlastný názov webhooku. V nastaveniach webhooku tiež rozhodneš, či smie posielať obrázky a zmieňovať ľudí.

### Krátka forma

Na väčšinu upozornení stačí.

```json
{
  "content": "Server backup completed at 03:00 UTC",
  "color": "green",
  "title": "Backup Bot"
}
```

| Pole | Typ | Čo robí |
| --- | --- | --- |
| content | string | Text správy. Povinný, ak neposielaš kartu ani súbory. |
| color | string | blue (predvolená), green , orange , red , yellow alebo purple . |
| title | string | Nadpis nad textom. Predvolene názov webhooku. |

### Plná karta

Pošli message_container a dostaneš kartu s nadpisom ako odkazom, podnadpisom, markdownom, poľami a obrázkami. Cez webhook karta prijíma type , color , title , title_url , sub_title , description , fields , avatar_url , image_url , image_base64 , images a polia loadera. Stavový štítok, odznak, štatistiky diffu a zbalené uvažovanie patria odpovediam na príkazy. Všetky polia nájdeš na stránke [karty správ](https://docs.mss.gs/sk/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 prešiel

### Tlačidlá

Pridaj pole actions a pod správou sa objavia tlačidlá. Ako fungujú, sa dočítaš na stránke [tlačidlá](https://docs.mss.gs/sk/buttons).

## Súbory

Pošli so správou skutočné súbory: log, report, snímku obrazovky. Zobrazia sa ako každá iná príloha, ako riadok na stiahnutie, obrázky, video a zvuk priamo v správe. Správa iba so súbormi je v poriadku: vynechaj content aj kartu.

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

| Pole | Typ | Čo robí |
| --- | --- | --- |
| name | string | Názov, pod ktorým sa súbor stiahne. Povinné. Cesta sa skráti na svoju poslednú časť. |
| content_base64 | string | Bajty súboru v base64, holé alebo ako URI data: . mssgs súbor uloží a v správe ponechá iba odkaz. |
| mime_type | string | Typ obsahu content_base64 . Predvolene text/plain . |
| url | string | Súbor, ktorý už je hostovaný na mssgs: cesta /static/... alebo URL https://mss.gs/... . |

| Limit | Hodnota |
| --- | --- |
| Súbory na správu | **5** |
| Veľkosť súboru po dekódovaní | **8 MB** |
| Názov súboru | 200 znakov |
| Celá požiadavka | Približne 10 MB. Base64 zväčší súbor o tretinu, takže jediný súbor väčší ako zhruba 7 MB sa nezmestí. |

### Prečo url prijíma iba adresy mssgs

URL webhooku často skončí vložená v iných dashboardoch. Ak unikne, nesmie nikomu umožniť, aby aplikácia každého člena sťahovala súbor zo servera, ktorý si ten človek vybral. Ak je tvoj súbor inde, pošli ho ako content_base64 a mssgs ho bude hostovať.

### Neúspešné nahratie súboru nezhodí správu

Súbory sa skontrolujú vopred, ale nahrajú sa až potom. Ak nahratie zlyhá, ten súbor sa vynechá a zvyšok správy sa aj tak pošle, bez chyby: lepšie prísť o súbor ako o report. Ak na súbore záleží, over si, že dorazil.

### Súbor z príkazového riadka

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

## Podpisovanie požiadaviek

Webhook s tajným kľúčom prijme iba požiadavky, ktoré dokážu, že ho poznajú, a webhook vytvorený v desktopovej aplikácii ho má vždy (**Webhook Secret** v jeho nastaveniach). Podpíš surové telo požiadavky algoritmom HMAC-SHA256 s tajným kľúčom a pošli hexadecimálny digest malými písmenami v hlavičke X-Mssgs-Signature ako 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
});
```

Prijíma sa aj vlastná hlavička GitHubu X-Hub-Signature-256 , takže webhook z GitHubu s rovnakým tajným kľúčom funguje bez úprav. Podpis neobsahuje časovú pečiatku, takže nezabráni opätovnému odoslaniu zachytenej požiadavky: tajomstvom, na ktorom naozaj záleží, zostáva URL.

## Odpovede a chyby

Odoslaná správa sa vráti so svojím id a callback_url , cez ktorú ju počas 30 minút môžeš aktualizovať alebo zmazať.

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

Keď má správa tlačidlá, odpoveď obsahuje aj stream_url : živý stream odpovedí, reakcií a stlačení tlačidiel na tej správe, otvorený 10 minút, alebo hodinu, keď pošleš "sse_event_extended_timeout": true . Pozri [živé aktualizácie](https://docs.mss.gs/sk/live-updates).

### Stavové kódy

| Stav | Kedy |
| --- | --- |
| 401 | Webhook má tajný kľúč a podpis chýba alebo je nesprávny. |
| 403 | Tento webhook nesmie posielať do toho kanála. |
| 404 | Na tejto URL nie je žiadny webhook. |
| 413 | Požiadavka je príliš veľká. |
| 429 | Príliš veľa požiadaviek. Spomaľ a skús to znova. |
| 502 | Správu sa nepodarilo doručiť. Skús to znova. |

### Chybové kódy

| Kód | Význam |
| --- | --- |
| MISSING_CONTENT | Nie je čo poslať: žiadny text, karta ani súbory. |
| INVALID_MESSAGE_CONTAINER | message_container nie je objekt. |
| INVALID_MESSAGE_CONTAINER_TYPE | Typ karty nie je embed_message ani system_message . |
| MISSING_MESSAGE_CONTAINER_DESCRIPTION | Karta potrebuje popis, ak nejde o loader. |
| MISSING_MESSAGE_CONTAINER_LOADER_TEXT | Karta loadera potrebuje loader_text . |
| INVALID_WEBHOOK_BINDING | Tento webhook nesmie posielať do toho kanála. |
| INVALID_SIGNATURE | Hlavička s podpisom chýba alebo je podpis nesprávny. |
| REQUEST_BODY_TOO_LARGE | Požiadavka prekračuje limit veľkosti. |
| PUBLISH_FAILED | Správu sa nepodarilo doručiť. |
| INVALID_ACTIONS_FORMAT , INVALID_ACTION_MISSING_FIELDS , DUPLICATE_ACTION_ID , INVALID_TRIGGERS_FORMAT , INVALID_TRIGGER_MISSING_ACTION , INVALID_TRIGGER_ACTION_NOT_ALLOWED | Niečo nie je v poriadku s tlačidlom. Pozri [tlačidlá](https://docs.mss.gs/sk/buttons). |

### Chyby súborov

| Kód | Význam |
| --- | --- |
| INVALID_ATTACHMENTS_FORMAT | attachments nie je zoznam alebo niektorá položka nie je objekt. |
| TOO_MANY_ATTACHMENTS | Viac ako päť súborov. |
| MISSING_ATTACHMENT_NAME | Súbor nemá názov. |
| INVALID_ATTACHMENT_NAME | Z názvu nezostane nič použiteľné, napríklad pri .. . |
| MISSING_ATTACHMENT_SOURCE | Ani url , ani content_base64 . |
| AMBIGUOUS_ATTACHMENT_SOURCE | Zároveň url aj content_base64 . |
| INVALID_ATTACHMENT_BASE64 | Base64 sa nedá dekódovať. |
| ATTACHMENT_TOO_LARGE | Súbor má po dekódovaní viac ako 8 MB. |
| INVALID_ATTACHMENT_URL | url nie je adresa mssgs. |

## Limity

| Limit | Hodnota |
| --- | --- |
| Veľkosť požiadavky | Približne 10 MB |
| Súbory na správu | 5, každý najviac 8 MB |
| Popis karty | Až 50 000 bajtov. Po 1 000 bajtoch členovia uvidia začiatok a tlačidlo **Show more**. |
| Úprava správy po odoslaní | 30 minút, cez callback_url |
| Živý stream správy s tlačidlami | 10 minút, na požiadanie hodinu |

Počet požiadaviek je obmedzený. Keď dostaneš 429 , pred ďalším odoslaním počkaj a upozornenia, ktoré prichádzajú v nárazoch, zlúč do jednej správy.

## GitHub, UniFi a App Store Connect

Nasmeruj niektorú z týchto služieb na URL webhooku a mssgs ju rozpozná a pošle poriadnu kartu, payload písať netreba. Pozri [integrácie](https://mss.gs/sk/integrations). Tieto služby dostanú odpoveď {"success": true} a žiadnu callback URL.

| Zdroj | Rozpozná sa podľa | Čo pošle |
| --- | --- | --- |
| GitHub | Hlavička x-github-event | Pushe, pull requesty a recenzie, issues a komentáre, vetvy a tagy, vydania. Rad zmien jedného issue alebo pull requestu v krátkom čase sa zhrnie do jednej karty. |
| UniFi Protect | User agent protect-alarm-manager | Zvonenie pri dverách, pohyb a osoby, vozidlá alebo balíky, ktoré zachytia tvoje kamery. |
| App Store Connect | Telo jeho notifikácie alebo hlavička x-apple-signature | Notifikácie App Store Connect. |

## Tvor ďalej
