This repo is the brains of Basebot and contains the central "monolithic" server-side app.
For an in-depth guide see our Getting Started Guide
When you first clone the repo you'll want to run
npm i to install dependencies. After that, you'll need two files:
Both of these files live in the root.
firebase.json can be downloaded from the firebase dashboard. To set up a project, login to Firebase here. (Note: for environments where a json file isn't suitable you can paste the JSON from the file into the FIREBASE env var instead)
.env is a standard file that contains local env vars. It should have the following vars at a minimum:
- BOT_NAME the user-facing name of your bot (e.g. Basebot, HAL 9000, Johnny 5, KITT)
- MS_APP_ID the Bot service app id to use
- MS_APP_PASSWORD the corresponding secret to use with the above
- LUIS_URI the LUIS instance URI - without this LUIS will not work
- DB_URL at the moment this should be an Azure Table Storage connection string
- USE_LT_SUBDOMAIN (local dev only) this will enable localtunnel at the subdomain specified
If you want to use QNA Maker you'll also need the following:
- QNA_HOST The URL for QNA Maker
- QNA_KEY The secret key for QNA Maker
- QNA_KBID The Knowledgebase ID you want to use (we only support a single one at the mo)
- QNA_THRESHOLD The confidence threshold out of 100 (80 seems to work quite well)
Once you've done all that, you can run the project
To run, simply use:
npm run dev
To run in production, build using
npm run build and then run
A note on local development
In order to get the bot service instance you're using to talk to your local bot you'll have to set the
Messaging Endpoint configuration value under your app settings to the localtunnel URI generated when you start the app in dev mode (using
To enable verbose logging you can set the
DEBUG env var to
basebot*. Alternatively, if you have a papertrail account you can set
PAPERTRAIL_PORT to your Papertrail host/port (more info here). This is useful if you're not running the server locally and getting at the logs is a bit annoying.
This project is fully compatible with the VSCode debugger. Just press F5 to launch with the debugger attached. For more info on debugging with VSCode see here
Tests are written using Jest and stored in the __tests__ directory. To test the entire codebase use
All of the main conversation logic goes here. Files are automatically imported from the
/skills directory and should export an array of objects with the following schema:
||(optional) either a LUIS intent (e.g.
||(optional) similar to hears: the event to trigger the skill on (e.g.
||The callback to invoke. The various botkit instances provided should allow you to do virtually anything you need to conversation-wise. See the botkit docs for more info|
||(optional) boolean that represents whether to bypass LUIS - if this is set to false then hears will expect an intent, if it is true then hears should be a botkit-style regex/string.|
on should be specified.
All Botkit middleware goes here. Files are automatically imported from the
/middleware directory and should export a function that takes a single
controller argument. See /middleware/auth.js for a succinct example.
An "everything else" folder for specialised classes and functions. These can export any format. Examples include, auth and utility functions.
Check out the documentation on some of the main libraries (roughly in order of their importance):