IndiHackathon: Programmeren, Pitchen & Pizza

Vorige week hebben we bij Indivirtual onze eerste Hackathon gehouden: twee avonden onderzoek, brainstorm en programmeren, gecombineerd met goed eten en beter gezelschap. Gevolgd door een derde avond pitchen.
Acht Indivirtuals (want laten we Hendriks efforts als inspirator en klankbord niet vergeten) ontwikkelden, alleen of in duo’s, een slimme Chatbot. In deze blogpost kun je alles lezen over de bots, wat wel en niet werkt en waar we tegenaan gelopen zijn.

Arjan – Zero Code Bot

Concept: Hoever kan je komen zonder een regel code te schrijven? Kan een chatbot gemaakt worden zonder dat er altijd een programmeur nodig is om dit te doen, zodat de klant ook zelf kleine wijzigingen kan doen.
Technieken: Dialogflow (+ Telegram)

Vertel eens iets over de technieken die je gebruikt hebt, Arjan…
Het was voor mij volledig nieuw om een chatbot te gaan maken. Ik was nog niet bekend met de technieken en had mezelf er eigenlijk ook nog niet in verdiept. Tijdens de Hackaton heb ik gebruik gemaakt van Dialogflow van Google. De technieken en functies van deze tool heb ik dan ook leren kennen.
Om heel eerlijk te zijn waren er eigenlijk geen specifieke technieken die ik vooraf graag wilde gebruiken. Dit kwam ook wel doordat ik er zo blanco mogelijk in wilde gaan.

Hoe begon jouw avontuur?
Initieel wilde ik een bot maken die je zou helpen bij het uitzoeken van een mobiele telefoon. Laten we eerlijk zijn, de meeste mensen vinden dit nu eenmaal lastig. Hierin wilde ik kijken hoever we kunnen gaan zodat het voor de klant uiteindelijk mogelijk is kleine wijzigingen zelf aan te passen.
Hierin ben ik licht afgeweken doordat ik ook andere functies van Dialogflow wilde testen en integreren, zoals het kunnen toevoegen van FAQ pagina’s ter informatie voor de chatbot.

Hoe vond je het zelf gaan?
Van tevoren wist ik natuurlijk niet wat ik kon verwachten, maar een iet wat omslachtige GUI in een dermate complexe omgeving is wel iets wat bij mijn verwachtingen hoorde. Daar moet wel bij gezegd worden dat Google er alles aan gedaan heeft om het je alsnog zo makkelijk mogelijk te maken.
In principe was de gehele applicatie gemakkelijk te makkelijk. Na je wat te hebben verdiept in de werking van Dialogflow kan je het geheel zo ver uitwerken en doorvoeren als je maar wilt.
Het enige nadeel is dat wanneer je een nieuwe intent (een mogelijke vraag van de gebruiker) wilt toevoegen je altijd via het overzicht van de intents moet werken. Ook wanneer het een toevoeging is als vervolgvraag.

Ik had vooraf niet gedacht dat er zoveel mogelijk was voor het bouwen van een chatbot in een relatief korte tijd. Wanneer er een paar gescripte, heel eenvoudige, vrij onaantrekkelijke chatbots uit gekomen waren, was mijn verwachting overtroffen.

Hoe zou je je bot verder uit werken?
Door de vraagstellingen in combinatie met de antwoorden daarop uit te breiden zodat de bot de meeste vragen zou moeten kunnen beantwoorden. Daarnaast kan je uiteraarde FAQ informatie opnemen per bot. Na uitbreiding zou de bot dan niet klantspecifiek moeten zijn. Of het om het zoeken van een telefoon gaat of dat van een auto. Uiteindelijk heb je voor de koppeling van de data wel een programmeur nodig. Er zal een database moeten zijn die alle producten met z’n variabelen bevat.

Kah – Optimus Prime Autobot

Concept: Laat Optimus Prime je aan een Prime auto helpen!
Technieken: Dialogflow (+ Facebook Messenger)

