imsg pada host Messages macOS yang sama dan telah masuk. Jika Gateway Anda berjalan di tempat lain, arahkan channels.imessage.cliPath ke pembungkus SSH transparan yang menjalankan imsg di Mac.Pemulihan pesan masuk berlangsung otomatis. Setelah bridge atau Gateway dimulai ulang, iMessage memutar ulang pesan yang terlewat selama tidak aktif dan menekan “bom backlog” usang yang dapat dikirim sekaligus oleh Apple setelah pemulihan Push, serta melakukan deduplikasi agar tidak ada yang dikirim dua kali. Tidak ada konfigurasi yang perlu diaktifkan — lihat Pemulihan pesan masuk setelah bridge atau Gateway dimulai ulang.imsg rpc dan berkomunikasi menggunakan JSON-RPC melalui stdio — tanpa daemon atau port terpisah. Mode API privat sangat disarankan untuk kanal iMessage yang lengkap; balasan, tapback, efek, jajak pendapat, balasan lampiran, dan tindakan grup memerlukan imsg launch serta pemeriksaan API privat yang berhasil.
Untuk penyiapan lokal yang umum, penyiapan OpenClaw dapat menawarkan instalasi atau pembaruan Homebrew yang dikonfirmasi pengguna untuk imsg di Mac Messages yang telah masuk. Penyiapan manual dan topologi pembungkus SSH tetap dikelola operator: instal atau perbarui imsg dalam konteks pengguna yang sama dengan yang akan menjalankan Gateway atau pembungkus.
Tindakan API privat
Pemasangan
Mac jarak jauh
Referensi konfigurasi
Penyiapan cepat
- Mac lokal (jalur cepat)
- Mac jarak jauh melalui SSH
Instal dan verifikasi imsg
imsg tidak tersedia, wisaya dapat meminta konfirmasi untuk menginstal steipete/tap/imsg melalui Homebrew. Jika mendeteksi imsg yang dikelola Homebrew, wisaya dapat meminta konfirmasi untuk menginstal ulang atau memperbaruinya. Pembungkus cliPath khusus tidak diubah.Konfigurasikan OpenClaw
Mulai Gateway
Setujui pemasangan DM pertama (dmPolicy default)
Persyaratan dan izin (macOS)
- Messages harus dalam keadaan masuk di Mac yang menjalankan
imsg. - Full Disk Access diperlukan untuk konteks proses yang menjalankan OpenClaw/
imsg(akses DB Messages). - Izin Automation diperlukan untuk mengirim pesan melalui Messages.app.
- Untuk tindakan lanjutan (bereaksi / mengedit / membatalkan pengiriman / balasan berutas / efek / jajak pendapat / operasi grup), System Integrity Protection harus dinonaktifkan — lihat Mengaktifkan API privat imsg. Pengiriman dan penerimaan teks serta media dasar berfungsi tanpanya.
Pengiriman melalui pembungkus SSH gagal dengan AppleEvents -1743
Pengiriman melalui pembungkus SSH gagal dengan AppleEvents -1743
channels status --probe, dan memproses pesan masuk sementara pengiriman keluar masih gagal dengan kesalahan otorisasi AppleEvents:/usr/libexec/sshd-keygen-wrapper, bukan proses imsg atau shell lokal, macOS mungkin tidak menampilkan pengalih Messages yang dapat digunakan untuk klien sisi server SSH tersebut:tccutil reset AppleEvents atau menjalankan ulang imsg send melalui pembungkus SSH yang sama mungkin tetap gagal karena konteks proses yang memerlukan Automation Messages adalah pembungkus SSH, bukan aplikasi yang dapat diberi izin oleh UI.Sebagai gantinya, gunakan salah satu konteks proses imsg yang didukung:- Jalankan Gateway, atau setidaknya bridge
imsg, dalam sesi lokal pengguna Messages yang telah masuk. - Mulai Gateway menggunakan LaunchAgent untuk pengguna tersebut setelah memberikan Full Disk Access dan Automation dari sesi yang sama.
- Jika Anda mempertahankan topologi SSH dua pengguna, pastikan pengiriman keluar
imsg sendyang sebenarnya berhasil melalui pembungkus yang tepat sebelum mengaktifkan kanal. Jika Automation tidak dapat diberikan, konfigurasikan ulang ke penyiapanimsgsatu pengguna alih-alih mengandalkan pembungkus SSH untuk pengiriman.
Mengaktifkan API privat imsg
imsg disertakan dalam dua mode operasional. Untuk OpenClaw, mode API Privat merupakan penyiapan yang disarankan karena memberikan kanal tindakan native iMessage yang diharapkan pengguna. Mode dasar tetap berguna untuk instalasi berisiko rendah, verifikasi awal, atau host tempat SIP tidak dapat dinonaktifkan.
- Mode dasar (default, tidak memerlukan perubahan SIP): teks dan media keluar melalui
send, pemantauan/riwayat pesan masuk, dan daftar obrolan. Inilah yang langsung tersedia daribrew install steipete/tap/imsgbaru beserta izin macOS standar di atas. - Mode API privat:
imsgmenyuntikkan dylib pembantu ke dalamMessages.appuntuk memanggil fungsi internalIMCore. Ini membukareact,edit,unsend,reply(berutas),sendWithEffect,polldanpoll-vote(jajak pendapat native Messages),renameGroup,setGroupIcon,addParticipant,removeParticipant,leaveGroup, serta indikator pengetikan dan tanda terima baca.
imsg menyatakan persyaratan tersebut secara eksplisit:
Fitur lanjutan sepertiTeknik penyuntikan pembantu menggunakan dylib milikread,typing,launch, pengiriman kaya yang didukung bridge, mutasi pesan, dan pengelolaan obrolan bersifat opsional. Fitur tersebut memerlukan SIP dinonaktifkan dan dylib pembantu disuntikkan ke dalamMessages.app.imsg launchmenolak melakukan penyuntikan ketika SIP diaktifkan.
imsg sendiri untuk mengakses API privat Messages. Tidak ada server pihak ketiga atau runtime BlueBubbles dalam jalur iMessage OpenClaw.
Penyiapan
-
Instal (atau tingkatkan)
imsgdi Mac yang menjalankan Messages.app:Outputimsg status --jsonmelaporkanbridge_version,rpc_methods, danselectorsper metode agar Anda dapat melihat apa yang didukung build saat ini sebelum memulai. -
Nonaktifkan System Integrity Protection, dan (pada macOS modern) Library Validation. Menginjeksikan dylib pembantu non-Apple ke dalam
Messages.appyang ditandatangani Apple mengharuskan SIP dinonaktifkan dan validasi pustaka dilonggarkan. Langkah SIP dalam mode Pemulihan bergantung pada versi macOS:- macOS 10.13-10.15 (Sierra-Catalina): nonaktifkan Library Validation melalui Terminal, mulai ulang ke Mode Pemulihan, jalankan
csrutil disable, lalu mulai ulang. - macOS 11+ (Big Sur dan yang lebih baru), Intel: masuk ke Mode Pemulihan (atau Pemulihan Internet), jalankan
csrutil disable, lalu mulai ulang. - macOS 11+, Apple Silicon: gunakan urutan penyalaan dengan tombol daya untuk masuk ke Pemulihan; pada versi macOS terbaru, tahan tombol Left Shift saat mengeklik Continue, lalu jalankan
csrutil disable. Penyiapan mesin virtual mengikuti alur terpisah, jadi buat snapshot VM terlebih dahulu.
csrutil disablesaja biasanya tidak cukup. Apple masih memberlakukan validasi pustaka terhadapMessages.appsebagai biner platform, sehingga pembantu yang ditandatangani secara ad hoc ditolak (Library Validation failed: ... platform binary, but mapped file is not) meskipun SIP dinonaktifkan. Setelah menonaktifkan SIP, nonaktifkan juga validasi pustaka dan mulai ulang:macOS 26 (Tahoe), diverifikasi pada 26.5.1: SIP yang dinonaktifkan ditambah perintahDisableLibraryValidationdi atas sudah cukup untuk menginjeksikan pembantu pada versi 26.0 hingga 26.5.x. Tidak diperlukan boot-args. Plist tersebut merupakan faktor penentu dan langkah yang paling sering terlewat saat injeksi gagal di Tahoe:- Dengan plist:
imsg launchmelakukan injeksi danimsg statusmelaporkanadvanced_features: true. - Tanpa plist (meskipun SIP dinonaktifkan):
imsg launchgagal denganFailed to launch: Timeout waiting for Messages.app to initialize. AMFI menolak pembantu ad hoc saat pemuatan, sehingga bridge tidak pernah siap dan peluncuran kehabisan waktu. Kehabisan waktu tersebut adalah gejala yang paling sering ditemui di Tahoe; solusinya adalah plist di atas, bukan tindakan yang lebih drastis.
imsg launchatauselectorstertentu mulai mengembalikan false setelah peningkatan macOS, pemeriksaan ini biasanya menjadi penyebabnya. Periksa status SIP dan validasi pustaka sebelum menganggap langkah SIP itu sendiri gagal. Jika pengaturan tersebut sudah benar dan bridge masih tidak dapat melakukan injeksi, kumpulkanimsg status --jsonbeserta keluaranimsg launchdan laporkan ke proyekimsg, alih-alih melemahkan kontrol keamanan tambahan di seluruh sistem. - macOS 10.13-10.15 (Sierra-Catalina): nonaktifkan Library Validation melalui Terminal, mulai ulang ke Mode Pemulihan, jalankan
-
Injeksikan pembantu. Dengan SIP dinonaktifkan dan Messages.app telah masuk:
imsg launchmenolak melakukan injeksi saat SIP masih diaktifkan, sehingga tindakan ini juga berfungsi sebagai konfirmasi bahwa langkah 2 telah diterapkan. -
Verifikasi bridge dari OpenClaw:
Entri iMessage seharusnya melaporkan
works, danimsg status --json | jq '{rpc_methods, selectors}'seharusnya menampilkan kemampuan yang disediakan oleh build macOS Anda. Pembuatan jajak pendapat memerlukanselectors.pollPayloadMessage; pemungutan suara memerlukanselectors.pollVoteMessagedan metode RPCpoll.vote. Plugin OpenClaw hanya mengiklankan tindakan yang didukung oleh pemeriksaan tersimpan dalam cache, sedangkan cache kosong tetap optimistis dan melakukan pemeriksaan pada pengiriman pertama.
openclaw channels status --probe melaporkan kanal sebagai works, tetapi tindakan tertentu memunculkan “iMessage <action> requires the imsg private API bridge” saat dikirim, jalankan kembali imsg launch — pembantu dapat terlepas (Messages.app dimulai ulang, pembaruan OS, dan sebagainya) dan status available: true yang tersimpan dalam cache akan terus mengiklankan tindakan hingga pemeriksaan berikutnya memperbaruinya.
Saat SIP tetap diaktifkan
Jika menonaktifkan SIP tidak dapat diterima untuk model ancaman Anda:imsgkembali ke mode dasar — hanya teks + media + penerimaan.- Plugin OpenClaw tetap mengiklankan pengiriman teks/media dan pemantauan pesan masuk; Plugin menyembunyikan
react,edit,unsend,reply,sendWithEffect, dan operasi grup dari permukaan tindakan (sesuai pemeriksaan kemampuan per metode). - Anda dapat menjalankan Mac non-Apple-Silicon terpisah (atau Mac bot khusus) dengan SIP dinonaktifkan untuk beban kerja iMessage, sambil tetap mengaktifkan SIP pada perangkat utama Anda. Lihat Pengguna macOS bot khusus (identitas iMessage terpisah) di bawah.
Kontrol akses dan perutean
- Kebijakan DM
- Kebijakan grup + penyebutan
- Sesi dan balasan deterministik
channels.imessage.dmPolicy mengontrol pesan langsung:pairing(bawaan)allowlist(memerlukan setidaknya satu entriallowFrom)open(mengharuskanallowFrommenyertakan"*")disabled
channels.imessage.allowFrom.Entri daftar izin harus mengidentifikasi pengirim: handle atau grup akses pengirim statis (accessGroup:<name>). Gunakan channels.imessage.groupAllowFrom untuk target percakapan seperti chat_id:*, chat_guid:*, atau chat_identifier:*; gunakan channels.imessage.groups untuk kunci registri chat_id numerik.Pengikatan percakapan ACP
Percakapan iMessage dapat diikat ke sesi ACP. Alur cepat operator:- Jalankan
/acp spawn codex --bind heredi dalam DM atau percakapan grup yang diizinkan. - Pesan berikutnya dalam percakapan iMessage yang sama dirutekan ke sesi ACP yang dibuat.
/newdan/resetmengatur ulang sesi ACP terikat yang sama tanpa menggantinya./acp closemenutup sesi ACP dan menghapus pengikatannya.
bindings[] tingkat atas dengan type: "acp" dan match.channel: "imessage".
match.peer.id dapat menggunakan:
- handle DM yang dinormalisasi seperti
+15555550123atauuser@example.com chat_id:<id>(disarankan untuk pengikatan grup yang stabil)chat_guid:<guid>chat_identifier:<identifier>
Pola penerapan
Pengguna macOS bot khusus (identitas iMessage terpisah)
Pengguna macOS bot khusus (identitas iMessage terpisah)
- Buat/masuk ke pengguna macOS khusus.
- Masuk ke Messages dengan Apple ID bot pada pengguna tersebut.
- Instal
imsgpada pengguna tersebut. - Buat pembungkus SSH agar OpenClaw dapat menjalankan
imsgdalam konteks pengguna tersebut. - Arahkan
channels.imessage.accounts.<id>.cliPathdan.dbPathke profil pengguna tersebut.
Mac jarak jauh melalui Tailscale (contoh)
Mac jarak jauh melalui Tailscale (contoh)
- gateway berjalan di Linux/VM
- iMessage +
imsgberjalan di Mac dalam tailnet Anda - pembungkus
cliPathmenggunakan SSH untuk menjalankanimsg remoteHostmengaktifkan pengambilan lampiran melalui SCP
ssh bot@mac-mini.tailnet-1234.ts.net) agar known_hosts terisi.Pola multiakun
Pola multiakun
channels.imessage.accounts.Setiap akun dapat mengganti bidang seperti cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, pengaturan riwayat, dan daftar izin root lampiran.Riwayat pesan langsung
Riwayat pesan langsung
channels.imessage.dmHistoryLimit untuk mengisi sesi pesan langsung baru dengan riwayat imsg terbaru yang telah didekode untuk percakapan tersebut. Gunakan channels.imessage.dms["<sender>"].historyLimit untuk penggantian per pengirim, termasuk 0 guna menonaktifkan riwayat bagi seorang pengirim.Riwayat DM iMessage diambil sesuai permintaan dari imsg. Membiarkan dmHistoryLimit tidak diatur akan menonaktifkan pengisian riwayat DM global, tetapi nilai positif channels.imessage.dms["<sender>"].historyLimit per pengirim tetap mengaktifkan pengisian bagi pengirim tersebut.Media, pemenggalan, dan target pengiriman
Lampiran dan media
Lampiran dan media
- penyerapan lampiran masuk dinonaktifkan secara default — atur
channels.imessage.includeAttachments: trueuntuk meneruskan foto, memo suara, video, dan lampiran lainnya ke agen. Jika dinonaktifkan, iMessage yang hanya berisi lampiran dibuang sebelum mencapai agen dan mungkin sama sekali tidak menghasilkan baris logInbound message. - jalur lampiran jarak jauh dapat diambil melalui SCP ketika
remoteHostdiatur - jalur lampiran harus cocok dengan root yang diizinkan:
channels.imessage.attachmentRoots(lokal)channels.imessage.remoteAttachmentRoots(mode SCP jarak jauh)- root yang dikonfigurasi memperluas pola root default
/Users/*/Library/Messages/Attachments(digabungkan, bukan diganti)
- SCP menggunakan pemeriksaan kunci host yang ketat (
StrictHostKeyChecking=yes) - ukuran media keluar menggunakan
channels.imessage.mediaMaxMb(default 16 MB)
Teks keluar dan pemenggalan
Teks keluar dan pemenggalan
- batas potongan teks:
channels.imessage.textChunkLimit(default 4000) - mode pemenggalan:
channels.imessage.streaming.chunkModelength(default)newline(pemisahan dengan mengutamakan paragraf)
- tebal/miring/garis bawah/coret markdown keluar dikonversi menjadi teks bergaya native (penerima macOS 15+ merender gaya tersebut; penerima versi lama melihat teks biasa tanpa penanda); tabel markdown dikonversi sesuai mode tabel markdown saluran
channels.imessage.sendTransport(autodefault,bridge,applescript) memilih caraimsgmengirim pesan
Format pengalamatan
Format pengalamatan
chat_id:123(disarankan untuk perutean yang stabil)chat_guid:...chat_identifier:...
imessage:+1555...sms:+1555...user@example.com
Tindakan API privat
Ketikaimsg launch berjalan dan openclaw channels status --probe melaporkan privateApi.available: true, alat pesan dapat menggunakan tindakan native iMessage selain pengiriman teks biasa.
Semua tindakan diaktifkan secara default; gunakan channels.imessage.actions untuk menonaktifkan tindakan tertentu:
Tindakan yang tersedia
Tindakan yang tersedia
- react: Menambahkan/menghapus tapback iMessage (
messageId,emoji,remove). Tapback yang didukung dipetakan ke cinta, suka, tidak suka, tertawa, penekanan, dan pertanyaan. Menghapus tanpa emoji akan menghapus tapback apa pun yang telah diatur. - reply: Mengirim balasan berutas ke pesan yang ada (
messageId,textataumessage, ditambahchatGuid,chatId,chatIdentifier, atauto). Balasan dengan lampiran juga memerlukan buildimsgyangsend-rich-nya mendukung--file. - sendWithEffect: Mengirim teks dengan efek iMessage (
textataumessage,effectataueffectId). Nama pendek: slam, loud, gentle, invisibleink, confetti, lasers, fireworks, balloon, heart, echo, happybirthday, shootingstar, sparkles, spotlight. - edit: Mengedit pesan terkirim pada versi macOS/API privat yang didukung (
messageId,textataunewText). Hanya pesan yang dikirim oleh gateway itu sendiri yang dapat diedit. - unsend: Menarik kembali pesan terkirim pada versi macOS/API privat yang didukung (
messageId). Hanya pesan yang dikirim oleh gateway itu sendiri yang dapat ditarik kembali. - upload-file: Mengirim media/berkas (
buffersebagai base64 ataumedia/path/filePathyang telah dihidrasi,filename,asVoiceopsional). Alias lama:sendAttachment. - renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup: Mengelola obrolan grup ketika target saat ini merupakan percakapan grup. Tindakan ini mengubah identitas Messages milik host, sehingga memerlukan pengirim pemilik atau klien Gateway
operator.admin. - poll: Membuat jajak pendapat native Apple Messages (
pollQuestion,pollOptionyang diulang 2 hingga 12 kali, ditambahchatGuid,chatId,chatIdentifier, atauto). Penerima di iOS/iPadOS/macOS 26+ dapat melihat dan memberikan suara secara native; versi OS lama menerima teks pengganti “Mengirim jajak pendapat”. Memerlukanselectors.pollPayloadMessage. - poll-vote: Memberikan suara pada jajak pendapat yang ada (
pollIdataumessageId, ditambah tepat salah satu daripollOptionIndex,pollOptionId, ataupollOptionText). Memerlukanselectors.pollVoteMessagedan metode RPCpoll.vote.
poll-vote.ID pesan
ID pesan
MessageSid dan GUID pesan lengkap (MessageSidFull) jika tersedia. ID pendek terbatas pada cache balasan terbaru berbasis SQLite dan diperiksa terhadap obrolan saat ini sebelum digunakan. Jika ID pendek kedaluwarsa, coba lagi dengan MessageSidFull-nya sambil menargetkan percakapan yang menyediakannya. ID lengkap tidak melewati pengikatan percakapan atau akun, jadi ganti ID dari obrolan lain dengan ID dari target saat ini. Panggilan terdelegasi jarak jauh dapat menolak ID lengkap yang kedaluwarsa ketika bukti percakapan saat ini tidak tersedia.Deteksi kapabilitas
Deteksi kapabilitas
imsg launch tanpa penyegaran status manual terpisah.Tanda dibaca dan indikator mengetik
Tanda dibaca dan indikator mengetik
imsg lama yang dibuat sebelum daftar kapabilitas per metode secara diam-diam menonaktifkan indikator mengetik/tanda dibaca; OpenClaw mencatat peringatan satu kali per mulai ulang agar tanda dibaca yang hilang dapat diketahui penyebabnya.Tapback masuk
Tapback masuk
channels.imessage.reactionNotifications:"own"(default): beri tahu hanya ketika pengguna bereaksi terhadap pesan yang dibuat bot."all": beri tahu untuk semua tapback masuk dari pengirim yang diotorisasi."off": abaikan tapback masuk.
channels.imessage.accounts.<id>.reactionNotifications.Reaksi persetujuan (👍 / 👎)
Reaksi persetujuan (👍 / 👎)
approvals.exec.enabled atau approvals.plugin.enabled bernilai true dan permintaan dirutekan ke iMessage, gateway mengirimkan perintah persetujuan secara native dan menerima tapback untuk menyelesaikannya:👍(tapback Suka) →allow-once👎(tapback Tidak Suka) →denyallow-alwaystetap menjadi alternatif manual: kirim/approve <id> allow-alwayssebagai balasan biasa.
channels.imessage.allowFrom (atau channels.imessage.accounts.<id>.allowFrom); tambahkan nomor telepon pengguna dalam format E.164 atau email Apple ID mereka (target obrolan seperti chat_id:* bukan entri pemberi persetujuan yang valid). Entri wildcard "*" diterapkan tetapi memungkinkan pengirim mana pun untuk menyetujui; daftar pemberi persetujuan kosong sepenuhnya menonaktifkan pintasan reaksi. Pintasan reaksi sengaja melewati reactionNotifications, dmPolicy, dan groupAllowFrom karena daftar izin pemberi persetujuan eksplisit adalah satu-satunya gerbang yang relevan untuk penyelesaian persetujuan.Otorisasi perintah teks /approve mengikuti daftar yang sama: ketika channels.imessage.allowFrom tidak kosong, /approve <id> <decision> diotorisasi berdasarkan daftar pemberi persetujuan tersebut (bukan daftar izin DM yang lebih luas), dan pengirim yang diizinkan dalam daftar izin DM tetapi tidak tercantum di allowFrom menerima penolakan eksplisit. Ketika allowFrom kosong, alternatif obrolan yang sama tetap berlaku dan /approve mengotorisasi siapa pun yang diizinkan oleh daftar izin DM. Tambahkan setiap operator yang harus dapat menyetujui — melalui /approve atau melalui reaksi — ke allowFrom.Catatan operator:- Pengikatan reaksi disimpan baik di memori maupun di penyimpanan persisten berkunci milik Gateway (TTL disesuaikan dengan masa berlaku persetujuan), dan Gateway juga melakukan polling terhadap prompt yang tertunda untuk mencari tapback, sehingga tapback yang masuk sesaat setelah Gateway dimulai ulang tetap menyelesaikan persetujuan.
- Tapback
is_from_me=truemilik operator sendiri (misalnya dari perangkat Apple yang dipasangkan) menyelesaikan persetujuan ketika handle tersebut merupakan pemberi persetujuan yang ditentukan secara eksplisit. - Prompt persetujuan diarahkan ke percakapan grup hanya ketika pemberi persetujuan eksplisit dikonfigurasi; jika tidak, setiap anggota grup dapat menyetujuinya.
- Tapback bergaya teks lama (teks biasa
Liked "…"dari klien Apple yang sangat lama) tidak dapat menyelesaikan persetujuan karena tidak membawa GUID pesan; penyelesaian reaksi memerlukan metadata tapback terstruktur yang dipancarkan oleh klien macOS / iOS saat ini.
Reaksi pertanyaan (1️⃣ / 2️⃣ / 3️⃣ / 4️⃣)
Reaksi pertanyaan (1️⃣ / 2️⃣ / 3️⃣ / 4️⃣)
ask_user dengan satu pertanyaan nonrahasia berjenis pilihan tunggal dan satu hingga empat opsi, OpenClaw menambahkan pilihan emoji bernomor. Berikan reaksi pada prompt yang dikirim dengan nomor yang sesuai untuk menjawabnya. Reaksi tersebut harus membawa GUID stabil dari pesan yang dibuat oleh bot; OpenClaw kemudian memetakan nomor tersebut ke opsi kanonis melalui Gateway. Ketukan usang atau duplikat diabaikan.Prompt dengan beberapa pertanyaan, beberapa pilihan, dan teks bebas tetap hanya dapat dijawab melalui balasan teks. Reaksi pertanyaan mengikuti aturan penerimaan DM/grup iMessage yang normal. Reaksi tersebut dikenali bahkan ketika reactionNotifications adalah "off", tanpa mengubah reaksi yang tidak terkait menjadi peristiwa agen.Penulisan konfigurasi
iMessage secara default mengizinkan penulisan konfigurasi yang dimulai oleh saluran (untuk/config set|unset ketika commands.config: true).
Nonaktifkan:
Menggabungkan DM yang terkirim terpisah (perintah + URL dalam satu komposisi)
Ketika pengguna mengetik perintah dan URL secara bersamaan — misalnyaDump https://example.com/article — aplikasi Messages milik Apple membagi pengiriman menjadi dua baris chat.db yang terpisah:
- Pesan teks (
"Dump"). - Balon pratinjau URL (
"https://...") dengan gambar pratinjau OG sebagai lampiran.
imsg.
channels.imessage.coalesceSameSenderDms mengikutsertakan DM dalam penyanggaan baris berurutan dari pengirim yang sama. Ketika imsg mengekspos penanda struktural pratinjau URL balloon_bundle_id: "com.apple.messages.URLBalloonProvider" pada salah satu baris sumber, OpenClaw hanya menggabungkan pengiriman terpisah yang sebenarnya dan mempertahankan baris lain yang disangga sebagai giliran terpisah. Pada build imsg lama yang sama sekali tidak memancarkan metadata balon, OpenClaw tidak dapat membedakan pengiriman terpisah dari pengiriman yang berbeda, sehingga kembali menggabungkan kumpulan tersebut. Hal ini mempertahankan perilaku sebelum adanya metadata, alih-alih meregresikan pengiriman terpisah Dump <url> menjadi dua giliran. Obrolan grup tetap dikirim per pesan agar struktur giliran beberapa pengguna tetap dipertahankan.
- Kapan perlu diaktifkan
- Mengaktifkan
- Konsekuensi
- Anda menyediakan Skills yang mengharapkan
command + payloaddalam satu pesan (dump, tempel, simpan, antrekan, dan sebagainya). - Pengguna Anda menempelkan URL bersama perintah.
- Anda dapat menerima latensi tambahan pada giliran DM (lihat di bawah).
- Anda memerlukan latensi perintah minimum untuk pemicu DM satu kata.
- Semua alur Anda berupa perintah sekali jalan tanpa muatan tindak lanjut.
Skenario dan apa yang dilihat agen
Kolom “Flag aktif” menunjukkan perilaku pada buildimsg yang memancarkan balloon_bundle_id. Pada build imsg lama yang sama sekali tidak memancarkan metadata balon, baris di bawah yang ditandai “Dua giliran” / “N giliran” akan beralih ke penggabungan lama (satu giliran): OpenClaw secara struktural tidak dapat membedakan pengiriman terpisah dari pengiriman yang berbeda, sehingga mempertahankan penggabungan sebelum adanya metadata. Pemisahan yang presisi diaktifkan setelah build memancarkan metadata balon.
Pemulihan masuk setelah bridge atau Gateway dimulai ulang
iMessage memulihkan pesan yang terlewat saat Gateway tidak aktif, sekaligus mencegah “bom backlog” usang yang dapat dikirim Apple setelah pemulihan Push. Perilaku default ini selalu aktif dan dibangun berdasarkan ingress tahan lama serta pembatas usia.- Perlindungan replay tahan lama. Sebelum memajukan kursor pemulihan, OpenClaw mencatat setiap baris mentah dalam antrean ingress SQLite bersama menggunakan GUID Apple-nya sebagai ID peristiwa. Baris yang selesai meninggalkan tombstone selama sekitar 4 jam, dengan batas 10,000 entri, sehingga replay dengan GUID yang sama dibuang bahkan setelah proses dimulai ulang. Baris yang tertunda tetap dapat dipulihkan hingga pengiriman mengadopsinya.
- Pemulihan waktu henti. Saat dimulai, monitor mengingat rowid baris
chat.dbterakhir yang diterima secara tahan lama (kursor per akun yang dipersistenkan) dan meneruskannya keimsg watch.subscribesebagaisince_rowid, sehingga imsg memutar ulang baris yang belum dicatat lalu mengikuti data langsung. Baris yang dicatat sebelum crash dilanjutkan dari SQLite. Replay dibatasi pada 500 baris terbaru dan pesan yang berusia hingga ~2 jam, sedangkan tombstone GUID membuang segala sesuatu yang telah ditangani. - Pembatas usia backlog usang. Baris di atas batas awal benar-benar langsung; baris dengan tanggal pengiriman lebih dari ~15 menit sebelum waktu kedatangannya dianggap sebagai backlog hasil flush Push dan dicegah. Baris yang diputar ulang (pada atau di bawah batas) menggunakan jendela pemulihan yang lebih lebar, sehingga pesan yang baru saja terlewat dikirimkan sedangkan riwayat lama tidak.
cliPath lokal maupun jarak jauh karena replay since_rowid berjalan melalui koneksi RPC imsg yang sama. Perbedaannya terletak pada jendela: ketika Gateway dapat membaca chat.db (lokal), Gateway menetapkan batas rowid awal, membatasi rentang replay, dan mengirimkan pesan yang terlewat hingga sekitar beberapa jam sebelumnya. Melalui cliPath SSH jarak jauh, Gateway tidak dapat membaca basis data, sehingga replay tidak dibatasi dan setiap baris menggunakan pembatas usia langsung — pesan yang baru saja terlewat tetap dipulihkan dan backlog lama tetap dicegah, hanya saja dengan jendela langsung yang lebih sempit. Jalankan Gateway pada Mac yang menjalankan Messages untuk mendapatkan jendela pemulihan yang lebih lebar.
Sinyal yang terlihat oleh operator
Backlog yang dicegah dicatat pada level default dan tidak pernah dibuang secara diam-diam (flagrecovery menunjukkan jendela yang diterapkan):
Migrasi
channels.imessage.catchup.* tidak digunakan lagi — pemulihan waktu henti berjalan otomatis dan tidak memerlukan konfigurasi untuk penyiapan baru. Konfigurasi yang sudah ada dengan catchup.enabled: true tetap dipatuhi sebagai profil kompatibilitas untuk jendela replay pemulihan. Blok catchup yang dinonaktifkan (enabled: false atau tanpa enabled: true) dihentikan; openclaw doctor --fix menghapusnya.
Pemecahan masalah
imsg tidak ditemukan atau RPC tidak didukung
imsg tidak ditemukan atau RPC tidak didukung
imsg. Jika tindakan API privat tidak tersedia, jalankan imsg launch dalam sesi pengguna macOS yang telah masuk, lalu lakukan probe lagi. Jika Gateway tidak berjalan di macOS, gunakan penyiapan Remote Mac melalui SSH di atas, bukan jalur lokal default imsg.Pesan terkirim tetapi iMessage masuk tidak diterima
Pesan terkirim tetapi iMessage masuk tidak diterima
chat.db tidak berubah, OpenClaw tidak dapat menerima pesan tersebut meskipun imsg status --json melaporkan bridge yang sehat.chat.db baru atau peristiwa imsg watch sebelum men-debug sesi OpenClaw. Jangan menjalankan ini sebagai perulangan peluncuran ulang bridge secara berkala; imsg launch berulang disertai restart gateway selama pekerjaan aktif dapat mengganggu pengiriman dan membuat proses kanal yang sedang berjalan terhenti.Gateway tidak berjalan di macOS
Gateway tidak berjalan di macOS
cliPath: "imsg" default harus berjalan di Mac yang masuk ke Messages. Di Linux atau Windows, atur channels.imessage.cliPath ke skrip pembungkus yang terhubung melalui SSH ke Mac tersebut dan menjalankan imsg "$@".DM diabaikan
DM diabaikan
channels.imessage.dmPolicychannels.imessage.allowFrom- persetujuan pairing (
openclaw pairing list imessage)
Pesan grup diabaikan
Pesan grup diabaikan
channels.imessage.groupPolicychannels.imessage.groupAllowFrom- perilaku daftar izin
channels.imessage.groups - konfigurasi pola penyebutan (
agents.list[].groupChat.mentionPatterns)
Lampiran jarak jauh gagal
Lampiran jarak jauh gagal
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- autentikasi kunci SSH/SCP dari host gateway
- kunci host tersedia di
~/.ssh/known_hostspada host gateway - keterbacaan jalur jarak jauh pada Mac yang menjalankan Messages
Prompt izin macOS terlewat
Prompt izin macOS terlewat
imsg.Referensi konfigurasi
Terkait
- Ikhtisar Kanal — semua kanal yang didukung
- Penghapusan BlueBubbles dan jalur iMessage imsg — pengumuman dan ringkasan migrasi
- Beralih dari BlueBubbles — tabel penerjemahan konfigurasi dan peralihan langkah demi langkah
- Pairing — autentikasi DM dan alur pairing
- Grup — perilaku obrolan grup dan pembatasan berdasarkan penyebutan
- Perutean Kanal — perutean sesi untuk pesan
- Keamanan — model akses dan penguatan