Signal (signal-cli)
Durum: harici CLI entegrasyonu. Gateway,signal-cli ile HTTP JSON-RPC + SSE üzerinden iletişim kurar.
Ön koşullar
- Sunucunuzda OpenClaw kurulu olmalı (aşağıdaki Linux akışı Ubuntu 24 üzerinde test edilmiştir).
- Gateway’in çalıştığı ana makinede
signal-clikullanılabilir olmalı. - Bir doğrulama SMS’i alabilecek bir telefon numarası (SMS kayıt yolu için).
- Kayıt sırasında Signal captcha için tarayıcı erişimi (
signalcaptchas.org).
Hızlı kurulum (başlangıç seviyesi)
- Bot için ayrı bir Signal numarası kullanın (önerilir).
signal-clikurun (JVMderlemesini kullanıyorsanız Java gerekir).- Bir kurulum yolu seçin:
- Yol A (QR bağlantısı):
signal-cli link -n "OpenClaw"komutunu çalıştırın ve Signal ile tarayın. - Yol B (SMS ile kayıt): özel bir numarayı captcha + SMS doğrulaması ile kaydedin.
- Yol A (QR bağlantısı):
- OpenClaw’ı yapılandırın ve gateway’i yeniden başlatın.
- İlk DM’i gönderin ve eşlemeyi onaylayın (
openclaw pairing approve signal <CODE>).
| Alan | Açıklama |
|---|---|
account | E.164 biçiminde bot telefon numarası (+15551234567) |
cliPath | signal-cli yolu (PATH üzerindeyse signal-cli) |
dmPolicy | DM erişim ilkesi (pairing önerilir) |
allowFrom | DM göndermesine izin verilen telefon numaraları veya uuid:<id> değerleri |
Nedir
signal-cliaracılığıyla Signal kanalı (gömülü libsignal değil).- Belirlenimli yönlendirme: yanıtlar her zaman Signal’e geri gider.
- DM’ler agent’ın ana oturumunu paylaşır; gruplar izoledir (
agent:<agentId>:signal:group:<groupId>).
Yapılandırma yazmaları
Varsayılan olarak Signal’in,/config set|unset tarafından tetiklenen yapılandırma güncellemelerini yazmasına izin verilir (commands.config: true gerekir).
Şununla devre dışı bırakın:
Numara modeli (önemli)
- Gateway bir Signal cihazına bağlanır (
signal-clihesabı). - Botu kişisel Signal hesabınızda çalıştırırsanız, kendi mesajlarınızı yok sayar (döngü koruması).
- “Ben bota mesaj atayım ve o yanıt versin” senaryosu için ayrı bir bot numarası kullanın.
Kurulum yolu A: mevcut Signal hesabını bağlama (QR)
signal-clikurun (JVMveya yerel derleme).- Bir bot hesabı bağlayın:
signal-cli link -n "OpenClaw"komutunu çalıştırın, ardından QR kodunu Signal ile tarayın.
- Signal’i yapılandırın ve gateway’i başlatın.
name için channels.signal.accounts kullanın. Ortak desen için gateway/configuration bölümüne bakın.
Kurulum yolu B: özel bot numarası kaydı (SMS, Linux)
Mevcut bir Signal uygulama hesabını bağlamak yerine özel bir bot numarası istediğinizde bunu kullanın.- SMS alabilen bir numara edinin (veya sabit hatlar için sesli doğrulama).
- Hesap/oturum çakışmalarını önlemek için özel bir bot numarası kullanın.
- Gateway ana makinesine
signal-clikurun:
JVM derlemesini kullanıyorsanız (signal-cli-${VERSION}.tar.gz), önce JRE 25+ kurun.
signal-cli uygulamasını güncel tutun; upstream, Signal sunucu API’leri değiştikçe eski sürümlerin bozulabileceğini belirtiyor.
- Numarayı kaydedin ve doğrulayın:
https://signalcaptchas.org/registration/generate.htmladresini açın.- Captcha’yı tamamlayın, “Open Signal” içindeki
signalcaptcha://...bağlantı hedefini kopyalayın. - Mümkünse tarayıcı oturumuyla aynı harici IP’den çalıştırın.
- Kayıt işlemini hemen yeniden çalıştırın (captcha belirteçlerinin süresi hızla dolar):
- OpenClaw’ı yapılandırın, gateway’i yeniden başlatın, kanalı doğrulayın:
- DM göndereninizi eşleyin:
- Bot numarasına herhangi bir mesaj gönderin.
- Sunucuda kodu onaylayın:
openclaw pairing approve signal <PAIRING_CODE>. - “Unknown contact” uyarısını önlemek için bot numarasını telefonunuza kişi olarak kaydedin.
signal-cli ile kaydetmek, bu numara için ana Signal uygulaması oturumunun yetkisini kaldırabilir. Özel bir bot numarası tercih edin veya mevcut telefon uygulaması kurulumunuzu korumanız gerekiyorsa QR bağlantı modunu kullanın.
Upstream başvuruları:
signal-cliREADME:https://github.com/AsamK/signal-cli- Captcha akışı:
https://github.com/AsamK/signal-cli/wiki/Registration-with-captcha - Bağlama akışı:
https://github.com/AsamK/signal-cli/wiki/Linking-other-devices-(Provisioning)
Harici daemon modu (httpUrl)
signal-cli uygulamasını kendiniz yönetmek istiyorsanız (yavaş JVM soğuk başlangıçları, container init veya paylaşılan CPU’lar), daemon’u ayrı çalıştırın ve OpenClaw’ı ona yönlendirin:
channels.signal.startupTimeoutMs değerini ayarlayın.
Erişim denetimi (DM’ler + gruplar)
DM’ler:- Varsayılan:
channels.signal.dmPolicy = "pairing". - Bilinmeyen gönderenlere bir eşleme kodu verilir; onaylanana kadar mesajlar yok sayılır (kodların süresi 1 saat sonra dolar).
- Şununla onaylayın:
openclaw pairing list signalopenclaw pairing approve signal <CODE>
- Eşleme, Signal DM’leri için varsayılan belirteç değişimidir. Ayrıntılar: Pairing
- Yalnızca UUID gönderenler (
sourceUuidiçinden)channels.signal.allowFromiçindeuuid:<id>olarak saklanır.
channels.signal.groupPolicy = open | allowlist | disabled.channels.signal.groupAllowFrom,allowlistayarlı olduğunda gruplarda kimlerin tetikleyebileceğini denetler.channels.signal.groups["<group-id>" | "*"],requireMention,toolsvetoolsBySenderile grup davranışını geçersiz kılabilir.- Çoklu hesap kurulumlarında hesap başına geçersiz kılmalar için
channels.signal.accounts.<id>.groupskullanın. - Çalışma zamanı notu:
channels.signaltamamen yoksa, çalışma zamanı grup denetimleri içingroupPolicy="allowlist"değerine geri döner (channels.defaults.groupPolicyayarlı olsa bile).
Nasıl çalışır (davranış)
signal-clibir daemon olarak çalışır; gateway olayları SSE üzerinden okur.- Gelen mesajlar paylaşılan kanal zarfına normalize edilir.
- Yanıtlar her zaman aynı numaraya veya gruba yönlendirilir.
Medya + sınırlar
- Giden metin,
channels.signal.textChunkLimitdeğerine göre parçalanır (varsayılan 4000). - İsteğe bağlı yeni satır parçalama: uzunluk parçalamadan önce boş satırlarda (paragraf sınırlarında) bölmek için
channels.signal.chunkMode="newline"ayarlayın. - Ekler desteklenir (
signal-cliiçinden getirilen base64). - Varsayılan medya sınırı:
channels.signal.mediaMaxMb(varsayılan 8). - Medya indirmeyi atlamak için
channels.signal.ignoreAttachmentskullanın. - Grup geçmişi bağlamı,
channels.signal.historyLimit(veyachannels.signal.accounts.*.historyLimit) kullanır;messages.groupChat.historyLimitdeğerine geri düşer. Devre dışı bırakmak için0ayarlayın (varsayılan 50).
Yazıyor + okundu bilgileri
- Yazıyor göstergeleri: OpenClaw,
signal-cli sendTypingaracılığıyla yazıyor sinyalleri gönderir ve bir yanıt çalışırken bunları yeniler. - Okundu bilgileri:
channels.signal.sendReadReceiptstrue olduğunda, OpenClaw izin verilen DM’ler için okundu bilgilerini iletir. - Signal-cli gruplar için okundu bilgilerini sunmaz.
Tepkiler (mesaj aracı)
channel=signalilemessage action=reactkullanın.- Hedefler: gönderenin E.164 numarası veya UUID’si (
uuid:<id>değerini eşleme çıktısından kullanın; çıplak UUID de çalışır). messageId, tepki verdiğiniz mesajın Signal zaman damgasıdır.- Grup tepkileri için
targetAuthorveyatargetAuthorUuidgerekir.
channels.signal.actions.reactions: tepki eylemlerini etkinleştirir/devre dışı bırakır (varsayılan true).channels.signal.reactionLevel:off | ack | minimal | extensive.off/ack, agent tepkilerini devre dışı bırakır (reactmesaj aracı hata verir).minimal/extensive, agent tepkilerini etkinleştirir ve yönlendirme düzeyini ayarlar.
- Hesap başına geçersiz kılmalar:
channels.signal.accounts.<id>.actions.reactions,channels.signal.accounts.<id>.reactionLevel.
Teslim hedefleri (CLI/cron)
- DM’ler:
signal:+15551234567(veya düz E.164). - UUID DM’ler:
uuid:<id>(veya çıplak UUID). - Gruplar:
signal:group:<groupId>. - Kullanıcı adları:
username:<name>(Signal hesabınız tarafından destekleniyorsa).
Sorun giderme
Önce şu merdiveni çalıştırın:- Daemon erişilebilir ama yanıt yok: hesap/daemon ayarlarını (
httpUrl,account) ve alma modunu doğrulayın. - DM’ler yok sayılıyor: gönderen, eşleme onayı bekliyor.
- Grup mesajları yok sayılıyor: grup göndereni/bahsetme geçidi teslimatı engelliyor.
- Düzenlemelerden sonra yapılandırma doğrulama hataları:
openclaw doctor --fixçalıştırın. - Signal tanılamalarda görünmüyor:
channels.signal.enabled: trueolduğunu doğrulayın.
Güvenlik notları
signal-cli, hesap anahtarlarını yerel olarak depolar (genellikle~/.local/share/signal-cli/data/).- Sunucu taşıma veya yeniden kurma öncesinde Signal hesap durumunu yedekleyin.
- Daha geniş DM erişimi istemiyorsanız
channels.signal.dmPolicy: "pairing"ayarını koruyun. - SMS doğrulaması yalnızca kayıt veya kurtarma akışları için gerekir, ancak numara/hesap denetimini kaybetmek yeniden kayıt sürecini karmaşıklaştırabilir.
Yapılandırma başvurusu (Signal)
Tam yapılandırma: Configuration Sağlayıcı seçenekleri:channels.signal.enabled: kanal başlangıcını etkinleştirir/devre dışı bırakır.channels.signal.account: bot hesabı için E.164.channels.signal.cliPath:signal-cliyolu.channels.signal.httpUrl: tam daemon URL’si (host/port değerini geçersiz kılar).channels.signal.httpHost,channels.signal.httpPort: daemon bağlama adresi (varsayılan 127.0.0.1:8080).channels.signal.autoStart: daemon’u otomatik başlatır (httpUrlayarlı değilse varsayılan true).channels.signal.startupTimeoutMs: ms cinsinden başlangıç bekleme zaman aşımı (üst sınır 120000).channels.signal.receiveMode:on-start | manual.channels.signal.ignoreAttachments: ek indirmelerini atlar.channels.signal.ignoreStories: daemon’dan gelen hikayeleri yok sayar.channels.signal.sendReadReceipts: okundu bilgilerini iletir.channels.signal.dmPolicy:pairing | allowlist | open | disabled(varsayılan: pairing).channels.signal.allowFrom: DM izin listesi (E.164 veyauuid:<id>).open,"*"gerektirir. Signal’in kullanıcı adı yoktur; telefon/UUID kimlikleri kullanın.channels.signal.groupPolicy:open | allowlist | disabled(varsayılan: allowlist).channels.signal.groupAllowFrom: grup gönderen izin listesi.channels.signal.groups: Signal grup kimliğine göre anahtarlanmış grup başına geçersiz kılmalar (veya"*"). Desteklenen alanlar:requireMention,tools,toolsBySender.channels.signal.accounts.<id>.groups: çoklu hesap kurulumları içinchannels.signal.groupsalanının hesap başına sürümü.channels.signal.historyLimit: bağlama dahil edilecek en fazla grup mesajı sayısı (0devre dışı bırakır).channels.signal.dmHistoryLimit: kullanıcı dönüşleri cinsinden DM geçmişi sınırı. Kullanıcı başına geçersiz kılmalar:channels.signal.dms["<phone_or_uuid>"].historyLimit.channels.signal.textChunkLimit: giden parça boyutu (karakter).channels.signal.chunkMode: uzunluk parçalamadan önce boş satırlarda (paragraf sınırlarında) bölmek içinlength(varsayılan) veyanewline.channels.signal.mediaMaxMb: gelen/giden medya sınırı (MB).
agents.list[].groupChat.mentionPatterns(Signal yerel bahsetmeleri desteklemez).messages.groupChat.mentionPatterns(genel geri dönüş).messages.responsePrefix.
İlgili
- Channels Overview — desteklenen tüm kanallar
- Pairing — DM kimlik doğrulaması ve eşleme akışı
- Groups — grup sohbeti davranışı ve bahsetme geçidi
- Channel Routing — mesajlar için oturum yönlendirmesi
- Security — erişim modeli ve sağlamlaştırma