1.0.3 • Published 4 years ago

@danclay/discord-dialogflow v1.0.3

Weekly downloads
5
License
MIT
Repository
github
Last release
4 years ago

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:

NameTypeDescription
msgObjectmessage object (see below)
callbackcallbackcallback function (result object or string if using easy mode)

Msg parameter:

NameTypeOptional?Description
contentstringYesIf not using a custom query, this will be used as the query text input
author.idNumberYesIf not using a custom query, this is needed for the ID
localestringYesmessage locale if you want it to not be English (only if no using custom query) (e.g.'en-US')
queryObjectYescustom 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();
1.0.3

4 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago