Skip to Content
👋 Willkommen bei HowToUseOpenClaw Schnellstart
KanäleSignal

Signal (signal-cli)

Status: externe CLI-Integration. Das Gateway kommuniziert mit signal-cli über HTTP JSON-RPC + SSE.

Schnelleinrichtung (Anfänger)

  1. Nutzen Sie eine eigene Signal-Nummer für den Bot (empfohlen).
  2. Installieren Sie signal-cli (Java erforderlich).
  3. Verknüpfen Sie das Bot-Gerät und starten Sie den Daemon:
    • signal-cli link -n "OpenClaw"
  4. Konfigurieren Sie OpenClaw und starten Sie das Gateway.

Minimale Konfiguration:

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

Ziele

  • Signal-Kanal über signal-cli (keine eingebettete libsignal).
  • Deterministisches Routing: Antworten gehen immer zurück zu Signal.
  • DMs teilen die Hauptsitzung des Agenten; Gruppen sind isoliert (agent:<agentId>:signal:group:<groupId>).

Konfig schreibt

Standardmäßig darf Signal Konfigurationsaktualisierungen schreiben, die durch /config set|unset ausgelöst werden (erfordert commands.config: true). Deaktivieren mit:

{ channels: { signal: { configWrites: false } } }

Das Nummernmodell (wichtig)

  • Das Gateway verbindet sich mit einem Signal-Gerät (dem signal-cli-Konto).
  • Wenn Sie den Bot auf Ihrem persönlichen Signal-Konto betreiben, werden Ihre eigenen Nachrichten ignoriert (Schleifenschutz).
  • Für „Ich schreibe dem Bot und er antwortet“ nutzen Sie eine eigene Bot-Nummer.

Einrichtung (schneller Weg)

  1. Installieren Sie signal-cli (Java erforderlich).
  2. Bot-Konto verknüpfen:
    • signal-cli link -n "OpenClaw", dann QR in Signal scannen.
  3. Signal konfigurieren und Gateway starten.

Beispiel:

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

Mehrkonten-Unterstützung: nutzen Sie channels.signal.accounts mit Konfiguration pro Konto und optionalem name. Siehe gateway/configuration für das gemeinsame Muster.

Externer Daemon-Modus (httpUrl)

Wenn Sie signal-cli selbst verwalten möchten (langsame JVM-Kaltstarts, Container-Init oder geteilte CPUs), starten Sie den Daemon separat und richten Sie OpenClaw darauf:

{ channels: { signal: { httpUrl: "http://127.0.0.1:8080", autoStart: false } } }

Damit entfällt Auto-Spawn und die Startwartezeit innerhalb von OpenClaw. Bei langsamen Starts beim Auto-Spawn setzen Sie channels.signal.startupTimeoutMs.

Zugriffskontrolle (DMs + Gruppen)

DMs:

  • Standard: channels.signal.dmPolicy = "pairing".
  • Unbekannte Absender erhalten einen Kopplungscode; Nachrichten werden ignoriert, bis sie freigegeben sind (Codes laufen nach 1 Stunde ab).
  • Freigabe über:
    • openclaw pairing list signal
    • openclaw pairing approve signal <CODE>
  • Pairing ist der Standard-Token-Austausch für Signal-DMs. Details: Pairing
  • Nur-UUID-Absender (von sourceUuid) werden als uuid:<id> in channels.signal.allowFrom gespeichert.

Gruppen:

  • channels.signal.groupPolicy = open | allowlist | disabled.
  • channels.signal.groupAllowFrom steuert, wer in Gruppen auslösen kann, wenn allowlist gesetzt ist.

Wie es funktioniert (Verhalten)

  • signal-cli läuft als Daemon; das Gateway liest Events über SSE.
  • Eingehende Nachrichten werden in das gemeinsame Kanal-Envelope normalisiert.
  • Antworten werden immer an dieselbe Nummer oder Gruppe zurückgeleitet.

Medien + Limits

  • Ausgehender Text wird auf channels.signal.textChunkLimit (Standard 4000) gechunkt.
  • Optionale Zeilenumbruch-Chunking: setzen Sie channels.signal.chunkMode="newline", um vor Längen-Chunking an Leerzeilen (Absatzgrenzen) zu teilen.
  • Anhänge werden unterstützt (Base64 von signal-cli abgerufen).
  • Standard-Medien-Limit: channels.signal.mediaMaxMb (Standard 8).
  • Nutzen Sie channels.signal.ignoreAttachments, um Mediendownloads zu überspringen.
  • Gruppen-Kontexthistorie nutzt channels.signal.historyLimit (oder channels.signal.accounts.*.historyLimit), Fallback auf messages.groupChat.historyLimit. Setzen Sie 0 zum Deaktivieren (Standard 50).

