Pereiti prie pagrindinio turinio
Programuotojams Atnaujinimai realiu laiku

Atnaujink žinutes realiu laiku

Žinutė neprivalo likti tokia, kokia buvo paskelbta. Rodyk eigą, kol vyksta užduotis, pakeisk įkėlimo indikatorių rezultatu, pašalink mygtukus, kai kas nors jau nusprendė, arba ištrink žinutę. Visi kanale pokytį pamato iš karto.

Ką gali padaryti

  • Atnaujink kortelęKeisk tekstą, spalvą ir mygtukus toje pačioje vietoje.
  • Rodyk eigąĮkėlimo indikatorius, einantis per žingsnius, o po to rezultatas.
  • Ištrink jąPašalink žinutę, kai ji nebeaktuali.
  • Klausykis josAtsakymai, reakcijos ir mygtukų paspaudimai tavo žinutėje, realiu laiku.

Programėlėje

Paskelbta su įkėlimo indikatoriumi

Atnaujinta: 2 žingsnis iš 3

Atnaujinta: baigta, su mygtuku

Viena žinutė, du kartus atnaujinta per jos callback URL. Niekas nemato trijų žinučių, tik vieną, kuri keičiasi.

Greita pradžia

  1. Išsaugok callback URL

    Kiekvienas webhook įrašas ir kiekviena komandos užklausa ateina su tos žinutės callback_url.

    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-..."}
  2. PUT atnaujinti

    Siųsk naują būseną. Kortelė pasikeičia vietoje visiems.

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

    Užklausos turinio nereikia.

    bash
    curl -X DELETE "$CALLBACK_URL"

Žinutės atnaujinimas

Siųsk JSON metodu PUT į callback_url. Siųsk tik tai, ką nori pakeisti.

LaukasTipasKą daro
message_containerobjectNauja kortelė. Žr. žinučių korteles.
actionsarrayNauji mygtukai. "actions": [] pašalina juos visus; praleidus lauką jie lieka.
contentstringNaujas tekstas.
title, description, color, loader, ...stringTrumpinys: kortelės laukai viršutiniame lygyje už tave sudedami į kortelę.
Naujas message_container pakeičia seną kortelę visą: praleistas laukas dingsta. Išlieka tik jos tipas, pavadinimas ir avataras. Todėl kiekvieną kartą siųsk visą kortelę.

Atsakymai

BūsenaKodasReikšmė
200{"success": true}Priimta. Atnaujinimas įvyks iškart po to.
400MISSING_FIELDSUžklausos turinyje nėra ką atnaujinti.
400INVALID_BODYUžklausos turinys nėra galiojantis JSON.
400mygtuko kodasKažkas negerai su mygtuku, žr. mygtukus.
401INVALID_TOKENURL negalioja.
404TOKEN_NOT_FOUNDURL baigė galioti arba buvo panaudotas žinutei ištrinti.
502PUBLISH_FAILEDAtnaujinimo pristatyti nepavyko. Bandyk dar kartą.

Kiek laiko veikia

30 minučių nuo žinutės paskelbimo arba komandos panaudojimo akimirkos. Atnaujinimas šio laiko nepratęsia. Ištrynus žinutę URL nebegalioja. Per atnaujinimą failų pridėti negalima.

Eigos rodymas

Paskelbk kortelę su įkėlimo indikatoriumi, atnaujink jos papildomą eilutę, kai užduotis juda į priekį, ir baik rezultatu. Įkėlimo indikatorius yra suktukas su eilute teksto ir mažesne eilute po ja (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' }]
});

Žinutės ištrynimas

Siųsk DELETE į callback_url, ir žinutė dingsta visiems. Po to URL nebegalima naudoti.

Žinutės klausymasis

stream_url yra tiesioginis srautas (Server-Sent Events) to, kas vyksta su tavo žinute. Atidaryk jį, ir įvykiai ateina, kai tik įvyksta, kiekvienas kaip JSON data: eilutė, kurios type nurodo, kas tai:

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: {}
ĮvykisKadaDuomenys
actionPaspaustas mygtukas.action_id ir išsaugotas mygtukas lauke action su jo payload
reactionReakcija pridėta arba pašalinta.emoji ir action: add, remove arba removeall
replyKažkas atsakė į žinutę.Atsakymo content
expiredSrautas užsidaro. Siunčiamas kaip pavadintas įvykis.Nėra
Įvykiai nesaugomi vėlesniam laikui. Atidaryk srautą, vos gavęs URL: kas vyksta prieš prisijungiant, neišsiunčiama. Kiekvienas įvykis taip pat nurodo message_id, kas tai padarė (member_guid, member) ir kada (ts). Komentaro eilutė kas 20 sekundžių palaiko ryšį atvirą.

Klausymasis JavaScript kalba

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

Kur jį gauni

Iš kur gauniGalioja
Webhook įrašas su mygtukais10 minučių arba valandą su "sse_event_extended_timeout": true
Kiekviena komandos užklausa10 minučių

Klaidos

BūsenaKodasReikšmė
401INVALID_TOKENPrieigos raktas (token) URL adrese neteisingas.
404NOT_FOUNDSrautas baigė galioti arba niekada neegzistavo.

Kurk toliau