@danclay/discord-dialogflow

1.0.3 • Public • Published

Documentation | Eris | discord.js

About

Easily integrate Dialogflow into your Discord bot to allow for natural conversations. This should work with the message object for both Eris and discord.js

Installation

Run npm install @danclay/discord-dialogflow --save or with yarn: yarn add @danclay/discord-dialogflow

Usage

Config

To configure the bot, use the init(options) function of this package. The options parameter is a object as follows:

Name Type Optional? Default Description
projectID string GCP project ID
keyPath string Absolute path to the GCP service account JSON key
convertResult Boolean Yes true If using a custom response payload and you want it to be given to you in JSON (if used this will be given in result.fulfillmentMessagesJSON)
storeSessions Boolean Yes true If you want sessions IDs to remain to same for specific users
sessionExpires Number Yes 5 How long until each session ID is deleted (only if options.storeSessions=true)
easyMode Boolean Yes false Enable basic mode where the callback will only have the fulfillment text
debug Boolean Yes false Enable or disable debug logging

Getting a result

To get a result object from dialogflow, use the getIntent(msg, callback) function of this package. The parameters are as follows:

Parameters:

Name Type Description
msg Object message object (see below)
callback callback callback function (result object or string if using easy mode)

Msg parameter:

Name Type Optional? Description
content string Yes If not using a custom query, this will be used as the query text input
author.id Number Yes If not using a custom query, this is needed for the ID
locale string Yes message locale if you want it to not be English (only if no using custom query) (e.g.'en-US')
query Object Yes custom dialogflow query

Basics

const dialogflow = require('discord-dialogflow'); // requires the package
dialogflow.init("project-id", "path-to-service-account-key.json"); // init your project
dialogflow.getIntent(msg, r => { // get the intent
    // code using the results
});

Example using Eris and easy mode

(as seen in test/test.js):

if (!(process.env.NODE_ENV === "production")) { // Use dotenv for local testing
    require('dotenv').config();
};

const Eris = require('eris');

var bot = new Eris(process.env.token);
bot.on("ready", () => {
    console.log("Ready!");
});

// Dialogflow
const dialogflow = require('../index.js'); // require the package (use the package name "discord-dialogflow" when you do it)
dialogflow.init({
    projectID: process.env.projectID,
    keyPath: process.env.keyPath,
    easyMode: true,
    debug: true
});


bot.on("messageCreate", async (msg) => {
    if (!msg.author.bot) {
        dialogflow.getIntent(msg, (r) => { // gets the intent and fallback text
            bot.createMessage(msg.channel.id, r);
        });
    };
});
bot.connect();
});

Example using Eris and easy mode disabled:

if (!(process.env.NODE_ENV === "production")) { // Use dotenv for local testing
    require('dotenv').config();
};

const Eris = require('eris');

var bot = new Eris(process.env.token);
bot.on("ready", () => {
    console.log("Ready!");
});

// Dialogflow
const dialogflow = require('../index.js'); // require the package (use the package name "discord-dialogflow" when you do it)
dialogflow.init({
    projectID: process.env.projectID,
    keyPath: process.env.keyPath,
    easyMode: false,
    debug: true
});


bot.on("messageCreate", async (msg) => {
    if (!msg.author.bot) {
        dialogflow.getIntent(msg, (r) => { // gets the intent and fallback text
            console.log(JSON.stringify(r));
            console.log(JSON.stringify(r.fulfillmentMessagesJSON[0].discord));
            bot.createMessage(msg.channel.id, {embed: r.fulfillmentMessagesJSON[0].discord});
        });
    };
});
bot.connect();

Readme

Keywords

none

Package Sidebar

Install

npm i @danclay/discord-dialogflow

Weekly Downloads

1

Version

1.0.3

License

MIT

Unpacked Size

1.56 MB

Total Files

63

Last publish

Collaborators

  • danclay