I currently work as a Solution Engineer for IBM Watson, Dublin, so I took advantage of the situation for finally building my own chatbot. Needless to say, for the task I relied on IBM Watson Developer Cloud, using services like Natural Language Classifier (NLC), Dialog and Language Detection. I then wrote some code to tie these services together and hook the final solution to Facebook Messenger Platform, hosting the actual broker application on Bluemix. I am not going to explain here in details how I achieved that, there are already many good post about this, I personally followed and suggest this entry. Still, if you interested in a more technical and detailed explanation, feel free to leave a comment or contact me directly.
Let them speak!
Seems like chatbots and conversational agents are a big trend lately (Rise of the Chatbots, Chatbots NBCNews, Available APIs Review). While all these articles sure made me interested in the subject, I have to confess that this one in particular spurred me to actually build something. Because yes, what best use case that a bot acknowledged simply about yourself, its own creator? In all projects I worked on, corpus, knowledge base, ground truth and alike really required a lot of work and experts, depending on the context, subject and coverage, but if it’s about me, well, I should know and be enough! In her article Esther focuses on an overview of “Not-Too-Technical Solutions”, but makes many good points, that’s why I also decided to focus on the recruiting aspect, turning my CV and related info into the knowledge domain/base of the bot. You can ask generic question about me, like how old I am, were I’m from, as well as more specific ones like what is my expertise, my professional interests and if I am interested in a particular job offer.
Around this corpus of personal data, questions and answers, I played and modeled a bit the so called chit chat, all those utterances that make the conversation much more human, and less database-query like: greetings, compliments, insults, generic questions and off-topic.
Good advice for this part is to add variation and a bit of randomness, but don’t try too hard to fool the user about your bot being a human, for most cases, there is no point in that. Be sincere from the start, put some personality in your bot, but don’t overdo: the user knows she’s facing a bot, doesn’t take much effort to test that, especially if you want to deliver something useful and consistent. Actually, if you know about some really good bot I can easily test for free, please let me know, I am curious to test my personal list of bot-weak-points on products that are out there.
All this part as been managed manly via Dialog service, but I am now willing to give a try to a new experimental service called Conversation, which should unify the dialog and the actual language classification and understanding parts.
UI and Facebook Messenger Platform
While I enjoyed setting up structure, logic and data, I got annoyed pretty quickly playing with the UI part: is not my thing, but at the same I appreciate beautiful design, so I could not settle with a cheap and quick solution of mine, I needed an alternative. I checked again all these articles about chatbots, revisited some of the suggested platform, and the Facebook one seemed the most immediate, intuitive to setup, and most important, didn’t need to bother my friends/testers with “download this app” or “go to this website” just told them “hey, try to chat with this friend of mine”.
Being my bot a simple service, accessible via API, I just had to implement and deploy the broker code, which in fact can be easily improved in order to cover other platforms (e.g. Slack, Telegram, WhatsApp) and services (e.g. Tone Analyzer, Visual Recognition).
Notice that making your bot public requires some work and successive official approval from Facebook, so for now I have to manually add people as testers of the app if I want them to actually chat with it, otherwise they will simply stand there waiting indefinitely for a reply. Again, if you interested, let me know.