Mainstream messaging
iMessage
Durum: yerel harici CLI entegrasyonu. Gateway imsg rpc sürecini başlatır ve stdio üzerinden JSON-RPC ile iletişim kurar (ayrı daemon/port yoktur). Gelişmiş eylemler imsg launch ve başarılı bir özel API yoklaması gerektirir.
Yanıtlar, tapback'ler, efektler, ekler ve grup yönetimi.
iMessage DM'leri varsayılan olarak eşleştirme modunu kullanır.
Gateway Messages Mac üzerinde çalışmıyorsa bir SSH sarmalayıcısı kullanın.
Tam iMessage alan başvurusu.
Hızlı kurulum
Yerel Mac (hızlı yol)
imsg kurun ve doğrulayın
brew install steipete/tap/imsgimsg rpc --helpimsg launchopenclaw channels status --probeOpenClaw'ı yapılandırın
{channels: {imessage: {enabled: true,cliPath: "/usr/local/bin/imsg",dbPath: "/Users/user/Library/Messages/chat.db",},},}Gateway'i başlatın
openclaw gatewayİlk DM eşleştirmesini onaylayın (varsayılan dmPolicy)
openclaw pairing list imessageopenclaw pairing approve imessage <CODE>Eşleştirme istekleri 1 saat sonra sona erer.
SSH üzerinden uzak Mac
OpenClaw yalnızca stdio uyumlu bir cliPath gerektirir, bu yüzden cliPath değerini uzak bir Mac'e SSH yapan ve imsg çalıştıran bir sarmalayıcı betiğine yönlendirebilirsiniz.
#!/usr/bin/env bashexec ssh -T gateway-host imsg "$@"Ekler etkinleştirildiğinde önerilen yapılandırma:
{channels: {imessage: { enabled: true, cliPath: "~/.openclaw/scripts/imsg-ssh", remoteHost: "user@gateway-host", // used for SCP attachment fetches includeAttachments: true, // Optional: override allowed attachment roots. // Defaults include /Users/*/Library/Messages/Attachments attachmentRoots: ["/Users/*/Library/Messages/Attachments"], remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"],},},}remoteHost ayarlanmadıysa, OpenClaw SSH sarmalayıcı betiğini ayrıştırarak bunu otomatik algılamaya çalışır.
remoteHost, host veya user@host olmalıdır (boşluk veya SSH seçeneği yok).
OpenClaw SCP için katı ana makine anahtarı denetimi kullanır; bu yüzden aktarma ana makinesi anahtarı ~/.ssh/known_hosts içinde zaten bulunmalıdır.
Ek yolları izin verilen köklere göre doğrulanır (attachmentRoots / remoteAttachmentRoots).
Gereksinimler ve izinler (macOS)
imsgçalıştıran Mac üzerinde Messages oturumu açık olmalıdır.- OpenClaw/
imsgçalıştıran süreç bağlamı için Full Disk Access gerekir (Messages DB erişimi). - Messages.app üzerinden ileti göndermek için Automation izni gerekir.
- Gelişmiş eylemler (tepki / düzenleme / göndermeyi geri alma / iş parçacıklı yanıt / efektler / grup işlemleri) için System Integrity Protection devre dışı olmalıdır — aşağıdaki imsg özel API'sini etkinleştirme bölümüne bakın. Temel metin ve medya gönderme/alma onsuz çalışır.
imsg özel API'sini etkinleştirme
imsg iki işletim moduyla gelir:
- Temel mod (varsayılan, SIP değişikliği gerekmez):
sendüzerinden giden metin ve medya, gelen izleme/geçmiş, sohbet listesi. Yeni birbrew install steipete/tap/imsgve yukarıdaki standart macOS izinleriyle kutudan çıktığı gibi elde ettiğiniz budur. - Özel API modu:
imsg, dahiliIMCoreişlevlerini çağırmak içinMessages.appiçine bir yardımcı dylib enjekte eder. Bu,react,edit,unsend,reply(iş parçacıklı),sendWithEffect,renameGroup,setGroupIcon,addParticipant,removeParticipant,leaveGroupve ayrıca yazıyor göstergeleri ile okundu bilgilerini açar.
Bu kanal sayfasının belgelediği gelişmiş eylem yüzeyine ulaşmak için Özel API modu gerekir. imsg README gereksinim konusunda nettir:
read,typing,launch, köprü destekli zengin gönderim, ileti mutasyonu ve sohbet yönetimi gibi gelişmiş özellikler isteğe bağlıdır. SIP'nin devre dışı olmasını veMessages.appiçine bir yardımcı dylib enjekte edilmesini gerektirirler. SIP etkinkenimsg launchenjeksiyonu reddeder.
Yardımcı enjeksiyon tekniği, Messages özel API'lerine ulaşmak için imsg'nin kendi dylib'ini kullanır. OpenClaw iMessage yolunda üçüncü taraf sunucu veya BlueBubbles runtime yoktur.
Kurulum
-
Messages.app çalıştıran Mac üzerinde
imsgkurun (veya yükseltin):bash brew install steipete/tap/imsgimsg --versionimsg status --jsonimsg status --jsonçıktısıbridge_version,rpc_methodsve yöntem başınaselectorsbildirir; böylece başlamadan önce geçerli derlemenin neyi desteklediğini görebilirsiniz. -
System Integrity Protection'ı devre dışı bırakın. Bu macOS sürümüne özeldir, çünkü alttaki Apple gereksinimi işletim sistemine ve donanıma bağlıdır:
- macOS 10.13-10.15 (Sierra-Catalina): Terminal üzerinden Library Validation'ı devre dışı bırakın, Recovery Mode'a yeniden başlatın,
csrutil disableçalıştırın, yeniden başlatın. - macOS 11+ (Big Sur ve sonrası), Intel: Recovery Mode (veya Internet Recovery),
csrutil disable, yeniden başlatın. - macOS 11+, Apple Silicon: Recovery'ye girmek için güç düğmesi başlangıç dizisi; son macOS sürümlerinde Continue'a tıklarken Left Shift tuşunu basılı tutun, ardından
csrutil disable. Sanal makine kurulumları ayrı bir akış izler — önce bir VM anlık görüntüsü alın. - macOS 26 / Tahoe: library-validation ilkeleri ve
imagentözel yetki denetimleri daha da sıkılaştı;imsggüncel kalmak için güncellenmiş bir derleme gerektirebilir. Büyük bir macOS yükseltmesinden sonraimsg launchenjeksiyonu veya belirliselectorsfalse döndürmeye başlarsa, SIP adımının başarılı olduğunu varsaymadan önceimsgsürüm notlarını kontrol edin.
imsg launchçalıştırmadan önce SIP'yi devre dışı bırakmak için Mac'inize yönelik Apple Recovery-mode akışını izleyin. - macOS 10.13-10.15 (Sierra-Catalina): Terminal üzerinden Library Validation'ı devre dışı bırakın, Recovery Mode'a yeniden başlatın,
-
Yardımcıyı enjekte edin. SIP devre dışıyken ve Messages.app oturumu açıkken:
bash imsg launchSIP hâlâ etkinken
imsg launchenjeksiyonu reddeder; bu yüzden bu, 2. adımın uygulandığına dair bir onay işlevi de görür. -
Köprüyü OpenClaw'dan doğrulayın:
bash openclaw channels status --probeiMessage girdisi
worksbildirmelidir veimsg status --json | jq '.selectors'çıktısıretractMessagePart: trueile macOS derlemenizin sunduğu düzenleme / yazıyor / okundu seçicilerini göstermelidir.actions.tsiçindeki OpenClaw Plugin yöntem başına kapılama yalnızca alttaki seçicisitrueolan eylemleri duyurur; bu yüzden aracın araç listesinde gördüğünüz eylem yüzeyi, köprünün bu ana makinede gerçekten yapabildiklerini yansıtır.
openclaw channels status --probe kanalı works olarak bildiriyor ancak belirli eylemler gönderim sırasında "iMessage <action> requires the imsg private API bridge" hatası atıyorsa, imsg launch komutunu yeniden çalıştırın — yardımcı devreden çıkabilir (Messages.app yeniden başlatma, işletim sistemi güncellemesi vb.) ve önbelleğe alınmış available: true durumu, bir sonraki yoklama yenileyene kadar eylemleri duyurmaya devam eder.
SIP'yi devre dışı bırakamadığınızda
SIP'nin devre dışı olması tehdit modeliniz için kabul edilebilir değilse:
imsgtemel moda geri döner — yalnızca metin + medya + alma.- OpenClaw Plugin metin/medya gönderimini ve gelen izlemeyi hâlâ duyurur; yalnızca
react,edit,unsend,reply,sendWithEffectve grup işlemlerini eylem yüzeyinden gizler (yöntem başına yetenek kapısına göre). - Birincil cihazlarınızda SIP'yi etkin tutarken, iMessage iş yükü için SIP kapalı ayrı bir Apple Silicon olmayan Mac (veya ayrılmış bot Mac) çalıştırabilirsiniz. Aşağıdaki Ayrılmış bot macOS kullanıcısı (ayrı iMessage kimliği) bölümüne bakın.
Erişim denetimi ve yönlendirme
DM ilkesi
channels.imessage.dmPolicy doğrudan iletileri denetler:
pairing(varsayılan)allowlistopen(allowFromiçinde"*"bulunmasını gerektirir)disabled
İzin listesi alanı: channels.imessage.allowFrom.
İzin listesi girdileri gönderenleri tanımlamalıdır: tanıtıcılar veya statik gönderen erişim grupları (accessGroup:<name>). chat_id:*, chat_guid:* veya chat_identifier:* gibi sohbet hedefleri için channels.imessage.groupAllowFrom kullanın; sayısal chat_id kayıt anahtarları için channels.imessage.groups kullanın.
Grup ilkesi + bahsetmeler
channels.imessage.groupPolicy grup işlemeyi denetler:
allowlist(yapılandırıldığında varsayılan)opendisabled
Grup gönderen izin listesi: channels.imessage.groupAllowFrom.
groupAllowFrom girdileri statik gönderen erişim gruplarına da başvurabilir (accessGroup:<name>).
Runtime yedeği: groupAllowFrom ayarlanmamışsa, iMessage grup gönderen denetimleri allowFrom kullanır; DM ve grup kabulü farklı olmalıysa groupAllowFrom ayarlayın.
Runtime notu: channels.imessage tamamen eksikse, runtime groupPolicy="allowlist" değerine geri döner ve bir uyarı günlüğe yazar (channels.defaults.groupPolicy ayarlanmış olsa bile).
Gruplar için bahsetme kapılaması:
- iMessage yerel bahsetme meta verisine sahip değildir
- bahsetme algılama regex desenlerini kullanır (
agents.list[].groupChat.mentionPatterns, geri dönüşmessages.groupChat.mentionPatterns) - yapılandırılmış desen yoksa bahsetme kapılaması zorlanamaz
Yetkili göndericilerden gelen denetim komutları gruplarda bahsetme kapılamasını atlayabilir.
Grup başına systemPrompt:
channels.imessage.groups.* altındaki her girdi isteğe bağlı bir systemPrompt dizesi kabul eder. Değer, o gruptaki bir iletiyi işleyen her turda aracının sistem istemine enjekte edilir. Çözümleme, channels.whatsapp.groups tarafından kullanılan grup başına istem çözümlemesini yansıtır:
- Gruba özel sistem istemi (
groups["<chat_id>"].systemPrompt): belirli grup girdisi eşlemde mevcut olduğunda vesystemPromptanahtarı tanımlı olduğunda kullanılır.systemPromptboş bir dizeyse ("") joker bastırılır ve o gruba hiçbir sistem istemi uygulanmaz. - Grup joker sistem istemi (
groups["*"].systemPrompt): belirli grup girdisi eşlemde tamamen yoksa veya mevcut olupsystemPromptanahtarı tanımlamıyorsa kullanılır.
{ channels: { imessage: { groupPolicy: "allowlist", groupAllowFrom: ["+15555550123"], groups: { "*": { systemPrompt: "Use British spelling." }, "8421": { requireMention: true, systemPrompt: "This is the on-call rotation chat. Keep replies under 3 sentences.", }, "9907": { // explicit suppression: the wildcard "Use British spelling." does not apply here systemPrompt: "", }, }, }, },}Grup başına istemler yalnızca grup iletilerine uygulanır — bu kanaldaki doğrudan iletiler etkilenmez.
Oturumlar ve deterministik yanıtlar
- DM'ler doğrudan yönlendirme kullanır; gruplar grup yönlendirmesi kullanır.
- Varsayılan
session.dmScope=mainile iMessage DM'leri aracı ana oturumunda birleştirilir. - Grup oturumları yalıtılır (
agent:<agentId>:imessage:group:<chat_id>). - Yanıtlar, kaynak kanal/hedef meta verileri kullanılarak iMessage'a geri yönlendirilir.
Grup benzeri ileti dizisi davranışı:
Bazı çok katılımcılı iMessage ileti dizileri is_group=false ile gelebilir.
Bu chat_id, channels.imessage.groups altında açıkça yapılandırılmışsa OpenClaw bunu grup trafiği olarak ele alır (grup kapılaması + grup oturumu yalıtımı).
ACP konuşma bağlamaları
Eski iMessage sohbetleri ACP oturumlarına da bağlanabilir.
Hızlı operatör akışı:
- DM veya izin verilen grup sohbetinin içinde
/acp spawn codex --bind herekomutunu çalıştırın. - Aynı iMessage konuşmasındaki gelecekteki iletiler, 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ğlamayı kaldırır.
Yapılandırılmış kalıcı bağlamalar, type: "acp" ve match.channel: "imessage" içeren üst düzey bindings[] girdileri aracılığıyla desteklenir.
match.peer.id şunları kullanabilir:
+15555550123veya[email protected]gibi normalize edilmiş DM tanıtıcısıchat_id:<id>(kararlı grup bağlamaları için önerilir)chat_guid:<guid>chat_identifier:<identifier>
Örnek:
{ agents: { list: [ { id: "codex", runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent" }, }, }, ], }, bindings: [ { type: "acp", agentId: "codex", match: { channel: "imessage", accountId: "default", peer: { kind: "group", id: "chat_id:123" }, }, acp: { label: "codex-group" }, }, ],}Paylaşılan ACP bağlama davranışı için ACP Aracıları bölümüne bakın.
Dağıtım desenleri
Ayrılmış bot macOS kullanıcısı (ayrı iMessage kimliği)
Bot trafiğinin kişisel Messages profilinizden yalıtılması için ayrılmış bir Apple ID ve macOS kullanıcısı kullanın.
Tipik akış:
- Ayrılmış bir macOS kullanıcısı oluşturun/oturum açın.
- Bu kullanıcıda bot Apple ID'siyle Messages'da oturum açın.
- Bu kullanıcıya
imsgkurun. - OpenClaw'ın
imsgkomutunu bu kullanıcı bağlamında çalıştırabilmesi için SSH sarmalayıcısı oluşturun. channels.imessage.accounts.<id>.cliPathve.dbPathdeğerlerini bu kullanıcı profiline yönlendirin.
İlk çalıştırma, bu bot kullanıcı oturumunda GUI onayları (Automation + Full Disk Access) gerektirebilir.
Tailscale üzerinden uzak Mac (örnek)
Yaygın topoloji:
- Gateway Linux/VM üzerinde çalışır
- iMessage +
imsg, tailnet'inizdeki bir Mac üzerinde çalışır cliPathsarmalayıcısıimsgçalıştırmak için SSH kullanırremoteHost, SCP ek getirmelerini etkinleştirir
Örnek:
{ channels: { imessage: { enabled: true, cliPath: "~/.openclaw/scripts/imsg-ssh", remoteHost: "[email protected]", includeAttachments: true, dbPath: "/Users/bot/Library/Messages/chat.db", }, },}#!/usr/bin/env bashexec ssh -T [email protected] imsg "$@"Hem SSH hem de SCP'nin etkileşimsiz olması için SSH anahtarları kullanın.
known_hosts doldurulsun diye önce ana makine anahtarının güvenilir olduğundan emin olun (örneğin ssh [email protected]).
Çok hesaplı desen
iMessage, channels.imessage.accounts altında hesap başına yapılandırmayı destekler.
Her hesap cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, geçmiş ayarları ve ek kök izin listeleri gibi alanları geçersiz kılabilir.
Medya, parçalara ayırma ve teslim hedefleri
Ekler ve medya
- gelen ek alımı varsayılan olarak kapalıdır — fotoğrafları, sesli notları, videoyu ve diğer ekleri aracıya iletmek için
channels.imessage.includeAttachments: trueayarlayın. Bu devre dışıyken, yalnızca ek içeren iMessage iletileri aracıya ulaşmadan önce düşürülür ve hiçInbound messagegünlük satırı üretmeyebilir. remoteHostayarlandığında uzak ek yolları SCP aracılığıyla getirilebilir- ek yolları izin verilen köklerle eşleşmelidir:
channels.imessage.attachmentRoots(yerel)channels.imessage.remoteAttachmentRoots(uzak SCP modu)- varsayılan kök deseni:
/Users/*/Library/Messages/Attachments
- SCP sıkı ana makine anahtarı denetimi kullanır (
StrictHostKeyChecking=yes) - giden medya boyutu
channels.imessage.mediaMaxMbkullanır (varsayılan 16 MB)
Giden parçalara ayırma
- metin parça sınırı:
channels.imessage.textChunkLimit(varsayılan 4000) - parça modu:
channels.imessage.chunkModelength(varsayılan)newline(önce paragraf bölme)
Adresleme biçimleri
Tercih edilen açık hedefler:
chat_id:123(kararlı yönlendirme için önerilir)chat_guid:...chat_identifier:...
Tanıtıcı hedefleri de desteklenir:
imessage:+1555...sms:+1555...[email protected]
imsg chats --limit 20Özel API eylemleri
imsg launch çalışırken ve openclaw channels status --probe privateApi.available: true bildirirken, ileti aracı normal metin gönderimlerine ek olarak iMessage yerel eylemlerini kullanabilir.
{ channels: { imessage: { actions: { reactions: true, edit: true, unsend: true, reply: true, sendWithEffect: true, sendAttachment: true, renameGroup: true, setGroupIcon: true, addParticipant: true, removeParticipant: true, leaveGroup: true, }, }, },}Kullanılabilir eylemler
- react: iMessage tapback'lerini ekleyin/kaldırın (
messageId,emoji,remove). Desteklenen tapback'ler sevgi, beğenme, beğenmeme, gülme, vurgulama ve soru anlamlarına eşlenir. - reply: Mevcut bir iletiye ileti dizili yanıt gönderin (
messageId,textveyamessage, ayrıcachatGuid,chatId,chatIdentifierveyato). - sendWithEffect: Bir iMessage efektiyle metin gönderin (
textveyamessage,effectveyaeffectId). - edit: Desteklenen macOS/özel API sürümlerinde gönderilmiş bir iletiyi düzenleyin (
messageId,textveyanewText). - unsend: Desteklenen macOS/özel API sürümlerinde gönderilmiş bir iletiyi geri çekin (
messageId). - upload-file: Medya/dosya gönderin (
bufferbase64 olarak veya hidrasyon yapılmışmedia/path/filePath,filename, isteğe bağlıasVoice). Eski takma ad:sendAttachment. - renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup: Geçerli hedef bir grup konuşması olduğunda grup sohbetlerini yönetin.
İleti kimlikleri
Gelen iMessage bağlamı, kullanılabilir olduğunda hem kısa MessageSid değerlerini hem de tam ileti GUID'lerini içerir. Kısa kimlikler, son bellek içi yanıt önbelleğiyle sınırlıdır ve kullanılmadan önce geçerli sohbete göre denetlenir. Kısa kimliğin süresi dolmuşsa veya başka bir sohbete aitse tam MessageSidFull ile yeniden deneyin.
Yetenek algılama
OpenClaw, özel API eylemlerini yalnızca önbelleğe alınmış yoklama durumu köprünün kullanılamaz olduğunu söylediğinde gizler. Durum bilinmiyorsa eylemler görünür kalır ve gönderim yoklamaları tembel olarak yapar; böylece ilk eylem, ayrı bir manuel durum yenilemesi olmadan imsg launch sonrasında başarılı olabilir.
Okundu bilgileri ve yazıyor göstergesi
Özel API köprüsü çalışır durumdayken, kabul edilen gelen sohbetler gönderimden önce okundu olarak işaretlenir ve aracı üretirken göndericiye bir yazıyor balonu gösterilir. Okundu işaretlemeyi şununla devre dışı bırakın:
{ channels: { imessage: { sendReadReceipts: false, }, },}Yöntem başına yetenek listesinden önceki eski imsg derlemeleri yazıyor/okundu işlevlerini sessizce kapılayacaktır; OpenClaw eksik okundu bilgisinin nedeni anlaşılabilsin diye yeniden başlatma başına tek seferlik bir uyarı günlüğe yazar.
Gelen tapback'ler
OpenClaw, iMessage tapback'lerine abone olur ve kabul edilen tepkileri normal ileti metni yerine sistem olayları olarak yönlendirir; böylece kullanıcı tapback'i sıradan bir yanıt döngüsünü tetiklemez.
Bildirim modu channels.imessage.reactionNotifications tarafından denetlenir:
"own"(varsayılan): yalnızca kullanıcılar bot tarafından yazılan iletilere tepki verdiğinde bildir."all": yetkili göndericilerden gelen tüm tapback'ler için bildir."off": gelen tapback'leri yoksay.
Hesap başına geçersiz kılmalar channels.imessage.accounts.<id>.reactionNotifications kullanır.
Yapılandırma yazımları
iMessage, varsayılan olarak kanal tarafından başlatılan yapılandırma yazımlarına izin verir (commands.config: true olduğunda /config set|unset için).
Devre dışı bırakma:
{ channels: { imessage: { configWrites: false, }, },}Bölünmüş gönderilen DM'leri birleştirme (tek kompozisyonda komut + URL)
Bir kullanıcı bir komutu ve URL'yi birlikte yazdığında — örn. Dump https://example.com/article — Apple'ın Messages uygulaması gönderimi iki ayrı chat.db satırına böler:
- Bir metin iletisi (
"Dump"). - Ek olarak OG önizleme görselleri içeren bir URL önizleme balonu (
"https://...").
İki satır çoğu kurulumda OpenClaw'a ~0.8-2.0 sn arayla ulaşır. Birleştirme olmadan agent 1. turda komutu tek başına alır, yanıt verir (sık sık "bana URL'yi gönder" der) ve URL'yi ancak 2. turda görür; o noktada komut bağlamı zaten kaybolmuştur. Bu, OpenClaw veya imsg tarafından eklenen bir şey değil, Apple'ın gönderme pipeline'ıdır.
channels.imessage.coalesceSameSenderDms, bir DM'i aynı gönderenden art arda gelen satırları tek bir agent turunda birleştirecek şekilde etkinleştirir. Grup sohbetleri, çok kullanıcılı tur yapısının korunması için mesaj başına iletilmeye devam eder.
Ne zaman etkinleştirilmeli
Şu durumlarda etkinleştirin:
- Tek mesajda
command + payloadbekleyen Skills gönderiyorsanız (dump, paste, save, queue vb.). - Kullanıcılarınız komutların yanında URL'ler, görseller veya uzun içerikler yapıştırıyorsa.
- Eklenen DM tur gecikmesini kabul edebiliyorsanız (aşağıya bakın).
Şu durumlarda devre dışı bırakın:
- Tek kelimelik DM tetikleyicileri için minimum komut gecikmesine ihtiyacınız varsa.
- Tüm akışlarınız payload takipleri olmayan tek seferlik komutlarsa.
Etkinleştirme
{ channels: { imessage: { coalesceSameSenderDms: true, // opt in (default: false) }, },}Bayrak açıkken ve açık bir messages.inbound.byChannel.imessage yokken debounce penceresi 2500 ms'ye genişler (eski varsayılan 0 ms'dir; debounce yoktur). Daha geniş pencere gereklidir çünkü Apple'ın 0.8-2.0 sn'lik bölünmüş gönderim ritmi daha dar bir varsayılana sığmaz.
Pencereyi kendiniz ayarlamak için:
{ messages: { inbound: { byChannel: { // 2500 ms works for most setups; raise to 4000 ms if your Mac is // slow or under memory pressure (observed gap can stretch past 2 s // then). imessage: 2500, }, }, },}Ödünleşimler
- DM mesajları için ek gecikme. Bayrak açıkken her DM (bağımsız denetim komutları ve tek metinli takipler dahil), payload satırı gelme olasılığına karşı gönderilmeden önce debounce penceresine kadar bekler. Grup sohbeti mesajları anında gönderilmeyi korur.
- Birleştirilmiş çıktı sınırlıdır. Birleştirilmiş metin açık bir
…[truncated]işaretçisiyle 4000 karakterde sınırlandırılır; ekler 20'de; kaynak girdileri 10'da sınırlandırılır (bunun ötesinde ilk artı en son korunur). Her kaynak GUID'i, aşağı akış telemetrisi içincoalescedMessageGuidsiçinde izlenir. - Yalnızca DM. Grup sohbetleri mesaj başına göndermeye düşer, böylece birden fazla kişi yazarken bot yanıt vermeye devam eder.
- Etkinleştirmeli, kanal başına. Diğer kanallar (Telegram, WhatsApp, Slack, …) etkilenmez.
channels.bluebubbles.coalesceSameSenderDmsayarlayan eski BlueBubbles yapılandırmaları bu değerichannels.imessage.coalesceSameSenderDmskonumuna taşımalıdır.
Senaryolar ve agent'ın gördükleri
| Kullanıcının oluşturduğu | chat.db üretir |
Bayrak kapalı (varsayılan) | Bayrak açık + 2500 ms pencere |
|---|---|---|---|
Dump https://example.com (tek gönderim) |
~1 sn arayla 2 satır | İki agent turu: yalnızca "Dump", sonra URL | Tek tur: birleştirilmiş metin Dump https://example.com |
Save this 📎image.jpg caption (ek + metin) |
2 satır | İki tur (ek birleştirmede düşer) | Tek tur: metin + görsel korunur |
/status (bağımsız komut) |
1 satır | Anında gönderim | Pencereye kadar bekle, sonra gönder |
| Tek başına yapıştırılmış URL | 1 satır | Anında gönderim | Anında gönderim (kovada yalnızca bir girdi) |
| Metin + URL, dakikalar arayla iki kasıtlı ayrı mesaj olarak gönderildi | Pencere dışında 2 satır | İki tur | İki tur (pencere aralarında sona erer) |
| Hızlı yoğun akış (pencere içinde >10 küçük DM) | N satır | N tur | Tek tur, sınırlı çıktı (ilk + en son, metin/ek sınırları uygulanır) |
| Grup sohbetinde iki kişi yazıyor | M gönderenden N satır | M+ tur (gönderen kovası başına bir) | M+ tur; grup sohbetleri birleştirilmez |
Gateway kapalı kaldıktan sonra arayı kapatma
Gateway çevrimdışıyken (çökme, yeniden başlatma, Mac uykusu, makinenin kapalı olması), Gateway tekrar ayağa kalktığında imsg watch mevcut chat.db durumundan devam eder; boşluk sırasında gelen her şey varsayılan olarak asla görülmez. Catchup, bu mesajları bir sonraki başlangıçta yeniden oynatır, böylece agent gelen trafiği sessizce kaçırmaz.
Catchup varsayılan olarak devre dışıdır. Kanal başına etkinleştirin:
channels: { imessage: { catchup: { enabled: true, // master switch (default: false) maxAgeMinutes: 120, // skip rows older than now - 2h (default: 120, clamp 1..720) perRunLimit: 50, // max rows replayed per startup (default: 50, clamp 1..500) firstRunLookbackMinutes: 30, // first run with no cursor: look back 30 min (default: 30) maxFailureRetries: 10, // give up on a wedged guid after 10 dispatch failures (default: 10) }, },}Nasıl çalışır
monitorIMessageProvider başlangıcı başına bir geçiş, imsg launch hazır → watch.subscribe → performIMessageCatchup → canlı gönderim döngüsü sırasıyla yürütülür. Catchup'ın kendisi, imsg watch tarafından kullanılan aynı JSON-RPC istemcisine karşı chats.list + sohbet başına messages.history kullanır. Catchup geçişi sırasında gelen her şey normal şekilde canlı gönderimden akar; mevcut gelen-dedupe önbelleği, yeniden oynatılan satırlarla olan tüm çakışmaları emer.
Yeniden oynatılan her satır canlı gönderim yolundan (evaluateIMessageInbound + dispatchInboundMessage) geçirilir; bu nedenle allowlist'ler, grup ilkesi, debouncer, echo önbelleği ve okundu bilgileri yeniden oynatılan ve canlı mesajlarda aynı davranır.
İmleç ve yeniden deneme semantiği
Catchup, <openclawStateDir>/imessage/catchup/<account>__<hash>.json konumunda hesap başına bir imleç tutar (OpenClaw durum dizini varsayılan olarak ~/.openclaw olur, OPENCLAW_STATE_DIR ile değiştirilebilir):
{ "lastSeenMs": 1717900800000, "lastSeenRowid": 482910, "updatedAt": 1717900801234, "failureRetries": { "<guid>": 1 }}- İmleç her başarılı gönderimde ilerler ve bir satırın gönderimi hata fırlattığında tutulur; bir sonraki başlangıç aynı satırı tutulan imleçten yeniden dener.
- Aynı
guidiçinmaxFailureRetriesardışık hata fırlatmasından sonra catchup birwarnkaydeder ve sonraki başlangıçların ilerleyebilmesi için imleci takılmış mesajın ötesine zorla ilerletir. - Zaten vazgeçilmiş guid'ler sonraki çalıştırmalarda görüldüğünde atlanır (gönderim denemesi yapılmaz) ve çalışma özetinde
skippedGivenUpaltında sayılır.
Operatöre görünen sinyaller
imessage catchup: replayed=N skippedFromMe=… skippedGivenUp=… failed=… givenUp=… fetchedCount=…imessage catchup: giving up on guid=<guid> after <N> failures; advancing cursor past itimessage catchup: fetched <X> rows across chats, capped to perRunLimit=<Y>Bir WARN ... capped to perRunLimit satırı, tek bir başlangıcın tüm birikmiş işi boşaltmadığı anlamına gelir. Boşluklarınız düzenli olarak varsayılan 50 satırlık geçişi aşıyorsa perRunLimit değerini artırın (maks. 500).
Ne zaman kapalı bırakılmalı
- Gateway watchdog otomatik yeniden başlatma ile sürekli çalışıyorsa ve boşluklar her zaman birkaç saniyeden kısaysa; kapalı varsayılanı uygundur.
- DM hacmi düşükse ve kaçırılan mesajlar agent davranışını değiştirmeyecekse;
firstRunLookbackMinutesbaşlangıç penceresi ilk etkinleştirmede beklenmedik eski bağlamı gönderebilir.
Catchup'ı açtığınızda, imleç olmayan ilk başlangıç yalnızca firstRunLookbackMinutes kadar geriye bakar (varsayılan 30 dk), tam maxAgeMinutes penceresine değil; bu, etkinleştirme öncesi mesajların uzun bir geçmişini yeniden oynatmayı önler.
Sorun giderme
imsg bulunamadı veya RPC desteklenmiyor
İkili dosyayı ve RPC desteğini doğrulayın:
imsg rpc --helpimsg status --jsonopenclaw channels status --probeProbe RPC'nin desteklenmediğini bildirirse imsg'yi güncelleyin. Özel API eylemleri kullanılamıyorsa oturum açmış macOS kullanıcı oturumunda imsg launch çalıştırın ve yeniden probe edin. Gateway macOS üzerinde çalışmıyorsa varsayılan yerel imsg yolu yerine yukarıdaki SSH üzerinden Uzak Mac kurulumunu kullanın.
Gateway macOS üzerinde çalışmıyor
Varsayılan cliPath: "imsg", Messages'ta oturum açılmış Mac üzerinde çalışmalıdır. Linux veya Windows üzerinde channels.imessage.cliPath değerini o Mac'e SSH yapan ve imsg "$@" çalıştıran bir sarmalayıcı betiğe ayarlayın.
#!/usr/bin/env bashexec ssh -T messages-mac imsg "$@"Sonra şunu çalıştırın:
openclaw channels status --probe --channel imessageDM'ler yok sayılıyor
Kontrol edin:
channels.imessage.dmPolicychannels.imessage.allowFrom- eşleştirme onayları (
openclaw pairing list imessage)
Grup mesajları yok sayılıyor
Kontrol edin:
channels.imessage.groupPolicychannels.imessage.groupAllowFromchannels.imessage.groupsallowlist davranışı- bahsetme kalıbı yapılandırması (
agents.list[].groupChat.mentionPatterns)
Uzak ekler başarısız oluyor
Kontrol edin:
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- Gateway ana makinesinden SSH/SCP anahtar kimlik doğrulaması
- Gateway ana makinesinde
~/.ssh/known_hostsiçinde host anahtarının bulunması - Messages çalıştıran Mac üzerinde uzak yolun okunabilirliği
macOS izin istemleri kaçırıldı
Aynı kullanıcı/oturum bağlamında etkileşimli bir GUI terminalinde yeniden çalıştırın ve istemleri onaylayın:
imsg chats --limit 1imsg send <handle> "test"OpenClaw/imsg çalıştıran işlem bağlamı için Full Disk Access + Automation izinlerinin verildiğini doğrulayın.
Yapılandırma referansı işaretçileri
İlgili
- Kanallara Genel Bakış — desteklenen tüm kanallar
- BlueBubbles'ın kaldırılması ve imsg iMessage yolu — duyuru ve geçiş özeti
- BlueBubbles'tan geliyorsanız — yapılandırma çeviri tablosu ve adım adım geçiş
- 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