将查询字符串从机器人传递到 html 页面
Passing query strings from bot to html page
在 Microsoft Bot Framework 中 - botbuilder v.3.15.0
在没有任何查询字符串的情况下从 bot 打开 url - 它完美地工作 - 并打开外部 url (之前定义的 var urlExt,或者只是普通的 'https://some.html') 单击机器人中的按钮时... - 在 Bot Framework Emulator、Azure Web Chat、Messenger 和 Telegram 中 - 完全正常。
lib.dialog('/', [
function (session, args) {
args = args || {};
// var pkey1 = 'fdsa'; // dummy variable, url with querystring with this dummy works ok on all channels!
// var rkey1 = 'asdf'; // dummy variable, url with querystring with this dummy works ok on all channels!
var pkey1 = session.logger.address.conversation.id;
var rkey1 = session.logger.address.user.id;
console.log(pkey1); // correctly shows conversation id in console locally
console.log(rkey1); // correctly shows user id in console locally
var urlMap = `https://mymap.azurewebsites.net/?cid=${pkey1}&uid=${rkey1}`;
var urlExt = encodeURI(urlMap);
setTimeout(function () {
var addressCard = new builder.HeroCard(session)
.title('address_title')
.subtitle('address_subtitle')
.images([
new builder.CardImage(session)
.url('https://somedb.blob.core.windows.net/images/ab_small.png')
.alt('Here comes some pic')
])
.buttons([
builder.CardAction.openUrl(session, urlExt, 'Just do it!')
]);
session.send(new builder.Message(session)
.addAttachment(addressCard));
}, 1000)
},
function (session, results) {
// some further code
}
]);
但是当您尝试将查询字符串插入到 urlExt 中时 - 通过从 'session' 中获取它的参数 conversation.id 和 user.id - 通过创建取值的变量conversation.id 和 user.id 来自 'session',然后将这些变量插入 urlExt(通过 '+' 连接,或通过 `` ${} 方法)它在本地工作模拟器 - 但不在 Azure Web Chat 或 Messenger 或 Telegram 上。
当我试图找到这个问题的原因时,我尝试不从 'session' 中获取 conversation.id 或 user.id,而是插入一些带有文本的虚拟变量以将它们转发到html 页面通过将这些变量作为查询字符串的一部分插入 - 它工作......:(
真的很奇怪,问题似乎出在从 'session' 获取 conversation.id & user.id 到 Azure 门户中的变量。
但为什么它在我的笔记本电脑上可以在本地完美运行?
Azure 上的日志说:
TypeError: Cannot read property 'conversation' of undefined
我查看了 Whosebug - 关于它的信息为零,我查看了 GitHub 中的各种代码 - 没有答案...
请、提示或帮助...
会话记录器仅在某些通道上启用,这就是为什么您的代码在模拟器中有效,但在 Azure 和 Microsoft Teams 上的 WebChat 测试中无效。不是从 logger
属性获取对话和用户 ID,而是从 message
属性 访问它们。
var pkey1 = session.message.address.conversation.id;
var rkey1 = session.message.address.user.id;
希望对您有所帮助!
在 Microsoft Bot Framework 中 - botbuilder v.3.15.0
在没有任何查询字符串的情况下从 bot 打开 url - 它完美地工作 - 并打开外部 url (之前定义的 var urlExt,或者只是普通的 'https://some.html') 单击机器人中的按钮时... - 在 Bot Framework Emulator、Azure Web Chat、Messenger 和 Telegram 中 - 完全正常。
lib.dialog('/', [
function (session, args) {
args = args || {};
// var pkey1 = 'fdsa'; // dummy variable, url with querystring with this dummy works ok on all channels!
// var rkey1 = 'asdf'; // dummy variable, url with querystring with this dummy works ok on all channels!
var pkey1 = session.logger.address.conversation.id;
var rkey1 = session.logger.address.user.id;
console.log(pkey1); // correctly shows conversation id in console locally
console.log(rkey1); // correctly shows user id in console locally
var urlMap = `https://mymap.azurewebsites.net/?cid=${pkey1}&uid=${rkey1}`;
var urlExt = encodeURI(urlMap);
setTimeout(function () {
var addressCard = new builder.HeroCard(session)
.title('address_title')
.subtitle('address_subtitle')
.images([
new builder.CardImage(session)
.url('https://somedb.blob.core.windows.net/images/ab_small.png')
.alt('Here comes some pic')
])
.buttons([
builder.CardAction.openUrl(session, urlExt, 'Just do it!')
]);
session.send(new builder.Message(session)
.addAttachment(addressCard));
}, 1000)
},
function (session, results) {
// some further code
}
]);
但是当您尝试将查询字符串插入到 urlExt 中时 - 通过从 'session' 中获取它的参数 conversation.id 和 user.id - 通过创建取值的变量conversation.id 和 user.id 来自 'session',然后将这些变量插入 urlExt(通过 '+' 连接,或通过 `` ${} 方法)它在本地工作模拟器 - 但不在 Azure Web Chat 或 Messenger 或 Telegram 上。
当我试图找到这个问题的原因时,我尝试不从 'session' 中获取 conversation.id 或 user.id,而是插入一些带有文本的虚拟变量以将它们转发到html 页面通过将这些变量作为查询字符串的一部分插入 - 它工作......:(
真的很奇怪,问题似乎出在从 'session' 获取 conversation.id & user.id 到 Azure 门户中的变量。
但为什么它在我的笔记本电脑上可以在本地完美运行?
Azure 上的日志说:
TypeError: Cannot read property 'conversation' of undefined
我查看了 Whosebug - 关于它的信息为零,我查看了 GitHub 中的各种代码 - 没有答案...
请、提示或帮助...
会话记录器仅在某些通道上启用,这就是为什么您的代码在模拟器中有效,但在 Azure 和 Microsoft Teams 上的 WebChat 测试中无效。不是从 logger
属性获取对话和用户 ID,而是从 message
属性 访问它们。
var pkey1 = session.message.address.conversation.id;
var rkey1 = session.message.address.user.id;
希望对您有所帮助!