Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 69 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@ In order to use the aws-sdk LexRuntime, you will need to have your aws access ke

Adds data returned from the Lex api PostText method to incoming message object. Learn more about the PostText method [here](http://docs.aws.amazon.com/lex/latest/dg/API_runtime_PostText.html)


```
```javascript

message.lex = {
intent: 'STRING',
slots: 'OBJECT',
session: 'OBJECT'
message: 'STRING',
session: 'OBJECT',
messageFormat: 'STRING',
response: 'STRING',
dialogState: 'STRING',
slotToElicit: 'STRING'
slotToElicit: 'STRING',
messages: 'ARRAY(OBJECT)' // Support for Composite messages from Lex
}
```

## Example Usage Receive Middleware

## Example Usage Recieve Middleware

```
```javascript
var lex = require('botkit-middleware-lex')({
botName: 'BotkitLex',
botAlias: 'blex',
Expand All @@ -40,16 +40,26 @@ module.exports = function(controller) {
controller.middleware.receive.use(lex.receive)

// Respond to all incoming text messages with the response from Lex
controller.on('message_received', function(bot, message) {
controller.on('message', function(bot, message) {
if (message.text) {
bot.reply(message, message.lex.message)
}
if (message.lex.messageFormat === 'Composite') {

for (let index = 0; index < message.lex.messages.length; index++) {
const msg = message.lex.messages[index];
bot.reply(message, msg.value);
}
} else {

bot.reply(message, message.lex.response);
}
}
})
}
```

## Example Usage Hears Middleware

```
```javascript
var lex = require('botkit-middleware-lex')({
botName: 'BotkitLex',
botAlias: 'blex',
Expand All @@ -61,10 +71,54 @@ module.exports = function(controller) {
controller.middleware.receive.use(lex.receive)

// listen for a specific Lex Intent
controller.hears(['default_intent'], 'message_received', function(bot, message) {
controller.hears(['default_intent'], 'message', function(bot, message) {
if (message.text) {
bot.reply(message, message.lex.message)
}
if (message.lex.messageFormat === 'Composite') {

for (let index = 0; index < message.lex.messages.length; index++) {
const msg = message.lex.messages[index];
bot.reply(message, msg.value);
}

} else {

bot.reply(message, message.lex.response);
}
}
})
}
```

## Using Cognito Identity Credentials

Add the AWS SDK package with npm:

```cmd
npm i aws-sdk
```

Change bot.js to include AWS as follows:

```javascript
// Import Botkit's core features
const { Botkit } = require('botkit');
const { BotkitCMSHelper } = require('botkit-plugin-cms');

// Import a platform-specific adapter for web.

const { WebAdapter } = require('botbuilder-adapter-web');

const { MongoDbStorage } = require('botbuilder-storage-mongodb');

var AWS = require('aws-sdk');

// Load process.env values from .env file
require('dotenv').config();

// Initialize the Amazon Cognito credentials provider
AWS.config.region = 'us-east-1'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:########-####-####-####-############',
});

```
15 changes: 13 additions & 2 deletions src/botkit-middleware-lex.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,25 @@ module.exports = function (config) {
if (err) {
next(err)
} else {
var responseMessage = data.message;


message.lex = {
intent: data.intentName,
slots: data.slots,
session: data.sessionAttributes,
response: data.message,
messageFormat: data.messageFormat,
response: responseMessage,
dialogState: data.dialogState,
slotToElicit: data.slotToElicit
slotToElicit: data.slotToElicit,
messages: null,
};

if (data.messageFormat === 'Composite') {
var jsonObject = JSON.parse(responseMessage);
message.lex.messages = jsonObject.messages;
}

next()
}
})
Expand Down