使用Botkit,如何在convo.ask()中接收(和处理)用户对Slack Block kit交互式组件的响应?

问题描述 投票:0回答:1

我正在使用Botkit v4.5为Slack构建交互式聊天机器人。

我使用yeoman生成器,该生成器使用botkit-slack-adapter连接到Slack平台。

为了显示交互式组件,我正在使用Slack的Block Kit交互式组件。

我正在使用convo.ask()显示选择菜单(下拉菜单)以及问题。当用户选择一个特定的选项时,我希望能够在处理程序中处理该选项的值(通常在输入文本输入时会发生这种情况),然后继续进行操作。

但是发生的是对话没有继续,并且再次显示相同的选择菜单。只要我们继续选择一个选项,这种情况就会持续发生。

我尝试使用显示选择菜单的附件形式(现在不建议使用),但是面临相同的问题。有趣的是,使用Botkit v0.7(不建议使用)时不存在此问题。如果使用选择菜单的附件形式,则可以处理响应并继续进行对话。

我添加了所有事件类型,例如'interactive_message_callback','block_actions'和'interactive_message'。

[此外,我尝试添加中间件以将字段text添加到消息对象,即message.text =“ some random text”,但即使这样对话也无法进行。

const {BotkitConversation} = require('botkit');
module.exports = function(controller) {
    let dialogid = "dialog-1";
    let convo = new BotkitConversation(dialogid, controller);
    convo.addQuestion({
        blocks : [
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": "Pick an item from the dropdown list"
                },
                "accessory": {
                    "type": "static_select",
                    "placeholder": {
                        "type": "plain_text",
                        "text": "Select an item",
                        "emoji": true
                    },
                    "options": [
                        {
                            "text": {
                                "type": "plain_text",
                                "text": "Choice 1",
                                "emoji": true
                            },
                            "value": "value-0"
                        },
                        {
                            "text": {
                                "type": "plain_text",
                                "text": "Choice 2",
                                "emoji": true
                            },
                            "value": "value-1"
                        },
                        {
                            "text": {
                                "type": "plain_text",
                                "text": "Choice 3",
                                "emoji": true
                            },
                            "value": "value-2"
                        }
                    ]
                }
            }
        ]
    },
    [
        {
            default : true,
            type : 'string',
            handler : async(res, convo, bot) => {
                console.log(res);
                await bot.say("Hello");
            }
        }
    ]);

    controller.addDialog(convo);
    controller.hears(['test'], 'message, direct_message, interactive_message, interactive_message_callback, block_actions, direct_mention', async (bot, message) => {
        await bot.beginDialog(dialogid);
    })
}

期望:如果我们在选择菜单中选择选择1,则应该执行处理程序并打印value-1(这是res变量的值),并且机器人应以Hello响应,即convo应该继续进行。实际结果:再次显示相同的下拉列表,并且convo无法继续。

我正在使用Botkit v4.5,节点:10.15.3,操作系统:Ubuntu 18.04,

node.js chatbot slack botkit
1个回答
0
投票

您在这里找到问题了吗?我有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.