OpenClaw

OpenClaw Signal 頻道

即時通訊
困難

透過 signal-cli 將 OpenClaw 連接到 Signal — 這是一個第三方開源命令列介面,實作了 Signal 協定。此整合提供隱私優先的 AI 訊息服務,具備完整的端對端加密。OpenClaw 透過 HTTP JSON-RPC 和 Server-Sent Events 與 signal-cli daemon 通訊,讓您的 AI 助手可以在 Signal 上收發訊息。機器人帳號需要一個專用的手機號碼。

快速資訊
難度困難
分類即時通訊
支援功能數4 / 6

Signal 支援功能

文字訊息

支援

媒體與檔案

支援

表情回應

支援

討論串

不支援

語音訊息

不支援

群組聊天

支援

Signal 前置條件

  • Signal 機器人帳號的專用手機號碼(與您的個人號碼分開)
  • 伺服器已安裝 Java 執行環境(JRE 25+)
  • signal-cli 已安裝並可在 PATH 中存取
  • OpenClaw Gateway 已執行並設定完成
  • 一個現有的 Signal 帳號用於連結機器人(或進行新註冊)

Signal 快速設定

1

安裝 signal-cli

從官方 GitHub 儲存庫下載並安裝 signal-cli。需要 Java 25 或更高版本。在終端機中執行 'signal-cli --version' 以驗證安裝。

2

連結或註冊 Signal 帳號

執行 'signal-cli link -n "OpenClaw"' 將 signal-cli 連結到現有的 Signal 帳號,並從另一台裝置掃描 QR Code。或者,使用 'signal-cli -a +15551234567 register' 註冊新帳號。請使用專用號碼 — 使用個人帳號會導致自我訊息迴圈。

3

新增 Signal 頻道設定

將 Signal 頻道設定新增到 ~/.openclaw/openclaw.json。將 'account' 欄位設為機器人的 E.164 格式手機號碼,並設定 dmPolicy(pairing、allowlist 或 open)以控制誰可以向您的助手發送訊息。

4

啟動 Gateway 並傳送測試訊息

啟動 Gateway 程序。OpenClaw 會自動啟動 signal-cli daemon。從另一個 Signal 帳號向機器人號碼傳送訊息。如果使用預設的 pairing 策略,請透過 'openclaw pairing approve signal <code>' 核准發送者。

Signal 設定範例

config.json
{
  "channels": {
    "signal": {
      "enabled": true,
      "account": "+15551234567",
      "dmPolicy": "pairing"
    }
  }
}

Signal 深入了解

架構概述

OpenClaw 透過 signal-cli 連接到 Signal — 這是一個基於 Java 的命令列客戶端,實作了 Signal 協定。該架構使用 HTTP JSON-RPC 介面搭配 Server-Sent Events(SSE)來實現即時訊息傳遞。 預設情況下,OpenClaw 會在 Gateway 啟動時自動產生一個 signal-cli daemon 程序。該 daemon 處理所有 Signal 協定操作(加密、金鑰交換、訊息收發),而 OpenClaw 透過本地 HTTP API 與其通訊。這使得 Signal 協定層與 AI 邏輯完全分離。 或者,您可以將 signal-cli 作為外部 daemon 執行,並透過 httpUrl 設定將 OpenClaw 指向它 — 這對於獨立管理 signal-cli 或在不同主機上執行它非常有用。
自動啟動的 daemon 預設綁定到 127.0.0.1:8080。如需不同的位址,請變更 httpHost 和 httpPort。
以外部方式執行 signal-cli 可讓您更好地控制更新和生命週期管理。將 httpUrl 設為完整的 daemon URL 以停用自動啟動。

Signal 帳號設定

