OpenClaw 集成

OpenClaw 渠道接入:Telegram、WhatsApp 与 pairing 配对

附可下载配置与验收表,按 BotFather、tokenFile、私聊配对、用户 ID、群 ID、提及规则的顺序完成接入。

生态 预计 35 分钟 更新 2026/10/7 核验 2026/9/6
本页目录
本站实测 · 2026.9.2查看实测范围

macOS / Node 24.15.0 下已验证两个配置片段的 CLI schema 检查;空私聊允许列表实际返回 valid:true 并带警告。

完成结果

学完后你会留下什么

一份按实际 ID 修改的配置,以及填写了私聊、群聊、未授权消息结果的验收表。

验证版本
2026.9.2
适合谁
已有可用 Gateway,希望用自己的 Telegram Bot 接收任务的用户
开始前确认
  • Gateway 已可在 Dashboard 回复模型消息
  • 可以创建自己的 Telegram Bot 和测试群
  • 可以备份并修改 Gateway 配置,本文从单 Bot 默认账户开始

这篇的终点很具体:你给自己的 Bot 发私信能收到回复;在一个指定测试群中,只有允许的人按规则触发它。先只做文字消息,跑通后再接文件、自动化或多个 Bot。

本站验证范围: 已在 macOS、Node 24.15.0、OpenClaw 2026.9.2 中校验本文两个配置片段。下面的消息结果是接入后你需要逐项检查的预期。

1. 准备材料,先证明模型可用

先在 Dashboard 发一条普通消息,确认模型可以回复。如果这里就报认证或余额错误,先解决模型接入;换成 Telegram 入口不会修好模型。

下载三个文件,保存到自己的练习目录:

这两个 JSON 是合并片段,不能覆盖整份 OpenClaw 配置。本教程从一个尚未配置 Telegram 的默认账户开始;已有具名 accounts 或多个 Bot 的环境,应先按官方多账户说明逐项合并,不能直接套用。

在 Gateway 主机终端运行:

openclaw --version
openclaw config file
openclaw gateway status

根据 config file 打印的路径,在本机复制一份配置备份,记住恢复位置。备份可能包含其他服务凭据,不要上传到公开仓库。本文命令以 2026.9.2 为基线;旧版本不认识 config patch 时先查该版本帮助。

2. 创建 Bot,把 token 留在 Gateway 主机

  1. 在 Telegram 打开官方 @BotFather,确认用户名拼写。
  2. 发送 /newbot,按提示设置名称和 Bot 用户名。
  3. 保存返回的 token;它控制的是 Bot,不是你的 Telegram 用户 ID。
  4. 在 Gateway 主机创建一个私人文本文件,例如用户目录中的 telegram-token.txt,文件正文只放 token。通过本机编辑器粘贴,不要把 token 放进终端命令或截图。
  5. 确保运行 Gateway 的账号能读取该文件,其他非必要账号不能读取。

打开下载的 telegram-dm-example.json,将 /REPLACE/telegram-token.txt 改为该文件的实际绝对路径。JSON 中 Windows 路径的反斜杠需要转义,使用正斜杠形式通常更容易阅读;路径仍必须位于运行 Gateway 的机器,而不是仅位于浏览器所在电脑。

本文只用 tokenFile。不要再同时填另一份旧 botToken 或依赖不同的环境变量;该版本优先读取 tokenFile,其次 botToken,默认账户最后才使用 TELEGRAM_BOT_TOKEN。

3. 只启用私聊,暂时禁用群聊

私聊片段的核心是:

{
  "channels": {
    "telegram": {
      "enabled": true,
      "tokenFile": "/REPLACE/telegram-token.txt",
      "dmPolicy": "pairing",
      "groupPolicy": "disabled"
    }
  }
}

确认已替换路径。在下载文件所在目录先预览修改:

openclaw config patch --file ./telegram-dm-example.json --dry-run

确认预览只涉及预期的 Telegram 字段,再应用:

openclaw config patch --file ./telegram-dm-example.json
openclaw config validate --json

config patch 会递归合并对象,但数组会整体替换。它不是“检查一下”,第二条不带 dry-run 的命令会写配置。

**既要看 valid,也要看 warnings。**配置结构正确不能证明 token 可读、Telegram 可达或模型能回答。

如果 Gateway 作为后台服务运行,执行 openclaw gateway restart。若之前是在终端前台运行,先停止那个进程,再用 openclaw gateway 启动;不要再开第二个进程抢同一个 Bot 的更新。

4. 完成私聊配对,再取得自己的数字 ID