Was je reeds bekend met bepaalde technieken? Welke heb je leren kennen?
Ik heb eerder gewerkt aan een chatbot geschreven in Node.js die een simpele Hallo kon teruggeven via Google Hangouts. Dit was een aantal jaar geleden Deze was vrij basaal en had geen mogelijkheid tot het begrijpen van de gebruiker.

Welke technieken wilde je perse gebruiken?
Ik had vooraf geen idee wat er allemaal op de markt was. Voor mij is het vooral belangrijk dat het makkelijk te configureren is, maar ook makkelijk uit te breiden met functionaliteiten. Node.js is altijd een groot pluspunt, omdat je er vrij snel mee iets kan opzetten.

Hoe zag jouw verwachting voor de Hackathon eruit?
Ik had verwacht hooguit een simpele prototype te kunnen maken met wat gemockte output. Voor een demo zou het al heel wat zijn als ie op basis van wat basisvraagstellingen een antwoord zou kunnen geven.

Wilde je meteen al de Optimus Prime Autobot bouwen?
Initieel was het idee om een soort Dungeon Master te bouwen die je zou kunnen inzetten om te helpen bij het leiden van een Dungeons and Dragons spel. (Voor wie het niet weet, Dungeons and Dragons is een rollenspel, waarbij er door middel van verhaalvertelling een wereld wordt opgebouwd waarin een groep spelers vrij zijn om te doen wat ze willen. Het spel wordt altijd geleid door een spelleider die de omgeving omschrijft en de spelers verteld wat er op ze afkomt.)
Helaas was het idee wat ambitieus en verwachtte ik niet dat het bij de jury in de smaak zou vallen tegenover de voorbeeldopdrachten die zijn benoemd in de hackathon opdrachtbeschrijving. Dus uiteindelijk is er een bot uitgewerkt op basis van een case van een klant.

Waar liep je tegenaan?
De grootste moeilijkheid was verbazingwekkend genoeg niet de bot zelf, maar het vinden van een systeem die aanbevelingen kan doen. Er zijn er een aantal op de markt, maar veel van dat soort producten verwachten eerst een verzameling van gegevens van bezoekers. Alleen een database zou nog wat werk vereisen om iets moois te maken voor het invoeren van de auto’s. Dus uiteindelijk is Contentful gekozen om de auto’s te beheren. Als CMS maakt Contentful het content editors gemakkelijk en simpel om de content te beheren. Voor developers is Contentful erg flexibel.
Het was wel enigszins te verwachten dat deze aanbevelingen wat lastiger in te regelen zijn.

Was er iets verrassend makkelijk?
Dialogflow maakte het wel makkelijk om meerdere soorten vragen te trainen die gebruikt zouden kunnen worden door de gebruiker. Je kan makkelijk synoniemen koppelen en ervoor zorgen dat bruikbare informatie uit het gesprek als input kan worden gebruikt voor koppelingen. Ook was het vrij makkelijk om op basis van context vervolgvragen te stellen.

Hoe zou je de Optimus Prime Autobot verder uitwerken?
Als er tijd is zou ik het willen uitwerken tot een volledig product die potentiële autokopers een onafhankelijk advies zou kunnen geven over hun volgende aankoop. De aanbevelingen zouden verder uitgebouwd kunnen worden op basis van aankopen in het verleden door andere kopers. Prijsinformatie van verschillende sites zou een mooie optie zijn. Ook het plannen van proefritten moet tot de mogelijkheden behoren.

 

Mart en Sander – Mevrouw Parky

Concept: Mevrouw Parky – de voice-activated parkeerhulp
Technieken: Dialogflow icm een embedded chatscript, Google assistant en een API in de parkeerapp.

“Vasthouden aan je eerste idee brengt je in 100% van de IndiHackathons tot de overwinning!”

Aldus ons Mart.

