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
Saglabā callback URL
Katrs webhook ieraksts un katrs komandas pieprasījums nāk ar šīs ziņas
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, lai atjauninātu
Nosūti jauno stāvokli. Kartīte mainās uz vietas visiem.
bashcurl -X PUT "$CALLBACK_URL" -H "Content-Type: application/json" \ -d '{"message_container": {"color": "green", "title": "Deploy complete", "description": "v2.1 is live."}}'DELETE, lai noņemtu
Body nav vajadzīgs.
bashcurl -X DELETE "$CALLBACK_URL"
Ziņas atjaunināšana
Sūti JSON ar PUT uz callback_url. Sūti tikai to, ko gribi mainīt.
| Lauks | Tips | Ko tas dara |
|---|---|---|
message_container | object | Jaunā kartīte. Skaties ziņu kartītes. |
actions | array | Jaunas pogas. "actions": [] noņem tās visas; ja lauku izlaid, tās paliek. |
content | string | Jauns teksts. |
title, description, color, loader, ... | string | Saīsinājums: kartītes lauki augšējā līmenī tiek ietīti kartītē tavā vietā. |
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
| Statuss | Kods | Nozīme |
|---|---|---|
200 | {"success": true} | Pieņemts. Atjauninājums seko uzreiz pēc tam. |
400 | MISSING_FIELDS | Body nav nekā, ko atjaunināt. |
400 | INVALID_BODY | Body nav derīgs JSON. |
400 | pogas kods | Kaut kas nav kārtībā ar pogu, skaties pogas. |
401 | INVALID_TOKEN | URL nav derīgs. |
404 | TOKEN_NOT_FOUND | URL ir beidzies vai ticis izmantots ziņas dzēšanai. |
502 | PUBLISH_FAILED | Atjauninā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).
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:
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: {}| Notikums | Kad | Dati |
|---|---|---|
action | Tika nospiesta poga. | action_id un saglabātā poga laukā action ar tās payload |
reaction | Tika pievienota vai noņemta reakcija. | emoji un action: add, remove vai removeall |
reply | Kāds atbildēja uz ziņu. | Atbildes content |
expired | Straume tiek aizvērta. Nosūtīts kā nosaukts notikums. | Nav |
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
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āk | Cik ilgi atvērts |
|---|---|
| Webhook ieraksts ar pogām | 10 minūtes vai stunda ar "sse_event_extended_timeout": true |
| Katrs komandas pieprasījums | 10 minūtes |
Kļūdas
| Statuss | Kods | Nozīme |
|---|---|---|
401 | INVALID_TOKEN | Tokens URL ir nepareizs. |
404 | NOT_FOUND | Straume ir beigusies vai nekad nav pastāvējusi. |