Skip to content

Commit

Permalink
feat: Standardized dialog hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
yangeorget committed Feb 13, 2018
1 parent e418de3 commit 80f1e45
Show file tree
Hide file tree
Showing 11 changed files with 38 additions and 52 deletions.
5 changes: 3 additions & 2 deletions packages/botfuel-dialog/src/dialogs/confirmation-dialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ const PromptDialog = require('./prompt-dialog');
*/
class ConfirmationDialog extends PromptDialog {
/** @inheritDoc */
async dialogWillComplete(userMessage, { matchedEntities, missingEntities }) {
logger.debug('dialogWillComplete', userMessage, { matchedEntities, missingEntities });
async dialogWillComplete(userMessage, dialogData) {
logger.debug('dialogWillComplete', userMessage, dialogData);
const { matchedEntities } = dialogData;
// Clean entities for this dialog so it can be reused later
await this.brain.conversationSet(userMessage.user, this.parameters.namespace, {});
if (matchedEntities.answer.values[0].value) {
Expand Down
12 changes: 5 additions & 7 deletions packages/botfuel-dialog/src/dialogs/prompt-dialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,17 +219,15 @@ class PromptDialog extends Dialog {
);
logger.debug('execute', { missingEntities, matchedEntities });
await this.brain.conversationSet(userId, this.parameters.namespace, matchedEntities);
const dialogData = await this.dialogWillDisplay(userMessage, {
const extraData = await this.dialogWillDisplay(userMessage, {
missingEntities,
matchedEntities,
});
await this.display(adapter, userMessage, { matchedEntities, missingEntities, dialogData });
const dialogData = { matchedEntities, missingEntities, extraData };
await this.display(adapter, userMessage, dialogData);
if (Object.keys(missingEntities).length === 0) {
const result = await this.dialogWillComplete(userMessage, {
matchedEntities,
missingEntities,
});
return result || this.complete();
const action = await this.dialogWillComplete(userMessage, dialogData);
return action || this.complete();
}
return this.wait();
}
Expand Down
15 changes: 6 additions & 9 deletions packages/botfuel-dialog/src/dialogs/qnas-dialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,16 @@ class QnasDialog extends Dialog {
/** @inheritDoc */
async execute(adapter, userMessage, messageEntities) {
logger.debug('execute', userMessage, messageEntities);
const qnas = await this.dialogWillComplete(userMessage, messageEntities);
logger.debug('execute: qnas', qnas);
await this.display(adapter, userMessage, { qnas });
const extraData = await this.dialogWillDisplay(userMessage, messageEntities);
const qnas = messageEntities[0].value;
const dialogData = { messageEntities, qnas, extraData };
await this.display(adapter, userMessage, dialogData);
if (qnas.length === 1) {
return this.complete();
const action = await this.dialogWillComplete(userMessage, dialogData);
return action || this.complete();
}
return this.wait();
}

/** @inheritDoc */
async dialogWillComplete(userMessage, messageEntities) {
return messageEntities[0].value;
}
}

module.exports = QnasDialog;
18 changes: 5 additions & 13 deletions packages/botfuel-dialog/src/dialogs/text-dialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,14 @@ const Dialog = require('./dialog');
* @extends Dialog
*/
class TextDialog extends Dialog {
/**
* @constructor
* @param {Object} config - the bot config
* @param {class} brain - the bot brain
*/
constructor(config, brain) {
super(config, brain, { reentrant: false });
}

/** @inheritDoc */
async execute(adapter, userMessage, messageEntities) {
logger.debug('execute', userMessage, messageEntities);
const data = await this.dialogWillDisplay(userMessage, messageEntities);
await this.display(adapter, userMessage, data);
const result = await this.dialogWillComplete(userMessage, messageEntities);
return result || this.complete();
const extraData = await this.dialogWillDisplay(userMessage, messageEntities);
const dialogData = { messageEntities, extraData };
await this.display(adapter, userMessage, dialogData);
const action = await this.dialogWillComplete(userMessage, dialogData);
return action || this.complete();
}
}

Expand Down
3 changes: 2 additions & 1 deletion packages/botfuel-dialog/src/dialogs/void-dialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ class VoidDialog extends Dialog {
/** @inheritDoc */
async execute(adapter, userMessage, messageEntities) {
logger.debug('execute', userMessage, messageEntities);
return this.complete();
const action = await this.dialogWillComplete(userMessage, { messageEntities });
return action || this.complete();
}
}

Expand Down
12 changes: 6 additions & 6 deletions packages/botfuel-dialog/src/views/prompt-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,21 @@ const View = require('./view');
*/
class PromptView extends View {
/** @inheritDoc */
render(userMessage, { matchedEntities, missingEntities, dialogData }) {
logger.debug('render', userMessage, { matchedEntities, missingEntities, dialogData });
return this.renderEntities(matchedEntities, missingEntities, dialogData);
render(userMessage, { matchedEntities, missingEntities, extraData }) {
logger.debug('render', userMessage, { matchedEntities, missingEntities, extraData });
return this.renderEntities(matchedEntities, missingEntities, extraData);
}

/**
* Confirms the defined entities and asks for the needed ones.
* @private
* @param {Object[]} matchedEntities - the defined entities
* @param {String[]} missingEntities - the needed entities
* @param {Object} [dialogData] - additional data from dialogWillDisplay hook
* @param {Object} [extraData] - additional data from dialogWillDisplay hook
* @returns {Object[]} the bot messages
*/
renderEntities(matchedEntities, missingEntities, dialogData) {
logger.debug('renderEntities', matchedEntities, missingEntities, dialogData);
renderEntities(matchedEntities, missingEntities, extraData) {
logger.debug('renderEntities', matchedEntities, missingEntities, extraData);
const messages = [];
if (Object.keys(matchedEntities).length !== 0) {
messages.push(
Expand Down
10 changes: 5 additions & 5 deletions packages/botfuel-dialog/src/views/qnas-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ const View = require('./view');
*/
class QnasView extends View {
/** @inheritDoc */
render(userMessage, data) {
logger.debug('render', userMessage, data);
if (data.qnas.length === 1) {
return this.renderAnswer(data.qnas[0].answer);
render(userMessage, { qnas }) {
logger.debug('render', userMessage, qnas);
if (qnas.length === 1) {
return this.renderAnswer(qnas[0].answer);
}
return this.renderQuestions(data.qnas);
return this.renderQuestions(qnas);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/botfuel-dialog/src/views/text-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class TextView extends View {
/**
* Gets the texts used for building the BotTextMessages.
* @param {Object} userMessage - the user message
* @param {Object} data - dialog data used at display time
* @param {Object} data - data used at display time
* @returns {String[]} an array of strings
*/
getTexts(userMessage, data) {
Expand Down
2 changes: 1 addition & 1 deletion packages/botfuel-dialog/src/views/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class View {
/**
* Renders a view as an array of bot messages.
* @param {Object} userMessage - the user message
* @param {Object} [data] - dialog data used at display time
* @param {Object} [data] - data used at display time
* @returns {Object[]} an array of bot messages
*/
render() {
Expand Down
4 changes: 2 additions & 2 deletions packages/test-complexdialogs/src/views/greetings-view.en.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
const { TextView } = require('botfuel-dialog');

class GreetingsView extends TextView {
getTexts(userMessage, data) {
if (data.greeted) {
getTexts(userMessage, { extraData }) {
if (extraData.greeted) {
return ['Hello again human!'];
}
return ['Hello human!'];
Expand Down
7 changes: 2 additions & 5 deletions packages/test-qna/src/views/delivery-date-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,11 @@
const { TextView, BotTextMessage } = require('botfuel-dialog');

class DeliveryDateView extends TextView {
render(userMessage, data) {
const { date } = data;
const dateStr = date.toISOString().split('T')[0];

render(userMessage, { extraData }) {
const dateStr = extraData.date.toISOString().split('T')[0];
const response = new BotTextMessage(
`If you purchase today before 10pm, you purchase will be delivered by ${dateStr}.`,
);

return [response];
}
}
Expand Down

0 comments on commit 80f1e45

Please sign in to comment.