Skill sin Vipps-integrasjon på Arctic Cloud Developer Challenge 2021

Vipps er en av samarbeidspartnerne til Arctic Cloud Developer Challenge 2021, og en av utfordringene vi har fått dere er å integrere mot Vipps sine APIer.

Skill har jobbet med en løsning for betaling for småoppgaver i hjemmet og ukepenger, og har jobbet med følgende deler av Vipps-APIet

  • Sende betalinger
  • Sjekke betalingsstatus
  • Rapportering på Vipps-data med PowerBI
  • Recurring payments (ukepenger)

Vi har implementert all logikk mot Vipps i Power Automate Cloud Flows som er et grafisk verktøy for lage arbeidsflyter

Vi har benyttes Vipps sitt eCoommerce API https://github.com/vippsas/vipps-ecom-api

Autentisering

Alle våre flyter starter med et autentiseringssteg der vi henter access token som vi benytter i videre steg. Vi har valgt å ikke spare på token mellom de forskjellige operasjonene, for hver flyt så henter vi et nytt access token.

Sende betaling

Vi sender betaling med å bruke

Sjekke betalinger

Vi har flyter som går hver time og sjekker betalingsstatus på de ordrene vi har sendt fra systemet slik at vi til en hver tid har oversikt over hvilke betalinger som står åpne, har blitt avbrutt, eller blitt refundert. Disse statusene blir oppdatert tilbake til Dataverse-tabellen som holder på ordrene slik at man kan se oppdatert betalingsstatus der.

Rapporterings-API og PowerBI

Vi har lagd vårt eget rapporterings-API som er bygd på toppen av ordre i Dataverse og Vipps sitt ecommerce API

Her henter vi ut alle ordre fra dataverse og sammenstiller disse med trasaksjoner

Rapportering blir gjort i PowerBI, her har vi laget rapporter som knytter transaksjoner i Vipps opp mot ordrer sendt fra Power Platform slik at man kan får oversikt over faktisk betalingsstatus, om betalinger er refundert etc.

Her har vi også benyttet Power Automate Cloud Flows for å lage et veldig enkelt mellomlag for dette

Hadde dette vært et produksjonssystem kunne vi nok ikke gjort det på denne måten da vi faktisk spør API-et til Vipps “live” for hver forespørsel fra rapporteringsløsnignen, men måtte heller hentet ut dataene til f.eks en Data Lake i Azure.

Vi har lagd vårt eget enkle JSON-schema for rapportering på transaksjonshistorikk.

Dette API-et har vi benyttet videre inn i PowerBI slik at vi der også kan bruke data fra Vipps som en kilde

This image has an empty alt attribute; its file name is Skjermbilde-2021-02-06-kl.-13.37.39-1024x575.png

Vi har gått enda mer i detalj i følgende bloggposter:

Push-up vs push-message

  • En Power App Canvas app hvor du som bruker registrerer antall pushups, data lagres i Dataverse og presenteres i en PowerBI rapport.
  • Du som bruker kan ta initiativet selv eller motta push varsel (fra din mor/sjef) om å få ut fingeren.

Hvorfor:

  • Medarbedere som holder seg i form har mindre fravær og er bra for bedriften.
  • Familiemedlemmer som er aktive holder seg friske sikrer at mamma og pappa slipper å være hjemme for å passe på syke barn.
  • Når andre enn deg selv tar push-up holder de fred og du får jobbe i ro og mak.

For dette håper vi å få badgene:

Power apps i backend for å sende push varsel + power app canvas på mobilen for å motta varsel og registrere pushups
Fordi:”Use hip tech” + “embrace new Microsoft “

“Lego Shark Tank”

Plug and command center

These days Microsoft Teams is the ultimate command center for every family. We have created a Dynamics 365 Engagement Hub Command center.

Dynamics 365 Engagment Hub Command Center is a Power Apps canvas application which we have embedded into Microsoft Teams.

We claim the Plug N’ Play badge for this delivery.

Klossmajorene Final Delivery

Klossmajorene har laget et system for Family Engagement – “Dynamcis 365 Family Engagement”

