Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用bot builder sdk for node.js在键入栏中添加“入门”按钮_Node.js_Azure_Botframework_Facebook Messenger - Fatal编程技术网

如何使用bot builder sdk for node.js在键入栏中添加“入门”按钮

如何使用bot builder sdk for node.js在键入栏中添加“入门”按钮,node.js,azure,botframework,facebook-messenger,Node.js,Azure,Botframework,Facebook Messenger,我正在使用bot builder sdk for node.js创建聊天机器人。还将其连接到facebook频道。我使用以下代码来问候用户: var bot = new builder.UniversalBot(connector, [ (session, result, next) => { let text = ''; switch(session.message.address.channelId) { case 'f

我正在使用bot builder sdk for node.js创建聊天机器人。还将其连接到facebook频道。我使用以下代码来问候用户:

var bot = new builder.UniversalBot(connector, [
    (session, result, next) => {

        let text = '';
        switch(session.message.address.channelId) {
            case 'facebook':
                text = 'Hi ' + session.message.user.name + ' !';
                break;    
            default:
                text = 'Hi !';
        }        

        session.sendTyping();
        session.say(text);
        next();
    },
    (session, say) => {
    }
]);
上面的代码工作正常,但我想在输入栏中添加“Get Started”按钮来调用上面的代码。请注意,此按钮仅显示一次。请在下面找到键入栏的图像:

有没有办法使用bot builder sdk for node.js实现这一点


谢谢

尽管可以添加一个按钮来启动机器人的任何活动,但这将限制机器人的潜力,使其只能使用一个可定制的频道,即WebChat

我认为有两种更好的替代方法可以获得所需的功能,这些功能可以跨多个渠道工作

首先

我建议添加一个
对话更新
事件。代码进入botbuilder的中间件。下面是文档中的示例代码

bot.on('conversationUpdate', function (message) {
if (message.membersAdded && message.membersAdded.length > 0) {
    // Say hello
    var txt = "Send me a Hi";
    var reply = new builder.Message()
            .address(message.address)
            .text(txt);
    bot.send(reply);
});
如果机器人确定这是第一次访问,它将向用户发送一条消息并向我发送一个Hi。这将为访问者提供足够的提示,通过键入bot来发送Hi。虽然他可以输入他想要的任何内容,但这将导致调用配置的第一个对话框,在本例中,该对话框将是您发布的有问题的对话框

如果您的机器人从未遇到过此访问者,您可以将某些对话框标记为自动调用。下面是示例代码

var bot = new builder.UniversalBot(connector);
bot.dialog('firstRun', function (session) {    
    session.userData.firstRun = true;
    session.send("Hello...").endDialog();
}).triggerAction({
    onFindAction: function (context, callback) {
        // Only trigger if we've never seen user before
        if (!context.userData.firstRun) {
            // Return a score of 1.1 to ensure the first run dialog wins
            callback(null, 1.1);
        } else {
            callback(null, 0.0);
        }
    }
});
在这里,我们将机器人创建和对话框注册分为两个步骤。在注册firstRun对话框时,我们为它提供了triggerAction,如果访问者是新的,则触发此对话框

这两种方法都不使用添加一些额外的按钮,而是由bot来指导他发送一些消息,这些消息将依次启动第一个对话框或直接启动一些对话框


有关conversationEvent的更多信息,请参阅此

我尝试了上述选项,但它们似乎不适用于facebook messenger。但我找到了一个解决方案,将“入门”按钮添加到messenger的输入栏中。为此,我们需要使用Facebook Graph API,而不是bot builder sdk

https://graph.facebook.com/v2.6/me/messenger_profile?access_token=<PAGE_ACCESS_TOKEN>

{ 
  "get_started":{
    "payload":"Get Started"
  }
}
https://graph.facebook.com/v2.6/me/messenger_profile?access_token=
{ 
“开始”:{
“有效负载”:“开始”
}
}
上面的API调用将为您添加启动对话的按钮


谢谢大家的帮助

当你说你想添加一个按钮时,你的意思是在实际文本输入部分(上面写着“键入消息”)还是在上面的聊天框中?@JJ_Wailes我可以看到图像中的键入栏有6个按钮停靠在右侧。我想这就是按钮的作用所在。@AshyAshcsi任何给定的键入栏中可用的按钮往往特定于您正在聊天的网站、应用程序等,因此在很大程度上超出了Bot框架的范围。自定义按钮必须是托管聊天系统的服务的一项功能。我认为最好的方法是让机器人在它的一条初始消息中显示一个“开始”按钮,也许是在用户请求帮助时。或者,如果你真的想控制打字栏中的按钮,你可以考虑制作自己的网站。ASASHASCSI我假定你的截图是从脸谱网拍摄的。我还没有找到任何方法来定制Facebook上的聊天按钮,如果我不能作为一个普通用户来做,那么我就不会指望有一个机器人来做。请记住,机器人大部分只是像普通用户那样在那里说话,它对其环境没有明显的控制。作为一个正常的用户,考虑你是否期望能够通过聊天窗口到达并影响其他用户的机器上的环境设置。(续)@KyleDelaney,我想让按钮出现在打字栏上。我在其他messenger聊天机器人上看到过。如果没有,我想显示消息和开始按钮,甚至在会话开始之前。如下所示:builder.Prompts.choice(会话,“欢迎”,“开始”);我这样问是因为我看到其他聊天机器人上很少出现这个按钮。谢谢