Bot Framework v4 节点:如何在基础中使用 userState class

Bot Framework v4 Node: How to use userState in a base class

对于 Messenger 上的多语言机器人 运行,我需要将用户的当前语言存储在 botState 中。这适用于大多数组件:

在 Index.js 中创建 userState 实例并将其传递给主对话框

const userState = new UserState(memoryStorage);
const dialog = new RequestProcessing(userState);
const bot = new DialogBot(conversationState, userState, dialog);

在主对话框中,我可以创建访问器并将 userState 传递到我的组件对话框

    constructor(userState) {
        super(LEAD_CAPTURE_DIALOG);
        this.userState = userState;
        this.userProfileAccessor = userState.createProperty(USER_PROFILE);
        this.addDialog(new LeadCaptureDialog(userState));

在我的对话框组件中使用 userState 就像这样完美地工作。

但是:我还在使用名为 CancelAndHelpDialog (based on this sample ) 的基础 class 来处理组件对话框中的取消和帮助等中断。

我不知道如何将 userState 传递给这个库 class。

非常感谢任何指导

看来您已经知道如何使用户状态成为主对话框构造函数的参数。您可以在取消和帮助对话框的构造函数中执行相同的操作,并在调用 super.

时将用户状态传递给它

https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/super

除了凯尔的回答。以下方法对我有用。

我的组件对话框扩展了一个基础class:

class LeadCaptureDialog extends CancelAndHelpDialog { ...

LeadCaptureDialog 的构造函数class 接受 userState 并创建一个访问器来访问 userState

    constructor(userState) {
            super(LEAD_CAPTURE_DIALOG);
            this.userState = userState;
            this.userProfileAccessor = userState.createProperty(USER_PROFILE);
            ...
    }

在 CancelAndHelpDialog class 我添加了一个构造函数

    constructor(id) {
        super(id); 
        ...
{

通过这种方法,我可以使用

访问此 class 中的 userState
const userProfile = await this.userProfileAccessor.get(stepContext.context, { language: 'fr' });

我不知道您可以从父对象访问子对象 class。