【问题标题】:How to add Get Started button in the typing bar using bot builder sdk for node.js如何使用 bot builder sdk for node.js 在打字栏中添加“开始”按钮
【发布时间】:2019-01-10 06:22:48
【问题描述】:

我正在使用 node.js 的 bot builder sdk 创建聊天机器人。还将它连接到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) => {
    }
]);

上面的代码工作正常,但我想在输入栏中添加“开始”按钮来调用上面的代码。请注意,此按钮仅出现一次。请在下面找到输入栏的图片:

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

谢谢

【问题讨论】:

  • 当您说要添加一个按钮时,您是指在实际的文本输入部分(其中显示“键入消息”)还是在其上方的聊天框中?
  • @JJ_Wailes 我可以看到图像中的输入栏有 6 个停靠在右侧的按钮。我想这就是按钮应该去的地方。
  • @AshyAshcsi 任何给定输入栏中可用的按钮往往特定于您正在聊天的网站、应用程序等,因此在很大程度上超出了 Bot Framework 的范围。自定义按钮必须是托管聊天系统的服务的一项功能。我认为做你想做的事情的最好方法是让机器人在其初始消息之一中显示一个“开始”按钮,也许当用户寻求帮助时。或者,如果您真的想控制输入栏中的按钮,您可以考虑制作自己的网站。
  • @AshyAshcsi 我想你的截图是从 Facebook 截取的。我还没有找到任何方法来自定义 Facebook 中的聊天按钮,如果我不能以普通用户的身份做到这一点,那么我就不希望机器人能够做到这一点。请记住,机器人大多只是以普通用户的方式交谈,并且对其环境没有重大控制。作为普通用户,请考虑您是否希望能够通过聊天窗口访问并影响其他用户机器上的环境设置! (续)
  • @KyleDelaney,我希望按钮出现在输入栏中。我已经为其他信使聊天机器人看到了它。如果不是,我想显示消息和开始按钮,甚至在会话开始之前。如下所示:builder.Prompts.choice(session, "Welcome", "Get Started");我问是因为我已经看到其他几个聊天机器人的按钮出现了。谢谢

标签: node.js azure botframework facebook-messenger


【解决方案1】:

我尝试了上述选项,但它们似乎不适用于 facebook 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"
  }
}

上述 API 调用将为您添加开始对话的按钮。

感谢大家的帮助!!

【讨论】:

    【解决方案2】:

    虽然当然可以添加一个按钮来启动机器人的任何活动,但这会将机器人的潜力限制在一个可定制的渠道,即网络聊天。

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

    第一

    我建议添加一个conversation update 事件。代码进入botbuilder's 中间件。这是来自文档的示例代码。

    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);
    });
    

    这将做的是让机器人向用户发送消息Send me a Hi,如果它确定这是第一次访问者。这将为访问者提供足够的提示,通过键入它来发送机器人 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);
            }
        }
    });
    

    在这里,我们将机器人创建和对话注册分为 2 个步骤。在注册 firstRun 对话框时,我们为其提供了 triggerAction,如果访问者是新的,则触发此对话框。

    这两种方法都不使用添加一些额外的按钮,而是由机器人来教育他发送一些消息,这反过来将启动第一个对话或直接启动一些对话。

    关于conversationEvent的更多信息可以参考这个page

    【讨论】:

      猜你喜欢
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 2017-06-07
      • 2018-10-06
      • 2021-10-20
      • 2015-08-29
      相关资源
      最近更新 更多