Vi har lagd et sammensatt system basert på Power Platform og Azure, og alle komponentene våre snakker sammen med samme grunnleggende datamodell med brukere og familiestruktur

Man kan lese mer om alle modulene https://familyhub.powerappsportals.com/ – dette er vår offentlige markedsføring av produktet (denne siden er en viktig del av vår endelige leveranse)

Vi har de følgende modulene:

Vi lister opp de forskjellge modulene med linker til bloggpostene med den tekniske forklaringen

Oppgavestyring i hjemmet:

Command Center app i teams

Lese opp oppgaver som blir tilordnet med Sonos

Betaling av for småoppgaver i hjemmet med Vipps

Vi har integrert med flere deler av API-et til Vipps

  • Sende betalinger
  • Sjekke betalingsstatus
  • Rapportering på Vipps-data med PowerBI
  • Recurring payments (ukepenger)

App med turforslag

App med pushup-konkurranse

https://familyhub.powerappsportals.com/pushup/

Ukeplaner for familien

Dude, where’s my dog

Eksternt API for eksponering av data til eksterne samarbeidspartnere

Legobyggespill

PowerBI-rapportering inkl data fra Vipps

Power BI – Vipps og personlig utvikling

Vi utbetaler lommepenger, eller betaling for utført husarbeid og lignende, gjennom Vipps-API. Det er selvsagt viktig å følge med på hvor mye penger man bruker, og på hvilke type oppgaver vi bruker mest penger. Vi har derfor laget et Dashboard som gir en visuell fremstilling av dette. Dashboardet viser også en total sum, og man har mulighet til å filtrere på dato, måned, kvartal og år. Dataene kommer inn via Rest API (JSON) og fyller en tabell i Power BI. Her gjør vi noen enkle kalkulasjoner, og relaterer til både systembruker og datotabell.

Det er viktig å følge personlig utvikling, og spesielt på hjemmekontoret. Dette gir personlig nytte, da man holder rede på ens eget velvære. Det gir også mening å kunne følge med på familiemedlemmer. Man kan også konkurrere med andre i antall push-ups og lignende. I forretningsverdi kan man her ha mulighet til å følge med på de ansattes velvære, noe som er spesielt nyttig når mange ikke møtes på kontoret som vanlig.

Vi henter data fra flere kilder. Noe kommer fra vår Bot, som stiller spørsmål og lagrer dette i en Sharepointliste. Push-ups og brukerdata kommer rett fra Dataverse.

Her har vi flere muligheter til å videreutvikle og tilpasse til behov. På planen står blant annet Slicer med mulighet til å velge bruker ved hjelp av bilde, og et eget dashboard for fitness og trening. Vi ønsker også å hente vær via API, for å se om produktivitet og velvære henger sammen med været som er utenfor vinduet. Mulighetene er endeløse!

Vi ønsker å claime “Dash it out!”

Trans-parent – Foreldrenes verktøy i hverdagen

Vi laget en app der flest mulig funksjoner er stappet inn i samme grensesnitt;

Navnet på appen er i seg selv et ordspill da denne kan brukes på tvers av familier slik at foreldre kan se de detaljene om barna som andre foreldre har valgt å legge ut og eksempler på oppgaver som er blitt registrert i Family Engagement-systemet.

Samtidig er det ikke alltid like lett å ha unger i hus; noen ganger vil man bare komme seg vekk. Foreldre fra flere hustander kan derfor samarbeide med å bygge opp en database med turer en kan dra på for å komme seg litt vekk fra masete unger. Istedet for at hver enkelt skal bruke tid på å velge ut en tur så kan foreldrene trykke på “Velg tilfeldig tur” hvor en av turene i databasen velges for deg.

Om alt skulle skjære seg kan det være godt å ha noen en kan spørre om råd. Vi har derfor valgt å inkludere vår kjære “Boten Anna” som kan hjelpe til med stort og smått.

Appen er bygd opp av disse komponentene;

For å kunne legge inn boten ble denne videoen brukt som inspirasjon. Fanen som skulle dukke opp når komponenten skulle importeres i appen var ikke til stede sånn ut av boksen, men ved hjelp av denne artikkelen fikk vi fanen til å dukke opp likevel. Github-repo som inneholder komponenten finnes på denne siden.

