Signal(signal-cli)
狀態:外部 CLI 整合。Gateway 透過 HTTP JSON-RPC + SSE 與signal-cli 通訊。
快速設定(初學者)
- 為機器人使用獨立的 Signal 號碼(建議)。
- 安裝
signal-cli(需要 Java)。 - 連結機器人裝置並啟動守護程序:
signal-cli link -n "OpenClaw"
- 設定 OpenClaw 並啟動 Gateway。
這是什麼
- 透過
signal-cli的 Signal 頻道(非嵌入式 libsignal)。 - 確定性路由:回覆始終返回 Signal。
- 私訊共享代理的主會話;群組保持隔離(
agent:<agentId>:signal:group:<groupId>)。
設定寫入
預設情況下,Signal 允許寫入由/config set|unset 觸發的設定更新(需要 commands.config: true)。
停用方式:
號碼模型(重要)
- Gateway 連接到一個 Signal 裝置(
signal-cli帳戶)。 - 如果您在個人 Signal 帳戶上運行機器人,它會忽略您自己的訊息(循環保護)。
- 對於「我發訊息給機器人,它回覆」,使用獨立的機器人號碼。
設定(快速路徑)
- 安裝
signal-cli(需要 Java)。 - 連結機器人帳戶:
signal-cli link -n "OpenClaw"然後在 Signal 中掃描 QR。
- 設定 Signal 並啟動 Gateway。
channels.signal.accounts 設定每個帳戶的設定和可選的 name。請參閱 gateway/configuration 了解共享模式。
外部守護程序模式(httpUrl)
如果您想自己管理signal-cli(JVM 冷啟動慢、容器初始化或共享 CPU),單獨運行守護程序並將 OpenClaw 指向它:
channels.signal.startupTimeoutMs。
存取控制(私訊 + 群組)
私訊:- 預設:
channels.signal.dmPolicy = "pairing"。 - 未知發送者收到配對碼;訊息在批准前被忽略(代碼在 1 小時後過期)。
- 透過以下方式批准:
openclaw pairing list signalopenclaw pairing approve signal <CODE>
- 配對是 Signal 私訊的預設令牌交換。詳情:配對
- 僅 UUID 的發送者(來自
sourceUuid)在channels.signal.allowFrom中儲存為uuid:<id>。
channels.signal.groupPolicy = open | allowlist | disabled。- 當設定
allowlist時,channels.signal.groupAllowFrom控制誰可以在群組中觸發。
運作方式(行為)
signal-cli作為守護程序運行;Gateway 透過 SSE 讀取事件。- 入站訊息被正規化為共享頻道信封。
- 回覆始終路由回同一個號碼或群組。
媒體 + 限制
- 外發文字分塊至
channels.signal.textChunkLimit(預設 4000)。 - 可選的換行分塊:設定
channels.signal.chunkMode="newline"在長度分塊前在空白行(段落邊界)分割。 - 支援附件(從
signal-cli獲取 base64)。 - 預設媒體上限:
channels.signal.mediaMaxMb(預設 8)。 - 使用
channels.signal.ignoreAttachments跳過下載媒體。 - 群組歷史上下文使用
channels.signal.historyLimit(或channels.signal.accounts.*.historyLimit),回退到messages.groupChat.historyLimit。設定0停用(預設 50)。
輸入指示器 + 已讀回執
- 輸入指示器:OpenClaw 透過
signal-cli sendTyping發送輸入信號,並在回覆運行時刷新它們。 - 已讀回執:當
channels.signal.sendReadReceipts為 true 時,OpenClaw 為允許的私訊轉發已讀回執。 - Signal-cli 不公開群組的已讀回執。
反應(訊息工具)
- 使用
message action=react並設定channel=signal。 - 目標:發送者 E.164 或 UUID(使用配對輸出中的
uuid:<id>;裸 UUID 也可以)。 messageId是您要反應的訊息的 Signal 時間戳記。- 群組反應需要
targetAuthor或targetAuthorUuid。
channels.signal.actions.reactions:啟用/停用反應動作(預設 true)。channels.signal.reactionLevel:off | ack | minimal | extensive。off/ack停用代理反應(訊息工具react會報錯)。minimal/extensive啟用代理反應並設定指導級別。
- 每帳戶覆寫:
channels.signal.accounts.<id>.actions.reactions、channels.signal.accounts.<id>.reactionLevel。
交付目標(CLI/cron)
- 私訊:
signal:+15551234567(或純 E.164)。 - UUID 私訊:
uuid:<id>(或裸 UUID)。 - 群組:
signal:group:<groupId>。 - 用戶名:
username:<name>(如果您的 Signal 帳戶支援)。
設定參考(Signal)
完整設定:設定 供應商選項:channels.signal.enabled:啟用/停用頻道啟動。channels.signal.account:機器人帳戶的 E.164。channels.signal.cliPath:signal-cli的路徑。channels.signal.httpUrl:完整守護程序 URL(覆寫 host/port)。channels.signal.httpHost、channels.signal.httpPort:守護程序綁定(預設 127.0.0.1:8080)。channels.signal.autoStart:自動生成守護程序(如果httpUrl未設定則預設 true)。channels.signal.startupTimeoutMs:啟動等待逾時(毫秒)(上限 120000)。channels.signal.receiveMode:on-start | manual。channels.signal.ignoreAttachments:跳過附件下載。channels.signal.ignoreStories:忽略來自守護程序的限時動態。channels.signal.sendReadReceipts:轉發已讀回執。channels.signal.dmPolicy:pairing | allowlist | open | disabled(預設:pairing)。channels.signal.allowFrom:私訊允許清單(E.164 或uuid:<id>)。open需要"*"。Signal 沒有用戶名;使用電話/UUID ID。channels.signal.groupPolicy:open | allowlist | disabled(預設:allowlist)。channels.signal.groupAllowFrom:群組發送者允許清單。channels.signal.historyLimit:作為上下文包含的最大群組訊息數(0 停用)。channels.signal.dmHistoryLimit:用戶輪次中的私訊歷史限制。每用戶覆寫:channels.signal.dms["<phone_or_uuid>"].historyLimit。channels.signal.textChunkLimit:外發分塊大小(字元)。channels.signal.chunkMode:length(預設)或newline在長度分塊前在空白行(段落邊界)分割。channels.signal.mediaMaxMb:入站/外發媒體上限(MB)。
agents.list[].groupChat.mentionPatterns(Signal 不支援原生提及)。messages.groupChat.mentionPatterns(全域備選)。messages.responsePrefix。