Skip to main content

Signal (signal-cli)

Signal 渠道通过外部 CLI 集成。Gateway 网关通过 HTTP JSON-RPC + SSE 与 signal-cli 通信。

快速设置

推荐: 为机器人使用单独的 Signal 号码,而不是你的个人账号。
1

安装 signal-cli

signal-cli 需要 Java:
# macOS
brew install signal-cli

# Linux
# 从 https://github.com/AsamK/signal-cli/releases 下载
2

关联设备

将机器人设备关联到 Signal:
signal-cli link -n "OpenClaw"
扫描显示的二维码: Signal → 设置 → 关联设备
3

配置 OpenClaw

{
  "channels": {
    "signal": {
      "enabled": true,
      "account": "+15551234567",
      "cliPath": "signal-cli",
      "dmPolicy": "pairing",
      "allowFrom": ["+15557654321"]
    }
  }
}
4

启动 Gateway 网关

openclaw gateway run
OpenClaw 会自动启动 signal-cli 守护进程。

号码模型

如果你在个人 Signal 账号上运行机器人,它会忽略你自己的消息(循环保护)。要实现“我发消息给机器人然后它回复”,请使用单独的机器人号码

配置选项

基础配置

{
  "channels": {
    "signal": {
      "enabled": true,
      "account": "+15551234567",
      "cliPath": "signal-cli",
      "dmPolicy": "pairing",
      "allowFrom": ["+15557654321"]
    }
  }
}
{
  "channels": {
    "signal": {
      "dmPolicy": "pairing"
    }
  }
}
Signal 支持使用 E.164 电话号码或 UUID。仅有 UUID 的发送者存储为 uuid:<id>
{
  "channels": {
    "signal": {
      "groupPolicy": "allowlist",
      "groupAllowFrom": ["+15551234567"],
      "groups": {
        "*": { "requireMention": true }
      }
    }
  }
}

外部守护进程模式

如果你想自己管理 signal-cli(JVM 冷启动慢、容器初始化或共享 CPU):
{
  "channels": {
    "signal": {
      "httpUrl": "http://127.0.0.1:8080",
      "autoStart": false
    }
  }
}
单独运行 signal-cli 守护进程:
signal-cli -a +15551234567 daemon --http 127.0.0.1:8080

输入指示器和已读回执

输入指示器

OpenClaw 通过 signal-cli sendTyping 发送输入信号,并在回复运行时刷新它们。

已读回执

{
  "channels": {
    "signal": {
      "sendReadReceipts": true  // 默认:true
    }
  }
}
Signal-cli 不暴露群组的已读回执。

表情反应

智能体可以发送表情反应:
{
  "action": "react",
  "channel": "signal",
  "target": "uuid:123e4567-e89b-12d3-a456-426614174000",
  "messageId": "1737630212345",
  "emoji": "🔥"
}

私信反应

# 使用 UUID
message action=react channel=signal target=uuid:123e4567-... messageId=1737630212345 emoji=🔥

# 使用电话号码
message action=react channel=signal target=+15551234567 messageId=1737630212345 emoji=🔥

# 移除反应
message action=react channel=signal target=+15551234567 messageId=1737630212345 emoji=🔥 remove=true

群组反应

群组表情反应需要 targetAuthortargetAuthorUuid
message action=react channel=signal target=signal:group:<groupId> targetAuthor=uuid:<sender-uuid> messageId=1737630212345 emoji=✅

配置

{
  "channels": {
    "signal": {
      "actions": {
        "reactions": true  // 默认:true
      },
      "reactionLevel": "minimal"  // off | ack | minimal | extensive
    }
  }
}
级别描述
off / ack禁用智能体表情反应
minimal智能体可以少量反应(每 5-10 次交流 1 次)
extensive智能体可以在适当时自由反应

媒体处理

支持的类型

  • 图片
  • 视频
  • 音频
  • 文档

限制

{
  "channels": {
    "signal": {
      "textChunkLimit": 4000,
      "mediaMaxMb": 8,
      "ignoreAttachments": false  // true 跳过附件下载
    }
  }
}

分块模式

{
  "channels": {
    "signal": {
      "chunkMode": "newline"  // length | newline
    }
  }
}

投递目标

与 cron/CLI 发送一起使用:
# 私信
openclaw message send --channel signal --target signal:+15551234567 --message "hello"

# UUID 私信
openclaw message send --channel signal --target uuid:123e4567-... --message "hello"

# 群组
openclaw message send --channel signal --target signal:group:<groupId> --message "hello"

# 用户名(如果你的 Signal 账户支持)
openclaw message send --channel signal --target username:alice --message "hello"

故障排除

原因: JVM 冷启动需要时间解决方案:
  1. 增加启动超时:
    {
      "channels": {
        "signal": {
          "startupTimeoutMs": 120000
        }
      }
    }
    
  2. 或使用外部守护进程模式(见上文)
检查项:
  1. signal-cli 守护进程正在运行
  2. dmPolicy 正确配置
  3. 如果使用配对,批准发送者:
    openclaw pairing list signal
    openclaw pairing approve signal <CODE>
    
问题: 仅有 UUID 的发送者(来自 sourceUuid解决方案:allowFrom 中存储为 uuid:<id>
{
  "channels": {
    "signal": {
      "allowFrom": ["uuid:123e4567-e89b-12d3-a456-426614174000"]
    }
  }
}
原因: groupPolicyallowlist 但没有配置解决方案:
{
  "channels": {
    "signal": {
      "groupPolicy": "open"
    }
  }
}
或添加到允许列表。

多账户支持

运行多个 Signal 账号:
{
  "channels": {
    "signal": {
      "accounts": {
        "personal": {
          "name": "个人",
          "account": "+15551111111",
          "dmPolicy": "pairing"
        },
        "work": {
          "name": "工作",
          "account": "+15552222222",
          "dmPolicy": "allowlist",
          "allowFrom": ["+15553333333"]
        }
      }
    }
  }
}

相关资源

配对系统

了解如何批准新用户

配置参考

完整的 Signal 配置选项

故障排除

解决常见问题

安全指南

Signal 隐私和安全