OpenClaw怎么通过Slack调用工具?
先解决一个核心问题:OpenClaw和Slack之间的双向集成。如果这一步没配好,消息发过去就是废的,工具根本调用不起来。配置环节涉及Slack App的创建、事件订阅的启用、Slash Command/Block Kit/Message Shortcut的设置,而且签名验证、参数传递、schema加载、敏感字段脱敏,每一步都不能出错。

换句话说,要在Slack里让OpenClaw去调外部工具——比如GitHub、Jira、CI/CD服务——必须先打通双向集成。否则,你的消息不会被识别为可执行指令,工具调用会直接失败。
配置Slack App并启用事件订阅
从哪开始?先搞定Slack App的配置,再把事件订阅打开。
进入Slack管理后台,左侧导航栏找到【Settings & administration】→【Manage apps】→【Build a custom app】→ 选择【From scratch】→ App name填openclaw-slack,开发工作区选目标Workspace。
然后,在【Features】→【Event Subscriptions】里开启事件订阅。Request URL需要填OpenClaw部署后暴露的Webhook地址,比如https://your-openclaw.example.com/slack/events。注意,这个URL必须通过Slack签名验证,不然所有事件都会被直接拒绝。
下面勾选几个关键事件类型:
【app_mention】
【message.channels】
【reaction_added】
注册OpenClaw工具到Slack命令与交互组件
工具注册有几种方法,可以根据场景灵活选择。
先说第一种,用Slash Command绑定单工具。在Slack App设置页的【Features】→【Slash Commands】→【Create New Command】里,Command设为/github-pr,URL指向OpenClaw对应工具路由,比如https://your-openclaw.example.com/tool/github/pr。Description写“创建GitHub Pull Request”,Usage Hint填。
第二种,通过Block Kit构建交互式消息来触发多工具。在【Features】→【Interactive Components】→【Action URLs】中,为每个按钮或下拉菜单项配置独立URL。比如按钮文案“Deploy to Staging”,Action URL就设为https://your-openclaw.example.com/tool/deploy?env=staging。这里有个关键点:URL中必须携带tool_id和user_id参数,否则OpenClaw无法校验调用权限。
第三种,启用Message Shortcut自动解析自然语言指令。在【Features】→【Shortcuts】→【Create Shortcut】里,类型选【Message shortcut】,Callback ID设为openclaw_tool_dispatch。触发后,Slack会把用户选中的消息内容以及上下文元数据POST到OpenClaw指定Endpoint,由OpenClaw内置的NLU模块识别工具意图并路由。这一步要求OpenClaw已经加载了对应工具的schema定义,否则会返回unknown tool错误。
在Slack中实际调用工具
具体操作分四步。
第一步:确保用户在Slack里@了OpenClaw App,比如@openclaw-slack list jira tickets。只有被明确提及,并且消息里包含可识别的动词(如list、create、run、check),OpenClaw才会启动工具调度流程。
第二步:发送后,等待Slack显示“Loading…”状态。如果3秒内没有响应,去检查OpenClaw服务日志,看看有没有出现signature verification failed。这个错误意味着Slack签名密钥没有正确配置到环境变量SLACK_SIGNING_SECRET里。
第三步:收到工具执行结果后,OpenClaw会以Bot身份在原线程中回复带格式的Markdown响应。但注意,如果结果里包含敏感字段——比如API token、密码——
OpenClaw默认不会脱敏,必须手动在tool config里声明mask_fields
第四步:用户点击响应中的「Retry」按钮,可以重放上一次工具调用。这个功能依赖OpenClaw存储的conversation_id与tool_call_id关联。如果服务启用了无状态模式,并且没有接入外部数据库,那么重试会失败。