【发布时间】:2019-01-16 06:09:42
【问题描述】:
在 Microsoft Bot Framework - botbuilder v.3.15.0
在没有任何查询字符串的情况下从 bot 打开 url - 它完美地工作 - 并在单击 bot 中的按钮时打开外部 url(以前定义的 var urlExt,或者只是简单的'https://some.html')... - 在 Bot框架模拟器、Azure 网络聊天、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 时 - 通过从“会话”中获取参数 conversation.id 和 user.id - 通过创建从“会话”中获取会话值和 user.id 值的变量,然后将这些变量插入 urlExt(通过 '+' 连接,或通过 ``${} 方法),它可以在模拟器本地工作 - 但不能在 Azure 网络聊天、Messenger 或 Telegram 上工作。
当我试图找到这个问题的原因时,我试图不从“会话”中获取会话 ID 或用户 ID,而只是插入一些带有文本的虚拟变量,通过插入这些变量作为一部分将它们转发到 html 页面查询字符串的 - IT WORKS ...:(
真的很奇怪,问题似乎在于将会话 ID 和用户 ID 从“会话”获取到 Azure 门户中的变量。
但为什么它在我的笔记本电脑上本地完美运行?
Azure 上的日志表明:
TypeError:无法读取未定义的属性“对话”
我查看了 stackoverflow - 关于它的信息为零,我查看了 GitHub 上的各种代码 - 没有答案...
请、提示或帮助...
【问题讨论】:
-
你能在你的代码中添加你从会话中获取变量并创建你的 URL 的部分吗?
-
代码更新了。
标签: html node.js botframework query-string azure-bot-service