OpenClaw 与 Telegram 机器人集成
如何使用 OpenClaw 集成 Telegram 机器人。内容包括前置准备、Bot 创建、Webhook 配置、消息收发处理、命令设计与高级功能如群组管理和投票。文章还提供了实战案例(客服、任务管理、内容订阅)、最佳实践(格式优化、错误处理、速率限制、安全)以及调试与故障排除指南,帮助用户快速搭建功能完善的 Telegram Bot。

如何使用 OpenClaw 集成 Telegram 机器人。内容包括前置准备、Bot 创建、Webhook 配置、消息收发处理、命令设计与高级功能如群组管理和投票。文章还提供了实战案例(客服、任务管理、内容订阅)、最佳实践(格式优化、错误处理、速率限制、安全)以及调试与故障排除指南,帮助用户快速搭建功能完善的 Telegram Bot。

OpenClaw 提供了强大的 Telegram Bot 集成能力,通过统一的 message 工具接口,可以轻松实现消息收发、群组管理、媒体处理等功能。本案例将详细介绍如何通过 OpenClaw 构建功能完整的 Telegram Bot。
OpenClaw 的 message 工具是 Telegram 集成的核心接口,支持多种操作:
text
message 工具支持的主要操作:
├── send - 发送消息、媒体、文件
├── broadcast - 批量发送消息
├── reactions - 消息反应(表情回应)
├── typing - 显示输入状态
└── channels - 频道和群组管理
保存 Token
text
Token 格式:<bot_id>:<token_string>
示例:1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
创建新 Bot
text
用户发送:/newbot
BotFather 回复:输入 Bot 名称
用户发送:MyAwesomeBot
BotFather 回复:输入 Bot 用户名(必须以 bot 结尾)
用户发送:MyAwesome_bot
BotFather 返回:✅ Bot 创建成功!
Token: 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
在 OpenClaw 的配置文件中添加 Telegram 凭据:
// ~/.openclaw/config.json
{
"channels": {
"telegram": {
"enabled": true,
"bots": {
"default": {
"token": "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz",
"name": "MyAwesomeBot"
}
}
}
}
}
使用 OpenClaw 检查 Bot 连接状态:
询问 Claude: "检查 Telegram Bot 的连接状态"
Claude 会通过 message 工具查询 Bot 信息:
{"action":"status","accountId":"default"}
Webhook 允许 Telegram 服务器主动将用户消息推送到你的 OpenClaw 服务器,实现实时消息接收。
确保 OpenClaw Gateway 服务正在运行:
# 检查 Gateway 状态
openclaw gateway status
# 如果未启动,启动 Gateway
openclaw gateway start
Webhook URL 格式:
https://your-domain.com/webhook/telegram/<bot_token_hash>
或使用 OpenClaw 提供的默认路径:
https://your-domain.com/api/telegram/webhook
OpenClaw 会自动处理 Webhook 注册。如果需要手动配置:
{"action":"setWebhook","url":"https://your-domain.com/api/telegram/webhook","accountId":"default"}
测试 Webhook 是否正常工作:
用户在 Telegram 发送消息给 Bot → Telegram 推送 POST 请求到 Webhook URL → OpenClaw 接收并处理 → Claude 通过消息历史看到用户消息
{"webhook":{"secretToken":"your-secret-token-here","allowedUpdates":["message","edited_message","callback_query","inline_query"]}}
当用户发送消息给 Bot 时,OpenClaw 会自动接收并通过消息流呈现给 Claude。
{"update_id":123456789,"message":{"message_id":1,"from":{"id":123456789,"is_bot":false,"first_name":"User","username":"username","language_code":"en"},"chat":{"id":123456789,"first_name":"User","username":"username","type":"private"},"date":1708790400,"text":"Hello, Bot!"}}
使用 OpenClaw 的 message 工具发送消息:
{"action":"send","target":"123456789","message":"你好!我是 OpenClaw Bot,很高兴为你服务!"}
{"action":"send","target":"123456789","message":"**加粗文本**\n_斜体文本_\n`代码块`\n[链接](https://example.com)","contentType":"markdown"}
{"action":"send","target":"123456789","message":"<b>加粗文本</b>\n<i>斜体文本</i>\n<code>代码块</code>\n<a href=\"https://example.com\">链接</a>","contentType":"html"}
回复特定消息:
{"action":"send","target":"123456789","message":"这是对您消息的回复","replyTo":"message_id_here"}
{"action":"send","target":"123456789","media":"https://example.com/image.jpg","caption":"图片描述"}
{"action":"send","target":"123456789","filePath":"/path/to/local/file.pdf","caption":"文档标题"}
{"action":"send","target":"123456789","buffer":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...","caption":"生成的图片"}
对消息添加表情反应:
{"action":"send","target":"123456789","messageId":"12345","emoji":"👍"}
支持的常用表情:👍 👎 ❤️ 🔥 🎉 😮 😢 😡
{"action":"typing","target":"123456789"}
可选状态:typing, upload_photo, record_video, upload_video, record_voice, upload_document, choose_sticker
Telegram Bot 命令以 / 开头,例如 /start, /help, /settings。
向 @BotFather 注册命令列表:
text
发送给 BotFather: /setcommands
回复:user_info - 获取用户信息
weather - 查询天气
remind - 设置提醒
settings - 个人设置
help - 帮助信息
OpenClaw 会自动解析命令并触发相应处理:
用户发送:/weather 北京
↓ OpenClaw 解析:
{
"command": "weather",
"args": ["北京"],
"from": {用户信息},
"chat": {聊天信息}
}
↓ Claude 执行天气查询
↓ 返回结果给用户
// Claude 处理逻辑
当收到消息 "/start" 时:
1. 解析用户信息
2. 检查是否新用户
3. 发送欢迎消息
message action: send
{"target":"用户 ID","message":"欢迎使用 Bot!\n\n使用 /help 查看可用命令。"}
// 用户发送:/remind 30m 喝水
// Claude 解析:
const time = args[0]; // "30m"
const content = args.slice(1).join(' '); // "喝水"
// 设置定时提醒
setReminder(time, content, userId);
// 发送确认
{"action":"send","target": userId,"message":`✅ 提醒已设置!\n⏰ 时间:30分钟后\n📝 内容:${content}`}
使用内联键盘实现交互:
{"action":"send","target":"123456789","message":"请选择语言:","replyMarkup":{"inline_keyboard":[[{"text":"中文","callback_data":"lang_zh"},{"text":"English","callback_data":"lang_en"}],[{"text":"日本語","callback_data":"lang_ja"}]]}}
处理回调查询:
{"action":"callback_query","callbackQueryId":"query_id_here","text":"已选择中文","showAlert":false}
发送自定义键盘:
{"action":"send","target":"123456789","message":"请选择操作:","replyMarkup":{"keyboard":[["📊 查询数据","📝 提交报告"],["⚙️ 设置","❓ 帮助"]],"resize_keyboard":true,"one_time_keyboard":false}}
# 方法 1:邀请链接
# Bot 管理员发送邀请链接给 Bot
# 方法 2:通过用户名
# 在群组中添加 @YourBotUsername
{"can_send_messages":true,"can_send_media_messages":true,"can_send_polls":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":false,"can_pin_messages":true,"can_promote_members":false}
{"action":"getChatMember","target":"group_id_or_username","userId":"123456789"}
允许用户在任何聊天中通过 @BotUsername query 调用 Bot:
{"action":"inline_query","queryId":"inline_query_id","results":[{"type":"article","id":"1","title":"结果标题","description":"结果描述","inputMessageContent":{"messageText":"这是发送的消息内容"}}]}
{"action":"send","target":"123456789","pollQuestion":"你最喜欢哪种编程语言?","pollOption":["Python","JavaScript","Go","Rust"],"pollMulti":false,"pollDurationHours":24}
编辑已发送的消息:
{"action":"edit","target":"123456789","messageId":"message_id_here","message":"更新后的消息内容"}
{"action":"delete","target":"123456789","messageId":"message_id_here"}
在群组中引用特定用户的消息:
{"action":"send","target":"group_id","message":"回复内容","replyTo":"original_message_id"}
## 功能清单
- 自动回复常见问题
- 工单创建和查询
- 知识库搜索
- 人工客服转接
## 实现要点
1. 命令设计:/ticket <description> - 创建工单
2. 消息处理流程:用户消息 → Claude 分析意图 → 执行相应操作 → 返回结果
3. 多语言支持:检测用户语言 → 选择对应回复模板
## 功能清单
- 任务创建和管理
- 定时提醒
- 进度跟踪
- 团队协作
## 核心命令
/task add <task_name> - 添加任务
/task list - 查看任务列表
/task done <id> - 标记完成
/remind <time> <task> - 设置提醒
## 数据持久化
使用 OpenClaw 的文件系统或数据库集成:
- 任务数据存储在 ~/.openclaw/data/tasks.json
- 提醒使用 cron 定时任务
## 功能清单
- RSS/Atom 订阅
- 关键词通知
- 内容摘要
- 定时推送
## 实现要点
1. 订阅管理:/subscribe <url> - 订阅源
2. 定时检查:使用 OpenClaw heartbeat 或 cron 定期检查更新
3. 推送优化:合并多条更新,添加摘要,媒体预览
// ✅ 好的做法:使用格式化提升可读性
{"message":"*标题*\n\n📝 **内容**:这是正文\n⏰ **时间**:2024-01-01\n\n[查看详情](https://example.com)","contentType":"markdown"}
// ❌ 避免:纯文本无格式
{"message":"标题\n内容:这是正文\n时间:2024-01-01\n查看详情:https://example.com"}
// 始终处理可能的错误
try {
const result = await sendMessage(target, message);
// 成功处理
} catch (error) {
// 记录错误
logError(error);
// 用户友好的错误消息
sendMessage(target, "抱歉,操作失败。请稍后重试或联系支持。");
}
Telegram API 有速率限制,合理控制发送频率:
// 避免短时间内大量发送
// 每秒最多 30 条消息
// 每分钟最多 20 条消息到同一群组
// 使用队列管理发送
const messageQueue = [];
const processQueue = async () => {
while (messageQueue.length > 0) {
const msg = messageQueue.shift();
await sendTelegramMessage(msg);
await sleep(100); // 控制频率
}
};
// 验证消息来源
const verifyWebhook = (update) => {
// 检查用户 ID 是否在白名单
if (!allowedUsers.includes(update.message.from.id)) {
return false;
}
// 检查消息时间(防止重放攻击)
const messageTime = update.message.date * 1000;
const now = Date.now();
if (now - messageTime > 60000) { // 60 秒有效期
return false;
}
return true;
};
// 敏感操作需要确认
const sensitiveAction = (userId, action) => {
// 发送确认请求
sendMessage(userId, "⚠️ 确认执行此操作?", {
replyMarkup: {
inline_keyboard: [
[{ text: "✅ 确认", callback_data: `confirm_${action}` }],
[{ text: "❌ 取消", callback_data: "cancel" }]
]
}
});
};
// 记录关键操作
const log = {
user: update.message.from.id,
action: "send_message",
timestamp: Date.now(),
details: {
target: targetId,
messageType: "text",
length: message.length
}
};
// 存储日志
appendLog(log);
// 使用并发处理多个独立操作
const broadcastMessages = async (userIds, message) => {
const promises = userIds.map(userId => sendMessage(userId, message));
// 限制并发数
const results = await Promise.allSettled(promises);
// 处理失败
results.forEach((result, index) => {
if (result.status === 'rejected') {
logError(`Failed to send to ${userIds[index]}`, result.reason);
}
});
};
# 通过 Claude 询问
"检查 Telegram Bot 的 Webhook 状态"
# Claude 会调用
{"action":"getWebhookInfo"}
# 直接向 Bot 发送命令
/start - 测试启动命令
/help - 查看帮助
/ping - 测试响应
# 在群组中测试
@YourBotUsername hello - 测试内联查询
# 查看 OpenClaw Gateway 日志
openclaw gateway logs
# 查看 Telegram 集成日志
tail -f ~/.openclaw/logs/telegram.log
检查清单:
openclaw gateway status常见原因:
调试步骤:
# 删除并重新设置 Webhook
# 通过 Claude 执行
"重置 Telegram Bot Webhook"
# Claude 会执行
{"action":"deleteWebhook"} // 然后重新设置
{"action":"setWebhook", "url":"https://new-webhook-url"}
通过 OpenClaw 的 message 工具,你可以轻松构建功能强大的 Telegram Bot:
✅ 简单集成 - 无需编写代码,通过自然语言与 Claude 交互即可 ✅ 丰富功能 - 支持消息、媒体、命令、内联查询等全功能 ✅ 灵活扩展 - 可与 OpenClaw 其他能力(文件、网络、自动化)结合 ✅ 安全可靠 - 内置错误处理和日志记录
开始构建你的第一个 Telegram Bot 吧!🚀

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online