3 tools for building bots that people won’t tell to fuck off

After a year of building Morrow, I looked up from my laptop and realized that pretty much everyone is obsessed with bots now.

In about a month, everyone will hopefully realize that most bots are horrible. The bot, by default, is unreliable, awkward, and laborious to interact with.

These are hard problems to solve, and I’ve spent a lot of the last year solving them in my own bot projects. So I’m here to show you the tools I use to make my bots a little better than most.

How to prototype your bot: Twine

Twine is a tool for creating interactive fiction — things like choose-your-own-adventure games. And guess what? At its core, that’s all a bot does. It takes an input (usually an intent), and leads you to the next fork in the road (what I’d call a state). Twine is perfect for showing you how that looks and feels.

Why not just start writing code? For the same reason you wouldn’t make an iPhone app without designing a great interface first. Creating a compelling bot experience is hard. Every intent that you handle takes an enormous amount of data and engineering time to implement. Every single bit of copy your bot utters can be a source of joy or displeasure. Every single interaction can leave a user thrilled and relieved, or deeply bored and confused.

And by actually interacting with your bot in the interactive Twine prototype, you’ll see if it passes the smell test. This insanely dumb interface, for instance, could have been easily avoided if folks had just prototyped their app first:

With Twine, you’ll be able to get solid on the intents, states, and contexts that your bot will need to function. You’ll be able to hone in on sublime copy. And most importantly: you’ll be able to see if your bot is worth spending the time to build.

How to make your bot: Wit.ai Bot Engine

It’s not a lot of fun to roll your own NLP AI engine, so don’t. Wit.ai has a lot more data to draw from, and it’s arranged in ways that make it really great for building bots around. And now that they’ve launched Bot Engine, you can take your script and put it into action in minutes — no code required.

First up, get clear on the basic concepts. Whenever wit.ai recieves a message (“Hi, my name is Andrew”), it tries to attribute user intent (that you’re specifying your name), and it tries to extract any entities (like “Andrew”). To give the bot the best chance at decoding your user’s messages properly, you can specify contexts (like USER-ONBOARDING), and you can add a lot of sample messages that you classify, which gives the bot the chance to handle lots of different possible answers to the very same question.

Even if it turns out that you need to build something much more sophisticated than what the Bot Engine can handle, this will get your brain wrapped around how bots are structured.

How to interact with your bot: Twilio or Facebook Messenger

I lost a whole lotta months trying to make an iPhone app that had bot interactions that didn’t suck. It kinda works, now. Barely. The lesson I learned is that the client shouldn’t be the hard part.

Twilio is where I started, and it’s where I’d suggest you start as well. It imposes constraints that will keep you sane and keep your project from blowing out scope. Call it Konoff’s Law:

if you can’t get your bot to be compelling and reliable over SMS, then it won’t be. Ever.

It also means that anyone with a phone can interact with your bot. That’s a lot of people.

Facebook’s Messenger platform is also wonderful. It integrates with wit.ai, it gives you in-message buttons so that your users don’t have to type out every reply, and it gives you access to everyone on Facebook. Cool! Just accept the fact that Facebook owns literally every tool you use to make what you make, and then things will be swell.


In short, if you’ve decided to do a bot: prototype it with Twine, make it with wit.ai, and put it on Facebook or connect it to Twilio. If you’re trying to do more or less, you’re going to do it wrong. Unless you’ve made an artificial general intelligence. I mean, then you probably should just run to the hills. Maybe give me a quick heads-up.

Also! I’m available for consulting. If your bot experience is falling short, or if you actually used the above tools and found out you need something more sophisticated, I can help you find the way — from creating a complete bot prototype to defining the technical architecture that will let you succeed. Throw me a note at andrew (dot) konoff (at) gmail (dot) com, and we’ll make it work.