For dette håper vi å claime denne badgen;

Synkronisering av betalingsstatus av ukepengeutbetalinger fra Vipps

Ved å sende “ordre” om penger for utbetaling for til Vipps for å forespørre utbetaling av penger for betaling fra foreldre.

Man sender kun en forespørsel om betaling, men får i den spørringen ikke direkte tilbake resultatet om foreldrene tar seg bryet om å godkjennebetalingen.

For rapportering og oppfølging anser vi det som svært viktig at både foreldre og barn sitter med oppdatert informasjon om hvor vidt betalingen er utført – man kan selv se for seg det kaoset som oppstår om det oppstår tvil om hvor vidt en betaling for rydding av rom er utført eller ikke.

Som vi kan se er det to måter å implementere dette på, enten bruke callbackPrefix-koblingen som sendes inn i payments-metoden eller huske gjøre jevnlige forespørsler med å spørre på status på åpne betalinger.

Formatet på Callbacks er beskrevet her: https://github.com/vippsas/vipps-ecom-api/blob/master/vipps-ecom-api.md#callbacks

Callback-URL vil gi en rask oppdatering av status på betaling og vil nok være hensiktsmessig å bruke i en nettbutikk-sammenheng med kjøpsflyter der kjøper venter på en nettside på om betaling har gått gjennom, men vi anser ikke dette som så viktig i et ukepentescenario

Det kan uansett være nyttig for en nettbutikk å sette opp jevnlig synkronisering av status på betalinger om f.eks en callback har feilet eller om en betaling har blitt refundert i ettertid.

Om man skal gjøre jevnlig polling på status for åpne betalinger kan man gjøre det som beskrevet her: https://vippsas.github.io/vipps-ecom-api/#/Vipps_eCom_API/getPaymentDetailsUsingGET

I vår løsning har vi valgt å sette opp en jobb som jevnlig henter ut status på betalinger med vår go-to-teknololgi Power Automate Cloud Flows 😍

Vi har utvidet Task-tabellen i Dataverse til å holde på OrderID slik at vi bruker det som en nøkkel når vi snakker med Vipps sine API-er. Vi genererer OrderID selv som en Guid når vi sender inn ordre

Vi har satt opp en egen visning “Tasks med OrderId” som viser hvilke oppgaver som er sendt til Vipps, og vi bruker dataene fra denne visningen når vi går gjennom og ser hvilke ordre som er sendt inn

Vi får følgende respons tilbake, og ser at Vipps internt bruker en strukgur med flere “transactionLogHistory-objekter knyttet til en Order

Vi kunne modellert denne samme strukturen i Dataverse med å opprette en “transactionLogHistory-entitet”; men anser det som lite hensiktsmessig da det blir mye data å synkronisere

I stedet ser vi kun på nyeste “operation” i dette datasettet (“CANCEL” i skjermbildet over da den ordren ble kansellert), og synkroniserer den med statuscode-feltet på Task.

Vi ser for oss en løsning med PowerBI der man kan hente ut transactionId i et powerbi rapporteringslag og vise disse embeddet i model driven app

Eksponering av Vipps-transaksjoner til PowerBI

Ukepenger-løsningen trenger selvfølgelig et godt rapporteringslag, og da er det naturlig å gjøre dette gjennom PowerBI

Vi bruker igjen Power Automate Cloud Flows, og lager et lite mellomlag som i grunn bare håndterer pålogging til Vipps API-et og returnerer all betalingshistorikk som JSON

Flyten som er satt opp til å trigges av HTTP itererer gjennom alle records i CRM som har en ordreId, gjør en spørring mot Vipps sitt API om transaksjonshistorikk, for så å returnere dette som en JSON Array som Power BI kan konsumere.

Vi ser nok at dette ikke er en løsning som vil skalere for veldig mange ordre, men regner med at vi ikke får tusenvis av ordre i systemet vårt akkurat før vi må levere denne demoen 😎

S

Så nå har vi all trasaskjonsdata i PowerBI, og har mulighet til å koble dette til andre data fra Dataverse og andre kilder