通过 Telegram Bot API 将 OpenClaw 连接到 Telegram 消息平台,使用 grammY 框架实现。
概述
Telegram 集成是内置功能,使用 grammY 框架与 Telegram Bot API 交互。支持直接消息、群组聊天、内联按钮、贴纸、表情反应、流式回复等丰富功能。
状态
内置支持,生产环境可用。
创建 Telegram Bot
1. 与 @BotFather 对话
- 在 Telegram 中搜索
@BotFather - 发送命令
/newbot - 按提示设置机器人名称和用户名
- 获取 Bot Token(格式:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
重要
妥善保管 Bot Token,任何拥有该令牌的人都可以控制您的机器人。
2. 配置机器人设置
通过 @BotFather 配置额外选项:
# 允许机器人加入群组
/setjoingroups
# 设置隐私模式(群组消息访问权限)
/setprivacy
# 选择 Disable - 机器人可以接收所有群组消息
OpenClaw 配置
基础配置
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN
}
}
}
环境变量
export TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
访问控制
直接消息策略
控制谁可以与机器人发起私聊:
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
dmPolicy: "pairing" // 默认值
}
}
}
dmPolicy 选项:
"pairing"(推荐):用户需配对审批"allowlist":仅允许指定用户"open":接受所有私聊"disabled":禁用私聊
配对工作流
当用户首次向机器人发送消息时:
# 1. 用户发送消息给机器人
# 2. 机器人回复配对码
# 3. 管理员查看待审批请求
openclaw pairing list
# 4. 批准用户(使用 Telegram 用户 ID)
openclaw pairing approve telegram:123456789
# 或使用配对码
openclaw pairing approve --code ABC123
# 撤销配对
openclaw pairing revoke telegram:123456789
允许列表配置
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
dmPolicy: "allowlist",
allowFrom: [
123456789, // 用户 ID
"@username", // 用户名
987654321
]
}
}
}
群组支持
群组策略
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
groupPolicy: "allowlist", // 默认为 "open"
groups: {
"-1001234567890": { allow: true }, // 群组 ID(超级群组)
"project-team": { allow: true }, // 群组名称
"public-chat": { allow: false } // 明确拒绝
}
}
}
}
获取群组 ID
将机器人添加到群组后,查看 OpenClaw 日志中的群组 ID,或使用以下方法:
- 在群组中发送消息并查看日志
- 使用 Telegram Bot API:
getUpdates - 超级群组 ID 格式:
-100xxxxxxxxxx
群组隐私设置
默认情况下,机器人只能看到以 / 开头的命令和 @提及。要让机器人接收所有消息:
# 通过 @BotFather 设置
/setprivacy
# 选择你的机器人
# 选择 Disable
流式回复
Telegram 支持流式输出(逐步更新消息):
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
streamMode: "partial" // 默认值
}
}
}
streamMode 选项:
"partial":实时更新消息(推荐)"off":仅在完成后发送"draft":使用论坛主题显示草稿
论坛主题模式(高级)
使用 Telegram 论坛功能显示流式草稿:
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
streamMode: "draft",
forumTopicId: 123 // 论坛主题 ID
}
}
}
内联按钮
控制 AI 助手是否可以创建交互式按钮:
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
capabilities: {
inlineButtons: "allowlist" // "all" | "allowlist" | "disabled"
},
inlineButtonsAllowlist: [
"confirm_action",
"select_option"
]
}
}
}
贴纸和表情反应
贴纸支持
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
stickers: {
enabled: false, // 默认禁用
autoCache: true // 自动缓存贴纸的视觉描述
}
}
}
}
表情反应
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
reactionNotifications: "all", // "all" | "mentions" | "off"
reactionLevel: "minimal" // "minimal" | "normal" | "expressive"
}
}
}
reactionLevel 控制机器人表情反应的频率:
"minimal":很少使用反应"normal":适度使用"expressive":频繁使用各种反应
连接模式
Polling 模式(默认)
机器人主动轮询 Telegram 服务器获取更新:
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
mode: "polling", // 默认值
pollingInterval: 1000 // 毫秒
}
}
}
优点:
- ✅ 无需公网 IP
- ✅ 配置简单
- ✅ 适合开发和小规模部署
Webhook 模式(生产推荐)
Telegram 服务器主动推送更新到您的服务器:
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
mode: "webhook",
webhookUrl: "https://your-domain.com/telegram/webhook",
webhookSecret: process.env.TELEGRAM_WEBHOOK_SECRET, // 8-256字符
webhookPath: "/telegram/webhook", // 默认路径
webhookPort: 3000 // OpenClaw 网关端口
}
}
}
设置环境变量:
export TELEGRAM_WEBHOOK_SECRET="your-secure-random-string"
优点:
- ✅ 更低延迟
- ✅ 更高效率
- ✅ 适合大规模部署
- ⚠️ 需要 HTTPS 端点
消息格式和限制
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
textChunkLimit: 4000, // 单条消息最大字符数
mediaMaxMb: 50, // 文件大小限制(MB)
parseMode: "MarkdownV2" // "Markdown" | "MarkdownV2" | "HTML"
}
}
}
线程回复
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
replyToMode: "first" // "off" | "first" | "all"
}
}
}
replyToMode 选项:
"off":不使用回复功能"first":回复触发消息"all":回复所有相关消息
重试和错误处理
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
retry: {
maxAttempts: 3,
backoff: "exponential", // "exponential" | "linear" | "fixed"
initialDelay: 1000 // 毫秒
}
}
}
}
多账号配置
同时运行多个 Telegram 机器人:
{
channels: {
telegram: {
accounts: {
support: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN_SUPPORT,
dmPolicy: "open"
},
internal: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN_INTERNAL,
dmPolicy: "allowlist",
allowFrom: [123456789, 987654321]
}
}
}
}
}
获取用户 ID
几种方法获取 Telegram 用户 ID:
- 通过机器人:用户向机器人发送消息,查看 OpenClaw 日志
- 使用 @userinfobot:转发用户消息给该机器人
- 使用 @myidbot:获取自己的 ID
故障排查
机器人无响应
- 验证 Bot Token 正确
- 检查 OpenClaw 网关是否运行:
openclaw status - 查看日志:
openclaw logs --follow
群组消息收不到
- 确认已将机器人添加到群组
- 检查群组隐私设置(使用
@BotFather的/setprivacy) - 验证群组在
groups配置中允许
Webhook 失败
- 确认 URL 使用 HTTPS
- 验证 SSL 证书有效
- 检查
webhookSecret长度在 8-256 字符之间 - 确认端口和路径正确
配对码未生成
- 确认
dmPolicy设置为"pairing" - 检查用户是否已配对:
openclaw pairing list
流式回复不工作
- 确认
streamMode设置为"partial" - 检查网络延迟是否过高
- 验证 Telegram API 速率限制
安全建议
安全最佳实践
- 始终使用
pairing或allowlistDM 策略 - 定期审查配对用户列表
- 使用环境变量存储 Bot Token,不要硬编码
- 生产环境使用 Webhook 模式并配置强密钥
- 限制群组访问,使用
groupPolicy: "allowlist" - 禁用不需要的功能(如贴纸、内联按钮)
- 监控日志中的异常访问尝试
高级配置示例
{
channels: {
telegram: {
enabled: true,
botToken: process.env.TELEGRAM_BOT_TOKEN,
mode: "webhook",
webhookUrl: "https://bot.example.com/telegram/webhook",
webhookSecret: process.env.TELEGRAM_WEBHOOK_SECRET,
// 访问控制
dmPolicy: "pairing",
groupPolicy: "allowlist",
groups: {
"-1001234567890": { allow: true }
},
// 流式和格式
streamMode: "partial",
parseMode: "MarkdownV2",
textChunkLimit: 4000,
// 功能控制
capabilities: {
inlineButtons: "allowlist"
},
inlineButtonsAllowlist: ["confirm", "cancel"],
// 反应和贴纸
reactionNotifications: "mentions",
reactionLevel: "minimal",
stickers: {
enabled: false
},
// 线程和重试
replyToMode: "first",
retry: {
maxAttempts: 3,
backoff: "exponential"
}
}
}
}
提示
更多详细信息和完整配置参考(50+ 选项),请访问 官方文档。