c# - 如何在使用 C# MS BOT 框架 SDK V4 的瀑布对话框创建的网络聊天 BOT 中添加状态管理?
问题描述
我使用 C# SDK V4 创建了聊天机器人,它有多个瀑布对话框类,每个类都用于在选择某个选项时执行特定操作。BOT 还使用 Oauth Prompt 嵌入了身份验证。
频道:网络频道
开发工具包:SDKV4
语言:C#
现在,我希望在瀑布对话框中处理或保留状态管理,因为我看到的示例位于普通回声机器人之上,如果我在现有的具有瀑布对话框的机器人上实现相同的行,则它不起作用。
明白为什么我想要状态管理作为在使用 Oauth Prompt 对用户进行身份验证后,我正在根据登录的用户显示选项现在 2 个或多个用户同时登录或一个接一个地登录,另一个登录正在被占用,第二个数据当第一个用户在显示的选项中来回切换时,登录用户会显示给他。
当我记录一个关于如何维护登录用户或刷新登录用户的查询时,我被建议使用状态管理技术,因此这个查询是关于如何在全水对话框中进行的。
如果状态管理不是正确的选项,那么您能否告诉我如何刷新或维护登录的用户 ID?
解决方案
这怀疑问题与您在启动网络聊天时传递给 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');
}
});
});
希望有帮助!
推荐阅读
- firebase - 使用 Firebase 身份验证的 gsutil 并行复合上传
- amazon-web-services - 如何将 ARN 设置为 s3 策略资源 AWS
- node.js - 在 main.ts 中使用 .env 文件中的数据 - NestJS
- r - 如何消除 R Shiny 中反应图下方的空白空间?
- java - 将 Quantity 的值作为 BigDecimal 获取
- python - 日期列和整数列相加给出错误 TypeError: unsupported type for timedelta days component: Series
- python - 尝试创建类的实例时,不了解关于参数数量的 TypeError 的原因
- python - Python导入torch需要很长时间才能初始化
- aws-xray - 如何按段或子段过滤 X 射线轨迹
- unit-testing - 当消息有撇号时,should_panic 和 expected 不起作用