【问题标题】:Passing query strings from bot to html page将查询字符串从 bot 传递到 html 页面
【发布时间】: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


【解决方案1】:

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

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

希望这会有所帮助!

【讨论】:

  • 非常感谢,tdurnford,它的作用就像一个魅力!
  • 你能帮我解决另一个问题吗?当我控制台记录 session.message.address 时,它显示 session.message.address.conversation、session.message.address.user、session.message.address.channelId - 特定于特定用户的变量和 session.message.address .serviceUrl, session.message.address.bot - 常量(一般) - 但是 session.message.address.id 是什么? 我有一些 11 位长的字符串...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多