我们已经使用ms bot框架创建了一个bot,并希望向bot传递一些用户不会输入的数据。就像我在想,我们是否可以将查询字符串传递到下面的web频道。
https://webchat.botframework.com/embed/myformbot?s=XXXXXX
从bot api代码中,我可以以某种方式读取这个querystring参数。。。理想情况下,我知道我们不能控制上面的webchat链接,我们只允许访问bot api。但这是可能的,还是通过其他方式将用户未输入的数据传递给bot?
我们计划在iframe中显示指向不同站点的web频道url,并希望通过当前浏览的url来识别用户从何处开始对话。
谢谢西德哈特
这很容易使用BotFrame-Webchat库完成。只有几个步骤可以让你自己安装。
首先,包含一个div,其中包含一个id,供bot的webchat实例锚定。在本例中,id为“webchat”。
<!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页面中包含以下脚本。请记住,您不应该将您的秘密存储在浏览器或客户端应用程序中。为了简单起见,这里包括了它。
事情是这样的。使用直通线路秘密(来自Azure机器人中的通道设置)生成令牌。令牌用于实例化bot网络聊天控件。在该示例中,用户的位置被保存在商店的有效载荷中作为活动对象。这将在任何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>
在bot端,bot正在侦听传入消息。“活动”对象将包含您发送的数据,其外观如下:
channelData: { clientActivityID: '15469824216440.emdrovn0f5h', location: 'http://localhost:3000/' }
希望得到帮助!
问题内容: 我正在查询页面上,用户在其中选择一个代表不同类型的值,每个值由一个ID标识。问题是使用WHERE IN方法从数据库中选择这些ID。 这是我的SQL语句 它将适用于一个单一值,例如。46,但如果值放在方括号中则不是,例如。(46)或(‘46’),即IN的方式。 我使用的是Visual Studio,它会自动生成访问表适配器以获取值的方法,所以我认为我必须通过SQL来做到这一点。 我正在传
问题内容: 如何在sql查询中传递java字符串变量。我已经完成了所有JDBC连接。 我的SQL数据库查询是 它不起作用。但是,如果我执行以下代码,其工作原理 现在告诉我如何将变量名传递给sql查询以执行此操作。Jst告诉我如何将变量locationnames传递给comp.name。 我完整的Java函数如下所示:locationCombo表示在组合框中选择的项目。CropCombo也表示相同的
问题内容: 是否存在通过查询字符串传递数组的标准方法? 需要明确的是,我有一个带有多个值的查询字符串,其中一个是数组值。我希望将该查询字符串值视为一个数组-我不希望该数组爆炸,以使其与其他查询字符串变量没有区别。 编辑: 根据@Alex的答案,没有标准的方法可以执行此操作,因此我的后续工作是什么才是 识别 我正在读取的参数同时是 PHP 和 Javascript 数组的简单方法? 用相同的名称命名
我试图在php脚本和c程序之间传递参数。我的php脚本如下所示 然后我想我的c程序返回给我一个字符串(但我真的不知道怎么做),你能帮忙吗?
问题内容: 我正在使用AngularJS路由,并试图查看如何使用查询字符串(例如 )。Angular无法理解包含相同名称的键值对的路由: 问题答案: 我认为路由不适用于查询字符串。可以使用 如下方式而不是使用更RESTful的URL,然后按以下方式定义路由: 或许
问题内容: 我正在尝试通过使用JSON格式的字符串初始化Javascript变量来加载数据表。如果我声明: 那么我的表将正确加载该行。 我尝试在脚本之前初始化Java字符串,然后将该对象传递给Javascript变量,如下所示: 我的表无法识别这一点,并且在尝试以这种方式传递行时无法加载该行。如何正确地将Java字符串传递给Javascript,以便我的表能够加载数据? 问题答案: 尝试使用引号。