Skip to content

Push notifikaatiot

terolaakso-reaktor edited this page Oct 31, 2025 · 2 revisions

Push-notifikaatiot

Push-notifikaatiot ovat käytössä työntekijöiden mobiilikäyttöliittymässä ("employee mobile" PWA). Ne ilmoittavat tapahtumasta näyttäen vain otsikon – ei viestin sisältöä. Toiminto on kytkettävissä yksiköittäin toimintojen avauksella PUSH_NOTIFICATIONS ja laitekohtaisilla asetuksilla.

Tapahtumakategoriat

Tuetut kategoriat (PushNotificationCategory):

  • RECEIVED_MESSAGE – uusi lukematon ryhmäviesti
  • NEW_ABSENCE – uusi poissaolomerkintä ryhmän lapselle
  • CALENDAR_EVENT_RESERVATION – huoltaja varannut tai perunut keskusteluajan (vain yksikkölaitteet)

Käyttäjä valitsee kategoriat ja ryhmät, joista haluaa ilmoituksia. Henkilökohtaiset laitteet eivät voi valita CALENDAR_EVENT_RESERVATION-kategoriaa.

Toteutuksen yleiskuva

  • Web Push -standardin mukainen salattu payload (aes128gcm) ja VAPID-autentikointi.
  • Payload-malli on yksinkertainen: lista NotificationV1 -objekteja, joilla on yksi ominaisuus title.
  • Asynkroninen lähetys AsyncJob-järjestelmällä.
  • ACL tarkistaa oikeuden RECEIVE_PUSH_NOTIFICATIONS ennen lähettämistä.
  • VAPID JWT -tokenit välimuistitetaan taulussa vapid_jwt (uusi token luodaan vain jos voimassa olevan jäljellä oleva aika < 1 h; perusvoimassaoloaika 12 h).
  • Tilaus poistetaan jos push-palvelu vastaa 404/410.

Tilaus ja asetukset

Service Worker rekisteröidään polkuun /employee/mobile/service-worker.js. Luokka PushNotifications huolehtii luvasta, tilauksen luonnista ja päivityksestä. Selainpuolella vanhentumassa (< 7 päivää) oleva tilaus uusitaan.

REST-rajapinnat (mobiililaite-autentikoitu):

  • GET /employee-mobile/push-settings – luetut kategoriat ja ryhmät
  • PUT /employee-mobile/push-settings – asetusten päivitys (ACL-varmistus ryhmiin)
  • POST /employee-mobile/push-subscription – tilauksen (endpoint + avaimet + mahdollinen expires) luonti/päivitys

Tietokantataulut

  • mobile_device – laite + valitut kategoriat (push_notification_categories)
  • mobile_device_push_subscription – aktiivinen tilaus (endpoint, auth_secret, ecdh_key, expires)
  • mobile_device_push_group – ryhmät, joista laite haluaa ilmoituksia
  • vapid_jwt – voimassa olevien VAPID-tokenien välimuisti

Lähetyslogiikka

  1. Tapahtuma (viesti merkataan lähetetyksi, poissaolo samana päivänä, keskusteluaikavaraus) tuottaa AsyncJob-töitä.
  2. AsyncJob hakee tilauksen ja tarkistaa ACL:n.
  3. Haetaan tai päivitetään VAPID-token.
  4. Luodaan salattu Web Push -viesti ja lähetetään. TTL on 1 päivä viesteille ja poissaoloille; keskusteluaikavarauksen TTL määräytyy varauksen loppuaikaan asti (rajattu 15 min – 5 päivään).
  5. Jos push-palvelu vastaa 404/410, tilaus poistetaan.

Tietoturva ja yksityisyys

  • Otsikko ei sisällä arkaluontoista sisältöä (ei viestien tekstiä).
  • Salattu sisältö ennen push-palvelua (standardi Web Push -salaus).
  • VAPID varmistaa lähettäjän.
  • ACL estää ryhmiin kuulumattomat laitteet.

Selain- ja laitetuki

Toteutus on standardi Web Push + Service Worker, joten se toimii moderneissa selaimissa. eVakassa se on kuitenkin käytössä vain työntekijöiden mobiilikäyttöliittymässä.

Ilmoitusten otsikkorakenne

  • Viesti: Uusi viesti ryhmälle {Ryhmän nimi} ({Lähettäjä})
    (Lähettäjä näytetään jos saatavilla)
  • Poissaolo: {Ryhmän nimi}: Uusi poissaolomerkintä
  • Keskusteluaika: {Ryhmän nimi}: Huoltaja varannut/perunut keskusteluajan {pvm} klo {alku} - {loppu}
Clone this wiki locally