将通道数据与每条消息一起发送到网络聊天



我正在尝试将 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"));

看起来 Babel 有一个插件,可以使用 Object.assign 将 Spread 运算符转换为等效代码。这并不能完全解决您的问题,因为IE仍然不支持Object.assign - 在Babel的情况下,Object.Assign包含一个polyfill。虽然在你的项目中包括 Babel 可能有点矫枉过正,但 MDN 有一个简单的独立Object.assign polyfill 的示例代码,可能包含起来可能更合理。

如果这是一个令人满意的依赖关系,那么一旦Object.assign可供您跨浏览器使用,Babel 文档建议这两行代码是等效的:

在:

z = { x, ...y };

外:

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

只是关闭了这个循环,我与一些了解他们的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")
);

相关内容

  • 没有找到相关文章

最新更新