https://github.com/danclay/simple-dialogflow-client
Integration of Dialogflow with Discord
https://github.com/danclay/simple-dialogflow-client
bot dialogflow discord
Last synced: 3 months ago
JSON representation
Integration of Dialogflow with Discord
- Host: GitHub
- URL: https://github.com/danclay/simple-dialogflow-client
- Owner: danclay
- License: mit
- Created: 2020-04-10T00:59:39.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-16T08:17:48.000Z (about 3 years ago)
- Last Synced: 2025-09-21T23:17:44.024Z (9 months ago)
- Topics: bot, dialogflow, discord
- Language: JavaScript
- Size: 671 KB
- Stars: 6
- Watchers: 1
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
### [Documentation](https://danclay.github.io/simple-dialogflow-client/)
# About
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
# Installation (uses discord-dialogflow name still)
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
```javascript
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](https://raw.githubusercontent.com/danclay/discord-dialogflow/master/test/test.js)):
```javascript
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:
```javascript
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();
```