通过 signal-cli 接入 Signal 消息。Gateway 通过 HTTP 与 signal-cli 通信,支持原生 daemon(JSON-RPC + SSE)或 bbernhard 容器(REST + WebSocket)两种模式。
安装方式
原生模式(Linux):
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/AsamK/signal-cli/releases/latest | sed -e 's/^.*\/v//')
curl -L -O "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}-Linux-native.tar.gz"
sudo tar xf "signal-cli-${VERSION}-Linux-native.tar.gz" -C /opt
sudo ln -sf /opt/signal-cli /usr/local/bin/容器模式(Docker):
signal-cli:
image: bbernhard/signal-cli-rest-api:latest
environment:
MODE: json-rpc # 必须设置
ports:
- "8080:8080"最小配置
{
channels: {
signal: {
enabled: true,
account: "+15551234567", // E.164 格式
cliPath: "signal-cli",
dmPolicy: "pairing",
allowFrom: ["+15557654321"],
},
},
}注册方式
- Path A(QR 链接):
signal-cli link -n "OpenClaw"扫码关联 - Path B(SMS 注册):
signal-cli -a +<号码> register --captcha '<URL>'
注意:用专用 bot 号码,避免与个人账号冲突。
容器模式配置
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
httpUrl: "http://signal-cli:8080",
autoStart: false,
apiMode: "container", // auto | native | container
},
},
}访问控制
DM 策略(dmPolicy):pairing(默认)| allowlist | open | disabled
openclaw pairing list signal
openclaw pairing approve signal <CODE>群组策略(groupPolicy):open | allowlist | disabled
groupAllowFrom:接受 Signal 群组 ID、E.164 号码、uuid:<id>或*groups["<group-id>"]:支持requireMention、tools、toolsBySender
消息限制
- 出站文本分块:
textChunkLimit(默认 4000 字符) - 媒体上限:
mediaMaxMb(默认 8MB) - 群组历史上下文:
historyLimit(默认 50 条)
故障排查
openclaw status
openclaw channels status --probe
openclaw pairing list signal
pgrep -af signal-cli常见问题:
- daemon 可达但无回复:检查
httpUrl、account和接收模式 - DM 被忽略:发送者等待配对审批
- 群消息被忽略:检查群组白名单和 mention 门控
相关链接
- channel-pairing — DM 配对流程
- channel-routing — 消息路由机制