We package a handful of adapters for popular platforms, but it's simple enough to add new adapters from the community, or build one yourself.
This goes for every layer of the stack. There's adapters for data storage providers, natural language processing, webhooks and analytics. You don't need to worry about porting logic between services as you scale or find new audiences. Write it once, then plug and play.
Artificial Intelligence, or Not
For basic prompts or button responses, you can use plain old expression matching to route to handlers. When that fails, input is passed to trained NLP providers that can infer more complicated intent and sentiment.
We go with an Artificial Stupidity model first, for direct outcomes and snappy performance, where intelligence is sometimes overkill.
bBot was built for interactions that may go far beyond simple prompts and responses. It enables deep branching and context with step by step error handling. Conversations can be isolated to a single user or open to a whole channel, even allowing interactions to be authorised for specific groups.
Our users come from all over, so internationalisation was a core consideration. Message content can be defined in multiple languages and implemented with common handlers. Message templates can also be populated on send, with content specific to the user, data from the current application state or from external sources as required.
Our unique and flexible utilities, such as authorisation and data store adaptors, enables chat-ops and user journeys with deep integration of existing data and accounts, so you're not limited to interactions in silos.
One of the strengths of bBot in dealing with many users and deep contexts, is that all critical components make use of asynchronous methods and middleware.
Custom middleware pieces can modify or interrupt at any point of processing a response, so subsequent interactions can build on and tailor the outcomes or route dialogue, without relying on hammy catch-all interactions to work around limitations.
Our approach to conversation modelling provides a schema for defining each interaction, instead of trying to define all conversation pathways as one comprehensive work.
Interactions can connect and relate to each other, or be isolated as required. This allows enterprise teams to co-author unique user journeys, each with its own change management, authentication and workflows.
Every middleware and callback handler in bBot is given a single consistent argument, the state object, we call it
The state object contains all the bot's properties and attributes of the current interaction; the user, their input and the matched text or results from language processing.
That means its self documenting and can be compiled with a variety of configs for a range of Node compatibility and module systems.
From its strict typing, we also get code intel in IDEs and access to information that is critical for stateful applications, where modules can be extended outside the core package.
All operations and middleware handle asynchronous processing. No more hacks and workarounds when a conversation requires data from an external source to determine its course or populate content.
bBot is for building enterprise grade software, so it's unit tested to the hilt!
It also exposes a number of test helpers for engineers to apply to their own conversation structures and extensions. Use the “pretend” adapter to run through scripted interactions between users in virtual rooms and make detailed assertions on expected outputs and internal states.
By using simple exported node scripts to start the bot, it can be more easily attached to debug inspectors.
The code is semantic and logic is easy to follow with minimal dependencies and simple module inheritance.
bBot uses a minimal set of some of the most common Node.js package dependencies, to provide mature and documented components for easier extension development. Nothing but the best baby!