This post is about using the Microsoft Bot Platform with Heroku to build a bot!
The demo scenario is very simple:
- User starts the conversation
- Bot asks for an account number
- Customer provides an account number or indicates they are not a customer
- Bot retrieves details if available for a personalised greeting and asks how can it be of help today
- Customer states the problem/reason for contact
- Bot uses sentiment analysis to provide the appropriate response
Bots are nothing but automated programs that carry out some well defined set of tasks. They are old technology (think web-crawlers).
Recent developments such as Facebook/Skype platform APIs being made available for free, easy availability of cloud-computing platforms and relative sophistication of machine learning as a service has renewed interest in this technology especially for customer life-cycle management applications.
Three main components of a modern, customer facing bot app are:
- Communication Platform (e.g. Facebook Messenger, Web-portal, Skype etc.): the eyes, ears and mouth of the bot
- Machine Learning Platform: the brain of the bot
- Back end APIs for integration with other systems (e.g. order management): the hands of the bot
Other aspects include giving a proper face to the bot in terms of branding but from a technical perspective above three are complete.
Heroku provides various flavours of virtual containers (including a ‘free’ and ‘hobby’ ones) for different types of applications. To be clear: a ‘dyno’ is a lightweight Linux container which runs a single command that you specify.
Another important reason to use Heroku is that it provides a ‘https’ endpoint for your app which makes it more secure. This is very important as most platforms will not allow you to use a plain ‘http’ endpoint (e.g. Facebook Messenger). So unless you are ready to fork out big bucks for proper web-hosting and SSL certificates start out with something like Heroku.
Therefore for a Node.JS dyno you will run something like node <js file name>.
The cool thing about Heroku (in my view) is that it integrates with Git so deploying your code is as simple as ‘git push heroku <branch name to push from>’.
You will need to follow a step by step process to make yourself comfortable with Heroku (including installing the Heroku CLI) here: https://devcenter.heroku.com/start
We will be using a Node.JS flavour of Heroku ‘dynos’.
Heroku has an excellent ‘hello world’ guide here: https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction
Microsoft Bot Platform
The Microsoft Bot Platform allows you to create, test and publish bots easily. It also provides connectivity to a large number of communication platforms (such as Facebook Messenger). Registration and publishing is FREE at the time of writing.
You can find more information on the Node.js base framework here: http://docs.botframework.com/builder/node/overview/
The dialog framework in the MS Bot Platform is based on REST paths. This is a very important concept to master before you can start building bots.
Microsoft provide a publishing platform to register your bot.
Once you have the bot correctly published on a channel (e.g. Web, Skype etc.) messages will be passed on to it via the web-hook.
You need to provide an endpoint (i.e. the web-hook) to a web app in Node.JS which implements the bot dialog framework to publish your bot. This web app is in essence the front door to your ‘bot’.
You can test the bot locally by downloading the Microsoft Bot Framework simulator.
The demo architecture is outlined below:
Detailed Architecture for the Demo
There are three main components to the above architecture as used for the demo:
- Publish the bot in the Bot Registry (Microsoft) for a channel – you will need your Custom Bot application endpoint to complete this step,in the demo I am publishing only to a web-channel which is the easiest to work with in my opinion. Once registered you will get an application id and secret which you will need to add to the bot app to ‘authorise’ it.
- Custom Bot Application (Node.JS) with the embedded bot dialog – the endpoint where the app is deployed needs to be public, a HTTPS endpoint is always better! I have used Heroku to deploy my app which gives me a public HTTPS endpoint to use in the above step.
- Machine Learning Services – to provide functionality to make the Bot intelligent, we can have a statically scripted bot with just the embedded dialog but where is the fun in that? For the demo I am using Watson Sentiment Analysis API to detect the users sentiment during the chat.
*One item that I have purposely left out within the Custom Bot app, in the architecture, is the service that provides access to the data which drives the dialog (i.e. Customer Information based on the Account Number). In the demo a dummy service is used that returns hard coded values for Customer Name when queried using an Account Number.