@danclay/discord-dialogflow
v1.0.3
Published
Quick integration of dialogflow for Discord bots
Downloads
2
Readme
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();