javascript - Microsoft Bot Framework,从 Javascript 设置用户状态
问题描述
我正在尝试使用 Microsoft Bot Framework v4 和 Azure 来证明一个简单的支持和票务机器人的概念。我已通过 Bot Framework Composer 成功创建了一个机器人,并使用 Web App Bot 将其部署到 Azure。我已经在我的测试站点上配置并安装了 BotFramework-WebChat 组件,并成功地将机器人连接到它。BotFramework-WebChat 组件通过 cdn.botframework.com 安装。测试站点是一个单页应用程序,机器人位于此站点旁边,以便用户可以方便地访问它。
一切都按预期工作。但是,我想根据当前浏览器状态向 Bot 发布某些上下文信息。例如,如果用户在与机器人交谈时正在查看产品 ABC,我希望机器人知道这一点。为了实现它,我想在主应用程序状态发生变化时更新机器人通道上的用户状态,最好通过 vanilla JavaScript。我想在后台无缝地执行此操作,并且我不想依赖其他框架,例如 React(Microsoft 文档大量引用了 React,不幸的是我对特定产品不了解,因此很难/不可能遵循) .
因此,我的问题分为两部分。使用 BotFramwork-WebChat 组件提供的 API 是否可以实现上述操作,如果可以,将如何做?如果不可能的话,如果存在此类替代方法,我也将不胜感激有关替代方法的任何帮助。
解决方案
回答我自己的问题,这确实可以通过对用于创建/呈现网络聊天组件的示例代码进行微小修改来实现。
首先,我参数化了 DirectLine 客户端的创建。设置 WebChat 组件后,此客户端是发布到频道的关键:
var dl = window.WebChat.createDirectLine({ token: '#yourtokenhere#' });
window.WebChat.renderWebChat(
{
directLine: dl,
userID: '#yourid#',
username: '#yourusername#',
locale: 'en-US'
},
document.getElementById('#yourtargetelement')
);
使用客户端,我使用 postActivity 方法向频道发布了一个事件:
dl.postActivity({
from: { id: '#youruserid#', name: '#yourusername#' },
type: 'event',
name: '#youreventname#',
value: {
// Put your parameters here
}
})
在 Composer 方面,我设置了一个触发器来激活名为 #youreventname# 的“自定义事件”。然后我可以从 value 属性中解析出参数并设置我的用户状态。
我个人发现Microsoft Direct Line JS 协议的文档比直接浏览 WebChat 文档更容易使用。
感谢@billoverton 提供使用自定义事件的灵感。
推荐阅读
- node.js - Eslint 无法识别使用 nodejs 12 的私有字段声明
- c++ - 如何将 C++ 模型的实验版本与黄金参考进行比较?
- excel - 没有任何输入的用户表单格式单元格
- android - 如何从 Fragment 访问 Navigation Drawer Header 项目?
- mysql - mysql 性能超过 1 亿条记录
- nix - 如何使用 Nix niv 引用 github 项目?
- sql-server - 创建用于在其他 PC 上安装 #vb.net 应用程序的设置
- r - 从一个数据帧中提取特定的匹配信息并添加到另一个数据帧
- visual-studio-test-runner - TFS 2018 取消 Visual Studio 测试锁定 dll
- c# - Net Core:使用 InMemory 数据库覆盖 WebApplicationFactory Services DbContext