Соединение диалога с Луисом в Microsoft BotFramework v4 node.js - PullRequest
1 голос
/ 18 октября 2019

Раньше я много работал с BotFramework V3 в node.js, однако BotFramework V4 сильно отличается, и кажется, что я не могу сделать это правильно.

Я уже несколько дней борюсь с началомдиалоговое окно после распознавания намерения Луиса.

Я получаю следующую ошибку:

[onTurnError]: TypeError: context.beginDialog is not a function

Я проверял подобные проблемы в Stackoverflow, ночеткого ответа пока нет.

См. Пример моего бота ниже:

const { ActivityHandler } = require('botbuilder');
const { LuisRecognizer } = require('botbuilder-ai');

const WelcomeCard = require('./resources/welcomeCard.json');
const { CardFactory, ActionTypes, ActivityTypes } = require('botbuilder-core');

const {DatavisualisatieDialog} = require('./Dialogs/DatavisualisatieDialog');


class TestBot extends ActivityHandler {
    constructor(luisRecognizer) {
        super('TestBot');

        this.luisRecognizer = luisRecognizer;
        this.onMessage(async (context, next) => {

            const luisResult = await this.luisRecognizer.executeLuisQuery(context);

            switch (LuisRecognizer.topIntent(luisResult)) {

            case 'Datavisualisatie': {

                await context.beginDialog(DatavisualisatieDialog);
            }

                break;

            default:
            // Catch all for unhandled intents
            const didntUnderstandMessageText = `text`;
            await context.sendActivity(didntUnderstandMessageText, didntUnderstandMessageText);

            }
        });

        this.onMembersAdded(async (context, next) => {
            const membersAdded = context.activity.membersAdded;
            for (let cnt = 0; cnt < membersAdded.length; ++cnt) {
                if (membersAdded[cnt].id !== context.activity.recipient.id) {
                    // activation of the welcomecard 
                    const welcomeCard = CardFactory.adaptiveCard(WelcomeCard);
                    await context.sendActivity({ attachments: [welcomeCard] });
                    await context.sendActivity('text');
                }
            }
            // By calling next() you ensure that the next BotHandler is run.
            await next();
        });
    }
}

module.exports.TestBot = TestBot;

1 Ответ

0 голосов
/ 19 октября 2019

beginDialog существует на DialogContext, но не TurnContext. Вы бы использовали Dialog.run(context, dialogState), чтобы начать новый диалог с ActivityHandler.onMessage.

Так что вам нужно создать экземпляр DatavisualisatieDialog, а затем вызвать run из onMessage.

В этом образце есть полный пример e2e: https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/19.custom-dialogs/bots/dialogBot.js#L24-L32

(PS, если вы используете VS Code, вы можете добавить // @ts-check в начало ваших файлов JS и получить красные загогулины для ошибок типа, который он, вероятно, поймал бы здесь.)

...