Easily integrate Dialogflow into your Discord bot (or other stuff) to allow for natural conversations. This should work with the message object for both Eris and discord.js
Run npm install @danclay/discord-dialogflow --save
or with yarn: yarn add @danclay/discord-dialogflow
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 |
To get a result object from dialogflow, use the getIntent(msg, callback)
function of this package. The parameters are as follows:
Name | Type | Description |
---|---|---|
msg | Object | message object (see below) |
callback | callback | callback function (result object or string if using easy mode) |
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 |
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
});
(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();
});
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();