8.9 Signal集成

通过 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 号码是否正确链接
  • 验证 dmPolicyallowFrom 配置
  • 查看 OpenClaw 日志:openclaw logs --follow

号码已注册错误

如果号码已在其他设备注册,需要先注销:

signal-cli -a +15551234567 unregister
安全建议
  • 始终使用 pairingallowlist 策略
  • 定期审查配对列表:openclaw pairing list
  • 使用专用号码,避免与个人 Signal 账号混用
  • 保持 signal-cli 更新到最新版本
提示
更多详细信息和高级配置,请访问 官方文档