Channels 导读

Signal 通道:用 signal-cli 接机器人,先搞定注册和配对

这一页是 Signal 通道的接入指南,核心是让 Gateway 通过 signal-cli 的 HTTP JSON-RPC 收发消息。先选注册路径(QR 链接或短信验证),然后配置账号、cliPath 和 dmPolicy,最后用 openclaw pairing approve 批准第一个 DM 发送者。最容易踩的坑是:机器人必须用独立 Signal 号码,且 dmPolicy 设为 pairing 时,只有 allowFrom 列表里的号码才能触发配对流程。

先讲这一页到底在解决什么

Signal 通道:用 signal-cli 接机器人,先搞定注册和配对

这一页是 Signal 通道的接入指南,核心是让 Gateway 通过 signal-cli 的 HTTP JSON-RPC 收发消息。先选注册路径(QR 链接或短信验证),然后配置账号、cliPath 和 dmPolicy,最后用 openclaw pairing approve 批准第一个 DM 发送者。最容易踩的坑是:机器人必须用独立 Signal 号码,且 dmPolicy 设为 pairing 时,只有 allowFrom 列表里的号码才能触发配对流程。

原文共 20 节,先看 Start Here 路径:/channels/signal 查看官方原文

第一站

🧠 先别背配置,先想画面

Signal 这条线不是“装上就能聊”,而是“先把门口、线路、号码、权限都摆对”。

📱 Signal 账号像工牌

OpenClaw 不是拿一个通用入口去混 Signal,而是要绑定一个具体账号。这个账号就是它上班时戴的工牌。

🛰 signal-cli 像收发台

Signal 不是直接进 OpenClaw,而是先进 signal-cli,再由 OpenClaw 去读它吐出来的事件。

🚪 pairing 像门口名单

陌生人第一次来私聊,不是直接放进来,而是先排队等你批准。

⭐ 先记一句

Signal 这页的主线就是:号码、daemon、配对、群规则,四件事要一起对上。

第二站

🚀 先把这条线接通,再谈高级功能

官方的 quick setup 很像“先跑通,再优化”。别一上来就盯着 reaction、history、group override,那是后面的戏。

1. 先准备一个号

最好用专门的 Signal 号。把它想成机器人专属电话号码,别和你自己的日常号混在一起。

2. 让 signal-cli 上班

signal-cli 像门口收发台。OpenClaw 会等它把消息送过来,再把回复交回去。

3. 先连一种方式

官方给了两条路:QR link,或者 SMS 注册。一个像扫码进门,一个像先拿短信验证码办证。

4. 再做第一次批准

第一条私聊来了以后,先拿配对码批准,再让它正式进来。

第三站

🔧 配置里那几行,翻成人话就是“这条专线怎么接”

Signal 的配置看着密,其实大部分只是在回答三个问题:号是谁、daemon 在哪、谁能进来。

account

像写上机器人自己的电话号码。它不是普通备注,而是收发都要认的身份。

cliPath

像告诉 OpenClaw 去哪里找 signal-cli 这位收发员。

httpUrl

像告诉 OpenClaw:“别自己起 daemon 了,直接连那台已经站好的收发台。”

dmPolicy: "pairing"

像门口先拦一下。陌生人来敲门时,先给他一张临时票,不是直接开门。

💡 命令 / 配置怎么理解
  • signal-cli link -n "OpenClaw":像给机器人号办一张“我愿意连上去”的绑定卡,然后拿手机去扫它。
  • signal-cli -a +<BOT_PHONE_NUMBER> register:像拿一个新号码去办理入场手续。
  • signal-cli -a +<BOT_PHONE_NUMBER> register --captcha '...':像先过验证码关卡,再继续办证。
  • signal-cli -a +<BOT_PHONE_NUMBER> verify <VERIFICATION_CODE>:像把短信验证码交给前台,证明这个号码真是你的。
  • openclaw pairing approve signal <CODE>:像把某个敲门的人领进门,告诉系统“这个人可以聊了”。

第四站

💬 私聊和群聊,像两扇完全不同的门

Signal 的 DM 规则和 group 规则是分开的。这个分开很重要,不然你会把“谁能私聊”误当成“谁能在群里说话”。

🚪

DM 门

dmPolicy 决定陌生人能不能先敲私聊门。默认是 pairing,先审批,再说话。

🏠

群门

groupPolicy 决定群里是开放、名单制,还是直接关闭。它和私聊不是一套规则。

👤

allowFrom

像在门卫手里写上“这些号码可以进来”。Signal 没有用户名,主要看电话号码或 UUID。

🧲

groupAllowFrom

像在群门口再加一层名单,只有指定的人能把机器人叫出来。

第五站

🧵 signal-cli 的工作方式,像一个一直站着收消息的人

官方这段是在告诉你:signal-cli 不是一次性工具,它更像一个一直开着的收发台。

🏃 它一直跑着

signal-cli 像站岗的收发员,消息一来就往外吐事件。

🛰 OpenClaw 去听事件

OpenClaw 不是去抓网页,而是去听 SSE 事件流。像隔着玻璃听收发台报到。

🔁 回复会原路送回

机器人回话时,不会乱串门,而是回到同一个号码或同一个群里。

📌 这节真正要记住的点

Signal 这条线不是“拉个插件就完事”,而是“信使一直在线,OpenClaw 盯着它收发”。

第六站

📎 限制和小细节,都是为了不让这条线太吵

官方后面列的 chunk、media、typing、receipt,其实都在讲:别把一条消息链弄得太满太乱。

✂️ textChunkLimit

像规定每次别塞太长的回复,太长就分成几小段寄出去。

🖼 mediaMaxMb

像给包裹大小设上限。太大的东西别一股脑往里扔。

⌨️ typing indicators

像机器人在打字时先亮个灯,让你知道它没失踪,还在认真回你。

👍 sendReadReceipts

像收到消息后替允许的私聊把“已读”也送回去。群里就没这么直接了。

🛠 命令 / 代码像在做什么
  • chunkMode: "newline":像先按段落拆,再按长度拆,避免一整坨消息硬塞。
  • message action=react channel=signal ...:像给某条消息贴一个小表情回执。
  • target=uuid:<id> / signal:group:<groupId>:像把回执贴到具体的人或具体的群门牌上。
  • remove=true:像把刚贴上的表情再拿掉。

第七站

🩺 出问题时,先按“信号灯梯子”往上爬

官方给的 troubleshooting 很实在。别一来就怀疑世界,先从最基础的几步查。

openclaw status

像先看全局灯是不是亮着。

openclaw gateway status

像再看总控台是否在线。

openclaw logs --follow

像蹲在后台窗户外面,看消息到底卡在哪一步。

openclaw doctor

像请医生给整套配置做一次体检。

🔐 常见翻车点
  • daemon 活着但没回话,常常是账号或 receive mode 没对上。
  • DM 不理人,多半是对方还在 pairing 等待区。
  • 群里没响应,常常是群规则或 mention 门槛拦住了。
  • 如果 Signal 在诊断里都没出现,先确认 channels.signal.enabled: true

最后总结

🎈 把 Signal 这页压成一句最好记的话

Signal 通道就是把 OpenClaw 接到一条长期在线的收发线,再用 pairing、allowlist、group policy 把门口管稳。

如果你下一页只继续看一页,我建议看 /channels/pairing,因为 Signal 最核心的私聊门禁就是 pairing。