В 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 - НЕТ ОТВЕТОВ ...
Подскажите, пожалуйста, или помогите ...
Код обновлен.






Регистратор сеансов включен только на определенных каналах, поэтому ваш код работает в эмуляторе, но не в тесте в WebChat в Azure и Microsoft Teams. Вместо того, чтобы получать диалоги и идентификаторы пользователей из атрибута logger, обращайтесь к ним из свойства message.
var pkey1 = session.message.address.conversation.id;
var rkey1 = session.message.address.user.id;
Надеюсь это поможет!
Большое спасибо, тдурнфорд, это сработало как шарм!
Не могли бы вы помочь мне с другим вопросом? Когда я 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 цифр ...
Можете ли вы добавить часть вашего кода, в которой вы берете переменные из сеанса и создаете свой URL?