将查询字符串从机器人传递到 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;

希望对您有所帮助!