An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          



NPM version
License
Dependencies





### [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();
```