您的機器人需要一個專用的 Signal 帳號。請勿使用個人號碼 — Signal 會忽略自己發送的訊息,而在同一號碼上同時執行個人和機器人帳號會造成路由衝突。 帳號設定有兩種方式: • 連結到現有裝置 — 執行 'signal-cli link -n "OpenClaw"' 以產生裝置連結 URI。從主要 Signal 應用程式掃描 QR Code。這是推薦的方式,因為最簡單。 • 全新註冊 — 執行 'signal-cli -a +15551234567 register' 直接註冊新的 Signal 帳號。您需要透過簡訊或語音通話驗證號碼。 連結或註冊完成後,signal-cli 會在本地儲存憑證和金鑰。這些資料在重啟後仍然有效。
openclaw.json
{
  "channels": {
    "signal": {
      "account": "+15551234567",
      "cliPath": "/usr/local/bin/signal-cli"
    }
  }
}
避免在個人 Signal 號碼上執行機器人。Signal 的自我訊息保護機制會忽略您發送給自己的訊息,機器人將無法正常運作。

外部 Daemon 模式

對於進階部署,您可以在 OpenClaw 之外將 signal-cli 作為獨立的 daemon 程序執行。這在您想獨立管理 signal-cli 更新、在不同機器上執行它,或在多個服務之間共享單一 daemon 時非常有用。 手動啟動 daemon: signal-cli -a +15551234567 daemon --http=127.0.0.1:8080 然後透過設定 httpUrl 將 OpenClaw 指向它。當設定了 httpUrl 時,OpenClaw 會跳過自動啟動 daemon,改為連接到現有程序。
openclaw.json
{
  "channels": {
    "signal": {
      "account": "+15551234567",
      "httpUrl": "http://127.0.0.1:8080/api/v1/rpc"
    }
  }
}
使用外部 daemon 時,請確保在 Gateway 啟動前先啟動它。OpenClaw 會等待最多 startupTimeoutMs(最長 120 秒)直到 daemon 可用。

私訊策略

