🦞OpenClaw ClawBook

Telegram 接入

OpenClaw 通过 grammY 框架支持 Telegram Bot API,覆盖私聊和群组场景,默认使用长轮询,也支持 Webhook。

快速开始

  1. 在 Telegram 中找到 @BotFather,运行 /newbot 创建机器人并复制 Token。
  2. 配置 Token(环境变量或配置文件,配置文件优先)。
  3. 启动 Gateway。
  4. 私信机器人,默认触发配对码流程,审批后即可对话。
# 环境变量方式
export TELEGRAM_BOT_TOKEN="123:abc"

# 或配置文件 ~/.openclaw/openclaw.json
{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123:abc",
      dmPolicy: "pairing"
    }
  }
}

隐私模式与群组权限

Telegram 机器人默认开启隐私模式,只能收到 @提及和命令消息。如果需要机器人看到所有群组消息:

  • 方法一:在 @BotFather 中 /setprivacy → Disable
  • 方法二:将机器人设为群组管理员(管理员始终可见所有消息)

切换隐私模式后,需要把机器人移出群组再重新添加才能生效。

私聊访问控制

通过 channels.telegram.dmPolicy 控制谁可以私聊机器人:

策略行为
pairing默认。未知用户收到配对码,管理员审批后可对话
allowlist仅 allowFrom 中的用户可对话
open任何人可对话(需设 allowFrom: ["*"])
disabled禁止所有私聊
# 查看/审批配对码
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>

allowFrom 支持数字用户 ID(推荐)或 @username。获取用户 ID 最安全的方式: 启动 Gateway 后私信机器人,然后 openclaw logs --follow 查看 from.id

群组配置

两个维度控制群组行为:

1. 群组允许列表

  • 未配置 groups:允许所有群组
  • 配置了 groups:只允许列出的群组或 "*"

2. 发送者过滤

  • groupPolicy: "open" — 允许群组中所有人
  • groupPolicy: "allowlist" — 仅 groupAllowFrom 中的用户(默认)
  • groupPolicy: "disabled" — 禁用群组
{
  channels: {
    telegram: {
      groups: {
        "-1001234567890": { requireMention: false },  // 此群无需@
        "*": { requireMention: true }                  // 其他群需要@
      },
      groupPolicy: "allowlist",
      groupAllowFrom: ["123456789"]
    }
  }
}

论坛话题继承父群组配置,也可在 groups.<id>.topics.<threadId> 下单独覆盖。

流式传输(草稿)

Telegram 支持在私聊中流式显示机器人的回复草稿(需要在 @BotFather 中启用论坛话题模式)。

streamMode行为
partial默认。实时更新草稿气泡
block按较大块更新草稿
off禁用草稿流式传输

草稿流式仅限私信;群组和频道不支持。

命令与内联按钮

OpenClaw 启动时自动向 Telegram 注册原生命令(/status/reset/model 等)。也可添加自定义命令:

{
  channels: {
    telegram: {
      customCommands: [
        { command: "backup", description: "Git 备份" },
        { command: "generate", description: "生成图片" }
      ]
    }
  }
}

自定义命令仅注册菜单条目,不会自动实现逻辑。命令名只能包含 a-z0-9_

Telegram 还支持内联按钮(capabilities.inlineButtons),可选作用域:offdmgroupallallowlist(默认)。

表情反应

Telegram 反应作为独立事件到达,OpenClaw 将其转换为系统通知注入会话上下文。

配置项选项
reactionNotificationsoff | own(默认) | all
reactionLeveloff | ack(默认) | minimal | extensive

长轮询 vs Webhook

默认使用长轮询,无需公网 URL。如需 Webhook 模式:

{
  channels: {
    telegram: {
      webhookUrl: "https://yourdomain.com/telegram-webhook",
      webhookSecret: "your-secret"
    }
  }
}

本地监听器绑定 0.0.0.0:8787,默认路径 POST /telegram-webhook

限制

  • 出站文本按 textChunkLimit 分块(默认 4000 字符)
  • 可设 chunkMode: "newline" 按段落边界分割
  • 媒体受 mediaMaxMb 限制(默认 5 MB)
  • API 请求超时 timeoutSeconds(默认 500 秒)
  • 群组历史上下文 historyLimit(默认 50 条)

常见问题

机器人不响应群组中的非提及消息

  • 确认已在 @BotFather 中 /setprivacy → Disable
  • 从群组中移除并重新添加机器人
  • 快速测试:在群组中发送 /activation always

setMyCommands failed

通常是到 api.telegram.org 的出站 HTTPS/DNS 被阻止。

启动后静默停止响应

可能是 IPv6 解析问题。检查 dig +short api.telegram.org AAAA, 必要时在 /etc/hosts 中添加 IPv4 记录或优先 IPv4 解析。

命令不工作

确保用户已通过配对或在 allowFrom 中。即使群组 groupPolicy: "open",命令也需要授权。

注意事项

  • Token 泄露后立即在 @BotFather 中撤销并更新配置
  • 生产环境务必使用 pairingallowlist 策略
  • 多账户通过 channels.telegram.accounts 配置
  • 出站 API 调用支持指数退避重试(channels.telegram.retry