Pāriet uz galveno saturu
Izstrādātājiem Reāllaika atjauninājumi

Atjaunini ziņas reāllaikā

Ziņai nav jāpaliek tādai, kāda tā tika publicēta. Rādi progresu, kamēr darbs rit, nomaini ielādes indikatoru pret rezultātu, noņem pogas, kad kāds ir izlēmis, vai izdzēs ziņu. Visi kanālā izmaiņas redz uzreiz.

Ko tu vari darīt

  • Atjaunini kartītiMaini tekstu, krāsu un pogas turpat uz vietas.
  • Rādi progresuIelādes indikators, kas iet cauri soļiem, un tad rezultāts.
  • Izdzēs toNoņem ziņu, kad tā vairs nav aktuāla.
  • Klausies toAtbildes, reakcijas un pogu nospiešanas uz tavas ziņas, reāllaikā.

Lietotnē

Publicēta ar ielādes indikatoru

Atjaunināta: 2. solis no 3

Atjaunināta: gatavs, ar pogu

Viena ziņa, divreiz atjaunināta caur tās callback URL. Neviens neredz trīs ziņas, tikai vienu, kas mainās.

Ātrais sākums

  1. Saglabā callback URL

    Katrs webhook ieraksts un katrs komandas pieprasījums nāk ar šīs ziņas 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, lai atjauninātu

    Nosūti jauno stāvokli. Kartīte mainās uz vietas visiem.

    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, lai noņemtu

    Body nav vajadzīgs.

    bash
    curl -X DELETE "$CALLBACK_URL"

Ziņas atjaunināšana

Sūti JSON ar PUT uz callback_url. Sūti tikai to, ko gribi mainīt.

LauksTipsKo tas dara
message_containerobjectJaunā kartīte. Skaties ziņu kartītes.
actionsarrayJaunas pogas. "actions": [] noņem tās visas; ja lauku izlaid, tās paliek.
contentstringJauns teksts.
title, description, color, loader, ...stringSaīsinājums: kartītes lauki augšējā līmenī tiek ietīti kartītē tavā vietā.
Jauns message_container aizstāj veco kartīti pilnībā: lauks, ko izlaid, pazūd. Saglabājas tikai tās tips, nosaukums un avatārs. Tāpēc katru reizi sūti visu kartīti.

Atbildes

StatussKodsNozīme
200{"success": true}Pieņemts. Atjauninājums seko uzreiz pēc tam.
400MISSING_FIELDSBody nav nekā, ko atjaunināt.
400INVALID_BODYBody nav derīgs JSON.
400pogas kodsKaut kas nav kārtībā ar pogu, skaties pogas.
401INVALID_TOKENURL nav derīgs.
404TOKEN_NOT_FOUNDURL ir beidzies vai ticis izmantots ziņas dzēšanai.
502PUBLISH_FAILEDAtjauninājumu neizdevās piegādāt. Mēģini vēlreiz.

Cik ilgi tas darbojas

30 minūtes no brīža, kad ziņa tika publicēta vai komanda izmantota. Atjaunināšana šo laiku nepagarina. Pēc ziņas dzēšanas URL vairs nedarbojas. Caur atjauninājumu nevar pievienot failus.

Progresa rādīšana

Publicē kartīti ar ielādes indikatoru, atjaunini tās apakštekstu, kamēr darbs virzās uz priekšu, un beidz ar rezultātu. Ielādes indikators ir griezulis ar rindu un mazāku rindu zem tās (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' }]
});

Ziņas dzēšana

Nosūti DELETE uz callback_url, un ziņa pazūd visiem. Pēc tam URL vairs nevar izmantot.

Ziņas klausīšanās

stream_url ir reāllaika straume (Server-Sent Events) ar visu, kas notiek ar tavu ziņu. Atver to, un notikumi pienāk, tiklīdz tie notiek, katrs kā JSON data: rinda, kuras type pasaka, kas tas ir:

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: {}
NotikumsKadDati
actionTika nospiesta poga.action_id un saglabātā poga laukā action ar tās payload
reactionTika pievienota vai noņemta reakcija.emoji un action: add, remove vai removeall
replyKāds atbildēja uz ziņu.Atbildes content
expiredStraume tiek aizvērta. Nosūtīts kā nosaukts notikums.Nav
Notikumi netiek glabāti vēlākam laikam. Atver straumi, tiklīdz tev ir URL: tas, kas notiek, pirms pieslēdzies, netiek sūtīts. Katrā notikumā ir arī message_id, kas to izdarīja (member_guid, member), un kad (ts). Komentāra rinda ik pēc 20 sekundēm uztur savienojumu atvērtu.

Klausīšanās JavaScript

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 to dabūt

No kurienes tas nākCik ilgi atvērts
Webhook ieraksts ar pogām10 minūtes vai stunda ar "sse_event_extended_timeout": true
Katrs komandas pieprasījums10 minūtes

Kļūdas

StatussKodsNozīme
401INVALID_TOKENTokens URL ir nepareizs.
404NOT_FOUNDStraume ir beigusies vai nekad nav pastāvējusi.

Veido tālāk