npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@maxletou/janis

v0.1.2

Published

A toolkit for creating a hybrid Chatbot + Human UX

Downloads

251

Readme

Disclaimer: This is a temporary fork from Janis-ai/Janis-for-npm <-- use this instead

This temporary fork adds upgrades waiting to be merged in the original repo, linked below.

upgrade to latest dashbot version

replace request by node-fetch

Janis - Message Management

For Chatbots built with Node.js

Janis helps teams train and monitor bots and fix problems fast. Build a bot in Node.js and integrate Janis with just a few lines of code to ensure delightful conversational experiences in every messaging channel.

Train

Collaborate on what users say and your responses in a dedicated training channel. Experience exactly what your users will experience when they message you.

Monitor

Janis alerts you in Slack when your bot needs your help. Use our smart alerts, or create your own alerts to bring humans in the loop.

Fix Problems Fast

Take over for your bot and chat live to retain your users, while training your AI to learn from the conversation. Hand control back to your bot when you're done.

To learn more about Janis' capabilities, visit Janis.ai

What you need to get started:

Operational Dependencies:
  1. You'll need an API key and a Client Key for your Chatbot. You can get both of those (free) when you add Janis to Slack.
  2. If you're building a Messenger Chatbot, you'll need to setup a Facebook App, Facebook Page, get the Page Access Token from Facebook and link the Facebook App to the Facebook Page for Janis to work. This is standard for any Chatbot you build for Messenger.
  3. Janis can help you train your AI from Slack. Currently Dialogflow, formerly known as API.AI (http://www.api.ai) is supported.

Note: This module has been tested with Messenger, Slack, Skype, and Microsoft Webchat. Please see our examples.

Installation

$ npm install --save janis

Usage

var janis = require('janis');
var apiKey = process.env.JANIS_API_KEY; // <= key provided by janis for Slack
var clientKey = process.env.JANIS_CLIENT_KEY; // <= key provided by janis for Slack
var botPlatform = 'messenger'; // <= possible values: 'messenger', 'slack', 'microsoft'
var token = process.env.PAGE_ACCESS_TOKEN; // <= only required for Messenger bots.
var janis = janis(apiKey, clientKey, {platform: botPlatform, token:token});
Incoming Message Schema:

Throughout this documentation, you will see references to incomingMessage. Depending on whether you have a Messenger or Slack bot, the schema will be different. The value of incomingMessage should be equal to the message you receive directly from either the Messenger webhook response, or from the Slack RTM event response.

// Example of a Slack Incoming Message
{
    "type": "message",
    "channel": "D024BE91L",
    "user": "U2147483697",
    "text": "Hello world",
    "ts": "1355517523.000005"
}

// Example of a Messenger Incoming Message
{
  "sender":{
    "id":"USER_ID"
  },
  "recipient":{
    "id":"PAGE_ID"
  },
  "timestamp":1458692752478,
  "message":{
    "mid":"mid.1457764197618:41d102a3e1ae206a38",
    "seq":73,
    "text":"hello, world!",
    "quick_reply": {
      "payload": "DEVELOPER_DEFINED_PAYLOAD"
    }
  }
}  
Outgoing Message Schema:

Throughout this documentation, you will see references to outgoingMessage. Depending on whether you have a Messenger or Slack bot, the schema, as defined by each platform, will be different. Every time you track an outgoing message, the schema requirements match the respective platform.

// Example of Slack Outgoing Message
{
    "channel": "C024BE91L",
    "text": "Hello world"
}

// Exmaple of Messenger Outgoing Message
{
  "recipient":{
    "id":"USER_ID"
  },
  "message":{
    "text":"hello, world!"
  }
}
Tracking received messages:

When your bot receives an incoming message, you'll need to log the data with janis by calling to janis.hopIn. Note: janis can pause your bot so that it doesn't auto response while a human has taken over. The callback from your hopIn request will pass the isBotPaused Bool value. If true, use that to stop your bot from responding to an incoming message. Here is an example:

// Let janis know when a message comes in 
janis.hopIn(incomingMessage, function(isBotPaused) {
    // If your bot is paused, stop it from replying
    if (isBotPaused) { return };
    // Process incoming message
    ...

Note for Botkit users: If you are using Botkit, you do not need to call to hopIn. Instead, you can add the janis middleware. Then your message object will have a paused property. Here's an example:

controller.middleware.receive.use(janis.receive);
// reply to a direct message
controller.on('direct_message', function (bot, message) {
    // If your bot is paused, stop it from replying
    if (message.paused) { return };
    // Process incoming message
    ...
Tracking sent messages:

Each time your bot sends a message, make sure to log that with janis by calling to janis.hopOut. Here is an example of a function that we're calling sendIt that tracks an outgoing message and at the same time, has the bot say the message:

var sendIt = function(outgoingMessage) {
    janis.hopOut(outgoingMessage);
    bot.say(outgoingMessage); // <= example of bot sending reply
    ...

Note: If you are using Botkit, you do not need to call to hopOut. Instead, you can add the following middleware:

controller.middleware.send.use(janis.send);
Log Unknown Intents:

Find the spot in your code your bot processes incoming messages it does not understand. Within that block of code, call to janis.logUnkownIntent to capture these conversational ‘dead-ends’. Here's an example:

// let the user know that the bot does not understand
var outgoingMessage = {'channel':channel,'text':'Huh?'}; // <= Schema matches Slack
sendIt(outgoingMessage);
// capture conversational dead-ends.
janis.logUnknownIntent(incomingMessage);
Dial 0 to Speak With a Live Human Being:

janis can trigger alerts to suggest when a human should take over for your Chatbot. To enable this, create an intent such as when a customer explicitly requests live assistance, and then include the following lines of code where your bot listens for this intent:

// match an intent to talk to a real human
if (text == 'help') {
    // let the user know that they are being routed to a human
    var outgoingMessage = {'channel':channel,'text':'Hang tight. Let me see what I can do.'};  // <= Schema matches Slack
    sendIt(outgoingMessage);
    // send a janis alert to your slack channel
    // that the user could use assistance
    janis.assistanceRequested(incomingMessage);
Human Take Over:

To enable the ability to have a human take over your bot, add the code below to subscribe to the 'chat response' event. Alternatively, if you'd prefer to use a webhook to receive the payload, please get in touch with us at [email protected] and we can enable that for you.

// Handle forwarding the messages sent by a human through your bot
janis.on('chat response', function (outgoingMessage) {
    bot.say(outgoingMessage);  // <= example of bot sending message
});

Go back to Slack and wait for alerts. That's it! Be sure to check out our examples.

Looking for something we don't yet support?