BlueBubbles (macOS REST)
Durum: HTTP üzerinden BlueBubbles macOS sunucusuyla konuşan paketlenmiş plugin. Eski imsg kanalına kıyasla daha zengin API’si ve daha kolay kurulumu nedeniyle iMessage entegrasyonu için önerilir.Paketlenmiş plugin
Güncel OpenClaw sürümleri BlueBubbles’ı paketli olarak içerir; bu nedenle normal paketlenmiş derlemelerde ayrı biropenclaw plugins install adımı gerekmez.
Genel bakış
- BlueBubbles yardımcı uygulaması (bluebubbles.app) üzerinden macOS’ta çalışır.
- Önerilen/test edilen: macOS Sequoia (15). macOS Tahoe (26) çalışır; düzenleme şu anda Tahoe’da bozuktur ve grup simgesi güncellemeleri başarılı görünebilir ancak senkronize olmayabilir.
- OpenClaw, bununla REST API’si üzerinden konuşur (
GET /api/v1/ping,POST /message/text,POST /chat/:id/*). - Gelen mesajlar webhook’lar üzerinden gelir; giden yanıtlar, yazıyor göstergeleri, okundu bilgileri ve tapback’ler REST çağrılarıdır.
- Ekler ve sticker’lar gelen medya olarak alınır ve mümkün olduğunda agente gösterilir.
- Eşleştirme/izin listesi diğer kanallarla aynı şekilde çalışır (
/channels/pairingvb.) vechannels.bluebubbles.allowFrom+ eşleştirme kodlarını kullanır. - Tepkiler, Slack/Telegram’da olduğu gibi sistem olayları olarak gösterilir; böylece agent’lar yanıtlamadan önce bunlara “atıfta bulunabilir”.
- Gelişmiş özellikler: düzenleme, geri alma, yanıt dizileme, mesaj efektleri, grup yönetimi.
Hızlı başlangıç
- Mac’inize BlueBubbles sunucusunu kurun (bluebubbles.app/install adresindeki talimatları izleyin).
- BlueBubbles yapılandırmasında web API’sini etkinleştirin ve bir parola belirleyin.
-
openclaw onboardkomutunu çalıştırın ve BlueBubbles’ı seçin veya elle yapılandırın: -
BlueBubbles webhook’larını gateway’inize yönlendirin (örnek:
https://your-gateway-host:3000/bluebubbles-webhook?password=<password>). - Gateway’i başlatın; webhook işleyicisini kaydedecek ve eşleştirmeyi başlatacaktır.
- Her zaman bir webhook parolası ayarlayın.
- Webhook kimlik doğrulaması her zaman zorunludur. OpenClaw,
channels.bluebubbles.passwordile eşleşen bir parola/guid içermedikçe BlueBubbles webhook isteklerini reddeder (örneğin?password=<password>veyax-password), loopback/proxy topolojisinden bağımsız olarak. - Parola kimlik doğrulaması, tam webhook gövdeleri okunmadan/ayrıştırılmadan önce denetlenir.
Messages.app etkin tutma (VM / başsız kurulumlar)
Bazı macOS VM / sürekli açık kurulumlarda Messages.app “boşta” duruma geçebilir (uygulama açılana/öne getirilene kadar gelen olaylar durur). Basit bir geçici çözüm, AppleScript + LaunchAgent kullanarak Messages’ı her 5 dakikada bir dürtmektir.1) AppleScript’i kaydedin
Bunu şu konuma kaydedin:~/Scripts/poke-messages.scpt
2) Bir LaunchAgent kurun
Bunu şu konuma kaydedin:~/Library/LaunchAgents/com.user.poke-messages.plist
- Bu, her 300 saniyede bir ve oturum açıldığında çalışır.
- İlk çalıştırma, macOS Automation istemlerini (
osascript→ Messages) tetikleyebilir. Bunları, LaunchAgent’i çalıştıran aynı kullanıcı oturumunda onaylayın.
Onboarding
BlueBubbles, etkileşimli onboarding içinde kullanılabilir:- Server URL (zorunlu): BlueBubbles sunucu adresi (ör.
http://192.168.1.100:1234) - Password (zorunlu): BlueBubbles Server ayarlarından API parolası
- Webhook path (isteğe bağlı): Varsayılan
/bluebubbles-webhook - DM policy: pairing, allowlist, open veya disabled
- Allow list: Telefon numaraları, e-posta adresleri veya sohbet hedefleri
Erişim denetimi (DM’ler + gruplar)
DM’ler:- Varsayılan:
channels.bluebubbles.dmPolicy = "pairing". - Bilinmeyen gönderenler bir eşleştirme kodu alır; onaylanana kadar mesajlar yok sayılır (kodların süresi 1 saat sonra dolar).
- Onaylamak için:
openclaw pairing list bluebubblesopenclaw pairing approve bluebubbles <CODE>
- Eşleştirme varsayılan token değişimidir. Ayrıntılar: Eşleştirme
channels.bluebubbles.groupPolicy = open | allowlist | disabled(varsayılan:allowlist).channels.bluebubbles.groupAllowFrom,allowlistayarlı olduğunda gruplarda kimin tetikleyebileceğini denetler.
Kişi adı zenginleştirmesi (macOS, isteğe bağlı)
BlueBubbles grup webhook’ları genellikle yalnızca ham katılımcı adreslerini içerir. Bunun yerineGroupMembers bağlamında yerel kişi adlarının görünmesini istiyorsanız, macOS’ta yerel Contacts zenginleştirmesini etkinleştirebilirsiniz:
channels.bluebubbles.enrichGroupParticipantsFromContacts = truearamayı etkinleştirir. Varsayılan:false.- Aramalar yalnızca grup erişimi, komut yetkilendirmesi ve bahsetme geçidi mesajın geçmesine izin verdikten sonra çalışır.
- Yalnızca adı olmayan telefon katılımcıları zenginleştirilir.
- Yerelde eşleşme bulunmazsa ham telefon numaraları geri dönüş olarak kalır.
Bahsetme geçidi (gruplar)
BlueBubbles, iMessage/WhatsApp davranışıyla eşleşen grup sohbetleri için bahsetme geçidini destekler:- Bahsetmeleri algılamak için
agents.list[].groupChat.mentionPatterns(veyamessages.groupChat.mentionPatterns) kullanır. - Bir grup için
requireMentionetkinse agent yalnızca kendisinden bahsedildiğinde yanıt verir. - Yetkili gönderenlerden gelen kontrol komutları bahsetme geçidini atlar.
Komut geçidi
- Kontrol komutları (ör.
/config,/model) yetkilendirme gerektirir. - Komut yetkilendirmesini belirlemek için
allowFromvegroupAllowFromkullanılır. - Yetkili gönderenler, gruplarda bahsetmeden bile kontrol komutlarını çalıştırabilir.
ACP konuşma bağları
BlueBubbles sohbetleri, taşıma katmanı değiştirilmeden dayanıklı ACP çalışma alanlarına dönüştürülebilir. Hızlı operatör akışı:- DM içinde veya izin verilen grup sohbetinde
/acp spawn codex --bind herekomutunu çalıştırın. - Aynı BlueBubbles konuşmasındaki gelecekteki mesajlar oluşturulan ACP oturumuna yönlendirilir.
/newve/reset, aynı bağlı ACP oturumunu yerinde sıfırlar./acp close, ACP oturumunu kapatır ve bağı kaldırır.
type: "acp" ve match.channel: "bluebubbles" içeren üst düzey bindings[] girdileriyle desteklenir.
match.peer.id, desteklenen herhangi bir BlueBubbles hedef biçimini kullanabilir:
+15555550123veyauser@example.comgibi normalize edilmiş DM handle’ıchat_id:<id>chat_guid:<guid>chat_identifier:<identifier>
chat_id:* veya chat_identifier:* tercih edin.
Örnek:
Yazıyor göstergeleri + okundu bilgileri
- Yazıyor göstergeleri: Yanıt üretilmeden önce ve üretim sırasında otomatik olarak gönderilir.
- Okundu bilgileri:
channels.bluebubbles.sendReadReceiptstarafından denetlenir (varsayılan:true). - Yazıyor göstergeleri: OpenClaw yazıyor başlatma olayları gönderir; BlueBubbles gönderim veya zaman aşımıyla yazıyor durumunu otomatik olarak temizler (DELETE ile elle durdurma güvenilir değildir).
Gelişmiş eylemler
BlueBubbles, yapılandırmada etkinleştirildiğinde gelişmiş mesaj eylemlerini destekler:- react: Tapback tepkileri ekle/kaldır (
messageId,emoji,remove) - edit: Gönderilmiş bir mesajı düzenle (
messageId,text) - unsend: Bir mesajı geri al (
messageId) - reply: Belirli bir mesaja yanıt ver (
messageId,text,to) - sendWithEffect: iMessage efektiyle gönder (
text,to,effectId) - renameGroup: Bir grup sohbetini yeniden adlandır (
chatGuid,displayName) - setGroupIcon: Bir grup sohbetinin simgesini/fotoğrafını ayarla (
chatGuid,media) — macOS 26 Tahoe’da güvenilir değildir (API başarılı dönebilir ama simge senkronize olmaz). - addParticipant: Bir gruba birini ekle (
chatGuid,address) - removeParticipant: Bir gruptan birini çıkar (
chatGuid,address) - leaveGroup: Bir grup sohbetinden ayrıl (
chatGuid) - upload-file: Medya/dosya gönder (
to,buffer,filename,asVoice)- Sesli notlar: iMessage sesli mesajı olarak göndermek için MP3 veya CAF ses ile
asVoice: trueayarlayın. BlueBubbles, sesli not gönderirken MP3 → CAF dönüştürmesi yapar.
- Sesli notlar: iMessage sesli mesajı olarak göndermek için MP3 veya CAF ses ile
- Eski takma ad:
sendAttachmenthâlâ çalışır, ancak kanonik eylem adıupload-file’dır.
Mesaj kimlikleri (kısa ve tam)
OpenClaw, token tasarrufu sağlamak için kısa mesaj kimlikleri (ör.1, 2) gösterebilir.
MessageSid/ReplyToIdkısa kimlikler olabilir.MessageSidFull/ReplyToIdFull, sağlayıcının tam kimliklerini içerir.- Kısa kimlikler bellek içindedir; yeniden başlatmada veya önbellek boşaltımında geçersiz olabilirler.
- Eylemler kısa veya tam
messageIdkabul eder, ancak kısa kimlikler artık mevcut değilse hata verir.
- Şablonlar:
{{MessageSidFull}},{{ReplyToIdFull}} - Bağlam: gelen yüklerde
MessageSidFull/ReplyToIdFull
Blok akışı
Yanıtların tek bir mesaj olarak mı gönderileceğini yoksa bloklar hâlinde mi akıtılacağını denetleyin:Medya + sınırlar
- Gelen ekler indirilir ve medya önbelleğinde saklanır.
- Gelen ve giden medya için medya sınırı
channels.bluebubbles.mediaMaxMbile belirlenir (varsayılan: 8 MB). - Giden metin
channels.bluebubbles.textChunkLimitdeğerine göre bölünür (varsayılan: 4000 karakter).
Yapılandırma başvurusu
Tam yapılandırma: Yapılandırma Sağlayıcı seçenekleri:channels.bluebubbles.enabled: Kanalı etkinleştir/devre dışı bırak.channels.bluebubbles.serverUrl: BlueBubbles REST API temel URL’si.channels.bluebubbles.password: API parolası.channels.bluebubbles.webhookPath: Webhook uç nokta yolu (varsayılan:/bluebubbles-webhook).channels.bluebubbles.dmPolicy:pairing | allowlist | open | disabled(varsayılan:pairing).channels.bluebubbles.allowFrom: DM izin listesi (handle’lar, e-postalar, E.164 numaraları,chat_id:*,chat_guid:*).channels.bluebubbles.groupPolicy:open | allowlist | disabled(varsayılan:allowlist).channels.bluebubbles.groupAllowFrom: Grup gönderen izin listesi.channels.bluebubbles.enrichGroupParticipantsFromContacts: macOS’ta, geçit kontrolleri geçtikten sonra adı olmayan grup katılımcılarını yerel Contacts’tan isteğe bağlı olarak zenginleştirir. Varsayılan:false.channels.bluebubbles.groups: Grup başına yapılandırma (requireMentionvb.).channels.bluebubbles.sendReadReceipts: Okundu bilgileri gönder (varsayılan:true).channels.bluebubbles.blockStreaming: Blok akışını etkinleştir (varsayılan:false; akış yanıtları için gereklidir).channels.bluebubbles.textChunkLimit: Karakter cinsinden giden parça boyutu (varsayılan: 4000).channels.bluebubbles.chunkMode:length(varsayılan) yalnızcatextChunkLimitaşıldığında böler;newline, uzunluğa göre bölmeden önce boş satırlarda (paragraf sınırları) böler.channels.bluebubbles.mediaMaxMb: MB cinsinden gelen/giden medya sınırı (varsayılan: 8).channels.bluebubbles.mediaLocalRoots: Giden yerel medya yolları için izin verilen mutlak yerel dizinlerin açık izin listesi. Bu yapılandırılmadıkça yerel yol gönderimleri varsayılan olarak reddedilir. Hesap başına geçersiz kılma:channels.bluebubbles.accounts.<accountId>.mediaLocalRoots.channels.bluebubbles.historyLimit: Bağlam için en fazla grup mesajı sayısı (0 devre dışı bırakır).channels.bluebubbles.dmHistoryLimit: DM geçmiş sınırı.channels.bluebubbles.actions: Belirli eylemleri etkinleştir/devre dışı bırak.channels.bluebubbles.accounts: Çok hesaplı yapılandırma.
agents.list[].groupChat.mentionPatterns(veyamessages.groupChat.mentionPatterns).messages.responsePrefix.
Adresleme / teslim hedefleri
Kararlı yönlendirme içinchat_guid tercih edin:
chat_guid:iMessage;-;+15555550123(gruplar için tercih edilir)chat_id:123chat_identifier:...- Doğrudan handle’lar:
+15555550123,user@example.com- Doğrudan bir handle için mevcut bir DM sohbeti yoksa OpenClaw bunu
POST /api/v1/chat/newüzerinden oluşturur. Bunun için BlueBubbles Private API’nin etkinleştirilmiş olması gerekir.
- Doğrudan bir handle için mevcut bir DM sohbeti yoksa OpenClaw bunu
Güvenlik
- Webhook istekleri,
guid/passwordsorgu parametreleri veya üstbilgilerichannels.bluebubbles.passwordile karşılaştırılarak kimlik doğrulanır. - API parolasını ve webhook uç noktasını gizli tutun (bunlara kimlik bilgisi gibi davranın).
- BlueBubbles webhook kimlik doğrulaması için localhost atlaması yoktur. Webhook trafiğini proxy’liyorsanız BlueBubbles parolasını isteğin uçtan uca üzerinde tutun. Burada
gateway.trustedProxies,channels.bluebubbles.passwordyerine geçmez. Bkz. Gateway security. - BlueBubbles sunucusunu LAN dışına açıyorsanız HTTPS + güvenlik duvarı kurallarını etkinleştirin.
Sorun giderme
- Yazıyor/okundu olayları çalışmayı bırakırsa BlueBubbles webhook günlüklerini kontrol edin ve gateway yolunun
channels.bluebubbles.webhookPathile eşleştiğini doğrulayın. - Eşleştirme kodlarının süresi bir saat sonra dolar;
openclaw pairing list bluebubblesveopenclaw pairing approve bluebubbles <code>kullanın. - Tepkiler BlueBubbles private API’sini (
POST /api/v1/message/react) gerektirir; sunucu sürümünün bunu sunduğundan emin olun. - Düzenleme/geri alma, macOS 13+ ve uyumlu bir BlueBubbles sunucu sürümü gerektirir. macOS 26 (Tahoe) üzerinde, private API değişiklikleri nedeniyle düzenleme şu anda bozuktur.
- Grup simgesi güncellemeleri macOS 26 (Tahoe) üzerinde güvenilir olmayabilir: API başarılı dönebilir ancak yeni simge senkronize olmaz.
- OpenClaw, BlueBubbles sunucusunun macOS sürümüne göre bilinen bozuk eylemleri otomatik olarak gizler. macOS 26 (Tahoe) üzerinde düzenleme hâlâ görünüyorsa
channels.bluebubbles.actions.edit=falseile elle devre dışı bırakın. - Durum/sağlık bilgileri için:
openclaw status --allveyaopenclaw status --deep.
İ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 — mesajlar için oturum yönlendirme
- Güvenlik — erişim modeli ve sağlamlaştırma