---
title: "Živé aktualizácie: zmeň správy mssgs aj po odoslaní"
description: "Uprav alebo vymaž správu mssgs aj po odoslaní cez jej callback URL, ukáž priebeh loaderom a sleduj naživo odpovede, reakcie a stlačenia tlačidiel."
canonical: https://docs.mss.gs/sk/live-updates
language: sk
---

# Aktualizuj správy naživo

Správa nemusí zostať taká, aká bola odoslaná. Ukáž priebeh, kým úloha beží, vymeň loader za výsledok, odober tlačidlá, keď už niekto rozhodol, alebo ju vymaž. Všetci v kanáli uvidia zmenu okamžite.

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

- **Aktualizuj kartu** Zmeň text, farbu aj tlačidlá priamo na mieste.

- **Ukáž priebeh** Loader, ktorý prechádza jednotlivými krokmi, a potom výsledok.

- **Vymaž ju** Odstráň správu, keď už neplatí.

- **Počúvaj ju** Odpovede, reakcie a stlačenia tlačidiel na tvojej správe, naživo.

V aplikácii

Odoslaná s loaderom

Aktualizovaná: krok 2 z 3

#### Nasadenie dokončené

Aktualizovaná: hotovo, s tlačidlom

Jedna správa, dvakrát aktualizovaná cez jej callback URL. Nikto nevidí tri správy, iba jednu, ktorá sa mení.

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

- [Aktualizácia](#update)

- [Priebeh](#progress)

- [Vymazanie](#delete)

- [Počúvanie](#stream)

## Rýchly štart

### Uchovaj si callback URL

Každý príspevok cez [webhook](https://docs.mss.gs/sk/webhooks) a každá požiadavka [príkazu](https://docs.mss.gs/sk/commands) prichádza s callback_url pre danú správu.

```bash
BODY='{"message_container": {"color": "blue", "loader": true, "loader_text": "Deploying…"}}'
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"

# {"success": true, "message_id": "...", "callback_url": "https://mss.gs/api/v1/trigger-callback/8f14e45f-..."}
```

### PUT na aktualizáciu

Pošli nový stav. Karta sa zmení na mieste u všetkých.

```bash
curl -X PUT "$CALLBACK_URL" -H "Content-Type: application/json" \
  -d '{"message_container": {"color": "green", "title": "Deploy complete", "description": "v2.1 is live."}}'
```

### DELETE na vymazanie

Telo požiadavky netreba.

```bash
curl -X DELETE "$CALLBACK_URL"
```

## Aktualizácia správy

Pošli JSON metódou PUT na callback_url . Posielaj len to, čo chceš zmeniť.

| Pole | Typ | Čo robí |
| --- | --- | --- |
| message_container | object | Nová karta. Pozri [karty správ](https://docs.mss.gs/sk/bots). |
| actions | array | Nové tlačidlá. "actions": [] ich odoberie všetky; ak pole vynecháš, zostanú. |
| content | string | Nový text. |
| title , description , color , loader , ... | string | Skratka: polia karty na najvyššej úrovni sa za teba zabalia do karty. |

### Odpovede

| Stav | Kód | Význam |
| --- | --- | --- |
| 200 | {"success": true} | Prijaté. Aktualizácia nasleduje hneď potom. |
| 400 | MISSING_FIELDS | V tele nie je nič na aktualizáciu. |
| 400 | INVALID_BODY | Telo nie je platný JSON. |
| 400 | kód tlačidla | S tlačidlom niečo nie je v poriadku, pozri [tlačidlá](https://docs.mss.gs/sk/buttons). |
| 401 | INVALID_TOKEN | URL nie je platná. |
| 404 | TOKEN_NOT_FOUND | Platnosť URL vypršala alebo sa už použila na vymazanie správy. |
| 502 | PUBLISH_FAILED | Aktualizáciu sa nepodarilo doručiť. Skús to znova. |

### Ako dlho funguje

30 minút od chvíle, keď bola správa odoslaná alebo keď bol príkaz použitý. Aktualizácia túto dobu nepredĺži. Vymazaním správy sa URL spotrebuje. Cez aktualizáciu sa nedajú pridať súbory.

## Ukáž priebeh

Pošli kartu s loaderom, aktualizuj jej podtext, ako úloha napreduje, a skonči výsledkom. Loader je spinner s riadkom textu a menším riadkom pod ním ( loader_text , loader_sub_text ).

```javascript
const { callback_url } = await post({
  message_container: { color: 'blue', loader: true, loader_text: 'Deploying…', loader_sub_text: 'Step 1 of 3: building' }
});

const update = (body) => {
  return fetch(callback_url, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
};

await build();
await update({ message_container: { color: 'blue', loader: true, loader_text: 'Deploying…', loader_sub_text: 'Step 2 of 3: running migrations' } });

await migrate();
await update({
  message_container: { color: 'green', title: 'Deploy complete', description: 'v2.1 is live on production.' },
  actions: [{ type: 'url:https://ci.example.com/deploys/218', text: 'View logs', color: 'green' }]
});
```

## Vymazanie správy

Pošli DELETE na callback_url a správa zmizne u všetkých. URL sa potom už nedá znova použiť.

## Počúvanie správy

stream_url je živý stream (Server-Sent Events) toho, čo sa deje s tvojou správou. Otvor ho a udalosti prichádzajú hneď, ako nastanú, každá ako JSON riadok data: , ktorého type hovorí, o čo ide:

```sse
curl -N "$STREAM_URL"

data: {"type": "reaction", "message_id": "...", "emoji": ":tada:", "action": "add", "member_guid": "...", "member": {...}, "ts": 1790000000000}

data: {"type": "action", "message_id": "...", "action_id": "approve", "action": {"id": "approve", "payload": {"deploy": 218}, ...}, "member_guid": "...", "member": {...}, "ts": 1790000004200}

data: {"type": "reply", "message_id": "...", "content": "Ship it!", "member_guid": "...", "member": {...}, "ts": 1790000009800}

event: expired
data: {}
```

| Udalosť | Kedy | Dáta |
| --- | --- | --- |
| action | Niekto stlačil tlačidlo. | action_id a uložené tlačidlo v action s jeho payload |
| reaction | Reakcia bola pridaná alebo odstránená. | emoji a action : add, remove alebo removeall |
| reply | Niekto na správu odpovedal. | content odpovede |
| expired | Stream sa zatvára. Posiela sa ako pomenovaná udalosť. | Žiadne |

### Počúvanie v JavaScripte

```javascript
const events = new EventSource(streamUrl);

// Every event arrives as a plain message; its kind is in "type".
events.onmessage = (e) => {
  const ev = JSON.parse(e.data);
  if ((ev.type === 'action') && (ev.action_id === 'approve')) {
    startDeploy(ev.action.payload.deploy);
  }
};

// The one named event: the stream is closing.
events.addEventListener('expired', () => {
  events.close();
});
```

### Kde ho získaš

| Odkiaľ pochádza | Otvorený na |
| --- | --- |
| Príspevok cez webhook s tlačidlami | 10 minút, alebo hodinu s "sse_event_extended_timeout": true |
| Každá požiadavka príkazu | 10 minút |

### Chyby

| Stav | Kód | Význam |
| --- | --- | --- |
| 401 | INVALID_TOKEN | Token v URL je nesprávny. |
| 404 | NOT_FOUND | Platnosť streamu vypršala alebo nikdy neexistoval. |

## Tvor ďalej
