Komme i gang med varsler
For brukeropplevelsen er det viktig at du bruker riktig type varsel. Ta gjerne en ekstrasjekk med innholdsguiden vår.
- Kafka tilgang: Opprett en pull-request mot topic
aapen-brukervarsel-v1
i min-side-brukervarsel-topic-iac. - Koble på topicene.
- Send event!
Varseltyper
type | beskrivelse | Deaktiveres av |
---|---|---|
Beskjed | For korte påminnelser eller oppdatering av status | Bruker, produsent, eller min side hvis aktivFremTil dato er satt og dato er passert. |
Oppgave | For noe som må bli utført | Produsent når oppgaven er utført ( inaktiver-event), eller av min side hvis aktivFremTil dato er satt eller varslet har vært aktivt i mer enn ett år. |
Innboks | For varsler om digitale innbokser andre steder i NAV | Produsent |
NB! Det er viktig å huske å sende inaktiver-event for oppgave-varsler. Hvis ikke vil det se ut for personen som at oppgaven ikke er utført.
Alle varsler slettes 1 år etter mottaksdato.
Ekstern varsling
Produsent kan velge om bruker også skal varsles via eksterne kanaler (sms og epost). Produsent kan velge preferert kanal, og hvorvidt standardtekst skal overskrives.
Standardtekst er av typen: Hei! Du har fått en ny <varseltype> fra NAV. Logg inn på NAV for å se hva varselet gjelder. Vennlig hilsen NAV
Revarsling
Varsler med typen oppgave eller innboks får automatisk revarsling dersom varselet ikke er ferdigstilt etter et bestemt antall dager. Oppgaver blir revarsler etter 7 dager, og innboks blir revarslet etter 4 dager.
Overskriving av standardtekster
Dersom en velger å overskrive standardtekster for epost/sms, er det anbefalt å overskrive samtlige tekster. Dette er fordi bruker kan motta varsler via annen kanal enn preferansen.
Eksterne varseltekster skal ikke inneholde lenker. Det er også produsentens ansvar å ikke sende sensitiv informasjon på epost og sms.
Tekst i sms er begrenset til 160 tegn. Tittel for epost er maksimalt 40 tegn, og tekst er maksimalt 4000 tegn. Tekst i epost kan og bør inneholde markup.
Kafka, schemas og buildere
Min side varsler bruker ikke lenger Avro for schema-validering og serialisering. Produsenter sender eventer direkte på json-format. Vi tilbyr to sett med buildere for henholdsvis java- og kotlin-prosjekter. Det er ikke strengt nødvendig å bruke disse, men sterkt anbefalt. Builderne sørger for at format er riktig og gjør forhåndsvalidering av innhold. Det er også anbefalt å bruke varselId som kafka-nøkkel, for å opprettholde kronologi per enkelt varsel.
Builderne finnes i følgende bibliotek:
Github Maven repository
- kotlin: no.nav.tms.varsel:kotlin-builder:1.0.0
- java: no.nav.tms.varsel:java-builder:1.0.0
Vi publiserer disse artifaktene til githubs package-repository. Husk å legge til én av disse repositories i ditt prosjekt:
https://maven.pkg.github.com/navikt/tms-varsel-authority
(krever autentisering)https://github-package-registry-mirror.gc.nav.no/cached/maven-release
(NAIS sin mirror. Krever ingen autentisering)
Oppretting av varsel
For å gi varsel til bruker sender en et opprett-varsel event.
Opprett-varsel felter
felt | påkrevd | beskrivelse | restriksjoner | tillegginfo |
---|---|---|---|---|
type | ja | Type på varsel (beskjed, oppgave, innboks) | Må være én av beskjed , oppgave , innboks |
|
varselId | ja | Id til varselet. Produsenten bruker samme Id til å inaktivere varsel | Må være UUID eller ULID | |
ident | ja | Fodselsnummer (evt. d-nummer eller tilsvarende) til mottaker av varsel | Må ha 11 siffer | |
tekster | ja, minst 1 | Teksten som faktisk vises i varselet med språkkode. | Dersom flere tekster på ulike språk er gitt må én tekst være satt som default | Språkkode må følge ISO-639 (typen no , nb , en ...) |
link | ikke for beskjed | Lenke som blir aktivert når en person trykker på varselet i varselbjella eller på min side | Komplett URL, inkludert https protokoll. |
|
sensitivitet | ja | påkrevd level-of-assurance for å kunne se innhold i varsel | Én av high , substantial |
high og substantial tilsvarer det som tidligere var henholdvis nivå 4 og 3 . Hvis personen har varsler med sensitivitet high , men er logget inn med LoA substantial , vil hen se type varsel, men ikke innholdet. |
aktivFremTil | nei | Tidspunkt for når varslet skal inaktiverer automatisk av systemet | Tidspunkt med tidssone. UTC eller Z er anbefalt |
Støttes ikke for Innboks-varsler |
eksternVarsling | nei | Om det skal sendes sms og/eller epost til mottaker | Kan kun velge preferert kanal SMS eller EPOST . |
Dersom ekstern varslingstekst ikke er satt blir det sendt en standardtekst. |
produsent | ja | Teknisk kilde til varsel-eventet | Ingen spesielle | Buildere vil forsøke å hente dette automatisk basert på nais-miljøvariabler. Der disse ikke er tilgjengelige må produsent settes manuelt. |
Json-format
{
"@event_name": "opprett",
"type": "<type>",
"varselId": "<varselId>",
"ident": "<ident>",
"tekster": [
{
"spraakkode": "<spraakkode>",
"tekst": "<tekst>",
"default": true
}
],
"link": "<link>",
"sensitivitet": "<sensitivitet>",
"aktivFremTil": "<aktivFremTil>",
"eksternVarsling": {
"prefererteKanaler": ["SMS", "EPOST"],
"smsVarslingstekst": "<smsTekst>",
"epostVarslingstittel": "epostTittel",
"epostVarslingstekst": "epostTekst"
},
"produsent": {
"cluster": "<cluster>",
"namespace": "<namespace>",
"appnavn": "<appnavn>"
}
}
Eksempel med buildere
Eksempel på oppretting av Oppgave-varsel for bruker 12345678901
med id aabbccdd-abcd-1234-5678-abcdef123456
.
Varselet skal:
- ha sensitivitet high
- lenke til https://www.nav.no
- løpe ut 14 dager etter oppretting
- ha en norsk (default) og en engelsk tekst
- varsles på sms med standardtekst.
Med kotlin-builder
val kafkaValueJson = VarselActionBuilder.opprett {
type = Varseltype.Oppgave
varselId = "aabbccdd-abcd-1234-5678-abcdef123456"
sensitivitet = Sensitivitet.High
ident = "12345678901"
tekster += Tekst(
spraakkode = "nb",
tekst = "Norsk tekst",
default = true
)
tekster += Tekst(
spraakkode = "en",
tekst = "English text",
default = false
)
link = "https://www.nav.no"
aktivFremTil = ZonedDateTime.now(ZoneId.of("Z")).plusDays(14)
eksternVarsling = EksternVarslingBestilling(prefererteKanaler = listOf(EksternKanal.SMS))
}
Med java-builder
String kafkaValueJson = OpprettVarselBuilder.newInstance()
.withType(Varseltype.Oppgave)
.withVarselId("aabbccdd-abcd-1234-5678-abcdef123456")
.withSensitivitet(Sensitivitet.High)
.withIdent("12345678901")
.withTekst("nb", "Norsk tekst", true)
.withTekst("en", "English text", false)
.withLink("https://www.nav.no")
.withAktivFremTil(ZonedDateTime.now(ZoneId.of("Z")).plusDays(14))
.withEksternVarsling(EksternKanal.SMS)
.build();
Inaktivering av varsel
Oppgave- og innboks-varsler inaktiveres av produsent. Dette gjør en ved å sende et inaktiver-event.
Inaktiver-varsel felter
felt | påkrevd | beskrivelse | tillegginfo |
---|---|---|---|
varselId | ja | Id til varselet som skal inaktiveres | |
produsent | ja | Teknisk kilde til varsel-eventet | Buildere vil forsøke å hente dette automatisk basert på nais-miljøvariabler. Der disse ikke er tilgjengelige må produsent settes manuelt. |
Json-format
{
"@event_name": "inaktiver",
"varselId": "<varselId>",
"produsent": {
"cluster": "<cluster>",
"namespace": "<namespace>",
"appnavn": "<appnavn>"
}
}
Eksempel med buildere
Eksempel på inaktivering av varsel med id aabbccdd-abcd-1234-5678-abcdef123456
.
Med kotlin-builder
val kafkaValueJson = VarselActionBuilder.inaktiver {
varselId = "aabbccdd-abcd-1234-5678-abcdef123456"
}
Med java-builder
String kafkaValueJson = InaktiverVarselBuilder.newInstance()
.withVarselId("aabbccdd-abcd-1234-5678-abcdef123456")
.build();
Buildere i tester
Dersom produsent ikke er satt eksplisitt vil builderene forsøke å hente dette basert på miljøvariablene [NAIS_CLUSTER_NAME
, NAIS_NAMESPACE
, NAIS_APP_NAME
].
For apper som kjører på nais vil disse være satt automatisk. Hvis en ønsker å kjøre tester med automatisk henting av produsent,
kan en manuelt legge til disse variablene ved hjelp av BuilderEnvironment.extend(<map med variabler>)
.
Overvåking av varsler
Logging
Hendelser blir logget til kibana med custom felter for filtrering
Alle varsler: x_contenttype:"varsel"
Sendt fra bestemt team: x_initiated_by: "<namespace>"
Spesifikt varsel: x_minside_id :"<varselId>"
Kafka
Produsenter kan lytte på topic aapen-varsel-hendelse-v1
for å følge med på status på varsler. Hendelser som kan skje for varsler er opprettet
, inaktivert
, slettet
og eksternStatusOppdatert
.
Opprettet, inaktivert, og slettet
Beskriver intern endring i status for et varsel.
opprettet
: Opprett-varsel event er validert og varsel er opprettet i database.inaktivert
: Varsel er inaktivert av f. eks. produsent eller bruker selv.slettet
: Varsel er slettet og ikke lenger synlig for bruker eller saksbehandler.
Eksempel for oppgave-varsel først opprettet av team-test:demo-app
med id 11223344-aaaa-bbbb-cccc-112233445566
.
{
"@event_name": "<opprettet|inaktivert|slettet>",
"varseltype": "oppgave",
"varselId": "11223344-aaaa-bbbb-cccc-112233445566",
"namespace": "team-test",
"appnavn": "demo-app"
}
Ekstern status oppdatert
Beskriver ekstern endring i status for et varsel (sms og epost). Kommer med ulike 3 statuser.
bestilt
: Bestilling av varsling på sms/epost er mottatt av distribusjonsystem.sendt
: Ekstern varsling er bekreftet sendt via bestemt kanal (sms eller epost), og om det er renotifikasjon.feilet
: Ekstern varsling feilet. Kommer med feilmelding.
Eksempler:
{
"@event_name": "eksternStatusOppdatert",
"status": "bestilt",
"varseltype": "oppgave",
"varselId": "11223344-aaaa-bbbb-cccc-112233445566",
"namespace": "team-test",
"appnavn": "demo-app"
}
{
"@event_name": "eksternStatusOppdatert",
"status": "sendt",
"varseltype": "oppgave",
"varselId": "11223344-aaaa-bbbb-cccc-112233445566",
"kanal": "SMS",
"renotifikasjon": false,
"namespace": "team-test",
"appnavn": "demo-app"
}
{
"@event_name": "eksternStatusOppdatert",
"status": "feilet",
"varseltype": "oppgave",
"varselId": "11223344-aaaa-bbbb-cccc-112233445566",
"feilmelding": "mottaker har reservert seg mot digital kommunikasjon",
"namespace": "team-test",
"appnavn": "demo-app"
}