Wat kan Mevrouw Parky?
Bij Indivirtual gebruiken wij een parkeerapplicatie waarmee we plekken kunnen reserveren. Het leek ons leuk om hier een chatbot-functionaliteit aan toe te voegen. Deze chatbot zou met spraak en typen een plek voor je moeten kunnen reserveren, je parkeerscore moeten kunnen opvragen en kunnen opvragen wie er op een bepaalde dag geparkeerd staat.

Hoe hebben jullie het aangepakt?
Mart: Voordat wij aan de hackathon begonnen hadden we beide nog geen ervaring met de technieken die je kan gebruiken bij het maken van een chatbot. Aangezien wij wel al het idee hadden om iets met spraak te gaan doen en een Google Home tot onze beschikking hadden hebben wij gekozen voor DialogFlow van Google.
Na de documentatie doorgescrold te hebben zijn we begonnen met een testopzet. Bij het opzetten viel ons al snel op hoe eenvoudig en intuïtief DialogFlow werkt. Toen de lampen weer gingen branden om aan te tonen dat de eerste avond van de hackathon ten einde was hadden wij de fundering van DialogFlow al staan.

En waarom DialogFlow?
Mart: Wij hebben niet voor een techniek gekozen omdat wij hier perse mee wilde werken. Onze keuze voor DialogFlow, van Google, kwam voort uit het feit dat wij onze chatbot wilde laten werken door middel van spraak met de Google Assistent. Wat, logischerwijs, geïntegreerd is in het DialogFlow pakket.  
Om een koppeling te maken tussen de al bestaande parkeerapp en DialogFlow hebben wij gekozen een node server op te zetten met ExpressJS. Wat deze server doet is de request van DialogFlow opvangen, uitzoeken wat voor verzoek het is en deze vervolgens doorsturen naar de juiste API route van de parkeerapp.

Hoeveel verwachtten jullie te kunnen realiseren van tevoren?
Sander: Niet veel. We wilden er in ieder geval voor zorgen dat we via de Dialogflow-app konden communiceren met de parkingapplicatie van Indi. Alles wat we er nog bij konden maken was een bonus.
Het werkte wel in ons voordeel dat wij bij aanvang al een idee hadden welke richting wij op wilde met de chatbot en dus direct konden “beginnen”. Maar dat we een chatbot zouden kunnen bouwen in twee avonden die daadwerkelijk een parkeerplek voor je reserveert hadden we zeker niet verwacht!

En wat waren de moeilijkheden?
Sander: We hadden gedacht dat de chatbot configureren de meeste problemen zou geven.
Het moeilijkste was echter om de webservice te testen, omdat Dialogflow met een systeem moet koppelen die bereikbaar is op het internet. Om aanpassingen te maken moesten we elke keer de code op de webservice updaten. Dat kost tijd.
Het opzetten van de chat functionaliteit in DialogFlow bleek weer verrassend makkelijk.

Hoe zou je je bot verder uit werken?
Sander: Voor het verder uitwerken van de bot hebben wij nog wel een aantal goede ideeën op de plank liggen waar tijdens de hackathon geen tijd meer voor was. Zo moet je nu voor elk verzoek opnieuw je e-mailadres opgeven. Wij zouden dit graag willen vervangen door automatisch te reserveren op het e-mailadres van de gebruiker zijn Google-account.
Ook zitten er in de parkeerapp momenteel nog meer functionaliteiten die nog niet via spraakcommando’s werken, zoals het annuleren van een parkeerplek. Dus op naar versie 2! 😉

 

Johan en Roos – AppieBot

Concept: AppieBot boodschappen bot 
Technieken: Microsoft Bot Framework, Azure Bot Service, LUIS (Cognitive Services)