私訊(DM)策略控制誰可以在私人聊天中與您的 AI 助手互動。OpenClaw 支援四種策略: • pairing(預設)— 新聯絡人首次向機器人發送訊息時會收到一個隨機配對碼。配對碼在 1 小時後過期。透過在終端機中執行 'openclaw pairing approve signal <code>' 進行核准。核准後即可自由聊天。 • allowlist — 僅 allowFrom 中列出的手機號碼或 UUID 可以給機器人發訊息。其他人將被靜默忽略。手機號碼使用 E.164 格式,或使用 'uuid:<id>' 表示僅有 UUID 的聯絡人。 • open — 任何向機器人發訊息的人都會收到回覆。需要將 '*' 加入 allowFrom 清單作為安全確認。請謹慎使用。 • disabled — 完全關閉私訊功能。
openclaw.json
{
  "channels": {
    "signal": {
      "dmPolicy": "allowlist",
      "allowFrom": ["+15551234567", "uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
    }
  }
}
未分享手機號碼即註冊 Signal 的聯絡人將在 allowFrom 清單中顯示為 'uuid:<id>'。檢查 Gateway 記錄以查找其 UUID。
可透過 dms["<phone_or_uuid>"].historyLimit 為個別聯絡人設定歷史記錄限制,以覆蓋全域的 dmHistoryLimit。

群組聊天管理

OpenClaw 支援 Signal 群組聊天,具有可設定的存取控制: • open — 接收所有群組成員的訊息 • allowlist — 僅允許核准的發送者(透過 groupAllowFrom)觸發機器人 • disabled — 忽略所有群組訊息 群組對話與私訊完全隔離。訊息以 'agent:<agentId>:signal:group:<groupId>' 標記,以維護每個群組的獨立上下文和歷史記錄。 您可以為每個群組設定 historyLimit 來控制作為 AI 上下文包含的訊息數量(預設 50,設為 0 可停用歷史記錄)。
openclaw.json
{
  "channels": {
    "signal": {
      "groupPolicy": "open",
      "historyLimit": 50
    }
  }
}

隱私與端對端加密

Signal 是私密通訊的黃金標準。機器人與聯絡人之間的所有訊息都使用 Signal 協定(Double Ratchet 演算法 + X3DH 金鑰協商)進行端對端加密。OpenClaw 在傳輸過程中絕不會看到明文訊息 — 解密在您伺服器上的 signal-cli 程序中本地完成。 主要隱私特性: • 訊息在客戶端之間加密 — Signal 的伺服器無法讀取 • signal-cli 將加密金鑰儲存在您的伺服器本地 • 沒有資料經過 Anthropic、OpenAI 或任何第三方 AI 供應商的基礎設施(訊息在本地解密,由您自託管的 Gateway 處理,僅對話上下文會傳送給您設定的 AI 供應商) • 可透過 ignoreStories: true 完全忽略限時動態事件
為獲得最大隱私,將 Signal 與本地託管的 LLM 供應商(如 Ollama)結合使用,可將所有資料完全保留在您的基礎設施上。

表情回覆

OpenClaw 支援在 Signal 訊息上傳送和接收表情回覆。表情回覆可用於確認(讓使用者知道訊息已收到)以及互動式代理行為。 表情回覆語法使用 message 工具,目標格式為 E.164 格式、UUID 格式或群組格式: • 私訊回覆:target=+15551234567 或 target=uuid:<id> • 群組回覆:target=signal:group:<groupId> 搭配 targetAuthor=uuid:<sender> 可全域或按帳號設定表情回覆行為: • actions.reactions — 啟用/停用表情回覆功能(預設 true) • reactionLevel — off/ack(停用)或 minimal/extensive(啟用並帶有引導)
openclaw.json
{
  "channels": {
    "signal": {
      "reactionLevel": "minimal"
    }
  }
}

媒體與附件

OpenClaw 處理 Signal 上的媒體檔案,包括圖片、文件、音訊和影片。媒體透過 signal-cli 以 base64 編碼資料傳輸。 入站媒體會自動下載和處理,除非將 ignoreAttachments 設為 true。出站媒體在傳送前從 signal-cli 進行 base64 擷取。 預設檔案大小限制為 8 MB(mediaMaxMb)。Signal 本身支援更大的檔案,但 base64 編碼開銷和處理時間使 8 MB 成為實用的預設值。
openclaw.json
{
  "channels": {
    "signal": {
      "mediaMaxMb": 8,
      "ignoreAttachments": false
    }
  }
}

輸入指示器與已讀回執

OpenClaw 在產生 AI 回覆時傳送輸入指示器,以保持自然的對話感。Gateway 呼叫 signal-cli 的 sendTyping 端點,並在回覆產生期間定期更新指示器。 當啟用 sendReadReceipts 時,可為已核准的私訊聯絡人轉發已讀回執。這讓發送者知道他們的訊息已被處理。 注意:signal-cli 不支援群組已讀回執。
openclaw.json
{
  "channels": {
    "signal": {
      "sendReadReceipts": true
    }
  }
}

文字分段與傳送

對於較長的 AI 回覆,OpenClaw 會自動將文字拆分為多則訊息。預設分段大小為每則訊息 4,000 個字元。 提供兩種分段模式: • length(預設)— 在字元限制處硬性分割 • newline — 先在段落邊界分割,然後套用字元限制 傳送目標使用 E.164 手機號碼、UUID 或群組 ID: • 私訊:signal:+15551234567 或純 E.164 號碼 • UUID 私訊:uuid:<id> 或純 UUID • 群組:signal:group:<groupId>
openclaw.json
{
  "channels": {
    "signal": {
      "textChunkLimit": 4000,
      "chunkMode": "newline"
    }
  }
}

Signal 設定參考

enabled
Type: booleanDefault: true

啟用或停用 Signal 頻道

account
Type: stringDefault: ""

機器人的手機號碼,E.164 格式(如 +15551234567)。必填

cliPath
Type: stringDefault: "signal-cli"

signal-cli 可執行檔的路徑

httpUrl
Type: stringDefault: ""

外部 signal-cli daemon 的完整 URL。設定後將停用自動啟動

httpHost
Type: stringDefault: "127.0.0.1"

自動啟動的 signal-cli daemon 綁定的主機位址

httpPort
Type: numberDefault: 8080

自動啟動的 signal-cli daemon 綁定的連接埠

autoStart
Type: booleanDefault: true

是否在 Gateway 啟動時自動產生 signal-cli daemon

startupTimeoutMs
Type: numberDefault: 30000

等待 signal-cli daemon 可用的最長時間(毫秒)。最大值 120000

dmPolicy
Type: stringDefault: "pairing"

控制誰可以私訊機器人。選項:pairing、allowlist、open、disabled

allowFrom
Type: string[]Default: []

允許向機器人發訊息的手機號碼(E.164)或 uuid:<id> 識別碼

dmHistoryLimit
Type: numberDefault: 50

每個對話中作為 AI 上下文包含的最近私訊數量

groupPolicy
Type: stringDefault: "disabled"

群組聊天策略。選項:disabled、allowlist、open

groupAllowFrom
Type: string[]Default: []

允許在群組中觸發機器人的手機號碼或 UUID(groupPolicy 為 allowlist 時生效)

historyLimit
Type: numberDefault: 50

作為 AI 上下文包含的最大群組訊息數。設為 0 可停用

sendReadReceipts
Type: booleanDefault: false

是否為已核准的私訊聯絡人轉發已讀回執信號

textChunkLimit
Type: numberDefault: 4000

分段前每則外送訊息的最大字元數

chunkMode
Type: stringDefault: "length"

文字分段模式。選項:length(硬性分割)、newline(段落感知)

mediaMaxMb
Type: numberDefault: 8

入站/出站附件的最大媒體檔案大小(兆位元組)

ignoreAttachments
Type: booleanDefault: false

跳過下載入站媒體附件

ignoreStories
Type: booleanDefault: false

完全忽略 Signal 限時動態事件

receiveMode
Type: stringDefault: ""

訊息接收模式。選項:on-start(啟動時擷取)、manual

configWrites
Type: booleanDefault: true

允許 /config 命令在執行時修改頻道設定

reactionLevel
Type: stringDefault: "ack"

機器人表情回覆功能。選項:off、ack、minimal、extensive

Signal 常見問題

Signal 故障排除

signal-cli 啟動時出現 Java 錯誤

未安裝 Java,或安裝的版本過舊。signal-cli 需要 Java 25 或更高版本。

在伺服器上安裝 OpenJDK 25+。使用 'java --version' 驗證。如果安裝了多個 Java 版本,請確保正確的版本在 PATH 中或設定 JAVA_HOME。同時執行 'signal-cli --version' 驗證 signal-cli 是否正確安裝。
機器人不回應任何訊息

account 欄位可能不正確、signal-cli daemon 可能未執行,或發送者尚未透過配對核准。

檢查 account 號碼是否與註冊的 signal-cli 帳號相符(E.164 格式含國碼)。執行 'openclaw status' 和 'openclaw gateway status' 以驗證 daemon 是否正在執行。如果使用 pairing 策略,使用 'openclaw pairing list signal' 檢查待處理的配對並核准發送者。
核准後私訊仍被忽略

發送者可能不在 allowFrom 清單中(使用 allowlist 策略時),或發送者的識別碼格式不符。

檢查 Gateway 記錄以取得發送者的識別碼。部分 Signal 使用者註冊時未分享手機號碼 — 他們會顯示為 'uuid:<id>' 而非手機號碼。將正確的識別碼加入 allowFrom。執行 'openclaw channels status --probe' 以取得詳細的頻道診斷。
未收到群組訊息

groupPolicy 設為 'disabled'(預設值),或群組不在允許清單中。

將 groupPolicy 設為 'open' 以接收所有群組訊息,或使用 'allowlist' 並將群組 ID 加入 groupAllowFrom。收到群組訊息時,可在 Gateway 記錄中查看群組 ID。
外部 daemon 連線失敗(httpUrl 無法連線)

signal-cli daemon 未執行、URL 不正確,或防火牆阻擋了連線。

驗證 daemon 是否正在執行並監聽預期的 host:port。使用 'curl http://127.0.0.1:8080/api/v1/rpc' 測試連線。如果跨機器執行,請檢查防火牆規則。確保 daemon 啟動時使用了與 httpUrl 設定相符的 --http 參數。