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
Hoia callback URL alles
Iga webhooki postitus ja iga käsu päring tuleb koos selle sõnumi
callback_url-iga.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 uuendab
Saada uus olek. Kaart muutub samas kohas kõigi jaoks.
bashcurl -X PUT "$CALLBACK_URL" -H "Content-Type: application/json" \ -d '{"message_container": {"color": "green", "title": "Deploy complete", "description": "v2.1 is live."}}'DELETE eemaldab
Sisu (body) pole vaja.
bashcurl -X DELETE "$CALLBACK_URL"
Sõnumi uuendamine
Saada JSON PUT-päringuga callback_url-ile. Saada ainult see, mida tahad muuta.
| Väli | Tüüp | Mida see teeb |
|---|---|---|
message_container | object | Uus kaart. Vaata sõnumikaarte. |
actions | array | Uued nupud. "actions": [] eemaldab kõik; kui välja ära jätad, jäävad nupud alles. |
content | string | Uus tekst. |
title, description, color, loader, ... | string | Lühivorm: ülemisel tasemel olevad kaardi väljad pannakse sinu eest kaardi sisse. |
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
| Olek | Kood | Tähendus |
|---|---|---|
200 | {"success": true} | Vastu võetud. Uuendus järgneb kohe. |
400 | MISSING_FIELDS | Sisus pole midagi uuendada. |
400 | INVALID_BODY | Sisu pole korrektne JSON. |
400 | nupu kood | Mõne nupuga on midagi valesti, vaata nuppe. |
401 | INVALID_TOKEN | URL ei kehti. |
404 | TOKEN_NOT_FOUND | URL on aegunud või seda kasutati sõnumi kustutamiseks. |
502 | PUBLISH_FAILED | Uuendust 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).
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:
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ündmus | Millal | Andmed |
|---|---|---|
action | Vajutati nuppu. | action_id ja salvestatud nupp väljas action koos selle payload-iga |
reaction | Reaktsioon lisati või eemaldati. | emoji ja action: add, remove või removeall |
reply | Keegi vastas sõnumile. | Vastuse content |
expired | Voog sulgub. Saadetakse nimega sündmusena. | Puudub |
message_id-d, seda, kes tegevuse tegi (member_guid, member), ja millal (ts). Kommentaaririda iga 20 sekundi järel hoiab ühenduse lahti.Kuulamine JavaScriptis
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 tuleb | Kehtib |
|---|---|
| Nuppudega webhooki postitus | 10 minutit või tund, kui "sse_event_extended_timeout": true |
| Iga käsu päring | 10 minutit |
Vead
| Olek | Kood | Tähendus |
|---|---|---|
401 | INVALID_TOKEN | URL-is olev token on vale. |
404 | NOT_FOUND | Voog on aegunud või pole kunagi olemas olnud. |