imessage Plugin’i artık steipete/imsg aracını JSON-RPC üzerinden çalıştırarak BlueBubbles ile aynı özel API yüzeyine (react, edit, unsend, reply, sendWithEffect, grup yönetimi, ekler) erişir. Zaten imsg yüklü bir Mac çalıştırıyorsanız BlueBubbles sunucusunu kaldırabilir ve Plugin’in doğrudan Messages.app ile konuşmasına izin verebilirsiniz.
BlueBubbles desteği kaldırıldı. OpenClaw, iMessage’ı yalnızca imsg üzerinden destekler. Bu kılavuz, eski channels.bluebubbles yapılandırmalarını channels.imessage yapılandırmasına taşımak içindir; desteklenen başka bir geçiş yolu yoktur.
Kısa duyuru ve operatör özeti için bkz. BlueBubbles’ın kaldırılması ve imsg iMessage yolu.
Geçiş kontrol listesi
Eski BlueBubbles yapılandırmanızı zaten biliyorsanız ve en kısa güvenli yolu istiyorsanız bu kontrol listesini kullanın:- Messages.app çalıştıran Mac üzerinde
imsgaracını doğrudan doğrulayın (imsg chats,imsg history,imsg sendveimsg rpc --help). - Davranış anahtarlarını
channels.bluebubblesiçindenchannels.imessageiçine kopyalayın:dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,includeAttachments,attachmentRoots,mediaMaxMb,textChunkLimit,coalesceSameSenderDmsveactions. - Artık mevcut olmayan aktarım anahtarlarını kaldırın:
serverUrl,password, Webhook URL’leri ve BlueBubbles sunucu kurulumu. - Gateway, Messages Mac üzerinde çalışmıyorsa
channels.imessage.cliPathdeğerini bir SSH sarmalayıcısına ayarlayın ve uzaktan ek getirmeleri içinremoteHostdeğerini belirleyin. - Gateway durdurulmuşken
channels.imessagekanalını etkinleştirin, ardındanopenclaw channels status --probe --channel imessagekomutunu çalıştırın. - Bir DM’yi, izin verilen bir grubu, etkinse ekleri ve aracının kullanmasını beklediğiniz her özel API eylemini test edin.
- iMessage yolu doğrulandıktan sonra BlueBubbles sunucusunu ve eski
channels.bluebubblesyapılandırmasını silin.
Bu geçiş ne zaman anlamlıdır?
- Messages.app oturumu açık olan aynı Mac üzerinde (veya SSH üzerinden erişilebilen bir Mac üzerinde) zaten
imsgçalıştırıyorsunuz. - Daha az hareketli parça istiyorsunuz: ayrı BlueBubbles sunucusu yok, kimlik doğrulaması gerektiren REST uç noktası yok, Webhook tesisatı yok. Sunucu + istemci uygulaması + yardımcı yerine tek bir CLI ikilisi.
- Özel API yoklamasının
available: truebildirdiği desteklenen macOS /imsgderlemesi kullanıyorsunuz.
imsg ne yapar?
imsg, Messages için yerel bir macOS CLI aracıdır. OpenClaw, imsg rpc komutunu alt süreç olarak başlatır ve stdin/stdout üzerinden JSON-RPC ile konuşur. Açığa çıkarılacak HTTP sunucusu, Webhook URL’si, arka plan daemon’u, launch agent’ı veya port yoktur.
- Okumalar, salt okunur bir SQLite tanıtıcısı kullanılarak
~/Library/Messages/chat.dbiçinden gelir. - Canlı gelen iletiler, yoklama geri dönüşüyle
chat.dbdosya sistemi olaylarını izleyenimsg watch/watch.subscribeüzerinden gelir. - Gönderimler, normal metin ve dosya gönderimleri için Messages.app otomasyonunu kullanır.
- Gelişmiş eylemler,
imsgyardımcısını Messages.app içine enjekte etmek içinimsg launchkullanır. Okundu bilgileri, yazıyor göstergeleri, zengin gönderimler, düzenleme, geri alma, konu içi yanıt, tapback’ler ve grup yönetimini açan şey budur. - Linux derlemeleri kopyalanmış bir
chat.dbdosyasını inceleyebilir, ancak gönderim yapamaz, canlı Mac veritabanını izleyemez veya Messages.app aracını süremez. OpenClaw iMessage içinimsgaracını oturum açılmış Mac üzerinde ya da o Mac’e giden bir SSH sarmalayıcısı üzerinden çalıştırın.
Başlamadan önce
-
Messages.app çalıştıran Mac üzerine
imsgyükleyin:imsg chatskomutuunable to open database file, boş çıktı veyaauthorization deniedhatasıyla başarısız olursaimsgaracını başlatan terminale, düzenleyiciye, Node sürecine, Gateway hizmetine veya SSH üst sürecine Tam Disk Erişimi verin, ardından bu üst süreci yeniden açın. -
OpenClaw yapılandırmasını değiştirmeden önce okuma, izleme, gönderme ve RPC yüzeylerini doğrulayın:
42değeriniimsg chatsçıktısından gerçek bir sohbet kimliğiyle değiştirin. Gönderim, Messages.app için Automation izni gerektirir. OpenClaw SSH üzerinden çalışacaksa bu komutları OpenClaw’ın kullanacağı aynı SSH sarmalayıcısı veya kullanıcı bağlamı üzerinden çalıştırın. Okumalar/yoklamalar çalışıyor ancak gönderimler AppleEvents-1743ile başarısız oluyorsa Automation izninin/usr/libexec/sshd-keygen-wrapperüzerine düşüp düşmediğini kontrol edin; bkz. SSH sarmalayıcı gönderimleri AppleEvents -1743 ile başarısız oluyor. -
Gelişmiş eylemlere ihtiyacınız olduğunda özel API köprüsünü etkinleştirin:
imsg launch, SIP’in devre dışı bırakılmış olmasını gerektirir. Temel gönderim, geçmiş ve izlemeimsg launcholmadan çalışır; gelişmiş eylemler çalışmaz. -
Etkin bir
channels.imessageyapılandırması ekledikten sonra köprüyü OpenClaw üzerinden doğrulayın:İstenen değerimessage.privateApi.available: truedeğeridir.falsebildirirse önce bunu düzeltin; bkz. Yetenek algılama.channels status --probeyalnızca yapılandırılmış ve etkin hesapları yoklar. -
Yapılandırmanızın anlık kopyasını alın:
Yapılandırma çevirisi
iMessage ve BlueBubbles çok sayıda kanal düzeyi yapılandırmayı paylaşır. Değişen anahtarlar çoğunlukla aktarım ile ilgilidir (REST sunucusu ve yerel CLI). Davranış anahtarları (dmPolicy, groupPolicy, allowFrom vb.) aynı anlamı korur.
| BlueBubbles | paketle gelen iMessage | Notlar |
|---|---|---|
channels.bluebubbles.enabled | channels.imessage.enabled | Aynı semantik. |
channels.bluebubbles.serverUrl | (kaldırıldı) | REST sunucusu yok; Plugin, stdio üzerinden imsg rpc başlatır. |
channels.bluebubbles.password | (kaldırıldı) | Webhook kimlik doğrulaması gerekmez. |
| (örtük) | channels.imessage.cliPath | imsg yolu (varsayılan imsg); SSH için bir sarmalayıcı betik kullanın. |
| (örtük) | channels.imessage.dbPath | İsteğe bağlı Messages.app chat.db geçersiz kılması; atlandığında otomatik algılanır. |
| (örtük) | channels.imessage.remoteHost | host veya user@host; yalnızca cliPath bir SSH sarmalayıcısıysa ve SCP ek getirmeleri istiyorsanız gerekir. |
channels.bluebubbles.dmPolicy | channels.imessage.dmPolicy | Aynı değerler (pairing / allowlist / open / disabled). |
channels.bluebubbles.allowFrom | channels.imessage.allowFrom | Eşleştirme onayları token ile değil, handle ile taşınır. |
channels.bluebubbles.groupPolicy | channels.imessage.groupPolicy | Aynı değerler (allowlist / open / disabled). |
channels.bluebubbles.groupAllowFrom | channels.imessage.groupAllowFrom | Aynı. |
channels.bluebubbles.groups | channels.imessage.groups | Bunu, varsa groups: { "*": { ... } } joker girdisi dahil olmak üzere bire bir kopyalayın. Grup başına requireMention, tools, toolsBySender taşınır. groupPolicy: "allowlist" ile boş veya eksik bir groups bloğu her grup iletisini sessizce düşürür; aşağıdaki “Grup kayıt defteri tuzağı” bölümüne bakın. |
channels.bluebubbles.sendReadReceipts | channels.imessage.sendReadReceipts | Varsayılan true. Paketle gelen Plugin ile bu yalnızca özel API probu çalışır durumdayken tetiklenir. |
channels.bluebubbles.includeAttachments | channels.imessage.includeAttachments | Aynı şekil, aynı şekilde varsayılan olarak kapalı. BlueBubbles üzerinde ekler akıyorduysa bunu iMessage bloğunda açıkça yeniden ayarlamanız gerekir; örtük olarak taşınmaz ve bunu yapana kadar gelen fotoğraflar/medyalar Inbound message günlük satırı olmadan sessizce düşürülür. |
channels.bluebubbles.attachmentRoots | channels.imessage.attachmentRoots | Yerel kökler; aynı joker kuralları. |
| (Yok) | channels.imessage.remoteAttachmentRoots | Yalnızca SCP getirmeleri için remoteHost ayarlandığında kullanılır. |
channels.bluebubbles.mediaMaxMb | channels.imessage.mediaMaxMb | iMessage üzerinde varsayılan 16 MB (BlueBubbles varsayılanı 8 MB idi). Daha düşük sınırı korumak istiyorsanız açıkça ayarlayın. |
channels.bluebubbles.textChunkLimit | channels.imessage.textChunkLimit | Her ikisinde de varsayılan 4000. |
channels.bluebubbles.coalesceSameSenderDms | channels.imessage.coalesceSameSenderDms | Aynı isteğe bağlı davranış. Yalnızca DM; grup sohbetleri her iki kanalda da ileti başına anında dağıtımı korur. Açık bir messages.inbound.byChannel.imessage veya genel messages.inbound.debounceMs olmadan etkinleştirildiğinde varsayılan gelen debounce değerini 7000 ms’ye genişletir. iMessage belgeleri § Bölünmüş gönderimli DM’leri birleştirme bölümüne bakın. |
channels.bluebubbles.enrichGroupParticipantsFromContacts | (Yok) | iMessage, gönderen görünen adlarını zaten chat.db içinden okur. |
channels.bluebubbles.actions.* | channels.imessage.actions.* | Eylem başına açma/kapama ayarları: reactions, edit, unsend, reply, sendWithEffect, renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup, sendAttachment. |
channels.bluebubbles.accounts.*), bire bir channels.imessage.accounts.* olarak çevrilir.
Grup kayıt defteri tuzağı
Paketle gelen iMessage Plugin, iki ayrı grup izin listesi kapısını arka arkaya çalıştırır. Bir grup iletisinin ajana ulaşması için ikisinden de geçmesi gerekir:- Gönderen / sohbet hedefi izin listesi (
channels.imessage.groupAllowFrom) —isAllowedIMessageSendertarafından denetlenir. Gelen iletileri gönderen handle,chat_guid,chat_identifierveyachat_idile eşleştirir. BlueBubbles ile aynı şekle sahiptir. - Grup kayıt defteri (
channels.imessage.groups) —inbound-processing.ts:199içindekiresolveChannelGroupPolicytarafından denetlenir.groupPolicy: "allowlist"ile bu kapı şunlardan birini gerektirir:- bir
groups: { "*": { ... } }joker girdisi (allowAll = trueayarlar), veya groupsaltında açık birchat_idbaşına girdi.
- bir
warn düzeyi sinyal yayar:
groupPolicy: "allowlist"ayarlanmışkenchannels.imessage.groupsboşsa ("*"jokeri yok,chat_idbaşına girdi yok) hesap başına bir defalık başlangıçwarniletisi; herhangi bir ileti ulaşmadan önce tetiklenir.- Belirli bir grup çalışma zamanında ilk kez düşürüldüğünde
chat_idbaşına bir defalıkwarniletisi; chat_id’yi ve buna izin vermek içingroupsiçine eklenecek tam anahtarı belirtir.
groupAllowFrom ve groupPolicy değerlerini kopyalar ama groups bloğunu atlar, çünkü BlueBubbles’ın groups: { "*": { "requireMention": true } } ayarı ilgisiz bir bahsetme ayarı gibi görünür. Aslında kayıt kapısı için kritik önemdedir.
groupPolicy: "allowlist" sonrasında grup mesajlarının akmaya devam etmesi için minimum yapılandırma:
* altındaki requireMention: true, bahsetme desenleri yapılandırılmamışsa zararsızdır: çalışma zamanı canDetectMention = false değerini ayarlar ve inbound-processing.ts:512 konumundaki bahsetme düşürmesini kısa devre yapar. Bahsetme desenleri yapılandırıldığında (agents.list[].groupChat.mentionPatterns), beklendiği gibi çalışır.
Gateway günlükleri imessage: dropping group message from chat_id=<id> ya da başlangıç satırı olarak imessage: groupPolicy="allowlist" but channels.imessage.groups is empty gösteriyorsa, kapı 2 düşürüyordur — groups bloğunu ekleyin.
Adım adım
-
Mevcut BlueBubbles bloğunun yanına bir iMessage bloğu ekleyin. Gateway hâlâ BlueBubbles trafiğini yönlendirirken bunu devre dışı bırakılmış tutun:
-
Trafik önemli hale gelmeden önce yoklayın — Gateway’i durdurun, iMessage bloğunu geçici olarak etkinleştirin ve iMessage’ın CLI üzerinden sağlıklı raporlandığını doğrulayın:
channels status --probeyalnızca yapılandırılmış ve etkin hesapları yoklar. Her iki kanal izleyicisinin de çalışmasını bilinçli olarak istemiyorsanız Gateway’i BlueBubbles ve iMessage aynı anda etkin durumdayken yeniden başlatmayın. Hemen geçiş yapmıyorsanız Gateway’i yeniden başlatmadan öncechannels.imessage.enableddeğerini tekrarfalseolarak ayarlayın. OpenClaw trafiğini etkinleştirmeden önce Mac’i doğrulamak için Başlamadan önce bölümündeki doğrudanimsgkomutlarını kullanın. -
Geçiş yapın. Etkin iMessage hesabı sağlıklı raporlandıktan sonra BlueBubbles yapılandırmasını kaldırın ve iMessage’ı etkin tutun:
Gateway’i yeniden başlatın. Gelen iMessage trafiği artık paketlenmiş Plugin üzerinden akar.
- DM’leri doğrulayın. Aracıya doğrudan mesaj gönderin; yanıtın ulaştığını doğrulayın.
-
Grupları ayrı doğrulayın. DM’ler ve gruplar farklı kod yolları kullanır — DM başarısı grupların yönlendirildiğini kanıtlamaz. Aracıya eşleştirilmiş bir grup sohbetinde mesaj gönderin ve yanıtın ulaştığını doğrulayın. Grup sessiz kalırsa (aracı yanıtı yok, hata yok), Gateway günlüğünde
imessage: dropping group message from chat_id=<id>ya da başlangıçtaimessage: groupPolicy="allowlist" but channels.imessage.groups is emptysatırı olup olmadığını kontrol edin — ikisi de varsayılan günlük düzeyinde tetiklenir. İkisinden biri görünüyorsagroupsbloğunuz eksik ya da boştur — yukarıdaki “Grup kayıt tuzağı” bölümüne bakın. -
Eylem yüzeyini doğrulayın — eşleştirilmiş bir DM’den aracıdan tepki vermesini, düzenlemesini, göndermeyi geri almasını, yanıtlamasını, fotoğraf göndermesini ve (bir grupta) grubu yeniden adlandırmasını / katılımcı eklemesini ya da kaldırmasını isteyin. Her eylem Messages.app içinde yerel olarak gerçekleşmelidir. Herhangi biri “iMessage
<action>requires the imsg private API bridge” hatası verirseimsg launchkomutunu yeniden çalıştırın vechannels status --probedurumunu yenileyin. -
iMessage DM’leri, grupları ve eylemleri doğrulandıktan sonra BlueBubbles sunucusunu ve yapılandırmasını kaldırın. OpenClaw
channels.bluebubbleskullanmaz.
Bir bakışta eylem eşliği
| Eylem | eski BlueBubbles | paketlenmiş iMessage |
|---|---|---|
| Metin gönderme / SMS geri dönüşü | ✅ | ✅ |
| Medya gönderme (fotoğraf, video, dosya, ses) | ✅ | ✅ |
Konulu yanıt (reply_to_guid) | ✅ | ✅ (#51892 kapatır) |
Tapback (react) | ✅ | ✅ |
| Düzenleme / göndermeyi geri alma (macOS 13+ alıcılar) | ✅ | ✅ |
| Ekran efektiyle gönderme | ✅ | ✅ (#9394 bölümünü kapatır) |
| Zengin metin kalın / italik / altı çizili / üstü çizili | ✅ | ✅ (attributedBody üzerinden typed-run biçimlendirme) |
| Grubu yeniden adlandırma / grup simgesi ayarlama | ✅ | ✅ |
| Katılımcı ekleme / kaldırma, gruptan ayrılma | ✅ | ✅ |
| Okundu bilgileri ve yazıyor göstergesi | ✅ | ✅ (özel API yoklamasına bağlı) |
| Aynı gönderenden DM birleştirme | ✅ | ✅ (yalnızca DM; channels.imessage.coalesceSameSenderDms ile isteğe bağlı) |
| Yeniden başlatma sonrası gelen ileti kurtarma | ✅ (Webhook yeniden oynatma + geçmiş alma) | ✅ (otomatik: kaçırılanları since_rowid + tekilleştirme ile yeniden oynatır; yerelde daha geniş pencere) |
imsg watch.subscribe since_rowid üzerinden son gönderilen rowid’den itibaren yeniden oynatır ve GUID ile tekilleştirir; bu sırada eski-birikim yaş sınırı Push-flush “birikim bombası”nı bastırır. Bu, imsg RPC bağlantısı üzerinden çalışır; dolayısıyla uzak SSH cliPath kurulumlarında da çalışır. Yerel kurulumlar chat.db okuyabildiği için daha geniş bir kurtarma penceresi elde eder. Bkz. Köprü veya Gateway yeniden başlatması sonrası gelen ileti kurtarma.
Eşleştirme, oturumlar ve ACP bağları
- Eşleştirme onayları tanıtıcıya göre taşınır. Bilinen gönderenleri yeniden onaylamanız gerekmez —
channels.imessage.allowFrom, BlueBubbles’ın kullandığı aynı+15555550123/user@example.comdizelerini tanır. - Oturumlar aracı + sohbet başına kapsamlandırılmış kalır. DM’ler varsayılan
session.dmScope=mainaltında aracı ana oturumuna daralır; grup oturumlarıchat_idbaşına izole kalır. Oturum anahtarları farklıdır (agent:<id>:imessage:group:<chat_id>ve BlueBubbles eşdeğeri) — BlueBubbles oturum anahtarları altındaki eski konuşma geçmişi iMessage oturumlarına taşınmaz. match.channel: "bluebubbles"referansı veren ACP bağları"imessage"olarak güncellenmelidir.match.peer.idbiçimleri (chat_id:,chat_guid:,chat_identifier:, çıplak tanıtıcı) aynıdır.
Geri dönüş kanalı yok
Geri dönülecek desteklenen bir BlueBubbles çalışma zamanı yoktur. iMessage doğrulaması başarısız olursachannels.imessage.enabled: false ayarlayın, Gateway’i yeniden başlatın, imsg engelleyicisini düzeltin ve geçişi yeniden deneyin.
Yanıt önbelleği SQLite Plugin durumunda yaşar. openclaw doctor --fix, varsa eski imessage/reply-cache.jsonl yan dosyasını içe aktarır ve arşivler.
İlgili
- BlueBubbles kaldırma ve imsg iMessage yolu — kısa duyuru ve operatör özeti.
- iMessage —
imsg launchkurulumu ve yetenek algılama dahil tam iMessage kanal başvurusu. /channels/bluebubbles— bu geçiş kılavuzuna yönlendiren eski URL.- Eşleştirme — DM kimlik doğrulaması ve eşleştirme akışı.
- Kanal Yönlendirme — Gateway’in giden yanıtlar için kanalı nasıl seçtiği.