乐于分享
好东西不私藏

〖OpenClaw系列〗Telegram 渠道接入

〖OpenClaw系列〗Telegram 渠道接入

Phase 3 开启:渠道接入实战

AI 大脑已就绪,现在让它连接世界。Phase 3 将覆盖主流通信渠道:

篇号
渠道
适用场景
19
Telegram
开发者社区、开源项目
20
WhatsApp
商务沟通、客户服务
21
Discord
游戏社区、兴趣群组
22
Slack
企业协作、团队办公
23
飞书/企微
国内企业、组织架构

本文从 Telegram 开始——它拥有完善的 Bot API、活跃的开发者生态,是接入 OpenClaw 的最佳起点。


为什么先从 Telegram 开始

如果你在犹豫该先接哪个渠道,看完这张表就有答案了。

维度
Telegram
WhatsApp
Discord
Slack
飞书/企微
接入难度
★☆☆
★★★
★★☆
★★☆
★★☆
申请门槛
无审核,秒批
Meta 商业审核
无审核
无审核
企业认证
费用
免费
按消息计费
免费
免费
免费
消息格式
Markdown
纯文本为主
嵌入(Embed)
Block Kit
卡片消息
群组能力
超级群+论坛主题
广播列表
服务器+频道
频道+线程
群组+话题
国内可用
需代理
需代理
需代理
需代理
原生可用
最佳场景
个人/开发者/开源
客服/商务
社区/游戏
企业协作
国内企业

Telegram 的独特优势:零门槛、Bot API 最完善、支持 Markdown 富文本、群组+论坛主题天然适合多话题管理。这些特性让它成为学习渠道接入的最佳第一站——上手快、功能全、踩坑少。


Telegram Bot 创建流程

第一步:注册 Bot

打开 Telegram,搜索 @BotFather,按以下步骤操作:

1. 发送 /newbot2. 输入 Bot 名称(如:OpenClaw助手)3. 输入 Bot 用户名(必须以 bot 结尾,如:myopenclaw_bot)4. 保存返回的 Bot Token(格式:123456789:ABCdefGHIjklMNOpqrsTUVwxyz)

关键配置命令

/setdescription - 设置 Bot 描述/setabouttext   - 设置关于文本/setuserpic     - 设置头像/setcommands    - 设置命令列表

第二步:配置命令菜单

向 @BotFather 发送 /setcommands,选择你的 Bot,然后输入:

start - 开始对话help - 获取帮助models - 查看可用模型reset - 重置当前会话status - 查看系统状态

这些命令会自动显示在 Telegram 的输入框菜单中。

整个 Bot 创建过程其实就是这 4 步——下次再做新的 Bot,照图按顺序走一遍就行:


OpenClaw Telegram 配置详解

最小可用配置

