我们使用ms bot框架创建了一个bot,并希望将一些数据传递给bot,而该用户不会输入。就像我在想,是否可以将查询字符串传递到下面的网络频道。
https://webchat.botframework.com/embed/myformbot?s=XXXXXX&mycustomfield=text
然后从bot api代码中,我可以以某种方式读取此querystring参数...理想情况下,我知道我们无法控制上述webchat链接,我们仅授予对bot api的访问权限。但这是否可能或通过其他方式将用户未输入的数据传递给bot?
我们计划在iframe中将网络频道网址显示到其他网站,并希望传递当前浏览的网址以标识用户从何处开始对话。
谢谢 悉达思
答案 0 :(得分:1)
使用BotFramework-WebChat库可轻松完成此操作。仅需执行几个步骤即可进行设置。
首先,为您的机器人的网络聊天实例添加一个ID为ID的div,以使其锚定。在此示例中,id为“网聊”。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Bot Chat</title>
<style>
#webchat,
#webchat>* {
border: 1px solid #333;
float: left;
min-height: 600px;
height: 600px;
position: relative;
width: 460px;
}
</style>
</head>
<body>
<div class="example">
<h2>Back Channel Bot</h2>
<div id="webchat"></div>
接下来,您将希望在html页面中包含以下脚本。请记住,您应该不将密码存储在浏览器或客户端应用中。为了简单起见,将其包含在此处。
这就是正在发生的事情。您使用Direct Line机密(通过Azure机器人中的通道设置)来生成令牌。令牌用于实例化机器人网络聊天控件。在此示例中,用户的位置作为活动对象保存在商店的有效负载中。这会在任何POST_ACTIVITY事件(即用户与机器人互动)上发送到机器人。
<script src='https://code.jquery.com/jquery-3.3.1.min.js'></script>
<script src='https://cdn.botframework.com/botframework-webchat/master/webchat.js'></script>
<script src='https://unpkg.com/simple-update-in/dist/simple-update-in.production.min.js'></script>
<script>
(async function () {
// To talk to your bot, you should use the token exchanged using your Direct Line secret.
// You should never put the Direct Line secret in the browser or client app.
const res = await fetch('https://directline.botframework.com/v3/directline/tokens/generate', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + secret
},
json: true
});
const { token } = await res.json();
let location = window.location.href;
let store = window.WebChat.createStore(
{},
({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
// simple-update-in is used to update the "action"
action = window.simpleUpdateIn(action, ['payload', 'activity', 'channelData', 'location'], () => location);
}
return next(action);
}
);
window.WebChat.renderWebChat({
directLine: window.WebChat.createDirectLine({ token }),
store,
styleOptions: {
botAvatarInitials: 'BF',
userAvatarInitials: 'WC'
}
}, document.getElementById('webchat'));
document.querySelector('#webchat > *').focus();
})().catch(err => console.error(err));;
</script>
</body>
</html>
在漫游器端,漫游器正在侦听传入的消息。活动对象将包含您发送的数据,并且看起来像这样:
channelData: { clientActivityID: '15469824216440.emdrovn0f5h', location: 'http://localhost:3000/' }
希望有帮助!