概述
OpenClaw 的七阶段工具流水线中,第四阶段"频道专属工具"是一个独特的设计。不同的通信平台提供了截然不同的交互能力——Discord 有丰富的嵌入消息和反应系统,Telegram 有内联键盘和机器人 API,Slack 有 Block Kit 和工作流,WhatsApp 有模板消息和交互列表。频道专属工具让 AI 代理能够充分利用每个平台的原生特性。
频道工具架构
频道专属工具在工具流水线的第四阶段被注入。系统根据当前会话的 channelType 属性,从已注册的频道工具集中选择匹配的工具加入工具列表。
channelTools:
discord:
- discord_embed
- discord_reaction
- discord_thread
- discord_voice
telegram:
- telegram_keyboard
- telegram_sticker
- telegram_poll
slack:
- slack_blocks
- slack_workflow
- slack_modal
whatsapp:
- whatsapp_template
- whatsapp_list
- whatsapp_location
Discord 专属工具
discord_embed — 嵌入消息工具
Discord 的嵌入消息(Embed)支持丰富的格式化内容,包括标题、描述、字段、图片、缩略图和页脚。此工具让 AI 代理能够创建美观的结构化消息。
工具参数包括:title、description、color、fields(数组)、thumbnail、image、footer、timestamp。AI 代理会根据内容类型自动选择合适的排版方式。
discord_reaction — 反应管理工具
管理消息上的表情反应。AI 代理可以添加反应作为交互按钮的替代方案,也可以读取用户的反应来收集反馈。支持 Unicode 表情和服务器自定义表情。
discord_thread — 线程工具
在 Discord 频道中创建和管理线程。当对话涉及特定话题时,AI 代理可以自动创建线程以保持主频道的整洁。线程工具还支持归档和锁定操作。
discord_voice — 语音频道工具
提供语音频道的基本交互能力,如加入语音频道、播放音频、获取语音频道成员列表等。
Telegram 专属工具
telegram_keyboard — 内联键盘工具
Telegram 最具特色的交互方式是内联键盘。此工具允许 AI 代理在消息下方附加按钮网格,用户点击按钮后触发相应操作。
支持两种键盘类型:
- 内联键盘:附在消息下方,按钮点击触发回调
- 回复键盘:替换用户的软键盘,提供快速回复选项
telegram_sticker — 贴纸工具
发送和管理贴纸。AI 代理可以根据对话情绪选择合适的贴纸回复,增加互动的趣味性。
telegram_poll — 投票工具
创建投票消息,支持单选和多选模式。适用于收集团队意见、做决策投票等场景。
Slack 专属工具
slack_blocks — Block Kit 工具
Slack 的 Block Kit 是一套强大的消息构建框架。此工具让 AI 代理能够创建包含文本、图片、按钮、选择器、日期选择器等组件的复杂交互式消息。
Block Kit 工具会自动验证消息结构,确保生成的 blocks 符合 Slack API 的规范。
slack_workflow — 工作流工具
与 Slack Workflow Builder 集成,AI 代理可以触发预定义的工作流或创建简单的自动化流程。
slack_modal — 模态框工具
在 Slack 中打开模态对话框,收集用户的结构化输入。模态框支持多个输入字段、验证规则和多步骤表单。
WhatsApp 专属工具
whatsapp_template — 模板消息工具
WhatsApp Business API 要求主动消息使用预审核的模板。此工具管理模板的选择和参数填充,确保消息符合 WhatsApp 的政策要求。
whatsapp_list — 列表消息工具
发送包含可选择列表项的交互式消息。适用于菜单展示、选项选择等场景。列表支持最多 10 个分组,每组最多 10 个选项。
whatsapp_location — 位置工具
发送和接收地理位置信息。AI 代理可以在地图上标记位置,或解析用户发送的位置数据。
开发自定义频道工具
工具注册
自定义频道工具通过编程方式注册到 OpenClaw 系统中:
openclaw.registerChannelTool({
channel: 'discord',
name: 'discord_custom_tool',
description: '自定义 Discord 工具的描述',
parameters: {
type: 'object',
properties: {
param1: { type: 'string', description: '参数说明' }
},
required: ['param1']
},
execute: async (params, context) => {
// 工具执行逻辑
return { result: '操作完成' };
}
});
Context 对象
频道工具的执行函数接收一个 context 对象,包含:
- channel:频道实例,提供平台原生 API 访问
- session:当前会话信息
- user:当前用户信息
- abortSignal:来自流水线第七阶段的中止信号
系统提示词适配
注册频道工具后,别忘了通过 buildAgentSystemPrompt() 的扩展提示词机制,为 AI 代理提供使用该工具的指导说明。否则代理可能不清楚何时以及如何调用新工具。
测试频道工具
OpenClaw 提供了频道模拟器,让你在开发阶段无需连接真实平台就能测试频道工具。模拟器会模拟各平台的 API 响应和交互行为。
最佳实践
- 尊重平台规范:每个平台都有自己的设计规范和限制,工具应当遵循这些规范
- 优雅降级:如果某个频道特性不可用,工具应当返回有意义的错误信息而不是崩溃
- 异步安全:频道 API 调用是异步的,确保正确处理并发和超时
- 用户隐私:频道工具可能访问用户的平台数据,务必遵循最小权限原则
总结
频道专属工具是 OpenClaw 多平台架构的重要组成部分。通过为每个通信平台提供定制化的工具,AI 代理能够在不同环境下都提供原生级的交互体验。