Een Appiebot…?
Roos: Na twee weken zonder onze favoriete collega Maureen, kwamen alle Indivirtuals tot de conclusie dat deze dame vrij veel hooi op haar vork heeft. Onze intentie was een chatbot te maken die een van haar werkzaamheden vereenvoudigt.
Initieel wilden we richting een NS-integratie waarbij we zowel de agenda als de reisinformatie van de business card zouden combineren om zo bij iedere reis de aard ervan vast te stellen (zakelijk of privé). Een behulpzame chatbot die veel Indivirtuals, maar ook veel andere reizigers, zou kunnen helpen in het vereenvoudigen van administratie.
Uiteindelijk bleek dat de NS geen API beschikbaar wilt stellen voor dit soort doeleinden waardoor ons concept uiteindelijk nooit realiteit zou kunnen worden; niet de meest motiverende start. Hiernaast bleek de GDPR een ingewikkelde horde te zijn waarbij ons idee, hoewel voor velen van praktisch nut, waarschijnlijk nooit opgepakt zou kunnen worden.

We besloten een boodschappen-bot te ontwikkelen die in staat is vanuit verschillende databronnen requests op te halen om zo iedere week een accurate en duurzame boodschappenlijst samen te stellen, gebaseerd op aanvragen via Slack, het weer, mogelijke events in de Google Calender en eventueel de planning.
Op deze manier zouden wekelijkse inkopen een gedeelde verantwoordelijkheid worden en kan Maureen met een simpele controle aan het einde van de week de lijst doorsturen naar de Albert Heijn.

Hoe is de techniek achter de Appie Bot gekozen?
Johan: Ik was bekend met technieken zoals de Bot Framework en LUIS vanuit o.a. de BUILD conferences maar ik had nooit tijd gevonden om hier zelf mee te knutselen.
Ik wilde gebruik maken van de technieken die Microsoft te bieden heeft omdat ik daar al het een en ander van af weet en omdat ik me daar toch al in thuis voel. Daarnaast wilde ik veelal alles in code oplossen.

Wat had je verwacht te kunnen maken tijdens de Hackathon?
Johan: Eerlijk gezegd had ik niet veel verwacht om te kunnen maken in deze twee avonden. De eerste avond was vooral besteed aan het brainstormen over leuke ideeën en het bekijken of deze wel haalbaar zijn, al dan niet in een proof of concept vorm. Nadat we eens waren over het concept gingen we LUIS inrichten, en daarna was de eerste avond al afgelopen. De tweede avond was vooral besteed aan het opzetten van de Azure Bot Service en Slack en de LUIS intenties koppelen aan acties in de code. Oh, en ⅓ van de avond was besteed aan small talk, gezellig maar het kost tijd. 🙂

Waar liep je tegenaan?
Johan: De grootste moeilijkheid was toch wel het korte tijd om dingen uit te zoeken en om keuzes te maken. Zo heb ik gekozen om de preview van de nieuwste versie van het Microsoft Bot Framework te gebruiken. Dit is opzich een risico maar dat maakt het wel spannend. Door de korte tijd hebben we niet getest maar tijdens de demo hebben we gewoon de groep uitgenodigd om de bot te gebruiken. Hier kwamen we erachter dat we een goede “ik begrijp je niet” melding waren vergeten en dat de drempel voor de intenties van 20% ook echt te laag is!

Was er iets verrassend makkelijk?
Roos: LUIS is een mooi en simpel systeem; het maken van Intents door natuurlijke taal in te voeren was zelfs voor mij begrijpelijk. Ik heb me wel vermaakt toen ik iedere mogelijke irritante request aan Appiebot vanuit de Indi’s moest bedenken; zijn we overigens nog lang niet mee klaar is gebleken..
Johan: Zoals Roos al zegt, het invoeren van intenties in LUIS is vrij eenvoudig. Daarnaast biedt Microsoft al werkende voorbeeld code aan als je vanuit de Azure portal de Azure Bot Service aanmaakt. Het koppelen met bijvoorbeeld Slack is ook nog geen 5 minuten werk (als je de instructies leest althans).

Hoe zou je je bot verder uit werken?
Roos: Op dit moment hebben we een werkende chattende bot; Appiebot kan nu met iedereen een simpel gesprekje aangaan via Slack en kan begrijpen welke producten in welke hoeveelheid op de bestellijst bijgevoegd moeten worden. Naast dat de intents verder uitgewerkt zouden moeten worden – en dan vooral om alle slimmeriken bij Indivirtual verbaal aan te kunnen (“Doe niet zo koppig Appiebot, ik wil alleen maar 50 kratten bier!”) – zouden we graag input vanuit bijvoorbeeld de Calendar willen implementeren om zo suggesties te kunnen doen. Verder zou ik graag een koppeling naar de AH-webapp zien, waarbij we zowel data uit eerdere bestellingen kunnen ophalen, maar waaruit ook de bestellijst doorgevoerd kan worden tot een bestelling.
Johan: De koppelingen die Roos al noemde. Daarnaast testen, testen en nog eens testen. En troll-detectie blijkt ook onmisbaar!

Patrick – Indivirtual Q&A

Concept: Een prachtig vormgegeven chatfunctie om de arbeidsvoorwaarden van Indivirtual te kunnen opvragen op verschillende wijzen.
Technieken: QnA maker van Microsoft  

Hoe is jouw QnA-bot ontstaan?
Mijn eerste poging was een bot waarmee je pizza’s kon bestellen met een combinatie van LUIS voor de interpretatie van de taal en het uitvinden van wat je nu precies vraagt en het Microsoft Bot Framework om de daadwerkelijke bot te maken. Hier ben ik vanaf gestapt om er al anderen bezig waren met een vergelijkbare oplossing.
Uiteindelijk ben ik voor de Microsoft QnA Maker gegaan waarmee het bijzonder eenvoudig is om een FAQ pagina om te bouwen naar een (semi-)intelligente chatbot. Nadruk op semi omdat Nederlands nog niet 100% ondersteund word in deze software.

Was je reeds bekend met bepaalde technieken? Welke heb je leren kennen?
Nee, ik was nog niet bekend met technieken hiervoor. Microsoft’s LUIS (Language Understanding Intelligent Service) heb ik ontdekt, dit is een hele makkelijke manier om intentie uit een geschreven stuk tekst te halen. Daarnaast met het Microsoft Bot Framework gespeeld en tot slot de Microsoft QnA Maker.
Ik had niet direct een techniek die ik per sé wilde gebruiken. De voorkeur voor Microsoft komt uit mijn achtergrond, welke toch primair .NET is..

Hoe vond je het gaan? Had je verwacht zo ver te kunnen komen tijdens de Hackathon?
Ik verwachtte hooguit een concept te kunnen maken. Ik vond twee avonden in eerste instantie erg krap, maar niets bleek minder waar te zijn!
Eerlijk gezegd was het zo eenvoudig om het geheel up&running te krijgen dat de grootste moeilijkheid de Javascript was om te interfacen met de bot.
Van de training van LUIS tot de integratie hiervan met het Microsoft Bot Framework en het importeren van documenten in de QnA Maker; ik had werkelijk niet verwacht dat dit alles al zo soepel kon.

Hoe wil je je QnA-bot verder uitwerken?
Een integratie met een CMS pakket zou het geheel een stuk praktischer maken. Dan is het ook voor klanten ineens een bruikbaar alternatief.

Conclusie; een geslaagde #IndiHackathon!

En blijkbaar bouw je in een kleine week al een eigen slimme chatbot! Met technieken als Dialogflow en LUIS is het realiseren van een werkende chatbot namelijk ‘vrij eenvoudig’. Dat laatste mag natuurlijk genuanceerd worden; laten we niet vergeten dat we bij Indivirtual gewoon een stel knappe koppen hebben rondlopen! 

Ook benieuwd naar wat een Chatbot allemaal kan? Hendrik schreef er een interessant artikel over: https://www.indivirtual.nl/artikelen/chatbot/