Signal (signal-cli)
Signal 渠道通过外部 CLI 集成。Gateway 网关通过 HTTP JSON-RPC + SSE 与 signal-cli 通信。
快速设置
推荐: 为机器人使用单独的 Signal 号码,而不是你的个人账号。
安装 signal-cli
signal-cli 需要 Java:# macOS
brew install signal-cli
# Linux
# 从 https://github.com/AsamK/signal-cli/releases 下载
关联设备
将机器人设备关联到 Signal:signal-cli link -n "OpenClaw"
扫描显示的二维码:
Signal → 设置 → 关联设备 配置 OpenClaw
{
"channels": {
"signal": {
"enabled": true,
"account": "+15551234567",
"cliPath": "signal-cli",
"dmPolicy": "pairing",
"allowFrom": ["+15557654321"]
}
}
}
启动 Gateway 网关
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
}
}
}
表情反应
智能体可以发送表情反应:
{
"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
群组反应
群组表情反应需要 targetAuthor 或 targetAuthorUuid:
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 冷启动需要时间解决方案:
- 增加启动超时:
{
"channels": {
"signal": {
"startupTimeoutMs": 120000
}
}
}
- 或使用外部守护进程模式(见上文)
检查项:
- signal-cli 守护进程正在运行
dmPolicy 正确配置
- 如果使用配对,批准发送者:
openclaw pairing list signal
openclaw pairing approve signal <CODE>
问题: 仅有 UUID 的发送者(来自 sourceUuid)解决方案:
在 allowFrom 中存储为 uuid:<id>:{
"channels": {
"signal": {
"allowFrom": ["uuid:123e4567-e89b-12d3-a456-426614174000"]
}
}
}
原因: groupPolicy 为 allowlist 但没有配置解决方案:{
"channels": {
"signal": {
"groupPolicy": "open"
}
}
}
或添加到允许列表。
多账户支持
运行多个 Signal 账号:
{
"channels": {
"signal": {
"accounts": {
"personal": {
"name": "个人",
"account": "+15551111111",
"dmPolicy": "pairing"
},
"work": {
"name": "工作",
"account": "+15552222222",
"dmPolicy": "allowlist",
"allowFrom": ["+15553333333"]
}
}
}
}
}
相关资源