Tippen + Lesebestätigungen

  • Tipp-Indikatoren: OpenClaw sendet Tipp-Signale über signal-cli sendTyping und aktualisiert sie, während eine Antwort läuft.
  • Lesebestätigungen: wenn channels.signal.sendReadReceipts true ist, leitet OpenClaw Lesebestätigungen für zugelassene DMs weiter.
  • Signal-cli bietet keine Lesebestätigungen für Gruppen.

Reaktionen (Message-Tool)

  • Nutzen Sie message action=react mit channel=signal.
  • Ziele: Absender E.164 oder UUID (nutzen Sie uuid:<id> aus der Pairing-Ausgabe; bloße UUID funktioniert ebenfalls).
  • messageId ist der Signal-Timestamp der Nachricht, auf die Sie reagieren.
  • Gruppen-Reaktionen erfordern targetAuthor oder targetAuthorUuid.

Beispiele:

message action=react channel=signal target=uuid:123e4567-e89b-12d3-a456-426614174000 messageId=1737630212345 emoji=🔥 message action=react channel=signal target=+15551234567 messageId=1737630212345 emoji=🔥 remove=true message action=react channel=signal target=signal:group:<groupId> targetAuthor=uuid:<sender-uuid> messageId=1737630212345 emoji=✅

Konfiguration:

  • channels.signal.actions.reactions: Reaktionsaktionen aktivieren/deaktivieren (Standard true).

  • channels.signal.reactionLevel: off | ack | minimal | extensive.

    • off/ack deaktiviert Agent-Reaktionen (Message-Tool react liefert Fehler).
    • minimal/extensive aktiviert Agent-Reaktionen und setzt die Anleitungsstufe.
  • Pro-Konto-Overrides: channels.signal.accounts.<id>.actions.reactions, channels.signal.accounts.<id>.reactionLevel.

Zustellziele (CLI/Cron)

  • DMs: signal:+15551234567 (oder reine E.164).
  • UUID-DMs: uuid:<id> (oder bloße UUID).
  • Gruppen: signal:group:<groupId>.
  • Benutzernamen: username:<name> (falls von Ihrem Signal-Konto unterstützt).

Konfigurationsreferenz (Signal)

Vollständige Konfiguration: Konfiguration. Provider-Optionen:

  • channels.signal.enabled: Kanalstart aktivieren/deaktivieren.
  • channels.signal.account: E.164 für das Bot-Konto.
  • channels.signal.cliPath: Pfad zu signal-cli.
  • channels.signal.httpUrl: vollständige Daemon-URL (überschreibt Host/Port).
  • channels.signal.httpHost, channels.signal.httpPort: Daemon-Bind (Standard 127.0.0.1:8080).
  • channels.signal.autoStart: Daemon automatisch starten (Standard true, wenn httpUrl nicht gesetzt).
  • channels.signal.startupTimeoutMs: Start-Warte-Timeout in ms (max 120000).
  • channels.signal.receiveMode: on-start | manual.
  • channels.signal.ignoreAttachments: Anhangs-Downloads überspringen.
  • channels.signal.ignoreStories: Stories vom Daemon ignorieren.
  • channels.signal.sendReadReceipts: Lesebestätigungen weiterleiten.
  • channels.signal.dmPolicy: pairing | allowlist | open | disabled (Standard: pairing).
  • channels.signal.allowFrom: DM-Zulassen-Liste (E.164 oder uuid:<id>). open erfordert "*". Signal hat keine Benutzernamen; nutzen Sie Telefon-/UUID-IDs.
  • channels.signal.groupPolicy: open | allowlist | disabled (Standard: allowlist).
  • channels.signal.groupAllowFrom: Gruppen-Absender-Zulassen-Liste.
  • channels.signal.historyLimit: maximale Gruppennachrichten als Kontext (0 deaktiviert).
  • channels.signal.dmHistoryLimit: DM-Historie-Limit in Benutzer-Turns. Pro-Benutzer-Overrides: channels.signal.dms["<phone_or_uuid>"].historyLimit.
  • channels.signal.textChunkLimit: ausgehende Chunk-Größe (Zeichen).
  • channels.signal.chunkMode: length (Standard) oder newline zum Teilen an Leerzeilen (Absatzgrenzen) vor Längen-Chunking.
  • channels.signal.mediaMaxMb: eingehendes/ausgehendes Medien-Limit (MB).

Verwandte globale Optionen:

  • agents.list[].groupChat.mentionPatterns (Signal unterstützt keine nativen Erwähnungen).
  • messages.groupChat.mentionPatterns (globaler Fallback).
  • messages.responsePrefix.
Zuletzt aktualisiert am: