Eva is a virtual travel assistant for your Slack team. She hooks you up with travel.cloud, our team-based travel booking tool that sets out to challenge the traditional approach to corporate travel management.
Only launched 3 months ago, travel.cloud is AWS to the very core, and as its fundamental ethos is “travel, but for teams” it seems like a perfect match-up with Slack! So we already had "build a Slackbot" somewhere a way down our roadmap when we spotted the contest.
Organising business travel is a pain in the neck. Getting everyone’s requirements together, scouring the internet for hotels, getting everyone’s passport details for flights, then distributing all the travel confirmations back out; it's a complete time sink. To paraphrase a common quote: “your organization is not in the business of arranging travel, yet a significant amount of time and money is spent doing just that!” Well, travel.cloud fixes all that, and Eva is going to fix it even better.
What it does
By connecting you up to the power of travel.cloud, Eva helps you find flights, hotels and trains from a wide range of suppliers and gets them booked for you and your teammates. Making her home in Slack she increases the power and usability of travel.cloud: you can ask her to find a hotel or a train in a public channel, and then everyone can look at the pictures or discuss the departure times. Once everyone is agreed, she’ll make sure it’s all included in one checkout and travel.cloud will take care of distributing confirmations and accounting for the costs.
She already has some other nifty add-ons, allowing you to get your travel.cloud notifications directly in Slack and helping you when you arrive at a hotel, airport or train station by having your check-in details to hand.
How we built it
Eva leverages multiple parts of the AWS infrastructure to allow us deliver a truly serverless slack bot. Deployed using cloud formation, the first step was to build some simple functions that would allow us to verify our application with the Slack event service so that we started to receive messages on a push basis, the first iteration of Eva simply echoed your chats back to you.
Once basic communication was tackled we had to authenticate with our own services, leveraging AWS KMS we could trigger an OAuth process with our own services joining slack users to their travel.cloud profiles and storing state in DynamoDB fully encrypted by the KMS service. Beyond that its simple text analysis allowing Eva to respond to various queries by integrating with the travel.cloud API.
Challenges we ran into
Lost track of how many hours we spent trying to get Eva to appear active in Slack - we never did solve this and have logged the issue with Slack.
It also took us some deep thought to get the authentication piece right with our own travel.cloud microservices - Eva is only our second client application for travel.cloud!
Accomplishments that we're proud of
First things first, getting her done! We decided on this last minute, and just packed 7 engineers into a house in the country for a week. With no experience of Slack bots (but luckily, growing experience of AWS Lambda) we're very happy to have an Eva that, right now, today, could really help Slack teams with their travel planning.
The other thing we love is this proof that the microservice APIs we've built for travel.cloud are versatile and fit for use by other client applications, like our Slack bot.
What we learned
We learned that NLP is very hard, especially in a hurry. We got it integrated, but then found that it was trampling over our existing interactions and making way too many assumptions about what the user was trying to say. Perhaps it was the library we chose, but it just seemed way too confident in its interpretations.
We also quickly learned that in order to be engaging and feel like a proper assistant, Eva needs to have a lot more interactions at her fingertips than just the travel.cloud commands we really wanted to enable.
What's next for Eva
We haven’t gone beyond some experimentation into NLP - we want her to be really helpful first, nearly human second. But travel is a complicated business, so Eva’s ability to try and answer any question fired at her is really going to help make her an invaluable assistant, so we’ll have to crack it soon.
Functionally, we're working on one-click booking in travel.cloud which will allow Eva to book things for you without the "final step" of having to go into travel.cloud and complete the checkout yourself. We also want to work on her teamworking aspects more: so if you want to book a flight for your colleagues, she can run around asking them to provide any missing passport details needed to complete the booking.
That's short term. Long term? She can spot when you've got a flight coming up, and offer to call you a cab. Let you know about the weather where you're going, and how soon you should leave to make that train. In the team space she can make sure everyone is sitting next to each other on their flight, or let you know where in the world your whole team are currently. Basically take all the sweat out of organising travel for an entire team.
Eva is a slack bot user and will need to be installed into your team as a slack app before she can be used to aid you in your travel needs. This installation can be started by navigating to http://travel.cloud/eva.html in your browser and clicking on the ‘Add to slack’ button under the icon of lovely Eva. This will lead you to the application authorization page where you will be asked to grant access to travel.cloud which in turn will add a bot user who represents Eva. Clicking the ‘Authorize’ button here will complete the installation. Eva is now available for use in Slack!
Once in Slack you can talk to Eva like any other user. She responds to direct messages and can be invited to your current public and private channels. In these channels she will only listen to posts beginning "@eva". All of Eva’s common commands can be found by asking her to help you, but she likes to chat too so don’t be scared to ask her a few random questions and see if she is knowledgeable in that area.