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