【发布时间】:2020-08-07 18:49:24
【问题描述】:
我正在尝试发送问候消息并询问用户的姓名。该机器人试图向用户提出一些问题,然后通过重定向链接帮助他。它可以在模拟器或 Microsoft 在线测试工具中完美运行,但是一旦将机器人集成到 ASP.NET 应用程序中,问候消息就不会显示。
我已经搜索并找到了几个有用的链接,但我仍然无法解决问题。
我尝试了两种不同的方法,iframes 和 window.WebChat.renderWebChat,但在这两种情况下都会出现问题,直到我向机器人发送消息后才会显示问候消息。
正如其他帖子所讨论的,所有解决方案都以topic结尾,因此聊天机器人集成必须在javascript或Node中实现;并且,需要将自定义事件(作为触发器)发送到聊天机器人。但是,虽然我的机器人已部署在个人 Windows 服务器上,但我不知道如何配置它并设置 directLine 参数。
正如here 发布的那样,可能的解决方案如下代码所示,但我无法配置和设置获取令牌所需的参数。
消息传递端点:https://xxx.yyy.com/api/messages
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Web Chat: Send welcome event</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script crossorigin="anonymous" src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<style>
html,
body {
height: 100%;
}
body {
margin: 0;
}
#webchat {
height: 100%;
width: 100%;
}
</style>
</head>
<body>
<div id="webchat"></div>
<script>
(async function() {
//I have no idea how this line of code must be set to achieve the token
//------------------------------------------------------
const res = await fetch('https://xxx.yyy.com/directline/token', { method: 'POST' });
const { token } = await res.json();
//------------------------------------------------------
const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'webchat/join',
value: { language: window.navigator.language }
}
});
}
return next(action);
});
window.WebChat.renderWebChat(
{
directLine: window.WebChat.createDirectLine({ token }),
store
},
document.getElementById('webchat')
);
document.querySelector('#webchat > *').focus();
})().catch(err => console.error(err));
</script>
</body>
</html>
最后,我要强调的是,Bot 在在线测试工具和模拟器上运行良好,但错误发生在 asp.net 应用程序的集成中。
截图: 左边的照片来自网站应用程序,右边的照片来自测试环境:
编辑 (1): 更新标题,添加屏幕截图。
【问题讨论】:
-
不清楚你在说什么实际行为。你的标题说有延迟,但在底部你说有一个错误。您能否发布您正在经历的屏幕截图?
-
感谢您对@KyleDelaney 的评论。我添加了所需的屏幕截图并更新了描述以使其清晰。据我了解,模拟器中聊天机器人的行为有所不同,并且问候消息没有显示,因为它需要触发自定义事件,我想我已经在上面发布的链接中找到了解决方案,但是,我没有知道使用 javascript 集成机器人,但不完全确定参数。
-
请查看this answer 以了解令牌生成如何影响对话更新的时间。听起来您在调用 Generate Token 时没有包含用户属性。您已在示例代码中包含 xxx.yyy.com。这是您托管的实际网站的占位符吗?该端点是否调用生成令牌?我可以在屏幕截图中看到您能够成功连接到 Direct Line,因此您必须以某种方式获取令牌。
-
xxx.yyy.com 是机器人托管位置的占位符。我已经阅读了您在之前的评论中提到的帖子。我当前的问题是:“xxx.yyy.com/directline/token”没有生成令牌。假设端点是 xxx.yyy.com/api/messages,应该使用哪个 url 来检索令牌?
-
为什么要尝试通过调用机器人端点来生成 Direct Line 令牌?您还没有回答我关于端点是否调用生成令牌的问题。如果它没有生成令牌,那么您如何连接到对话?您可以在此处阅读有关如何生成令牌的所有信息:docs.microsoft.com/en-us/azure/bot-service/rest-api/…
标签: javascript botframework chatbot web-chat