Liigu põhisisu juurde
Arendajad Reaalajas uuendused

Uuenda sõnumeid reaalajas

Sõnum ei pea jääma selliseks, nagu see postitati. Näita töö ajal edenemist, asenda laadimisnäidik tulemusega, võta nupud ära, kui keegi on otsustanud, või kustuta sõnum. Kõik kanalis näevad muutust kohe.

Mida saad teha

  • Uuenda kaartiMuuda teksti, värvi ja nuppe samas kohas.
  • Näita edenemistLaadimisnäidik, mis liigub sammhaaval edasi, ja siis tulemus.
  • Kustuta seeEemalda sõnum, kui see enam ei kehti.
  • Kuula sedaVastused, reaktsioonid ja nupuvajutused sinu sõnumil, reaalajas.

Rakenduses

Postitatud laadimisnäidikuga

Uuendatud: samm 2/3

Uuendatud: valmis, nupuga

Üks sõnum, mida uuendati kaks korda selle callback URL-i kaudu. Keegi ei näe kolme sõnumit, vaid ühte, mis muutub.

Kiirstart

  1. Hoia callback URL alles

    Iga webhooki postitus ja iga käsu päring tuleb koos selle sõnumi callback_url-iga.

    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 uuendab

    Saada uus olek. Kaart muutub samas kohas kõigi jaoks.

    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 eemaldab

    Sisu (body) pole vaja.

    bash
    curl -X DELETE "$CALLBACK_URL"

Sõnumi uuendamine

Saada JSON PUT-päringuga callback_url-ile. Saada ainult see, mida tahad muuta.

VäliTüüpMida see teeb
message_containerobjectUus kaart. Vaata sõnumikaarte.
actionsarrayUued nupud. "actions": [] eemaldab kõik; kui välja ära jätad, jäävad nupud alles.
contentstringUus tekst.
title, description, color, loader, ...stringLühivorm: ülemisel tasemel olevad kaardi väljad pannakse sinu eest kaardi sisse.
Uus message_container asendab vana kaardi tervikuna: väli, mille ära jätad, kaob. Alles jäävad ainult kaardi tüüp, nimi ja avatar. Seega saada iga kord terve kaart.

Vastused

OlekKoodTähendus
200{"success": true}Vastu võetud. Uuendus järgneb kohe.
400MISSING_FIELDSSisus pole midagi uuendada.
400INVALID_BODYSisu pole korrektne JSON.
400nupu koodMõne nupuga on midagi valesti, vaata nuppe.
401INVALID_TOKENURL ei kehti.
404TOKEN_NOT_FOUNDURL on aegunud või seda kasutati sõnumi kustutamiseks.
502PUBLISH_FAILEDUuendust ei õnnestunud kohale toimetada. Proovi uuesti.

Kui kaua see töötab

30 minutit alates hetkest, kui sõnum postitati või käsku kasutati. Uuendamine seda aega ei pikenda. Sõnumi kustutamine kasutab URL-i ära. Uuendusega ei saa faile lisada.

Edenemise näitamine

Postita laadimisnäidikuga kaart, uuenda töö edenedes selle alamteksti ja lõpeta tulemusega. Laadimisnäidik on keerlev ikoon tekstireaga ja selle all väiksema reaga (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' }]
});

Sõnumi kustutamine

Saada DELETE callback_url-ile ja sõnum kaob kõigi jaoks. Pärast seda ei saa URL-i enam kasutada.

Sõnumi kuulamine

stream_url on reaalajas voog (Server-Sent Events) sellest, mis sinu sõnumiga toimub. Ava see ja sündmused saabuvad toimumise hetkel, igaüks JSON-ina data: real, mille type ütleb, mis see on:

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: {}
SündmusMillalAndmed
actionVajutati nuppu.action_id ja salvestatud nupp väljas action koos selle payload-iga
reactionReaktsioon lisati või eemaldati.emoji ja action: add, remove või removeall
replyKeegi vastas sõnumile.Vastuse content
expiredVoog sulgub. Saadetakse nimega sündmusena.Puudub
Sündmusi hiljemaks ei salvestata. Ava voog kohe, kui URL on käes: mis juhtub enne ühendumist, seda ei saadeta. Iga sündmus sisaldab ka message_id-d, seda, kes tegevuse tegi (member_guid, member), ja millal (ts). Kommentaaririda iga 20 sekundi järel hoiab ühenduse lahti.

Kuulamine JavaScriptis

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

Kust selle saad

Kust see tulebKehtib
Nuppudega webhooki postitus10 minutit või tund, kui "sse_event_extended_timeout": true
Iga käsu päring10 minutit

Vead

OlekKoodTähendus
401INVALID_TOKENURL-is olev token on vale.
404NOT_FOUNDVoog on aegunud või pole kunagi olemas olnud.

Ehita edasi