Durum: harici CLI entegrasyonu. Gateway,Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
signal-cli ile HTTP üzerinden konuşur; ya yerel daemon (JSON-RPC + SSE) ya da bbernhard/signal-cli-rest-api konteyneri (REST + WebSocket).
Önkoşullar
- OpenClaw sunucunuza kurulmuş olmalı (aşağıdaki Linux akışı Ubuntu 24 üzerinde test edildi).
- Şunlardan biri:
- Ana makinede
signal-clikullanılabilir olmalı (yerel mod), veya bbernhard/signal-cli-rest-apiDocker konteyneri (konteyner modu).
- Ana makinede
- Bir doğrulama SMS’i alabilen bir telefon numarası (SMS kayıt yolu için).
- Kayıt sırasında Signal captcha’sı (
signalcaptchas.org) için tarayıcı erişimi.
Hızlı kurulum (başlangıç)
- Bot için ayrı bir Signal numarası kullanın (önerilir).
signal-clikurun (JVM derlemesini kullanıyorsanız Java gerekir).- Bir kurulum yolu seçin:
- Yol A (QR bağlantısı):
signal-cli link -n "OpenClaw"ve Signal ile tarayın. - Yol B (SMS kaydı): captcha + SMS doğrulamasıyla ayrılmış bir numara kaydedin.
- Yol A (QR bağlantısı):
- OpenClaw’ı yapılandırın ve gateway’i yeniden başlatın.
- İlk DM’yi gönderin ve eşleştirmeyi 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 politikası (pairing önerilir) |
allowFrom | DM göndermesine izin verilen telefon numaraları veya uuid:<id> değerleri |
Nedir
signal-cliüzerinden Signal kanalı (gömülü libsignal değil).- Belirleyici yönlendirme: yanıtlar her zaman Signal’e geri gider.
- DM’ler aracının ana oturumunu paylaşır; gruplar yalıtılmıştır (
agent:<agentId>:signal:group:<groupId>).
Yapılandırma yazımları
Varsayılan olarak Signal’in/config set|unset tarafından tetiklenen yapılandırma güncellemelerini yazmasına izin verilir (commands.config: true gerektirir).
Şununla devre dışı bırakın:
Numara modeli (önemli)
- Gateway bir Signal cihazına (
signal-clihesabı) bağlanır. - Botu kişisel Signal hesabınızda çalıştırırsanız, kendi mesajlarınızı yok sayar (döngü koruması).
- “Bota mesaj atıyorum ve yanıt veriyor” için ayrı bir bot numarası kullanın.
Kurulum yolu A: mevcut Signal hesabını bağlama (QR)
signal-clikurun (JVM veya yerel derleme).- Bir bot hesabı bağlayın:
signal-cli link -n "OpenClaw"ardından Signal’deki QR’ı tarayın.
- Signal’i yapılandırın ve gateway’i başlatın.
name ile channels.signal.accounts kullanın. Paylaşılan kalıp için gateway/configuration bölümüne bakın.
Kurulum yolu B: ayrılmış bot numarası kaydetme (SMS, Linux)
Mevcut bir Signal uygulama hesabını bağlamak yerine ayrılmış 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 ayrılmış bir bot numarası kullanın.
- Gateway ana makinesine
signal-clikurun:
signal-cli-${VERSION}.tar.gz) kullanıyorsanız önce JRE 25+ kurun.
signal-cli güncel tutun; upstream, Signal sunucu API’leri değiştikçe eski sürümlerin bozulabileceğini belirtir.
- Numarayı kaydedin ve doğrulayın:
https://signalcaptchas.org/registration/generate.htmladresini açın.- Captcha’yı tamamlayın, “Open Signal” içinden
signalcaptcha://...bağlantı hedefini kopyalayın. - Mümkün olduğunda tarayıcı oturumuyla aynı harici IP’den çalıştırın.
- Kaydı hemen yeniden çalıştırın (captcha token’ları hızlı sona erer):
- OpenClaw’ı yapılandırın, gateway’i yeniden başlatın, kanalı doğrulayın:
- DM göndereninizi eşleştirin:
- Bot numarasına herhangi bir mesaj gönderin.
- Sunucuda kodu onaylayın:
openclaw pairing approve signal <PAIRING_CODE>. - “Bilinmeyen kişi” uyarısını önlemek için bot numarasını telefonunuzda kişi olarak kaydedin.
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 yönetimini kendiniz yapmak istiyorsanız (yavaş JVM soğuk başlatmaları, konteyner başlatma veya paylaşılan CPU’lar), daemon’ı ayrı çalıştırın ve OpenClaw’ı ona yönlendirin:
channels.signal.startupTimeoutMs ayarlayın.
Konteyner modu (bbernhard/signal-cli-rest-api)
signal-cli yerel olarak çalıştırmak yerine bbernhard/signal-cli-rest-api Docker konteynerini kullanabilirsiniz. Bu, signal-cli aracını bir REST API ve WebSocket arayüzünün arkasında sarmalar.
Gereksinimler:
- Gerçek zamanlı mesaj alımı için konteyner
MODE=json-rpcile çalışmalıdır. - OpenClaw’ı bağlamadan önce Signal hesabınızı konteyner içinde kaydedin veya bağlayın.
docker-compose.yml hizmeti:
apiMode alanı OpenClaw’ın hangi protokolü kullanacağını denetler:
| Değer | Davranış |
|---|---|
"auto" | (Varsayılan) Her iki aktarımı yoklar; akış, konteyner WebSocket alımını doğrular |
"native" | Yerel signal-cli’ı zorlar (/api/v1/rpc üzerinde JSON-RPC, /api/v1/events üzerinde SSE) |
"container" | bbernhard konteynerini zorlar (/v2/send üzerinde REST, /v1/receive/{account} üzerinde WebSocket) |
apiMode "auto" olduğunda, OpenClaw tekrarlanan yoklamaları önlemek için algılanan modu 30 saniye önbelleğe alır. Konteyner alımı, yalnızca /v1/receive/{account} WebSocket’e yükseltildikten sonra akış için seçilir; bu da MODE=json-rpc gerektirir.
Konteyner modu, konteynerin eşleşen API’leri sunduğu durumlarda yerel modla aynı Signal kanal işlemlerini destekler: gönderimler, alımlar, ekler, yazıyor göstergeleri, okundu/görüldü alındıları, tepkiler, gruplar ve biçimli metin. OpenClaw, yerel Signal RPC çağrılarını konteynerin REST yüklerine çevirir; buna group.{base64(internal_id)} grup kimlikleri ve biçimlendirilmiş metin için text_mode: "styled" dahildir.
Operasyonel notlar:
- Konteyner modunda
autoStart: falsekullanın.apiMode: "container"seçildiğinde OpenClaw yerel bir daemon başlatmamalıdır. - Alım için
MODE=json-rpckullanın.MODE=normal,/v1/aboutuç noktasını sağlıklı gösterebilir, ancak/v1/receive/{account}WebSocket’e yükselmez; bu yüzden OpenClawautomodunda konteyner alım akışını seçmez. httpUrldeğerinin bbernhard’ın REST API’sine işaret ettiğini biliyorsanızapiMode: "container"ayarlayın. Yerelsignal-cliJSON-RPC/SSE’ye işaret ettiğini biliyorsanızapiMode: "native"ayarlayın. Dağıtım değişebiliyorsa"auto"kullanın.- Konteyner ek indirmeleri, yerel modla aynı medya bayt sınırlarına uyar. Sunucu
Content-Lengthgönderdiğinde fazla büyük yanıtlar tamamen arabelleğe alınmadan önce reddedilir; aksi halde akış sırasında reddedilir.
Erişim denetimi (DM’ler + gruplar)
DM’ler:- Varsayılan:
channels.signal.dmPolicy = "pairing". - Bilinmeyen gönderenler bir eşleştirme kodu alır; onaylanana kadar mesajlar yok sayılır (kodlar 1 saat sonra sona erer).
- Şununla onaylayın:
openclaw pairing list signalopenclaw pairing approve signal <CODE>
- Eşleştirme, Signal DM’leri için varsayılan token değişimidir. Ayrıntılar: Eşleştirme
- Yalnızca UUID gönderenler (
sourceUuidüzerinden),channels.signal.allowFromiçindeuuid:<id>olarak saklanır.
channels.signal.groupPolicy = open | allowlist | disabled.channels.signal.groupAllowFrom,allowlistayarlandığında hangi grupların veya gönderenlerin grup yanıtlarını tetikleyebileceğini denetler; girdiler Signal grup kimlikleri (ham,group:<id>veyasignal:group:<id>), gönderen telefon numaraları,uuid:<id>değerleri veya*olabilir.channels.signal.groups["<group-id>" | "*"], grup davranışınırequireMention,toolsvetoolsBySenderile geçersiz kılabilir.- Çoklu hesap kurulumlarında hesap başına geçersiz kılmalar için
channels.signal.accounts.<id>.groupskullanın. - Bir Signal grubunu
groupAllowFromüzerinden izin listesine almak, tek başına bahsetme kapısını devre dışı bırakmaz. Özel olarak yapılandırılmış birchannels.signal.groups["<group-id>"]girdisi,requireMention=trueayarlanmadıkça her grup mesajını işler. - Çalışma zamanı notu:
channels.signaltamamen eksikse, çalışma zamanı grup kontrolleri içingroupPolicy="allowlist"değerine geri döner (channels.defaults.groupPolicyayarlanmış olsa bile).
Nasıl çalışır (davranış)
- Yerel mod:
signal-clidaemon olarak çalışır; gateway olayları SSE üzerinden okur. - Konteyner modu: gateway REST API üzerinden gönderir ve WebSocket üzerinden alır.
- Gelen mesajlar paylaşılan kanal zarfına normalleştirilir.
- Yanıtlar her zaman aynı numaraya veya gruba geri yönlendirilir.
Medya + sınırlar
- Giden metin
channels.signal.textChunkLimitdeğerine göre parçalara bölünür (varsayılan 4000). - İsteğe bağlı yeni satır parçalama: uzunluk parçalamadan önce boş satırlara (paragraf sınırları) göre bölmek için
channels.signal.chunkMode="newline"ayarlayın. - Ekler desteklenir (
signal-cliüzerinden base64 olarak alınır). - Ses notu ekleri,
contentTypeeksik olduğunda MIME yedeği olaraksignal-clidosya adını kullanır; böylece ses transkripsiyonu AAC ses notlarını yine de sınıflandırabilir. - Varsayılan medya üst 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öner. Devre dışı bırakmak için0ayarlayın (varsayılan 50).
Yazıyor + okundu alındıları
- Yazıyor göstergeleri: OpenClaw,
signal-cli sendTypingüzerinden yazıyor sinyalleri gönderir ve bir yanıt çalışırken bunları yeniler. - Okundu alındıları:
channels.signal.sendReadReceiptstrue olduğunda, OpenClaw izin verilen DM’ler için okundu alındılarını iletir. - Signal-cli, gruplar için okundu alındılarını sunmaz.
Tepkiler (mesaj aracı)
channel=signalilemessage action=reactkullanın.- Hedefler: gönderenin E.164 değeri veya UUID’si (eşleştirme çıktısından
uuid:<id>kullanın; yalın UUID de çalışır). messageId, tepki verdiğiniz iletinin Signal zaman damgasıdır.- Grup tepkileri
targetAuthorveyatargetAuthorUuidgerektirir.
channels.signal.actions.reactions: tepki eylemlerini etkinleştirir/devre dışı bırakır (varsayılan true).channels.signal.reactionLevel:off | ack | minimal | extensive.off/ackajan tepkilerini devre dışı bırakır (reactileti aracı hata verir).minimal/extensiveajan 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’leri:
uuid:<id>(veya yalın UUID). - Gruplar:
signal:group:<groupId>. - Kullanıcı adları:
username:<name>(Signal hesabınız tarafından destekleniyorsa).
Sorun giderme
Önce şu sırayı ç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şleştirme onayı bekliyor.
- Grup iletileri yok sayılıyor: grup göndereni/bahsetme geçidi teslimi engelliyor.
- Düzenlemelerden sonra yapılandırma doğrulama hataları:
openclaw doctor --fixçalıştırın. - Signal tanılamalarda eksik:
channels.signal.enabled: trueolduğunu doğrulayın.
Güvenlik notları
signal-clihesap anahtarlarını yerel olarak depolar (genellikle~/.local/share/signal-cli/data/).- Sunucu taşıma veya yeniden kurma işleminden önce Signal hesap durumunu yedekleyin.
- Daha geniş DM erişimini açıkça istemiyorsanız
channels.signal.dmPolicy: "pairing"değerini koruyun. - SMS doğrulaması yalnızca kayıt veya kurtarma akışları için gereklidir, ancak numaranın/hesabın kontrolünü kaybetmek yeniden kaydı karmaşıklaştırabilir.
Yapılandırma başvurusu (Signal)
Tam yapılandırma: Yapılandırma Sağlayıcı seçenekleri:channels.signal.enabled: kanal başlangıcını etkinleştirir/devre dışı bırakır.channels.signal.apiMode:auto | native | container(varsayılan: auto). Bkz. Konteyner modu.channels.signal.account: bot hesabı için E.164.channels.signal.cliPath:signal-cliyolu.channels.signal.httpUrl: tam daemon URL’si (host/port değerlerini geçersiz kılar).channels.signal.httpHost,channels.signal.httpPort: daemon bağlaması (varsayılan 127.0.0.1:8080).channels.signal.autoStart: daemon’u otomatik başlatır (httpUrlayarlanmamışsa 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’de kullanıcı adları yoktur; telefon/UUID kimliklerini kullanın.channels.signal.groupPolicy:open | allowlist | disabled(varsayılan: allowlist).channels.signal.groupAllowFrom: grup izin listesi; Signal grup kimliklerini (ham,group:<id>veyasignal:group:<id>), gönderen E.164 numaralarını veyauuid:<id>değerlerini kabul eder.channels.signal.groups: Signal grup kimliğine (veya"*") göre anahtarlanan grup başına geçersiz kılmalar. Desteklenen alanlar:requireMention,tools,toolsBySender.channels.signal.accounts.<id>.groups: çok hesaplı kurulumlar içinchannels.signal.groupsdeğerinin hesap başına sürümü.channels.signal.historyLimit: bağlam olarak eklenecek en fazla grup iletisi sayısı (0 devre dışı bırakır).channels.signal.dmHistoryLimit: kullanıcı dönüşleri cinsinden DM geçmiş 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: uzunluğa göre parçalamadan önce boş satırlara (paragraf sınırlarına) göre bölmek içinlength(varsayılan) veyanewline.channels.signal.mediaMaxMb: gelen/giden medya üst sınırı (MB).
agents.list[].groupChat.mentionPatterns(Signal yerel bahsetmeleri desteklemez).messages.groupChat.mentionPatterns(genel geri dönüş).messages.responsePrefix.
İlgili
- Kanallara Genel Bakış — desteklenen tüm kanallar
- Eşleştirme — DM kimlik doğrulaması ve eşleştirme akışı
- Gruplar — grup sohbeti davranışı ve bahsetme geçidi
- Kanal Yönlendirme — iletiler için oturum yönlendirmesi
- Güvenlik — erişim modeli ve sıkılaştırma