Node.js Microsoft Bot Framework:会话间的名称相同
我有以下代码,试图在聊天过程中设置用户名。例如,如果用户编写消息“嗨,我的名字是Bob”,机器人将通过用他的名字问候用户来响应,但只有当该名字被标记为“名字”实体时Node.js Microsoft Bot Framework:会话间的名称相同,node.js,session,botframework,azure-language-understanding,Node.js,Session,Botframework,Azure Language Understanding,我有以下代码,试图在聊天过程中设置用户名。例如,如果用户编写消息“嗨,我的名字是Bob”,机器人将通过用他的名字问候用户来响应,但只有当该名字被标记为“名字”实体时 问题在于,该名称是为当前与bot聊天的每个用户全局设置的,而不是仅为当前用户设置的。换句话说,在这种情况下,机器人将呼叫当前正在聊天的每个用户Bob。 var intents = new builder.IntentDialog({ recognizers: [recognizer] }) // Check if the
问题在于,该名称是为当前与bot聊天的每个用户全局设置的,而不是仅为当前用户设置的。换句话说,在这种情况下,机器人将呼叫当前正在聊天的每个用户Bob。
var intents = new builder.IntentDialog({ recognizers: [recognizer] })
// Check if the message user sent matches LUIS intent "greetingsWithName"
.matches('greetingsWithName', (session, args) => {
// Attempt to set content of LUIS entity "name" to variable "name"
name = builder.EntityRecognizer.findEntity(args.entities, 'navn');
// Check whether the name was successfully set or not
if (!name) {
session.send('Sorry, I didn't catch your name.')');
} else {
session.userData.userName = name.entity;
session.send('Hi, ' + session.userData.userName);
});
稍后,我将在代码中检查用户是否在会话期间向bot提供了自己的名称。如果是这样,那么用他的名字向用户说再见:
.matches('goodBye', (session) => {
if (!session.userData.userName) {
session.send('Good bye!');
} else {
session.send('Good bye, ' + session.userData.userName);
}
})
bot.dialog('/', intents);
以下是启动web聊天会话的文件中的HTML代码:
<!DOCTYPE html>
<html>
<head>
<link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" />
</head>
<body>
<div id="bot"/>
<script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
<script>
BotChat.App({
directLine: { secret: direct_line_secret },
user: { id: 'userid' },
bot: { id: 'botid' },
resize: 'detect'
}, document.getElementById("bot"));
</script>
</body>
</html>
BotChat.App({
directLine:{secret:direct\u line\u secret},
用户:{id:'userid'},
bot:{id:'botid'},
调整大小:“检测”
},document.getElementById(“bot”);
您正在将用户名存储在userData
中,这是符合逻辑的
但在测试仪中,您为每个webchat用户设置了相同的用户id:
user: { id: 'userid' }
因此,每个用户都将指向相同的userData
,因为键是频道名称和用户id的组合(activity.ChannelId
,activity.From.id
,在C#中)
您可以通过为每个webchat用户生成唯一标识符来避免这种情况,例如使用
在这种情况下,user:{id:uuid()}
此外,如果您需要设置显示名称,请将
名称:'…'
添加到用户的定义中:用户:{id:uuid(),名称:'you'}
,“问题是,名称是为当前与bot聊天的每个用户全局设置的,而不是仅为当前用户设置的”:您在哪个频道上看到此行为?Emulator?@NicolasR位于一个本地HTML文件中,该文件使用通过DirectLine通道启动bot。我尝试在其他具有不同IP/连接到不同网络的设备上传递HTML文件,但问题仍然存在。好吧,我想您的HTML中的webchat中总是有相同的用户Id?这就可以解释问题了。。。你能添加这个html文件的代码吗?@NicolasR啊,事实上可能就是这样。我用了这个。在主菜单中添加了HTML代码post@NicolasRuser:{id:'userid'}
字段当前设置为user:{id:'You'}
通过创建生成随机用户id的函数并将其传递到user:{id:createUserId()}
,bot能够区分会话。非常感谢。有许多解决方案可以更改Id是的,主要的事实是在交叉调用时使用了相同的user.Id。很高兴这有帮助