MS BotBuilder:机器人如何在网络聊天开始时接收参数并发起对话

Posted

技术标签:

【中文标题】MS BotBuilder:机器人如何在网络聊天开始时接收参数并发起对话【英文标题】:MS BotBuilder : How can the bot receive parameters and initiate conversation at webchat start 【发布时间】:2017-09-03 17:42:03 【问题描述】:

我正在使用直线方法与这个机器人通信:

var connector = new builder.ChatConnector(
    appId: process.env.MICROSOFT_APP_ID || config.appId,
    appPassword: process.env.MICROSOFT_APP_PASSWORD || config.appPassword
);


// Initialize bot
var bot = universalBot(connector);

var server = restify.createServer();

server.listen(process.env.port || port, function () 
    console.log('%s listening to %s', server.name, server.url);
);



var botListener = connector.listen();
server.post('/api/messages', (req, resp) => 
    token = req.query.token;
    console.log(token); //prints the token to the terminal
    botListener(req, resp);
);

var msg = new builder.Message()
        .text(notification);
        //.address(address)

    bot.send(msg, function (err) 
        // Return success/failure
        res.status(err ? 500 : 200);
        res.end();
    );

为了主动发送消息,我仍然需要用户地址和对话 ID。

有没有办法在浏览器上进行初始化时获取这些信息;

var bot = 
                id: params['botid'] || 'botid',
                name: params['botname'] || 'botname',
                screen: params['screen'] || null
            ;

 BotChat.App(
                directLine: 
                    //secret: params['s'],
                    token: params['t'],
                    //domain: params['domain'],
                    //webSocket: params['webSocket']
                ,
                user: user, //Need to access this user object at server on the webchat start
                bot: bot
            , document.getElementById("BotChatGoesHere"));

或者当用户在浏览器中加载 html 时机器人可以开始对话的任何其他方式。

更新:conversationUpdate 对话框用于触发和启动对话,但我如何访问在 conversationUpdate 对话框中发送的参数(令牌)和用户对象?

谢谢

【问题讨论】:

您是否要发送欢迎信息? Microsoft Bot framework: Sending Message on connect的可能重复 @EzequielJadib 部分,这里我也需要发送一个令牌参数,请参阅更新。谢谢 为什么首先需要令牌?听起来有些不对劲,您需要将令牌发送给机器人。 我需要令牌来通过 Web 服务进行身份验证。如果不是令牌,无论如何我可以在那里获取用户对象? 【参考方案1】:

如果我对您的理解正确,您希望您的机器人在网络聊天加载的那一刻提示用户Hi, what can I help you with today?,对吗?我没有尝试过直线,总是使用提供的iframe,这是我在我的机器人中发送欢迎消息的操作:

bot.on('conversationUpdate', (message) => 
    (message.membersAdded || [])
        .filter((identity) => identity.id == message.address.bot.id)
        .forEach((identity) => 
            const reply = new builder.Message()
                .address(message.address)
                .text("Hi, How can I help you today?");

            bot.send(reply);
        );
);

【讨论】:

【参考方案2】:

我相信您正在寻找的是backchannel。有了这个,您可以将值发送到您的机器人。反向通道文档位于该 repo 的自述文件的底部。

【讨论】:

以上是关于MS BotBuilder:机器人如何在网络聊天开始时接收参数并发起对话的主要内容,如果未能解决你的问题,请参考以下文章

BotBuilder Nodejs示例查看

在使用 MS Bot 框架 V4 的 MS 团队聊天机器人中按下英雄卡上的任何按钮后会发出成功通知

Bot Emulator 连接到另一台机器上的 Node.js 服务

BotBuilder Python - 处理多个对话和意图

从 Viber bot 向 botbuilder-viber 发送消息时出现错误 ERR_INVALID_ARG_TYPE

用 Perl 语言 Mojo::Weixin 模组开发微信聊天机器人