Отправка ChannelData на веб-чат с каждым сообщением

1

Я пытаюсь вставить channelData с каждым сообщением, которое отправляется из элемента управления веб-чата на странице. Я огляделся и нашел этот образец (https://cmsdk.com/javascript/how-to-send-custom-channel-data-when-using-web-chat-client-with-bot-framework.html), и мой код выглядит как код ниже.

Проблема в том, что это работает в Chrome, но оператор распространения (...) не работает на Edge или IE. Есть ли альтернативный синтаксис, который будет работать во всех браузерах?

var user = {
    id: '@User.Identity.Name',
    name: '@User.Identity.Name'
};

var bot = {
    id: BotId,
    name: 'BotName'
};

var botConnect = new BotChat.DirectLine({
    secret: '@ViewData["BotSecret"]',
    webSockets: 'true'
});

var v = { ...botConnect };
debugger;

BotChat.App({
    botConnection: {
        ...botConnect,
        postActivity: activity => {
            activity.channelData = {
                StudentId: '@User.Identity.Name'
            };
            return botConnect.postActivity(activity);
        }
    },
    user: user,
    bot: bot,
    resize: 'detect'
}, document.getElementById("bot"));
  • 0
    Edge должен поддерживать распространение по kangax.github.io/compat-table/es6/#test-spread_(...)_operator
  • 0
    Я думаю, вам нужно вручную включить экспериментальные функции для этого и не хотите, чтобы конечные пользователи должны были это делать. И я не думаю, что есть обходной путь для IE.
Теги:
botframework

2 ответа

0

просто закрывая цикл на этом, я работал с некоторыми парнями, которые знают их JS, и мы реализовали функцию "эквивалентного распространения", которая работает на IE, Chrome и Edge (не тестировались в Safari, но я думаю, что она тоже должна работать там),

IE не понравился оператор =>, поэтому мы также изменили его на функцию, вот результирующий код:

var user = {
    id: '@User.Identity.Name',
    name: '@User.Identity.Name'
};

var bot = {
    id: 'TheBotId',
    name: 'TheBotName'
};

var botConnect = new BotChat.DirectLine({
    secret: 'TheBotSecret',
    webSockets: 'true'
});

// Spread equivalent function
function getBotConnectionDetail(botconnection) {
    var botConnectionDetail = {};
    var keys = Object.keys(botconnection);
    for (var i = 0; i < keys.length; i++) {
        botConnectionDetail[keys[i]] = botconnection[keys[i]];
    };
    botConnectionDetail['postActivity'] = function (activity) {
        activity.channelData = {
            StudentId: '@User.Identity.Name'
        };
        return botconnection.postActivity(activity)
    };
    return botConnectionDetail;
}

// Invokes Bot
BotChat.App({
        botConnection: getBotConnectionDetail(botConnect),
        user: user,
        bot: bot,
        resize: 'detect'
    },
    document.getElementById("bot")
);
0

Похоже, что у Babel есть плагин, который преобразует оператор Spread в эквивалентный код с помощью Object.assign. Это не полностью решает вашу проблему, поскольку IE по-прежнему не поддерживает Object.assign - в случае с Babel для Object.Assign включен Object.Assign. Хотя включение Babel в ваш проект может быть чрезмерным, MDN имеет образец кода для простого автономного Object.assign заполнения Object.assign, который может быть более разумным включить.

Если это приемлемая зависимость, то после того, как Object.assign доступен для кросс-браузера, документация Babel предполагает, что две строки кода эквивалентны:

В:

z = { x, ...y };

Из:

z = Object.assign({ x }, y);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню