通过 signal-cli 将 OpenClaw 连接到端到端加密的 Signal 消息平台。
概述
Signal 集成使用 signal-cli 通过 HTTP JSON-RPC 和 SSE(服务器发送事件)实现通信。这允许您的 AI 助手通过 Signal 的安全加密消息系统与用户交互。
状态
需要外部依赖 signal-cli,实验性功能。
前置要求
- 单独的 Signal 电话号码:需要一个专用于机器人的号码(不能与您的个人 Signal 账号共用)
- Java 运行时:signal-cli 需要 Java 17+ 环境
- signal-cli:Signal 的命令行工具
安装 signal-cli
macOS (使用 Homebrew)
brew install signal-cli
Linux
# 下载最新版本
wget https://github.com/AsamK/signal-cli/releases/download/v0.12.8/signal-cli-0.12.8.tar.gz
# 解压
tar xf signal-cli-0.12.8.tar.gz -C /opt
# 添加到 PATH
export PATH="/opt/signal-cli/bin:$PATH"
验证安装
signal-cli --version
配置 Signal 账号
1. 链接设备
使用您的专用 Signal 号码将 signal-cli 链接为辅助设备:
signal-cli link -n "OpenClaw"
这会生成一个二维码链接。使用 Signal 应用扫描该二维码完成链接。
2. 启动 signal-cli 守护进程
OpenClaw 需要 signal-cli 以 daemon 模式运行:
signal-cli -a +15551234567 daemon --http 127.0.0.1:8080
将 +15551234567 替换为您的机器人电话号码。
OpenClaw 配置
在您的配置文件中添加 Signal 通道:
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
cliPath: "signal-cli", // 可选,默认值
daemonHost: "127.0.0.1:8080", // 可选,默认值
dmPolicy: "pairing" // 默认安全策略
}
}
}
访问控制
直接消息策略
控制谁可以与机器人发起对话:
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
dmPolicy: "allowlist",
allowFrom: [
"+15557654321", // 电话号码
"+15559876543"
]
}
}
}
dmPolicy 选项:
"pairing"(推荐):需要用户配对审批"allowlist":仅允许指定号码"open":接受所有消息(不推荐)"disabled":禁用直接消息
配对工作流
当使用 pairing 策略时:
# 查看待审批的配对请求
openclaw pairing list
# 批准用户
openclaw pairing approve signal:+15557654321
# 拒绝用户
openclaw pairing reject signal:+15557654321
群组支持
Signal 群组需要单独配置:
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
groupPolicy: "allowlist",
groups: {
"family-group-id": { allow: true },
"work-team-id": { allow: true }
}
}
}
}
获取群组 ID
signal-cli -a +15551234567 listGroups -d
多账号配置
同时使用多个 Signal 号码:
{
channels: {
signal: {
accounts: {
personal: {
enabled: true,
account: "+15551111111",
daemonHost: "127.0.0.1:8080"
},
work: {
enabled: true,
account: "+15552222222",
daemonHost: "127.0.0.1:8081"
}
}
}
}
}
重要
每个账号需要运行独立的 signal-cli daemon,使用不同的端口。
使用 systemd 自动启动(Linux)
创建服务文件 /etc/systemd/system/signal-cli.service:
[Unit]
Description=Signal CLI Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/signal-cli -a +15551234567 daemon --http 127.0.0.1:8080
Restart=on-failure
User=openclaw
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl enable signal-cli
sudo systemctl start signal-cli
sudo systemctl status signal-cli
故障排查
signal-cli 未找到
# 验证安装
which signal-cli
# 如果不在 PATH 中,指定完整路径
{
channels: {
signal: {
cliPath: "/opt/signal-cli/bin/signal-cli"
}
}
}
连接失败
- 确认 signal-cli daemon 正在运行
- 检查端口未被占用:
lsof -i :8080 - 验证防火墙规则允许本地连接
消息未接收
- 检查 Signal 号码是否正确链接
- 验证
dmPolicy和allowFrom配置 - 查看 OpenClaw 日志:
openclaw logs --follow
号码已注册错误
如果号码已在其他设备注册,需要先注销:
signal-cli -a +15551234567 unregister
安全建议
- 始终使用
pairing或allowlist策略 - 定期审查配对列表:
openclaw pairing list - 使用专用号码,避免与个人 Signal 账号混用
- 保持 signal-cli 更新到最新版本
提示
更多详细信息和高级配置,请访问 官方文档。