{  channels: {    telegram: {      enabled: true,      botToken: "${TELEGRAM_BOT_TOKEN}",      // 允许所有用户私聊      dmPolicy: "open",      allowFrom: ["*"]    }  }}

配置说明:

  • botToken: BotFather 提供的 Token,建议使用环境变量
  • dmPolicy: 私聊策略,open 允许所有人,pairing 需要配对,allowlist 仅允许白名单
  • allowFrom: 允许的用户ID列表,["*"] 表示不限制

生产级配置

{  channels: {    telegram: {      enabled: true,      botToken: "${TELEGRAM_BOT_TOKEN}",      // ========== 基础策略 ==========      dmPolicy: "allowlist",      // 白名单模式      allowFrom: [123456789, 987654321],  // 允许的用户ID      // ========== 群组配置 ==========      groupPolicy: "allowlist",   // 群组白名单      groupAllowFrom: [-1001234567890],   // 允许的群组ID      // ========== 消息处理 ==========      historyLimit: 50,           // 保留历史消息数      textChunkLimit: 4000,       // 单条消息最大长度      // ========== 功能开关 ==========      actions: {        reactions: true,          // 启用表情回应        sendMessage: true,        // 允许发送消息        deleteMessage: false,     // 禁止删除消息        editMessage: true         // 允许编辑消息      },      // ========== 连接方式 ==========      // 方式1: Long Polling(默认,无需公网IP)      // 方式2: Webhook(需要公网HTTPS)      webhookUrl: "https://your-domain.com/webhook",      webhookSecret: "${TELEGRAM_WEBHOOK_SECRET}"    }  }}

多账号配置

支持同时运行多个 Telegram Bot:

{  channels: {    telegram: {      enabled: true,      // 默认账号      botToken: "${TELEGRAM_BOT_TOKEN_1}",      dmPolicy: "allowlist",      allowFrom: [123456789],      // 额外账号      accounts: {        support: {          name: "客服助手",          botToken: "${TELEGRAM_BOT_TOKEN_2}",          dmPolicy: "open",          allowFrom: ["*"],          agentId: "support"      // 绑定到 support Agent        },        coding: {          name: "编程助手",          botToken: "${TELEGRAM_BOT_TOKEN_3}",          allowFrom: [111222333],          agentId: "coding"       // 绑定到 coding Agent        }      }    }  }}

消息类型支持

文本消息

基础功能,支持 Markdown 格式:

{  channels: {    telegram: {      markdown: {        enabled: true,        // Telegram 原生 MarkdownV2        // 支持 **粗体**、__斜体__、`代码`、```代码块```      }    }  }}

媒体消息

{  channels: {    telegram: {      // 媒体大小限制(MB)      mediaMaxMb: 20,      // 支持的消息类型      actions: {        sticker: true,      // 贴纸        sendPoll: true      // 投票      }    }  }}

OpenClaw 支持处理的媒体:

类型
处理方式
说明
图片
OCR/视觉模型
提取文字或描述内容
文档
文本提取
PDF、Word、TXT
音频
语音转文字
需要配置语音识别
贴纸
元数据读取
获取贴纸ID和表情

把这 4 类媒体的处理方式做成卡片速览,对照看更直观——文本是默认能力,无需单独配置:

回调按钮

支持内联键盘交互:

{  channels: {    telegram: {      capabilities: {        inlineButtons: "all"    // off | dm | group | all      }    }  }}

效果:AI 可以发送带按钮的消息,用户点击后触发回调。


群组与频道支持

群组配置

{  channels: {    telegram: {      groups: {        // 特定群组配置        "my_dev_group": {          groupId: -1001234567890,          requireMention: true,      // 需要 @Bot 才响应          agentId: "coding",         // 使用 coding Agent          skills: ["exec", "read"],  // 启用技能          allowFrom: [111222333]     // 群内允许的用户        }      }    }  }}

论坛主题(Forum Topic)

Telegram 支持论坛式群组,OpenClaw 可以为每个主题绑定不同 Agent:

{  channels: {    telegram: {      groups: {        "forum_group": {          groupId: -1009876543210,          topics: {            "general": {              topicId: 1,              agentId: "default"            },            "coding": {              topicId: 2,              agentId: "coding",              requireMention: false            },            "support": {              topicId: 3,              agentId: "support"            }          }        }      }    }  }}

频道支持

频道(Channel)通常用于广播,OpenClaw 可以作为管理员发布内容:

# 将 Bot 添加为频道管理员# 配置 channelId 到 allowFrom

Telegram 一共有 3 种”群类型”,Bot 在每种里的默认行为不一样——按照下图分清楚再做配置就不会踩坑:


安全策略:Webhook vs Long Polling

Long Polling(推荐开发/内网)

┌─────────────┐      长连接      ┌─────────────┐│   OpenClaw  │ ◄──────────────► │  Telegram   ││  (内网/本地) │   定期拉取更新    │   服务器     │└─────────────┘                  └─────────────┘

优点:

  • 无需公网IP或域名
  • 无需 HTTPS 证书
  • 配置简单,开箱即用

缺点:

  • 延迟略高(秒级)
  • 不适用于大规模部署

Webhook(推荐生产环境)

┌─────────────┐     HTTPS      ┌─────────────┐│   Telegram  │ ─────────────► │   OpenClaw  ││   服务器     │   推送消息     │  (公网服务器) │└─────────────┘                └─────────────┘

配置:

{  channels: {    telegram: {      // Webhook 公网地址(必须是HTTPS)      webhookUrl: "https://api.example.com/telegram-webhook",      // 验证密钥(Telegram回传验证)      webhookSecret: "${TELEGRAM_WEBHOOK_SECRET}",      // 本地监听配置      webhookHost: "0.0.0.0",      webhookPort: 8787,      webhookPath: "/telegram-webhook"    }  }}

Webhook 安全验证流程:

1. OpenClaw 注册 Webhook 时提供 secret_token2. Telegram 推送消息时,在 X-Telegram-Bot-Api-Secret-Token 头部携带3. OpenClaw 验证 token 匹配后才处理请求

自签名证书

如果没有域名,使用 IP + 自签名证书:

{  channels: {    telegram: {      webhookUrl: "https://1.2.3.4:8443/webhook",      webhookCertPath: "/path/to/self-signed.pem"    }  }}

生成自签名证书:

openssl req -newkey rsa:2048 -sha256 -nodes \  -keyout private.key -x509 -days 365 \  -out cert.pem -subj "/C=US/ST=State/L=City/O=Org/CN=1.2.3.4"

总结一下两种方式的取舍——开发用 Polling 省事、生产换 Webhook 求性能:


高级功能

执行审批(Exec Approvals)

在 Telegram 中审批敏感操作:

{  channels: {    telegram: {      execApprovals: {        enabled: true,        approvers: [123456789],      // 审批人用户ID        agentFilter: ["coding"],     // 仅 coding Agent 需要审批        target: "both"               // dm | channel | both      }    }  }}

效果:当 AI 需要执行危险操作(如删除文件)时,发送带「批准/拒绝」按钮的消息给审批人。

流式响应

{  channels: {    telegram: {      // 流式模式      streaming: "block",    // off | partial | block | progress      // 分块大小      draftChunk: {        tokens: 50,          // 每50 tokens更新一次        maxEditsPerMinute: 20      }    }  }}
模式
说明
适用场景
off
一次性返回完整响应
简单问答
partial
逐字显示(打字机效果)
短文本
block
分块更新
长文本
progress
显示进度指示器
复杂任务

反应通知

{  channels: {    telegram: {      // 表情回应通知      reactionNotifications: "all",   // off | own | all      // 反应级别      reactionLevel: "minimal"          // off | ack | minimal | extensive    }  }}

踩坑

坑1:Bot 收不到消息

现象:配置完成,但 Bot 不响应

排查

# 1. 检查 Bot Token 是否正确curl "https://api.telegram.org/bot<TOKEN>/getMe"# 2. 检查 Gateway 日志openclaw logs | grep telegram# 3. 检查 allowFrom 配置# dmPolicy=allowlist 时必须配置 allowFrom

解决

{  channels: {    telegram: {      // 开发阶段使用 open 模式      dmPolicy: "open",      allowFrom: ["*"]    }  }}

坑2:群组中 Bot 不响应

现象:私聊正常,群组中无反应

原因

  1. Bot 未被添加为群组成员
  2. requireMention: true 但未 @Bot
  3. groupAllowFrom 未包含该群组

解决

{  channels: {    telegram: {      // 获取群组ID的方法:      // 1. 将 Bot 加入群组      // 2. 发送 /chatid 命令(需开启对应功能)      groupAllowFrom: [-1001234567890],      groups: {        "mygroup": {          requireMention: false    // 无需@即可响应        }      }    }  }}

坑3:Webhook 注册失败

现象:提示 webhook 设置失败

常见原因

  • URL 不可访问
  • 证书无效
  • 端口未开放

排查

# 测试 Webhook 可访问性curl -X POST https://your-domain.com/telegram-webhook \  -H "Content-Type: application/json" \  -d '{"test":"true"}'# 查看 Telegram 返回的错误openclaw logs | grep webhook

坑4:消息发送失败(429错误)

现象:频繁出现 Too Many Requests

原因:Telegram Bot API 有频率限制

解决

{  channels: {    telegram: {      // 启用重试机制      retry: {        maxAttempts: 3,        backoffMs: 1000      },      // 限制文本分块频率      blockStreamingCoalesce: {        maxEditsPerMinute: 15      }    }  }}

FAQ

Q1: 如何获取用户ID和群组ID?

方法1:使用 @userinfobot

方法2:开启调试日志

# 开启 verbose 日志openclaw logs --level debug# 任何消息都会显示 sender ID 和 chat ID

方法3:配置 open 模式临时获取

{  channels: {    telegram: {      dmPolicy: "open",      allowFrom: ["*"]    }  }}

然后查看日志中的 ID。

Q2: 如何实现多语言支持?

{  agents: {    list: [      {        id: "telegram-cn",        systemPrompt: "你用中文回复"      },      {        id: "telegram-en",        systemPrompt: "You reply in English"      }    ]  },  channels: {    telegram: {      accounts: {        cn: { agentId: "telegram-cn" },        en: { agentId: "telegram-en" }      }    }  }}

Q3: 如何限制 Bot 只响应特定话题?

{  channels: {    telegram: {      groups: {        "dev_forum": {          topics: {            "ai_help": {              topicId: 5,              enabled: true            }          },          // 其他话题不响应          enabled: false        }      }    }  }}

Q4: 如何备份和恢复 Bot 配置?

# 导出配置openclaw config export --format json > telegram-config.json# 导入配置openclaw config import telegram-config.json# 或使用环境变量管理export TELEGRAM_BOT_TOKEN="xxx"openclaw start

总结

本文详细讲解了 Telegram 渠道接入:

能力
要点
Bot 创建
@BotFather 注册,获取 Token
基础配置
botToken + dmPolicy + allowFrom
群组支持
groupPolicy + groups 配置
连接方式
Long Polling(开发)/ Webhook(生产)
安全策略
Webhook Secret、白名单、执行审批
高级功能
流式响应、反应通知、多账号

关键认知

  • 开发用 Long Polling,生产用 Webhook
  • 严格配置 allowFrom 防止未授权访问
  • 利用多账号实现不同场景隔离

下一篇预告

第20篇:WhatsApp 渠道接入

对比 Telegram:

  • WhatsApp Business API 申请流程
  • Meta 开发者平台配置
  • 消息模板与会话窗口
  • 企业级部署注意事项

本文是系列第19篇,Phase 3 开篇。你的 AI 助手已接入全球最大的加密通信平台。


📌 觉得有用?点个「在看」 👇 👨‍💻 关注「敏叔侃技术」,每周更新 OpenClaw 实战干货 ⭐ 收藏这篇文章,作为 Telegram 接入的参考手册