Передача строк запроса от бота на html-страницу - PullRequest
0 голосов
/ 16 января 2019

В Microsoft Bot Framework - botbuilder v.3.15.0

При открытии URL-адреса из бота без каких-либо строк запроса - он отлично работает - и открывает внешний URL-адрес (ранее определенный var urlExt или просто выводит 'https://some.html') при нажатии на кнопку в боте ... - в Эмулятор Bot Framework, веб-чат 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 - взяв ее параметры разговор.ид и user.id из 'сеанса' - создав переменные, которые принимают значения разговор.ид и user.id из 'сеанса', а затем вставляя эти переменные в urlExt (либо путем конкатенации «+», либо методом «$ {}»), он работает локально в эмуляторе, но не в веб-чате Azure, а также в Messenger или Telegram.

Когда я пытался найти причину этой проблемы, я старался не захватывать разговор.ид или user.id из «сеанса», а просто вставить некоторые фиктивные переменные с текстом, чтобы переслать их на html-страницу, вставив эти переменные как часть строки запроса - ЭТО РАБОТАЕТ ... :(

Действительно странно, что проблема, похоже, заключается в том, что с помощью session.id & user.id в файле session.id пересылаются в переменную на портале Azure.

Но почему он отлично работает локально на моем ноутбуке?

В журналах Azure говорится, что:

TypeError: Невозможно прочитать свойство 'разговор' с неопределенным

Я посмотрел в stackoverflow - там есть ноль информации об этом, я посмотрел различный код на GitHub - НЕТ ОТВЕТОВ ...

Пожалуйста, намекните, или помогите ...

1 Ответ

0 голосов
/ 21 января 2019

Регистратор сеансов включается только на определенных каналах, поэтому ваш код работает в эмуляторе, но не в Test in WebChat в Azure и Microsoft Teams. Вместо того, чтобы получать диалоги и идентификаторы пользователей из атрибута logger, обращайтесь к ним из свойства message.

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

Надеюсь, это поможет!

...