在Microsoft Bot Framework中-botbuilder v.3.15.0
在没有任何查询字符串的情况下从bot打开url时-可以正常使用-并在bot中单击按钮时打开外部url(以前定义的var urlExt或只是简单的'https://some.html')...-在Bot Framework模拟器,Azure Web聊天,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'中获取参数session.id和user.id-通过使变量从'session'中获取session.id和user.id的值,然后将这些变量插入urlExt中(通过“ +”串联,或通过``$ {}方法),它可以在模拟器中本地工作-但不适用于Azure Web Chat,Messenger或Telegram。
当我尝试查找此问题的原因时,我尝试不从“会话”中获取session.id或user.id,而只是插入一些带有文本的虚拟变量,以将这些变量作为部分插入到html页面中查询字符串-IT WORKS ... :(
真的很奇怪,问题似乎出在从“会话”中获取session.id和user.id到Azure Portal的变量。
但是为什么它可以在我的笔记本电脑上完美地在本地运行?
登录Azure时会说:
TypeError:无法读取未定义的属性“会话”
我看过stackoverflow-有关于它的零信息,我看过GitHub上的各种代码-没有答案...
请,提示或帮助...
答案 0 :(得分:1)
仅在某些通道上启用了会话记录器,这就是为什么您的代码可以在模拟器中工作,而不能在Azure和Microsoft Teams的WebChat中的测试中工作的原因。与其从logger
属性中获取对话和用户ID,不如从message
属性中访问它们。
var pkey1 = session.message.address.conversation.id;
var rkey1 = session.message.address.user.id;
希望这会有所帮助!