A module-based NodeJS chatbot framework.

Usage no npm install needed!

<script type="module">
  import ebonyFramework from 'https://cdn.skypack.dev/ebony-framework';


Ebony Framework

npm Node CI

An easy to use, module-based, multi-channel chatbot framework.


  • Separation in independent, portable, easy to customize modules
  • Separate adapters for interfacing with communication channels (Facebook Messenger, Slack, Viber, SMS etc.)
  • Dialogue context management system
  • Route-based rules, with middlewares
  • Uses MongoDB for storing user information

Getting Started

For now, there is no detailed documentation for Ebony Framework. You can easily create an ebony-based Facebook Messenger Bot with the Messenger Bot Template. If you have any questions and/or suggestions feel free to open an issue, or create a pull request.


You'll need to have NodeJS/NPM on your system, as well as Typescript installed either in your node_modules folder or globally in your system.

Install Ebony Framework

$ npm i ebony-framework

Install an adapter

(For now only a Messenger Platform adapter is available)

$ npm i ebony-messenger-adapter

Initialize the bot

import { Bot } from 'ebony-framework';

// Import the adapter (for example the Messenger Adapter) as well as the user model
import { MessengerAdapter, MessengerUser } from 'ebony-messenger-adapter';

// ... Here import the modules you'll use...
import botModule from './modules/botModule';

const adapters = [
    // Here you initialize the adapters one by one.
    // For example the Messenger Adapter:
    new MessengerAdapter({
        pageId: /* Your FB Page ID */,
        pageToken: /* Your Page Token */ ,
        appSecret: /* Your App Secret */,
        webhookKey: /* Your Webhook Key */

export const bot = new Bot<MessengerUser>(adapters, {
    mongodbUri: /* Your MongoDB Connection URI */


    port: 3000 // You can substitute "3000" with the PORT of your choice.

Channel Adapters

For now, only a Messenger Platform adapter is publicly available. If you want to use the Ebony Framework for another channel, open an issue to discuss the development of a new adapter.


A module is a portable collection of actions, rules and middlewares that is imported into the chatbot on runtime.

See Modules.md for more information.


An action is a function that when triggered, sends a message to the user.


There are multiple types of rules inside a module. A rule could be context based (ContextRouter), postback based (PostbackRouter) or even a regex (TextMatcher). These rules, work similarly to routes in a web framework. They point to an action that is triggered when the rule is satisfied.


Middlewares run before (preMiddlewares) and after (postMiddlewares) an action is triggered.

Next Steps

  • Use redis for user context storing
  • Decouple database logic from framework (add support for multiple databases)
  • Create Slack Adapter
  • Add support for multiple adapters per bot (Allow the same bot to answer through many channels)
  • Refine the User model, support true extendable user models
  • Add tests



This project is licensed under the MIT License - see the LICENSE file for details.