繁体   English   中英

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

[英]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 ( 基于此示例)的基本 class 来处理我的组件对话框中的取消和帮助等中断。

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

非常感谢任何指导

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

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 访问子对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM