Signal (signal-cli)¶
Status: ekstern CLI integration. Gateway taler til signal-cli over HTTP JSON-RPC + SSE.
Hurtig opsætning (begynder)¶
- Brug et separat Signal-nummer til botten (anbefalet).
- Installér
signal-cli(Java kræves). - Knyt bot-enheden og start daemonen:
-
signal-cli link -n "OpenClaw" - Konfigurér OpenClaw og start gatewayen.
Minimal konfiguration:
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
cliPath: "signal-cli",
dmPolicy: "pairing",
allowFrom: ["+15557654321"],
},
},
}
Hvad det er¶
- Signal-kanal via
signal-cli(ikke indlejret libsignal). - Deterministisk routing: svar går altid tilbage til Signal.
- DM’er deler agentens primære session; grupper er isolerede (
agent:<agentId>:signal:group:<groupId>).
Konfigurationsskrivninger¶
Som standard har Signal tilladelse til at skrive konfigurationsopdateringer udløst af /config set|unset (kræver commands.config: true).
Deaktivér med:
{
channels: { signal: { configWrites: false } },
}
Nummermodellen (vigtigt)¶
- Gatewayen forbinder til en Signal-enhed (kontoen
signal-cli). - Hvis du kører botten på din personlige Signal-konto, ignorerer den dine egne beskeder (loop-beskyttelse).
- For “jeg skriver til botten, og den svarer”, brug et separat bot-nummer.
Opsætning (hurtig sti)¶
- Installér
signal-cli(Java kræves). - Knyt en bot-konto:
-
signal-cli link -n "OpenClaw"og scan derefter QR-koden i Signal. - Konfigurér Signal og start gatewayen.
Eksempel:
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
cliPath: "signal-cli",
dmPolicy: "pairing",
allowFrom: ["+15557654321"],
},
},
}
Multi-konto support: brug channels.signal.accounts med per-account config og valgfri name. Se gateway/configuration for det delte mønster.
Ekstern daemon-tilstand (httpUrl)¶
Hvis du vil administrere signal-cli selv (langsomme JVM-kolde starter, container-init eller delte CPU’er), så kør daemonen separat og peg OpenClaw på den:
{
channels: {
signal: {
httpUrl: "http://127.0.0.1:8080",
autoStart: false,
},
},
}
Dette springer auto-spawn og opstart vente inde OpenClaw. For langsom starter, når auto-spawning, sæt channels.signal.startupTimeoutMs.
Adgangskontrol (DM’er + grupper)¶
DM’er:
- Standard:
channels.signal.dmPolicy = "pairing". - Ukendte afsendere modtager en parringskode; beskeder ignoreres, indtil de er godkendt (koder udløber efter 1 time).
- Godkend via:
openclaw pairing list signalopenclaw pairing approve signal <CODE>- Parring er standard token udveksling for Signal DMs. Detaljer: Pairing
- Afsendere kun med UUID (fra
sourceUuid) gemmes somuuid:<id>ichannels.signal.allowFrom.
Grupper:
channels.signal.groupPolicy = open | allowlist | disabled.channels.signal.groupAllowFromstyrer, hvem der kan trigge i grupper, nårallowlister sat.
Sådan virker det (adfærd)¶
signal-clikører som en daemon; gatewayen læser events via SSE.- Indgående beskeder normaliseres til den fælles kanal-konvolut.
- Svar routes altid tilbage til samme nummer eller gruppe.
Medier + grænser¶
- Udgående tekst opdeles i bidder på
channels.signal.textChunkLimit(standard 4000). - Valgfri opdeling ved linjeskift: sæt
channels.signal.chunkMode="newline"for at splitte ved tomme linjer (afsnitsgrænser) før længdeopdeling. - Vedhæftninger understøttes (base64 hentes fra
signal-cli). - Standard medieloft:
channels.signal.mediaMaxMb(standard 8). - Brug
channels.signal.ignoreAttachmentsfor at springe download af medier over. - Gruppe historie kontekst bruger
channels.signal.historyLimit(ellerchannels.signal.accounts.*.historyLimit), falder tilbage tilmessages.groupChat.historyLimit. Sæt0til at deaktivere (standard 50).
Skriver + læsekvitteringer¶
- Skriveindikatorer: OpenClaw sender skrive-signaler via
signal-cli sendTypingog opdaterer dem, mens et svar kører. - Læsekvitteringer: når
channels.signal.sendReadReceiptser true, videresender OpenClaw læsekvitteringer for tilladte DM’er. - Signal-cli eksponerer ikke læsekvitteringer for grupper.
Reaktioner (beskedværktøj)¶
- Brug
message action=reactmedchannel=signal. - Mål: afsender E.164 eller UUID (brug
uuid:<id>fra parringsoutput; rå UUID virker også). messageIder Signal-tidsstemplet for beskeden, du reagerer på.- Gruppereaktioner kræver
targetAuthorellertargetAuthorUuid.
Eksempler:
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: aktivér/deaktivér reaktionshandlinger (standard true).channels.signal.reactionLevel:off | ack | minimal | extensive.off/ackdeaktiverer agentreaktioner (beskedværktøjetreactvil give fejl).minimal/extensiveaktiverer agentreaktioner og sætter vejledningsniveauet.- Per-account tilsidesættelser:
channels.signal.accounts.<id>.actions.reactions,channels.signal.accounts.<id>.reactionLevel.
Leveringsmål (CLI/cron)¶
- DM’er:
signal:+15551234567(eller ren E.164). - UUID-DM’er:
uuid:<id>(eller rå UUID). - Grupper:
signal:group:<groupId>. - Brugernavne:
username:<name>(hvis understøttet af din Signal-konto).
Fejlfinding¶
Kør denne stige først:
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
Bekræft derefter DM-parringstilstand, hvis nødvendigt:
openclaw pairing list signal
Almindelige fejl:
- Daemonen kan nås, men ingen svar: verificér konto-/daemonindstillinger (
httpUrl,account) og modtagetilstand. - DM’er ignoreres: afsenderen afventer parringsgodkendelse.
- Gruppebeskeder ignoreres: gruppe-afsender-/mention-gating blokerer levering.
For triage-flow: /channels/troubleshooting.
Konfigurationsreference (Signal)¶
Fuld konfiguration: Konfiguration
Udbyderindstillinger:
channels.signal.enabled: aktivér/deaktivér kanalopstart.channels.signal.account: E.164 for bot-kontoen.channels.signal.cliPath: sti tilsignal-cli.channels.signal.httpUrl: fuld daemon-URL (overstyrer host/port).channels.signal.httpHost,channels.signal.httpPort: daemon-binding (standard 127.0.0.1:8080).channels.signal.autoStart: auto-start daemon (standard true, hvishttpUrlikke er sat).channels.signal.startupTimeoutMs: opstarts-ventetidsgrænse i ms (maks 120000).channels.signal.receiveMode:on-start | manual.channels.signal.ignoreAttachments: spring download af vedhæftninger over.channels.signal.ignoreStories: ignorer stories fra daemonen.channels.signal.sendReadReceipts: videresend læsekvitteringer.channels.signal.dmPolicy:pairing | allowlist | open | disabled(standard: parring).channels.signal.allowFrom: DM allowlist (E.164 elleruuid:<id>).openkræver"*". Signal har ingen brugernavne; brug telefon/UUID id'er.channels.signal.groupPolicy:open | allowlist | disabled(standard: tilladelsesliste).channels.signal.groupAllowFrom: tilladelsesliste for gruppeafsendere.channels.signal.historyLimit: max gruppe beskeder til at omfatte som kontekst (0 disables).channels.signal.dmHistoryLimit: DM historie grænse i bruger sving. Per-user tilsidesættelser:channels.signal.dms["<phone_or_uuid>"].historyLimit.channels.signal.textChunkLimit: udgående chunk-størrelse (tegn).channels.signal.chunkMode:length(standard) ellernewlinefor at splitte ved tomme linjer (afsnitsgrænser) før længdeopdeling.channels.signal.mediaMaxMb: indgående/udgående medieloft (MB).
Relaterede globale indstillinger:
agents.list[].groupChat.mentionPatterns(Signal understøtter ikke native mentions).messages.groupChat.mentionPatterns(global fallback).messages.responsePrefix.