You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Botman在Slack中实现下拉菜单选择后触发对话框?

在Botman的Slack应用中实现下拉菜单选值后触发对话框

嘿,我之前做过类似的Botman+Slack开发,给你一步步拆解怎么实现这个需求:

1. 确保Botman能接收Slack的交互回调

首先,你的Botman后端必须正确配置Slack的交互路由——下拉菜单的选择事件是Slack通过POST请求发送到你的服务的。比如在Laravel项目里,你需要把Botman的webhook路由加到CSRF白名单中,避免请求被拦截:

// 在app/Http/Middleware/VerifyCsrfToken.php里添加
protected $except = [
    '/botman', // 你的Botman webhook路由
];

2. 监听下拉菜单的交互事件

当用户选择下拉菜单里的选项时,Slack会触发interactive_message事件,你需要在Botman中监听这个事件,获取选中的值并触发对话框:

$botman->hears('interactive_message', function ($bot) {
    // 获取Slack的交互payload
    $payload = $bot->getMessage()->getPayload();
    
    // 验证这是下拉菜单的选择操作
    if (isset($payload['actions'][0]['selected_option']) && $payload['actions'][0]['type'] === 'static_select') {
        // 获取用户选中的值
        $selectedValue = $payload['actions'][0]['selected_option']['value'];
        
        // 可以根据选中的值自定义对话框内容
        $dialogConfig = [
            'callback_id' => 'custom_dialog_callback',
            'title' => '请补充信息',
            'submit_label' => '提交',
            'elements' => [
                [
                    'type' => 'text',
                    'label' => '联系人',
                    'name' => 'contact',
                    'placeholder' => '输入你的姓名'
                ],
                [
                    'type' => 'email',
                    'label' => '邮箱',
                    'name' => 'email',
                    'placeholder' => '你的工作邮箱'
                ]
            ]
        ];
        
        // 调用Slack API打开对话框,trigger_id必须从当前payload获取(有效期5分钟)
        $bot->driver->sendDialog($dialogConfig, $payload['trigger_id']);
    }
});

3. 给下拉菜单设置唯一标识(可选但推荐)

如果你的应用里有多个下拉菜单,建议给每个下拉组件设置action_id,这样在监听事件时可以精准区分是哪个下拉的操作:

// 创建下拉菜单时设置action_id
$bot->reply(ButtonTemplate::create(
    '请选择项目类型',
    [
        ElementCollection::create()->addElements([
            SelectElement::create('项目类型')
                ->setActionId('project_type_select')
                ->addOption(Option::create('开发项目', 'dev'))
                ->addOption(Option::create('测试项目', 'test'))
        ])
    ]
));

然后在监听逻辑里增加判断:

if ($payload['actions'][0]['action_id'] === 'project_type_select') {
    // 处理这个下拉菜单的选择逻辑
}

4. 确认Slack权限配置

确保你的Slack Bot Token拥有以下权限:

  • chat:write:允许Bot发送消息和对话框
  • dialog:write:允许Bot创建和打开对话框
    这些权限需要在Slack开发者后台的Bot Token Scopes中添加。

注意事项

  • trigger_id是一次性的,且只有5分钟有效期,必须在收到交互事件后立即使用它调用对话框API
  • 对话框的callback_id用来标识后续的提交事件,你可以后续监听这个ID来处理用户提交的表单数据

内容的提问来源于stack exchange,提问作者Lohith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:49:56