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
Išsaugok callback URL
Kiekvienas webhook įrašas ir kiekviena komandos užklausa ateina su tos žinutės
callback_url.bashBODY='{"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 atnaujinti
Siųsk naują būseną. Kortelė pasikeičia vietoje visiems.
bashcurl -X PUT "$CALLBACK_URL" -H "Content-Type: application/json" \ -d '{"message_container": {"color": "green", "title": "Deploy complete", "description": "v2.1 is live."}}'DELETE pašalinti
Užklausos turinio nereikia.
bashcurl -X DELETE "$CALLBACK_URL"
Žinutės atnaujinimas
Siųsk JSON metodu PUT į callback_url. Siųsk tik tai, ką nori pakeisti.
| Laukas | Tipas | Ką daro |
|---|---|---|
message_container | object | Nauja kortelė. Žr. žinučių korteles. |
actions | array | Nauji mygtukai. "actions": [] pašalina juos visus; praleidus lauką jie lieka. |
content | string | Naujas tekstas. |
title, description, color, loader, ... | string | Trumpinys: kortelės laukai viršutiniame lygyje už tave sudedami į kortelę. |
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ūsena | Kodas | Reikšmė |
|---|---|---|
200 | {"success": true} | Priimta. Atnaujinimas įvyks iškart po to. |
400 | MISSING_FIELDS | Užklausos turinyje nėra ką atnaujinti. |
400 | INVALID_BODY | Užklausos turinys nėra galiojantis JSON. |
400 | mygtuko kodas | Kažkas negerai su mygtuku, žr. mygtukus. |
401 | INVALID_TOKEN | URL negalioja. |
404 | TOKEN_NOT_FOUND | URL baigė galioti arba buvo panaudotas žinutei ištrinti. |
502 | PUBLISH_FAILED | Atnaujinimo 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).
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:
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: {}| Įvykis | Kada | Duomenys |
|---|---|---|
action | Paspaustas mygtukas. | action_id ir išsaugotas mygtukas lauke action su jo payload |
reaction | Reakcija pridėta arba pašalinta. | emoji ir action: add, remove arba removeall |
reply | Kažkas atsakė į žinutę. | Atsakymo content |
expired | Srautas užsidaro. Siunčiamas kaip pavadintas įvykis. | Nėra |
message_id, kas tai padarė (member_guid, member) ir kada (ts). Komentaro eilutė kas 20 sekundžių palaiko ryšį atvirą.Klausymasis JavaScript kalba
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 gauni | Galioja |
|---|---|
| Webhook įrašas su mygtukais | 10 minučių arba valandą su "sse_event_extended_timeout": true |
| Kiekviena komandos užklausa | 10 minučių |
Klaidos
| Būsena | Kodas | Reikšmė |
|---|---|---|
401 | INVALID_TOKEN | Prieigos raktas (token) URL adrese neteisingas. |
404 | NOT_FOUND | Srautas baigė galioti arba niekada neegzistavo. |