将查询字符串从漫游器传递到HTML页面

时间:2019-01-16 06:09:42

标签: html node.js botframework query-string azure-bot-service

在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上的各种代码-没有答案...

请,提示或帮助...

1 个答案:

答案 0 :(得分:1)

仅在某些通道上启用了会话记录器,这就是为什么您的代码可以在模拟器中工作,而不能在Azure和Microsoft Teams的WebChat中的测试中工作的原因。与其从logger属性中获取对话和用户ID,不如从message属性中访问它们。

var pkey1 = session.message.address.conversation.id;
var rkey1 = session.message.address.user.id;

希望这会有所帮助!