我正在使用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,
您在这里找到问题了吗?我有同样的问题。