打开自己的 Bot,点击 Start,发送 你好。在 pairing 策略下,首次应收到配对信息;尚未得到授权时,不应直接让陌生人执行任务。

在 Gateway 主机运行:

openclaw pairing list telegram

核对发送者是自己,再用实际配对码替换下例:

openclaw pairing approve telegram "实际配对码"

配对码有时效,过期后应重新触发并核对新码,不要批准不认识的人。批准后再发一条普通文字请求,确认得到模型回复。

记录配对回复中的 Your Telegram user id。也可在 openclaw logs --follow 中查看对应配对请求的 senderUserId,取得后停止跟踪,避免收集无关聊天日志。这个数字既不是手机号、Bot ID,也不是 @username。

5. 只允许一个群里的指定发送者

创建一个你有权管理的测试群,将 Bot 加入。先不授予不需要的管理员能力。

在 Gateway 主机跟踪日志,向测试群发送一条提及 Bot 的消息,从对应事件读取群 chat ID。只看这次测试的上下文,不把整份日志公开。超级群 ID 通常是 -100... 形式,但不能凭格式编造;要使用实际观察到的值。

打开 telegram-group-example.json,替换三类信息:

文件中的示例替换为控制什么
/REPLACE/telegram-token.txtGateway 的实际 token 文件路径连接哪个 Bot
123456789,有两处你自己的数字用户 ID私聊与群聊的发送者
-1001234567890测试群的实际 chat ID允许哪个群

片段使用 dmPolicy: allowlist、明确的 allowFrom 和 groupAllowFrom,并在 groups 中只列一个群。**群 ID 是地图的键,用户 ID 是允许列表成员,不能互换。**私聊配对记录不会自动变成群聊允许列表。

替换完成后:

openclaw config patch --file ./telegram-group-example.json --dry-run
openclaw config patch --file ./telegram-group-example.json
openclaw config validate --json

按第 3 步的运行方式重启,再在测试群发送 @你的Bot用户名 只回复测试成功。若实际环境有其他群配置,递归合并不会替你删除旧群;应先核对完整 groups,不能只看新加的一项。

6. 分清 Privacy Mode 和 requireMention

Telegram 的 Privacy Mode 决定 Bot 能收到哪些群消息;OpenClaw 的 requireMention 决定收到后何时触发。后者不能让 Telegram 发送原本不可见的消息。

本练习保持 Privacy Mode,使用 requireMention: true。先验证明确提及。普通非提及测试要发一条新消息,不要回复 Bot,因为回复关系也可能影响触发判断。

只有确实需要持续接收群消息时,才考虑通过 BotFather /setprivacy 调整,或按任务需要授予管理员能力;更改隐私模式后,按 Telegram 说明重新将 Bot 加入群,让设置生效。不要为了修一个提及失败就直接开放所有群和所有发送者。

7. 按七条路径验收,不能只测“能回复”

在下载的验收表中记录本人私聊、非授权私聊、群内授权提及、普通新消息、未授权提及及未配置群等路径。没有第二个合适的测试账号或测试群,就写“待验证”,不要打勾。

本站配置校验发现的一个陷阱

我们把私聊策略设为 allowlist,再把 allowFrom 清空。2026.9.2 的实际 CLI 返回仍是 valid: true,但附带警告:所有私聊会被丢弃。也就是说,只判断退出码或 valid 字段,会漏掉不可用配置。

查看配置验证记录。这份记录没有包含真实 Bot 凭据,也没有声称已经通过七项消息验收。

8. 失败时从对应一层开始

症状优先检查
getMe 401当前 token 是否正确、tokenFile 是否仍指向旧文件
token 文件读取失败路径在不在 Gateway 主机、服务账号是否可读
私聊没有模型回复配对状态、allowFrom、Dashboard 的模型是否正常
私聊可用但群聊不回应groupPolicy、群 ID、groupAllowFrom、提及与平台可见性
长轮询 409是否有另一台 Gateway、脚本或旧进程使用同一个 Bot token
改配置后行为没变修改的是不是实际配置文件、进程是否完成重载

不要让自己的诊断脚本同时运行 getUpdates 抢 Bot 消息。初次接入使用默认长轮询,无需为此搭建公网 webhook;确有 webhook 需求再读官方参数和认证说明。

需要停止群聊时,将 groupPolicy 改回 disabled,验证配置并重启,再检查群里不再触发任务。若需要回退整次修改,恢复事先保存的配置,并注意之后新增的其他设置不能被旧备份覆盖。

OpenClaw WhatsApp 一站式接入

本篇从“选哪个号码”开始,直到手机端收到第一条实际回复。首次练习关闭群入口,只验证一个明确身份。旧号码选择页已合并到本页。

**资料来源:**下文依据当前官方文档编写,两份下载配置是按文档整理的示例;实际安装版本、插件 schema 和消息行为请按步骤验收。

第一步:选择号码模式

模式你需要准备本文采用的规则
专用号码给 OpenClaw 关联的独立 WhatsApp 账号,以及向它发任务的操作员账号操作员号码放入 allowFrom,关闭同号自聊,群入口关闭
个人号码自聊你日常使用且准备关联的 WhatsApp 账号明确开启 selfChatMode,将自己的号码写入名单,群入口关闭

官网建议条件允许时使用专用号码,也支持个人号码自聊。这里的选择取决于你是否希望把个人聊天与助手身份分开。群聊是后续的接入范围,不是第三种号码模式。

先在自己的记录中填清:哪个号码被扫码关联、哪个号码发送任务、谁负责维护关联设备。专用号路线尤其不要把机器人账号本身的号码误填成唯一操作员。

第二步:准备环境和最小配置

确认 OpenClaw 已安装、模型能完成基本回复,并有一个可持续运行 Gateway 的环境。新建测试实例时按其安装文档选择配置路径,不要覆盖正在使用的完整配置。

WhatsApp 运行组件是独立插件。当前官方文档说明,首次选择该渠道时引导可提示安装;手工安装入口为:

openclaw plugins install @openclaw/whatsapp

安装完成后记录 OpenClaw 和插件版本。此命令会安装插件,本文没有代你执行它。不要把缺插件、模型未配置与消息权限问题混为同一类失败。

以下内容只包含 channels.whatsapp,应合入对应实例的配置;保留现有模型、Gateway 和其他渠道设置。

专用号码配置

下载专用号码模板。把示例号码换成发送任务的操作员号码,使用带国家代码的 E.164 格式。

{
  "channels": {
    "whatsapp": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "+15551234567"
      ],
      "selfChatMode": false,
      "groupPolicy": "disabled"
    }
  }
}

本模板明确关闭同号自聊。它只限制入站任务范围,不代表 Agent 获得的其他工具不能向外发送消息;工具权限仍需要单独设计。

个人号码自聊配置

下载个人自聊模板。把示例号码换成你将关联的个人账号号码。

{
  "channels": {
    "whatsapp": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "+15551234567"
      ],
      "selfChatMode": true,
      "groupPolicy": "disabled"
    }
  }
}

selfChatMode 并非普通 allowlist 的别名。当前文档说明,同号自聊有特殊准入:为 true 或未设置时可以进入,dmPolicy: "disabled" 仍会阻止;显式 false 则忽略同号 DM。这里主动写出设置,避免依赖隐式行为。

在扫码之前检查

openclaw config validate --json

核对实际校验路径、valid 和警告。此时如果报告渠道或插件无法识别,先检查插件安装与版本,不要删除配置字段来掩盖问题。JSON 能解析并不证明插件接受配置,也不证明 WhatsApp 连接可用。

第三步:关联 WhatsApp 账号

在正确的实例中运行:

openclaw channels login --channel whatsapp

用准备关联的 WhatsApp 账号在手机的关联设备入口扫描本次实时二维码。二维码会失效,远程主机上要先准备能及时查看终端的方式,不反复使用旧截图。

扫码关联建立的是账号会话。它不会自动批准所有发送者,也不代表模型已经能回复。

若采用多账号,登录时需明确 --account,并核对认证目录。首次练习建议只完成一个账号;不要将已有私人认证目录复制到公开项目或下载模板里。

第四步:启动 Gateway 并发送最小任务

若该实例已有 Gateway 服务,先查看状态;不要再启动第二个进程。仅在需要前台运行的测试实例中使用:

openclaw gateway

另一个终端检查:

openclaw channels status

专用号路线:从名单中的操作员账号私信关联号码。个人号路线:在自己的自聊对话发送。使用一个不涉及文件操作的任务:

这是 AC-WA-017 接入测试。请只回复:AC-WA-017 已收到。
不要调用其他工具,不要给其他联系人发送消息。

这是演练提示,不替代实际工具权限。检查三层结果:渠道收到输入、模型完成处理、手机端收到回复。只看到“输入中”或 Gateway 日志里的模型文本,都不足以证明送达。

什么时候才使用 pairing approve

本文两份模板都采用 allowlist,不要求名单用户再走配对审批。旧教程把 allowlist 配置与无条件 pairing approve 连在一起,现已更正。

如果你有意将私聊策略改成 pairing,才处理未知发送者的待批准请求:

openclaw pairing list whatsapp
openclaw pairing approve whatsapp "实际配对码"

先确认请求属于你正在测试的人和账号,再批准。配对码与登录二维码不是同一件事;没有待处理请求时,不要编造配对码或通过开放所有人来绕过。

第五步:验证拒绝、重启和实际送达

下载 WhatsApp 接入验收表。表中是预期结果,请逐项填写你的实际观察。

场景要验证的结果
已授权身份发送测试消息手机端实际收到对应标记回复
经同意使用的非授权测试账号发消息不执行其任务;日志能区分准入拒绝与离线
专用号对自己发 DM本模板 selfChatMode false,应被忽略
个人号自聊本模板 selfChatMode true,按测试请求处理
测试群内发送消息groupPolicy disabled,不执行群任务
正常重启同一 Gateway 实例检查会话是否恢复,并重新完成一次私聊

先完成授权正例,才有条件判断负例是否因准入规则被拒绝。机器人全部无响应时,不能把负例记为成功。

会话是否持久化取决于实际认证目录和运行环境。重启后需要扫码时,先核对账号、目录持久化和日志,不直接删除所有凭据重来。

群聊放到私聊之后

群入口开放前分别记录群 JID、允许的发送者、提及方式。WhatsApp 的群标识与 Telegram 负数群 ID 不同,不要互相复制。

当前官方文档区分群范围与群内发送者策略,提及还要单独判断。首次指定群时使用真实核实的群 JID,并保留发送者限制;不要把 groups: { "*": ... } 当成“只开放测试群”。

这一步需要新的正例和负例验收。私聊 pairing 已批准或某个人能使用私聊,都不能直接证明群权限正确。多账号时还要确认最终生效的是哪份群配置。

按现象排错

现象先检查暂时不要做
登录命令没有正常进入 QR 流程插件安装、版本、渠道识别及终端错误重写全部渠道配置
扫码后仍未关联QR 是否有效、手机账号、实例与账户选择重用旧二维码
已关联但断开Gateway 进程、网络、代理和认证目录一次性修改所有超时参数
私聊输入被忽略实际发送者、dmPolicy、allowFrom、自聊模式改成 open 放行所有人
模型有输出但手机没有渠道投递错误与目标账号把模型成功当成送达成功
重启后丢失会话持久卷、认证目录和运行身份清空其他账号凭据

停用与保留记录

结束临时测试时,记录结果并清理测试消息中的无关信息。如果决定不再使用该关联,按当前 CLI 帮助确认账号后注销:

openclaw channels logout --channel whatsapp

多账号必须指定正确账号;注销会清除对应认证状态,不能当作普通排错的第一步。停用后核对手机关联设备与渠道状态。保留不含凭据的配置、版本和验收记录,后续增加群聊或自动化时才有可比较的基线。

OpenClaw pairing 教程

先分清两类 pairing

类型解决的问题常见入口你要检查什么
私信发送者 pairing某个人能不能通过 Telegram / WhatsApp 等渠道私信助手/start、首次私聊、机器人返回 codeopenclaw pairing list <channel>、code 是否过期、approve 后是否进入 allowlist
设备 / 节点 pairing某个移动端、浏览器、Control UI、无头节点能不能加入 GatewayQR、setup code、device requestopenclaw devices list、requestId、角色、作用域、是否请求更高权限

一个非常实用的判断标准:如果问题发生在“某个人发消息给 bot”,优先看 channels pairing;如果问题发生在“某个设备连接 Gateway”,优先看 Gateway / devices pairing。

实操步骤

  1. 先在 channel 侧触发 pairing,再用终端或 Control UI 查看是否出现待审批项目。
  2. 运行 openclaw pairing list <channel>,确认 code 是否已经生成、channel 是否正确、状态是否仍有效。
  3. 用 openclaw pairing approve <channel> <CODE> 完成审批,不要让 code 超过有效期。
  4. 审批完成后,立刻回到 channel 测一次消息路径,确认不是“批了但没真正通”。
  5. 如果是设备或节点接入,不要套用 channel 命令,改用 openclaw devices list 和 openclaw devices approve <requestId>。

配置或命令示例

openclaw pairing list telegram
openclaw pairing approve telegram <CODE>

openclaw devices list
openclaw devices approve <requestId>
openclaw devices reject <requestId>

如果你不希望陌生私信默认触发 pairing,可以把策略改得更严格。下面只是结构示例,真实 ID 要以官方渠道文档和你的账号格式为准。

{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123:abc",
      dmPolicy: "allowlist",
      allowFrom: ["tg:123456789"],
      groups: { "*": { requireMention: true } }
    }
  }
}

