Signal (signal-cli)
Status: external CLI integration. Gateway talks tosignal-cli over HTTP JSON-RPC + SSE.
Talablar
- Serveringizda OpenClaw o‘rnatilgan (quyidagi Linux jarayoni Ubuntu 24 da sinovdan o‘tkazilgan).
- Install
signal-cli(Java required). - Link the bot device and start the daemon:
- Configure OpenClaw and start the gateway.
Quick setup (beginner)
- Use a separate Signal number for the bot (recommended).
- Agar JVM build’dan foydalansangiz,
signal-clini o‘rnating (Java talab qilinadi). - O‘rnatish yo‘llaridan birini tanlang:
- A yo‘l (QR havola):
signal-cli link -n "OpenClaw"va Signal orqali skaner qiling. - B yo‘l (SMS ro‘yxatdan o‘tish): captcha + SMS tasdiqlash bilan alohida raqamni ro‘yxatdan o‘tkazing.
- A yo‘l (QR havola):
- OpenClaw’ni sozlang va gateway’ni qayta ishga tushiring.
- Birinchi DM yuboring va juftlashni tasdiqlang (
openclaw pairing approve signal <CODE>).
| Maydon | Tavsif |
|---|---|
account | Bot telefon raqami E.164 formatida (+15551234567) |
cliPath | signal-cli ga yo‘l (PATH da bo‘lsa signal-cli) |
dmPolicy | DM kirish siyosati (pairing tavsiya etiladi) |
allowFrom | DM yuborishga ruxsat berilgan telefon raqamlari yoki uuid:<id> qiymatlari |
What it is
- Signal channel via
signal-cli(not embedded libsignal). - Deterministic routing: replies always go back to Signal.
- DMs share the agent’s main session; groups are isolated (
agent:<agentId>:signal:group:<groupId>).
Config writes
By default, Signal is allowed to write config updates triggered by/config set|unset (requires commands.config: true).
Disable with:
The number model (important)
- The gateway connects to a Signal device (the
signal-cliaccount). - If you run the bot on your personal Signal account, it will ignore your own messages (loop protection).
- For “I text the bot and it replies,” use a separate bot number.
A yo‘lni sozlash: mavjud Signal akkauntini ulash (QR)
signal-clini o‘rnating (JVM yoki native build).- Link a bot account:
signal-cli link -n "OpenClaw"then scan the QR in Signal.
- Configure Signal and start the gateway.
channels.signal.accounts with per-account config and optional name. See gateway/configuration for the shared pattern.
B yo‘lni sozlash: alohida bot raqamini ro‘yxatdan o‘tkazish (SMS, Linux)
Mavjud Signal ilova akkauntini ulash o‘rniga alohida bot raqamidan foydalanmoqchi bo‘lsangiz, shundan foydalaning.- SMS qabul qila oladigan raqam oling (yoki statsionar telefonlar uchun ovozli tasdiqlash).
- Akkaunt/sessiya ziddiyatlarining oldini olish uchun alohida bot raqamidan foydalaning.
- Gateway hostida
signal-clini o‘rnating:
signal-cli-${VERSION}.tar.gz) foydalansangiz, avval JRE 25+ ni o‘rnating.
signal-cli ni yangilab turing; upstream ma’lumotiga ko‘ra, Signal server API’lari o‘zgarganda eski relizlar ishlamay qolishi mumkin.
- Raqamni ro‘yxatdan o‘tkazing va tasdiqlang:
https://signalcaptchas.org/registration/generate.htmlni oching.- Captcha’ni yakunlang, “Open Signal” dan
signalcaptcha://...havola manzilini nusxa ko‘chiring. - Imkon qadar brauzer sessiyasi bilan bir xil tashqi IP manzildan ishga tushiring.
- Ro‘yxatdan o‘tishni darhol yana ishga tushiring (captcha tokenlari tezda muddati tugaydi):
- OpenClaw’ni sozlang, gateway’ni qayta ishga tushiring, kanalni tekshiring:
- DM yuboruvchingizni juftlang:
- Bot raqamiga istalgan xabarni yuboring.
- Serverda kodni tasdiqlang:
openclaw pairing approve signal <PAIRING_CODE>. - “Unknown contact” chiqmasligi uchun bot raqamini telefoningizda kontakt sifatida saqlang.
signal-cli bilan telefon raqamini ro‘yxatdan o‘tkazish ushbu raqam uchun asosiy Signal ilovasi sessiyasini de-autentifikatsiya qilishi mumkin. Alohida bot raqamini afzal ko‘ring yoki mavjud telefon ilovasi sozlamalarini saqlab qolish kerak bo‘lsa, QR link rejimidan foydalaning.
Asosiy manbalar:
signal-cliREADME:https://github.com/AsamK/signal-cli- Captcha jarayoni:
https://github.com/AsamK/signal-cli/wiki/Registration-with-captcha - Ulash jarayoni:
https://github.com/AsamK/signal-cli/wiki/Linking-other-devices-(Provisioning)
External daemon mode (httpUrl)
If you want to managesignal-cli yourself (slow JVM cold starts, container init, or shared CPUs), run the daemon separately and point OpenClaw at it:
channels.signal.startupTimeoutMs.
Access control (DMs + groups)
DMs:- Default:
channels.signal.dmPolicy = "pairing". - Unknown senders receive a pairing code; messages are ignored until approved (codes expire after 1 hour).
- Approve via:
openclaw pairing list signalopenclaw pairing approve signal <CODE>
- Pairing is the default token exchange for Signal DMs. Details: Pairing
- UUID-only senders (from
sourceUuid) are stored asuuid:<id>inchannels.signal.allowFrom.
channels.signal.groupPolicy = open | allowlist | disabled.channels.signal.groupAllowFromcontrols who can trigger in groups whenallowlistis set.
How it works (behavior)
signal-cliruns as a daemon; the gateway reads events via SSE.- Inbound messages are normalized into the shared channel envelope.
- Replies always route back to the same number or group.
Media + limits
- Outbound text is chunked to
channels.signal.textChunkLimit(default 4000). - Optional newline chunking: set
channels.signal.chunkMode="newline"to split on blank lines (paragraph boundaries) before length chunking. - Attachments supported (base64 fetched from
signal-cli). - Default media cap:
channels.signal.mediaMaxMb(default 8). - Use
channels.signal.ignoreAttachmentsto skip downloading media. - Group history context uses
channels.signal.historyLimit(orchannels.signal.accounts.*.historyLimit), falling back tomessages.groupChat.historyLimit. Set0to disable (default 50).
Typing + read receipts
- Typing indicators: OpenClaw sends typing signals via
signal-cli sendTypingand refreshes them while a reply is running. - Read receipts: when
channels.signal.sendReadReceiptsis true, OpenClaw forwards read receipts for allowed DMs. - Signal-cli does not expose read receipts for groups.
Reactions (message tool)
- Use
message action=reactwithchannel=signal. - Targets: sender E.164 or UUID (use
uuid:<id>from pairing output; bare UUID works too). messageIdis the Signal timestamp for the message you’re reacting to.- Group reactions require
targetAuthorortargetAuthorUuid.
channels.signal.actions.reactions: enable/disable reaction actions (default true).channels.signal.reactionLevel:off | ack | minimal | extensive.off/ackdisables agent reactions (message toolreactwill error).minimal/extensiveenables agent reactions and sets the guidance level.
- Per-account overrides:
channels.signal.accounts.<id>.actions.reactions,channels.signal.accounts.<id>.reactionLevel.
Delivery targets (CLI/cron)
- DMs:
signal:+15551234567(or plain E.164). - UUID DMs:
uuid:<id>(or bare UUID). - Groups:
signal:group:<groupId>. - Usernames:
username:<name>(if supported by your Signal account).
Troubleshooting
Run this ladder first:- Daemon reachable but no replies: verify account/daemon settings (
httpUrl,account) and receive mode. - DMs ignored: sender is pending pairing approval.
- Group messages ignored: group sender/mention gating blocks delivery.
- Tahrirlardan keyin konfiguratsiya tekshiruvi xatolari:
openclaw doctor --fixni ishga tushiring. - Diagnostikada Signal ko‘rinmasa:
channels.signal.enabled: trueni tasdiqlang.
signal-cli hisob kalitlarini lokal saqlaydi (odatda ~/.local/share/signal-cli/data/).
- Serverni migratsiya qilish yoki qayta yig‘ishdan oldin Signal hisob holatini zaxiralang.
- Kengroq DM kirishini aniq xohlamasangiz,
channels.signal.dmPolicy: "pairing"ni saqlang. - SMS tasdiqlash faqat ro‘yxatdan o‘tish yoki tiklash jarayonlari uchun kerak, ammo raqam/hisob ustidan nazoratni yo‘qotish qayta ro‘yxatdan o‘tishni murakkablashtirishi mumkin.
- Slack’ni sozlash yoki Slack socket/HTTP rejimini nosozliklarini tuzatish
Configuration reference (Signal)
Full configuration: Configuration Provider options:channels.signal.enabled: enable/disable channel startup.channels.signal.account: E.164 for the bot account.channels.signal.cliPath: path tosignal-cli.channels.signal.httpUrl: full daemon URL (overrides host/port).channels.signal.httpHost,channels.signal.httpPort: daemon bind (default 127.0.0.1:8080).channels.signal.autoStart: auto-spawn daemon (default true ifhttpUrlunset).channels.signal.startupTimeoutMs: startup wait timeout in ms (cap 120000).channels.signal.receiveMode:on-start | manual.channels.signal.ignoreAttachments: skip attachment downloads.channels.signal.ignoreStories: ignore stories from the daemon.channels.signal.sendReadReceipts: forward read receipts.channels.signal.dmPolicy:pairing | allowlist | open | disabled(default: pairing).channels.signal.allowFrom: DM allowlist (E.164 oruuid:<id>).openrequires"*". Signal has no usernames; use phone/UUID ids.channels.signal.groupPolicy:open | allowlist | disabled(default: allowlist).channels.signal.groupAllowFrom: group sender allowlist.channels.signal.historyLimit: max group messages to include as context (0 disables).channels.signal.dmHistoryLimit: foydalanuvchi navbatlari bo‘yicha DM tarix cheklovi. Har bir foydalanuvchi uchun alohida sozlamalar:channels.signal.dms["<phone_or_uuid>"].historyLimit.channels.signal.textChunkLimit: chiqish bo‘lak hajmi (belgilar soni).channels.signal.chunkMode:length(standart) yoki uzunlik bo‘yicha bo‘lishdan oldin bo‘sh qatorlar (paragraf chegaralari) bo‘yicha ajratish uchunnewline.channels.signal.mediaMaxMb: kiruvchi/chiqish media uchun maksimal hajm (MB).
agents.list[].groupChat.mentionPatterns(Signal mahalliy mentionlarni qo‘llab-quvvatlamaydi).messages.groupChat.mentionPatterns(global zaxira variant).messages.responsePrefix.