Päivitä viestejä livenä
Viestin ei tarvitse jäädä sellaiseksi kuin se julkaistiin. Näytä edistyminen työn aikana, vaihda latausilmaisin tulokseen, poista painikkeet, kun joku on tehnyt päätöksen, tai poista koko viesti. Kaikki kanavalla näkevät muutoksen heti.
Mitä voit tehdä
- Päivitä korttiMuuta tekstiä, väriä ja painikkeita paikallaan.
- Näytä edistyminenLatausilmaisin, joka etenee vaihe vaiheelta, ja sitten tulos.
- Poista viestiPoista viesti, kun se ei enää pidä paikkaansa.
- Kuuntele viestiäViestiisi tulevat vastaukset, reaktiot ja painikkeiden painallukset livenä.
Sovelluksessa
Julkaistu latausilmaisimella
Päivitetty: vaihe 2/3
Päivitetty: valmis, painikkeen kanssa
Yksi viesti, päivitetty kahdesti callback-URL:n kautta. Kukaan ei näe kolmea viestiä, vain yhden, joka muuttuu.
Pika-aloitus
Säilytä callback-URL
Jokaisen webhook-julkaisun ja jokaisen komennon pyynnön mukana tulee kyseisen viestin
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 päivittää
Lähetä uusi tila. Kortti muuttuu paikallaan kaikille.
bashcurl -X PUT "$CALLBACK_URL" -H "Content-Type: application/json" \ -d '{"message_container": {"color": "green", "title": "Deploy complete", "description": "v2.1 is live."}}'DELETE poistaa
Bodya ei tarvita.
bashcurl -X DELETE "$CALLBACK_URL"
Päivitä viesti
Lähetä JSON PUT-pyynnöllä callback_url-osoitteeseen. Lähetä vain se, mitä haluat muuttaa.
| Kenttä | Tyyppi | Mitä se tekee |
|---|---|---|
message_container | object | Uusi kortti. Katso viestikortit. |
actions | array | Uudet painikkeet. "actions": [] poistaa ne kaikki; jos jätät kentän pois, ne säilyvät. |
content | string | Uusi teksti. |
title, description, color, loader, ... | string | Lyhennys: ylätason korttikentät kääritään korttiin puolestasi. |
message_container korvaa vanhan kortin kokonaan: kenttä, jonka jätät pois, katoaa. Vain kortin tyyppi, nimi ja avatar säilyvät. Lähetä siis koko kortti joka kerta.Vastaukset
| Tila | Koodi | Merkitys |
|---|---|---|
200 | {"success": true} | Hyväksytty. Päivitys seuraa heti perään. |
400 | MISSING_FIELDS | Bodyssa ei ole mitään päivitettävää. |
400 | INVALID_BODY | Body ei ole kelvollista JSONia. |
400 | painikkeen koodi | Jossakin painikkeessa on vikaa, katso painikkeet. |
401 | INVALID_TOKEN | URL ei ole kelvollinen. |
404 | TOKEN_NOT_FOUND | URL on vanhentunut, tai sillä on jo poistettu viesti. |
502 | PUBLISH_FAILED | Päivitystä ei voitu toimittaa. Yritä uudelleen. |
Kuinka kauan se toimii
30 minuuttia siitä hetkestä, kun viesti julkaistiin tai komentoa käytettiin. Päivittäminen ei pidennä aikaa. Viestin poistaminen käyttää URL:n loppuun. Tiedostoja ei voi lisätä päivityksellä.
Näytä edistyminen
Julkaise kortti latausilmaisimella, päivitä sen alariviä työn edetessä ja päätä tulokseen. Latausilmaisin on pyörivä kuvake, jonka vieressä on rivi ja sen alla pienempi rivi (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' }]
});Poista viesti
Lähetä DELETE callback_url-osoitteeseen, niin viesti katoaa kaikilta. URL:ää ei voi käyttää sen jälkeen uudelleen.
Kuuntele viestiä
stream_url on reaaliaikainen virta (Server-Sent Events) siitä, mitä viestissäsi tapahtuu. Avaa se, niin tapahtumat saapuvat sitä mukaa kuin niitä tapahtuu, kukin JSON-muotoisena data:-rivinä, jonka type kertoo, mistä on kyse:
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: {}| Tapahtuma | Milloin | Data |
|---|---|---|
action | Painiketta painettiin. | action_id sekä tallennettu painike kentässä action ja sen payload |
reaction | Reaktio lisättiin tai poistettiin. | emoji sekä action: add, remove tai removeall |
reply | Joku vastasi viestiin. | Vastauksen content |
expired | Virta sulkeutuu. Lähetetään nimettynä tapahtumana. | Ei mitään |
message_id, tekijä (member_guid, member) ja ajankohta (ts). Kommenttirivi 20 sekunnin välein pitää yhteyden auki.Kuuntelu JavaScriptillä
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();
});Mistä saat virran
| Mistä se tulee | Auki |
|---|---|
| Painikkeellinen webhook-julkaisu | 10 minuuttia, tai tunti asetuksella "sse_event_extended_timeout": true |
| Jokainen komentopyyntö | 10 minuuttia |
Virheet
| Tila | Koodi | Merkitys |
|---|---|---|
401 | INVALID_TOKEN | URL:n token on väärä. |
404 | NOT_FOUND | Virta on vanhentunut tai sitä ei ole koskaan ollut. |