【问题标题】:How to add state management in Web Chat BOT created with water fall dialog's using C# MS BOT framework SDK V4?如何在使用 C# MS BOT 框架 SDK V4 使用瀑布对话框创建的 Web Chat BOT 中添加状态管理?
【发布时间】:2020-03-12 04:02:14
【问题描述】:

我使用 C# SDK V4 创建了聊天机器人,它有多个瀑布对话框类,每个类用于在选择某个选项时执行特定操作。 BOT 还使用 Oauth Prompt 嵌入了身份验证。

频道:网络频道

SDK:SDKV4

语言:C#

现在,我希望在瀑布对话框中处理或保留状态管理,因为我看到的 example 位于普通回声机器人之上,如果我在现有的具有瀑布对话框的机器人上实现相同的行不工作。

为什么我想要状态管理作为在使用 Oauth Prompt 对用户进行身份验证后,我将根据登录的用户显示选项 现在 2 个或多个用户同时登录或一个接一个地登录另一个登录,当第一个用户在显示的选项中来回切换时,将显示第二个登录用户的数据以供选择。

当我记录一个关于如何维护登录用户或刷新登录用户的查询时,我被建议使用状态管理技术,因此这个查询是关于如何在全水对话框中执行此操作。

如果状态管理不是正确的选项,请告诉我如何刷新或维护已登录的用户 ID?

【问题讨论】:

    标签: c# botframework chatbot


    【解决方案1】:

    这怀疑问题与您在启动网络聊天时传递给 Direct Line 的道具有关。在Integrate with Javascript 下引用,文档状态:

    不建议将 userID 分配为静态值,因为这会导致所有用户共享状态。有关详细信息,请参阅 API 用户 ID 条目。

    当您调用生成令牌时,此时应传递用户 ID(对用户来说应该是唯一的),否则您将遇到共享状态问题。

    这是我为访问获取并返回直接行令牌的本地 API 而运行的一些代码。如您所见,用户 ID 在请求中传递,然后在返回时烘焙到令牌中。

    // Listen for incoming requests.
    server.post('/directline/token', (req, res) => {
        // userId must start with `dl_`
        const userId = (req.body && req.body.id) ? req.body.id : `dl_${ Date.now() + Math.random().toString(36) }`;
        const options = {
            method: 'POST',
            uri: 'https://directline.botframework.com/v3/directline/tokens/generate',
            headers: {
                Authorization: `Bearer ${ process.env.directLineSecret }`,
                'Access-Control-Allow-Origin': '*'
            },
            json: {
                user: {
                    ID: userId
                }
            }
        };
        request.post(options, (error, response, body) => {
            if (!error && response.statusCode < 300) {
                res.send(body);
                console.log('Someone requested a token...');
            } else if (response.statusCode >= 400 && response.statusCode < 500) {
                res.send(response.statusCode);
            } else if (response.statusCode >= 500) {
                res.status(response.statusCode);
                res.send('Call to retrieve token from DirectLine failed');
            }
        });
    });
    

    希望有帮助!

    【讨论】:

    • 感谢您的投入和对延迟回复的歉意,但我不明白它是否完整,因为我对编码和东西以及 BOT 都是新手,所以请您提供我详细的步骤es5 包中的 JavaScript,因为它应该在 IE 11 中工作,并且相关的 C# BOT 代码会逐步更改(如果有)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多