DM 门
dmPolicy 决定陌生人能不能先敲私聊门。默认是 pairing,先审批,再说话。
Channels 导读
这一页是 Signal 通道的接入指南,核心是让 Gateway 通过 signal-cli 的 HTTP JSON-RPC 收发消息。先选注册路径(QR 链接或短信验证),然后配置账号、cliPath 和 dmPolicy,最后用 openclaw pairing approve 批准第一个 DM 发送者。最容易踩的坑是:机器人必须用独立 Signal 号码,且 dmPolicy 设为 pairing 时,只有 allowFrom 列表里的号码才能触发配对流程。
先讲这一页到底在解决什么
这一页是 Signal 通道的接入指南,核心是让 Gateway 通过 signal-cli 的 HTTP JSON-RPC 收发消息。先选注册路径(QR 链接或短信验证),然后配置账号、cliPath 和 dmPolicy,最后用 openclaw pairing approve 批准第一个 DM 发送者。最容易踩的坑是:机器人必须用独立 Signal 号码,且 dmPolicy 设为 pairing 时,只有 allowFrom 列表里的号码才能触发配对流程。
第一站
Signal 这条线不是“装上就能聊”,而是“先把门口、线路、号码、权限都摆对”。
OpenClaw 不是拿一个通用入口去混 Signal,而是要绑定一个具体账号。这个账号就是它上班时戴的工牌。
Signal 不是直接进 OpenClaw,而是先进 signal-cli,再由 OpenClaw 去读它吐出来的事件。
陌生人第一次来私聊,不是直接放进来,而是先排队等你批准。
Signal 这页的主线就是:号码、daemon、配对、群规则,四件事要一起对上。
第二站
官方的 quick setup 很像“先跑通,再优化”。别一上来就盯着 reaction、history、group override,那是后面的戏。
最好用专门的 Signal 号。把它想成机器人专属电话号码,别和你自己的日常号混在一起。
signal-cli 像门口收发台。OpenClaw 会等它把消息送过来,再把回复交回去。
官方给了两条路:QR link,或者 SMS 注册。一个像扫码进门,一个像先拿短信验证码办证。
第一条私聊来了以后,先拿配对码批准,再让它正式进来。
第三站
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 规则是分开的。这个分开很重要,不然你会把“谁能私聊”误当成“谁能在群里说话”。
dmPolicy 决定陌生人能不能先敲私聊门。默认是 pairing,先审批,再说话。
groupPolicy 决定群里是开放、名单制,还是直接关闭。它和私聊不是一套规则。
allowFrom像在门卫手里写上“这些号码可以进来”。Signal 没有用户名,主要看电话号码或 UUID。
groupAllowFrom像在群门口再加一层名单,只有指定的人能把机器人叫出来。
第五站
官方这段是在告诉你:signal-cli 不是一次性工具,它更像一个一直开着的收发台。
signal-cli 像站岗的收发员,消息一来就往外吐事件。
OpenClaw 不是去抓网页,而是去听 SSE 事件流。像隔着玻璃听收发台报到。
机器人回话时,不会乱串门,而是回到同一个号码或同一个群里。
Signal 这条线不是“拉个插件就完事”,而是“信使一直在线,OpenClaw 盯着它收发”。
第六站
官方后面列的 chunk、media、typing、receipt,其实都在讲:别把一条消息链弄得太满太乱。
textChunkLimit像规定每次别塞太长的回复,太长就分成几小段寄出去。
mediaMaxMb像给包裹大小设上限。太大的东西别一股脑往里扔。
像机器人在打字时先亮个灯,让你知道它没失踪,还在认真回你。
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像请医生给整套配置做一次体检。
channels.signal.enabled: true。最后总结
Signal 通道就是把 OpenClaw 接到一条长期在线的收发线,再用 pairing、allowlist、group policy 把门口管稳。
如果你下一页只继续看一页,我建议看 /channels/pairing,因为 Signal 最核心的私聊门禁就是 pairing。