---
title: "Canlı güncellemeler: mssgs mesajlarını gönderdikten sonra değiştir"
description: "Bir mssgs mesajını gönderdikten sonra callback URL’siyle güncelle ya da sil, ilerlemeyi göster ve yanıtları, tepkileri ve basışları canlı dinle."
canonical: https://docs.mss.gs/tr/live-updates
language: tr
---

# Mesajları canlı güncelle

Bir mesajın gönderildiği gibi kalması gerekmez. Bir iş çalışırken ilerlemeyi göster, yükleme göstergesinin yerine sonucu koy, biri karar verdikten sonra düğmeleri kaldır ya da mesajı sil. Kanaldaki herkes değişikliği anında görür.

## Neler yapabilirsin

- **Kartı güncelle** Metni, rengi ve düğmeleri yerinde değiştir.

- **İlerlemeyi göster** Adım adım ilerleyen bir yükleme göstergesi, ardından sonuç.

- **Sil** Artık doğru olmayan bir mesajı kaldır.

- **Dinle** Mesajına gelen yanıtlar, tepkiler ve düğme basışları, canlı.

Uygulamada

Yükleme göstergesiyle gönderildi

Güncellendi: adım 2/3

#### Dağıtım tamamlandı

Güncellendi: bitti, düğmeyle

Callback URL’si üzerinden iki kez güncellenen tek bir mesaj. Kimse üç mesaj görmez, yalnızca değişen tek bir mesaj görür.

- [Hızlı başlangıç](#quick-start)

- [Güncelle](#update)

- [İlerlemeyi göster](#progress)

- [Sil](#delete)

- [Dinle](#stream)

## Hızlı başlangıç

### Callback URL’sini sakla

Her [webhook](https://docs.mss.gs/tr/webhooks) gönderisi ve her [komut](https://docs.mss.gs/tr/commands) isteği, o mesaj için bir callback_url ile gelir.

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

### Güncellemek için PUT

Yeni durumu gönder. Kart herkes için yerinde değişir.

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

### Kaldırmak için DELETE

Gövde gerekmez.

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

## Bir mesajı güncelle

callback_url adresine PUT ile JSON gönder. Yalnızca değiştirmek istediğini gönder.

| Alan | Tür | Ne yapar |
| --- | --- | --- |
| message_container | object | Yeni kart. Bkz. [mesaj kartları](https://docs.mss.gs/tr/bots). |
| actions | array | Yeni düğmeler. "actions": [] hepsini kaldırır; alanı hiç göndermezsen düğmeler kalır. |
| content | string | Yeni metin. |
| title , description , color , loader , ... | string | Kısayol: en üst düzeyde gönderilen kart alanları senin için bir karta sarılır. |

### Yanıtlar

| Durum | Kod | Anlamı |
| --- | --- | --- |
| 200 | {"success": true} | Kabul edildi. Güncelleme hemen ardından gelir. |
| 400 | MISSING_FIELDS | Gövdede güncellenecek bir şey yok. |
| 400 | INVALID_BODY | Gövde geçerli bir JSON değil. |
| 400 | bir düğme kodu | Bir düğmede sorun var, bkz. [düğmeler](https://docs.mss.gs/tr/buttons). |
| 401 | INVALID_TOKEN | URL geçerli değil. |
| 404 | TOKEN_NOT_FOUND | URL’nin süresi doldu ya da mesajı silmek için kullanıldı. |
| 502 | PUBLISH_FAILED | Güncelleme iletilemedi. Tekrar dene. |

### Ne kadar süre çalışır

Mesajın gönderildiği ya da komutun kullanıldığı andan itibaren 30 dakika. Güncellemek bu süreyi uzatmaz. Mesajı silmek URL’yi tüketir. Bir güncellemeyle dosya eklenemez.

## İlerlemeyi göster

Yükleme göstergeli bir kart gönder, iş ilerledikçe alt metnini güncelle ve sonuçla bitir. Yükleme göstergesi, bir satır ve altında daha küçük bir satır bulunan dönen bir simgedir ( 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' }]
});
```

## Bir mesajı sil

callback_url adresine DELETE gönder, mesaj herkes için kaybolur. URL bundan sonra tekrar kullanılamaz.

## Bir mesajı dinle

stream_url , mesajında olup bitenlerin canlı bir akışıdır (Server-Sent Events). Aç, olaylar gerçekleştikçe gelsin; her biri, type alanı ne olduğunu söyleyen bir JSON data: satırıdır:

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

| Olay | Ne zaman | Veri |
| --- | --- | --- |
| action | Bir düğmeye basıldı. | action_id ve action içinde, payload ’ıyla birlikte saklanan düğme |
| reaction | Bir tepki eklendi ya da kaldırıldı. | emoji ve action : add, remove ya da removeall |
| reply | Biri mesaja yanıt verdi. | Yanıtın content alanı |
| expired | Akış kapanıyor. Adlandırılmış bir olay olarak gönderilir. | Yok |

### JavaScript’te dinlemek

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

### Nereden alırsın

| Nereden gelir | Açık kalma süresi |
| --- | --- |
| Düğmeli bir webhook gönderisi | 10 dakika ya da "sse_event_extended_timeout": true ile bir saat |
| Her komut isteği | 10 dakika |

### Hatalar

| Durum | Kod | Anlamı |
| --- | --- | --- |
| 401 | INVALID_TOKEN | URL’deki token yanlış. |
| 404 | NOT_FOUND | Akışın süresi doldu ya da hiç var olmadı. |

## Geliştirmeye devam et
