Передача строк запроса от бота на html-страницу

В Microsoft Bot Framework - botbuilder v.3.15.0

При открытии URL-адреса от бота без каких-либо строк запроса - он отлично работает - и открывает внешний URL-адрес (ранее определенный var urlExt или просто `` https: //some.html '') при нажатии кнопки в боте ... - в эмуляторе Bot Framework, Azure Web Чат, мессенджер и 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.info(pkey1); // correctly shows conversation id in console locally
    console.info(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 - беря ее параметры talk.id и user.id из 'session' - создавая переменные, которые принимают значения talk.id и user.id из 'session', а затем вставляя эти переменные в urlExt (либо путем конкатенации '+', либо методом `$ {} ', он работает локально в эмуляторе, но не в веб-чате Azure, Messenger или Telegram.

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

На самом деле странно, проблема, похоже, связана с получением talk.id и user.id из «сеанса» в переменные на портале Azure.

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

Журналы в Azure говорят, что:

TypeError: Cannot read property 'conversation' of undefined

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

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

Можете ли вы добавить часть вашего кода, в которой вы берете переменные из сеанса и создаете свой URL?

tdurnford 17.01.2019 19:53

Код обновлен.

IAmBotmaker 19.01.2019 06:00
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
2
291
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Большое спасибо, тдурнфорд, это сработало как шарм!

IAmBotmaker 30.01.2019 02:52

Не могли бы вы помочь мне с другим вопросом? Когда я console.info 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 цифр ...

IAmBotmaker 13.02.2019 05:26

Другие вопросы по теме