一条标准私信审批链

  1. 用户在 Telegram 或 WhatsApp 私信机器人。
  2. 机器人根据 dmPolicy 决定是否返回 pairing code。
  3. 管理员运行 openclaw pairing list telegram,确认 code、发送者和状态。
  4. 管理员运行 approve 命令。
  5. OpenClaw 把允许信息写入对应 channel 的 allowlist 存储。
  6. 用户再次发消息,管理员确认消息真正进入对话路径。

官方 channels pairing 页面特别强调:DM 配对允许列表用于私信访问,群组授权是独立的。也就是说,批准了某个人的 DM pairing,不代表他可以在群里控制机器人。群组仍然要看 groupAllowFrom、groups 或渠道自己的群组规则。

一条标准设备审批链

  1. 移动端、浏览器、Control UI 或无头节点尝试连接 Gateway。
  2. Gateway 创建设备 pairing request,通常带有 requestId、role、scope 等信息。
  3. 管理员运行 openclaw devices list 查看请求。
  4. 管理员比较“当前已批准访问权限”和“新请求的访问权限”。
  5. 权限合理时 approve;不认识的设备、异常 scope、异常公钥变更一律 reject 或暂停调查。

设备 pairing 的风险比普通私信 pairing 更接近运行边界。尤其是 role、scope、公钥、token 轮换这类变化,不应该为了省事静默批准。

过期和重试怎么处理

  • 不要复用旧 code:过期就是过期,重新触发比排查旧状态更快。
  • 不要同时开多个入口乱试:Telegram、WhatsApp、Control UI、mobile app 同时试,会让你分不清哪条 pending request 对应哪个动作。
  • 先 reject 再重来:无法确认来源的 pending request,不要因为“可能是我刚才点的”而批准。
  • 记录谁批准了什么:团队环境里至少把 channel、code/requestId、批准人、时间和验证结果记下来。

风险边界

  • pairing code、setup code 和 bootstrap token 都应当临时当作密码处理。
  • allowFrom、paired devices、pending requests 都控制访问权,不要把这些文件当普通缓存随意删改。
  • dmPolicy: "open" 只适合非常明确的临时测试或公开机器人场景,生产环境应有额外隔离。
  • 已配对设备如果请求更多 scope 或角色变化,需要重新审批,不能简单当成“同一台设备所以没问题”。

常见坑

  • 看到配对码生成就以为完成了,忘记审批这一步。
  • 配对码过期后继续反复点旧链接,浪费时间在无效状态上。
  • pairing 批了,但后续 dmPolicy / allowlist 仍然挡住消息。
  • 批准了 DM pairing,却以为群组权限也同步放开。
  • 把设备 pairing request 当成普通聊天 pairing code 处理,导致审批命令和排错方向都错了。

官方资料

版本和参数,以这些来源为准

本文按实际任务重写,快速变化的信息仍应在操作前回到官方页面核对。

常见问题

继续操作前,先确认这些边界

Telegram 需要 channels login 吗?

不需要 WhatsApp 式扫码登录。本文通过 tokenFile 提供 Bot token,然后验证 Gateway 的 Telegram 接入。

私聊 pairing 已批准,群里为什么仍不能使用?

群聊要分别允许群 ID 和发送者 ID,还受提及规则与 Telegram 消息可见性影响;不会自动继承私聊配对权限。

config validate 显示 valid:true 就可以用了吗?

不能。还要看 warnings,并真实验证连接、发送者准入和模型回复;本站实测空 DM 允许列表仍返回 valid:true,但警告所有私聊会被丢弃。

扫码登录和 pairing approve 是一回事吗?

不是。扫码把 WhatsApp 账号关联到 OpenClaw;pairing approve 只处理 pairing 私聊策略下待批准的发送者。本文默认 allowlist 路线不需要为名单用户另外执行 pairing approve。

个人自聊是否受 allowFrom 完全限制?

当前官方文档说明,同号自聊在 selfChatMode 为 true 或未设置时有特殊准入行为;disabled 私聊仍阻止所有 DM。本站个人号模板明确启用 selfChatMode,专用号模板明确关闭,不能只看 allowFrom 推断自聊行为。

扫码成功就代表接入完成吗?

不代表。还需要 Gateway 持续连接、发送者通过准入、模型完成处理,并且手机端实际收到消息。

OpenClaw pairing code 会永久有效吗?

不会。聊天渠道 pairing code 是短期审批凭证,旧内容里常见的 1 小时有效期不能被当成长期授权。真实操作时应尽快 list、approve、验证,而不是收藏旧 code。

继续学习

按当前任务继续推进