【问题标题】:Sending channelData to webchat with each message使用每条消息将 channelData 发送到网络聊天
【发布时间】:2017-10-23 22:18:33
【问题描述】:

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

【问题讨论】:

标签: javascript botframework webchartcontrol


【解决方案1】:

看起来 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);

【讨论】:

    【解决方案2】:

    刚刚结束了这个循环,我和一些了解他们的 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")
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 2015-12-19
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      相关资源
      最近更新 更多