使用每条消息将channelData发送到网络聊天

时间:2017-10-20 13:14:36

标签: javascript botframework webchartcontrol

我正在尝试使用从页面中的bot webchat控件发送的每条消息注入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"));

2 个答案:

答案 0 :(得分:0)

看起来Babel有a plugin,它使用Object.assign将Spread运算符转换为等效代码。这并不能完全解决您的问题,因为IE仍然不支持Object.assign - 在Babel的情况下,Object.Assign包含了一个polyfill。虽然在您的项目中包含Babel可能有点过分,但MDN has sample code可能更合理地包含一个简单的独立Object.assign polyfill。

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

  

在:

z = { x, ...y };
     

输出:

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

答案 1 :(得分: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")
);