---
title: "Élő frissítések: mssgs-üzenetek módosítása küldés után"
description: "Frissítsd vagy töröld az mssgs-üzenetet a callback URL-jével, mutasd a haladást loaderrel, és kövesd élőben a válaszokat, reakciókat és gombnyomásokat."
canonical: https://docs.mss.gs/hu/live-updates
language: hu
---

# Frissítsd az üzeneteket élőben

Egy üzenetnek nem kell olyannak maradnia, amilyennek elküldték. Mutasd a haladást, amíg egy feladat fut, cseréld a loadert az eredményre, vedd el a gombokat, ha valaki már döntött, vagy töröld az üzenetet. A csatornán mindenki azonnal látja a változást.

## Mire használhatod

- **Frissítsd a kártyát** Módosítsd a szöveget, a színt és a gombokat, helyben.

- **Mutasd a haladást** Egy loader, amely lépésről lépésre halad, aztán jön az eredmény.

- **Töröld** Távolítsd el az üzenetet, ha már nem igaz.

- **Figyeld** Válaszok, reakciók és gombnyomások az üzenetedre, élőben.

Az alkalmazásban

Elküldve loaderrel

Frissítve: 2. lépés a 3-ból

#### A telepítés kész

Frissítve: kész, egy gombbal

Egyetlen üzenet, kétszer frissítve a callback URL-jén keresztül. Senki sem lát három üzenetet, csak egyet, amely változik.

- [Gyors kezdés](#quick-start)

- [Frissítés](#update)

- [Haladás](#progress)

- [Törlés](#delete)

- [Figyelés](#stream)

## Gyors kezdés

### Őrizd meg a callback URL-t

Minden [webhookkal](https://docs.mss.gs/hu/webhooks) küldött üzenet és minden [parancskérés](https://docs.mss.gs/hu/commands) mellé jár egy callback_url az adott üzenethez.

```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 a frissítéshez

Küldd el az új állapotot. A kártya mindenkinél helyben változik meg.

```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 a törléshez

Törzs nem kell hozzá.

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

## Üzenet frissítése

Küldj JSON-t PUT kéréssel a callback_url címre. Csak azt küldd el, amit módosítani akarsz.

| Mező | Típus | Mire való |
| --- | --- | --- |
| message_container | object | Az új kártya. Lásd: [üzenetkártyák](https://docs.mss.gs/hu/bots). |
| actions | array | Új gombok. A "actions": [] mindet eltávolítja; ha kihagyod a mezőt, megmaradnak. |
| content | string | Új szöveg. |
| title , description , color , loader , ... | string | Rövidítés: a legfelső szinten megadott kártyamezőket kártyába csomagoljuk helyetted. |

### Válaszok

| Státusz | Kód | Jelentés |
| --- | --- | --- |
| 200 | {"success": true} | Elfogadva. A frissítés rögtön utána következik. |
| 400 | MISSING_FIELDS | A törzsben nincs mit frissíteni. |
| 400 | INVALID_BODY | A törzs nem érvényes JSON. |
| 400 | egy gombkód | Valami nem stimmel egy gombbal, lásd: [gombok](https://docs.mss.gs/hu/buttons). |
| 401 | INVALID_TOKEN | Az URL nem érvényes. |
| 404 | TOKEN_NOT_FOUND | Az URL lejárt, vagy már felhasználták az üzenet törlésére. |
| 502 | PUBLISH_FAILED | A frissítést nem sikerült kézbesíteni. Próbáld újra. |

### Meddig működik

30 percig attól a pillanattól, hogy az üzenetet elküldték, vagy a parancsot használták. A frissítés nem hosszabbítja meg. Az üzenet törlése elhasználja az URL-t. Frissítéssel nem lehet fájlokat hozzáadni.

## Haladás megjelenítése

Küldj egy kártyát loaderrel, frissítsd az alsó sorát, ahogy a feladat halad, és zárd le az eredménnyel. A loader egy pörgő jel egy sorral és alatta egy kisebb sorral ( 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' }]
});
```

## Üzenet törlése

Küldj DELETE kérést a callback_url címre, és az üzenet mindenkinél eltűnik. Az URL utána nem használható újra.

## Üzenet figyelése

A stream_url egy élő adatfolyam (Server-Sent Events) arról, ami az üzeneteddel történik. Nyisd meg, és az események azonnal megérkeznek, mindegyik egy JSON data: sorként, amelynek a type mezője megmondja, mi történt:

```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: {}
```

| Esemény | Mikor | Adatok |
| --- | --- | --- |
| action | Valaki megnyomott egy gombot. | action_id , valamint a tárolt gomb az action mezőben, a payload értékével |
| reaction | Valaki hozzáadott vagy eltávolított egy reakciót. | emoji , valamint action : add, remove vagy removeall |
| reply | Valaki válaszolt az üzenetre. | A válasz content mezője |
| expired | Az adatfolyam bezárul. Elnevezett eseményként érkezik. | Nincs |

### Figyelés JavaScriptben

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

### Honnan kapsz ilyet

| Honnan kapod | Meddig van nyitva |
| --- | --- |
| Gombokkal küldött webhook-üzenet | 10 perc, vagy egy óra a "sse_event_extended_timeout": true beállítással |
| Minden parancskérés | 10 perc |

### Hibák

| Státusz | Kód | Jelentés |
| --- | --- | --- |
| 401 | INVALID_TOKEN | Az URL-ben lévő token hibás. |
| 404 | NOT_FOUND | Az adatfolyam lejárt, vagy soha nem létezett. |

## Építs tovább
