imessage, yang menjalankan steipete/imsg melalui JSON-RPC dan menjangkau permukaan API privat yang sama seperti yang dimiliki BlueBubbles (react, edit, unsend, reply, sendWithEffect, jajak pendapat native, pengelolaan grup, lampiran). Satu biner CLI menggantikan server BlueBubbles + aplikasi klien + rangkaian webhook: tanpa endpoint REST, tanpa autentikasi webhook.
Panduan ini memigrasikan konfigurasi lama channels.bluebubbles ke channels.imessage. Tidak ada jalur migrasi lain yang didukung. Pada OpenClaw saat ini, blok channels.bluebubbles yang tersisa tidak aktif—tidak ada runtime yang membacanya.
Untuk pengumuman singkat dan ringkasan bagi operator, lihat Penghapusan BlueBubbles dan jalur imsg iMessage.
Daftar periksa migrasi
Jalur aman tersingkat jika Anda sudah memahami konfigurasi BlueBubbles lama Anda:- Verifikasi
imsgsecara langsung di Mac yang menjalankan Messages.app (imsg chats,imsg history,imsg send,imsg rpc --help). - Salin kunci perilaku dari
channels.bluebubbleskechannels.imessage:dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,includeAttachments,attachmentRoots,mediaMaxMb,textChunkLimit,coalesceSameSenderDms, danactions. - Hapus kunci transport yang sudah tidak ada:
serverUrl,password, URL webhook, dan penyiapan server BlueBubbles. - Jika Gateway tidak berjalan di Mac tempat Messages berada, atur
channels.imessage.cliPathke pembungkus SSH dan aturremoteHostuntuk mengambil lampiran jarak jauh. - Aktifkan
channels.imessage, mulai ulang Gateway, lalu jalankanopenclaw channels status --probe --channel imessage. - Uji satu pesan langsung, satu grup yang diizinkan, lampiran jika diaktifkan, dan setiap tindakan API privat yang Anda harapkan digunakan oleh agen.
- Hapus server BlueBubbles dan konfigurasi lama
channels.bluebubblessetelah jalur iMessage terverifikasi.
Fungsi imsg
imsg adalah CLI macOS lokal untuk Messages. OpenClaw memulai imsg rpc sebagai proses anak dan berkomunikasi menggunakan JSON-RPC melalui stdin/stdout. Tidak ada server HTTP, URL webhook, daemon latar belakang, agen peluncuran, atau port yang perlu diekspos.
- Pembacaan berasal dari
~/Library/Messages/chat.dbmenggunakan handel SQLite hanya-baca. - Pesan langsung yang masuk berasal dari
imsg watch/watch.subscribe, yang mengikuti peristiwa sistem berkaschat.dbdengan polling sebagai cadangan. - Pengiriman menggunakan otomatisasi Messages.app untuk mengirim teks dan berkas biasa.
- Tindakan lanjutan menggunakan
imsg launchuntuk menyuntikkan pembantuimsgke Messages.app. Inilah yang mengaktifkan tanda terima baca, indikator sedang mengetik, pengiriman kaya, pengeditan, pembatalan pengiriman, balasan berutas, tapback, jajak pendapat, dan pengelolaan grup. - Versi Linux dapat memeriksa salinan
chat.db, tetapi tidak dapat mengirim, memantau basis data Mac secara langsung, atau mengendalikan Messages.app. Untuk iMessage OpenClaw, jalankanimsgdi Mac yang telah masuk atau melalui pembungkus SSH ke Mac tersebut.
Sebelum memulai
-
Instal
imsgdi Mac yang menjalankan Messages.app:Untuk penyiapan lokal biasa, penyiapan OpenClaw dapat menawarkan instalasi atau pembaruan Homebrew untukimsgyang dikonfirmasi pengguna di Mac Messages yang telah masuk. Penyiapan manual dan topologi pembungkus SSH tetap dikelola oleh operator: ulangi pembaruan Homebrew dalam konteks pengguna lokal atau jarak jauh yang sama dengan yang akan menjalankanimsg. Jikaimsg chatsgagal denganunable to open database file, keluaran kosong, atauauthorization denied, berikan Full Disk Access kepada terminal, editor, proses Node, layanan Gateway, atau proses induk SSH yang meluncurkanimsg, lalu buka kembali proses induk tersebut. -
Verifikasi permukaan baca, pemantauan, pengiriman, dan RPC sebelum mengubah konfigurasi OpenClaw:
Ganti
42dengan id obrolan sebenarnya dariimsg chats. Pengiriman memerlukan izin Automation untuk Messages.app. Jika OpenClaw akan berjalan melalui SSH, jalankan perintah ini melalui pembungkus SSH atau konteks pengguna yang sama dengan yang akan digunakan OpenClaw. Jika pembacaan berfungsi tetapi pengiriman gagal dengan AppleEvents-1743, periksa apakah Automation diterapkan pada/usr/libexec/sshd-keygen-wrapper; lihat Pengiriman melalui pembungkus SSH gagal dengan AppleEvents -1743. -
Aktifkan jembatan API privat. Ini sangat dianjurkan untuk iMessage OpenClaw karena balasan, tapback, efek, jajak pendapat, balasan lampiran, dan tindakan grup bergantung padanya:
imsg launchmengharuskan SIP dinonaktifkan (dan pada macOS modern, validasi pustaka dilonggarkan—lihat Mengaktifkan API privat imsg). Pengiriman dasar, riwayat, dan pemantauan berfungsi tanpaimsg launch; seluruh permukaan tindakan iMessage OpenClaw tidak. -
Setelah Anda mengaktifkan
channels.imessagedan memulai Gateway, verifikasi jembatan melalui OpenClaw:Akun iMessage seharusnya melaporkanworks; dengan--json, payload pemeriksaan mencakupprivateApi.available: true. Jika melaporkanfalse, perbaiki itu terlebih dahulu—lihat Deteksi kemampuan. Pemeriksaan memerlukan Gateway yang dapat dijangkau (jika tidak, CLI akan kembali menampilkan keluaran berbasis konfigurasi saja) dan hanya memeriksa akun terkonfigurasi yang diaktifkan. -
Buat snapshot konfigurasi Anda:
Penerjemahan konfigurasi
iMessage dan BlueBubbles berbagi sebagian besar kunci perilaku tingkat kanal. Yang berubah adalah transport (server REST dibandingkan CLI lokal) dan format kunci registri grup.
Konfigurasi multiakun (
channels.bluebubbles.accounts.*) diterjemahkan satu-ke-satu menjadi channels.imessage.accounts.*.
Jebakan registri grup
Plugin iMessage bawaan menjalankan dua gerbang grup secara berurutan. Pesan grup harus melewati keduanya agar dapat mencapai agen:- Daftar yang diizinkan untuk pengirim / target obrolan (
channels.imessage.groupAllowFrom) — mencocokkan alamat pengirim atau target obrolan (entrichat_id:,chat_guid:,chat_identifier:). JikagroupAllowFromtidak ditetapkan, gerbang ini kembali menggunakanallowFrom;groupAllowFrom: []yang eksplisit menonaktifkan mekanisme tersebut dan membuang setiap pesan grup di bawahgroupPolicy: "allowlist". - Registri grup (
channels.imessage.groups) — menggunakanchat_idnumerik iMessage sebagai kunci:- Tidak ada blok
groups(atau blok kosong): grup melewati gerbang ini selama gerbang 1 memiliki daftar efektif pengirim yang diizinkan dan tidak kosong; pemfilteran pengirim mengatur akses dan tidak ada peringatan saat mulai yang menyatakan semua pesan akan dibuang. groupsberisi entri tetapi tanpa"*": hanya kuncichat_idyang tercantum yang lolos. Mencantumkan grup apa pun mengubah registri menjadi daftar yang diizinkan, bahkan di bawahgroupPolicy: "open".groups: { "*": { ... } }: setiap grup melewati gerbang ini.
- Tidak ada blok
groups, sedangkan registri iMessage menggunakan chat_id numerik sebagai kunci. Entri per grup yang disalin persis seperti aslinya akan membuat registri tidak kosong dengan kunci yang tidak pernah cocok, sehingga setiap pesan grup dibuang di gerbang 2. Salin wildcard "*" persis seperti aslinya; ubah kunci entri grup tertentu menggunakan nilai chat_id dari imsg chats.
Kedua jalur pembuangan terlihat pada tingkat log bawaan melalui baris warn:
- Satu kali per akun saat mulai, ketika
groupPolicy: "allowlist"ditetapkan dan daftar efektif pengirim grup yang diizinkan kosong:imessage: groupPolicy="allowlist" for account "<id>" but no group sender allowlist is configured .... TetapkangroupAllowFrom(atauallowFrom) untuk mengizinkan pengirim; menambahkangroupssaja tidak memenuhi gerbang pengirim. - Satu kali per
chat_idsaat waktu proses, ketika registri membuang grup:imessage: dropping group message from chat_id=<id> ... not in channels.imessage.groups allowlist, dengan menyebutkan kunci persis yang harus ditambahkan.
groupPolicy: "allowlist":
groups untuk membatasi obrolan yang diizinkan atau menetapkan opsi per obrolan seperti requireMention; salin entri "*" BlueBubbles persis seperti aslinya, tetapi ubah kunci entri tertentu menggunakan nilai chat_id numerik iMessage.
Langkah demi langkah
-
Terjemahkan konfigurasi. Biarkan blok baru dinonaktifkan selama Anda mengedit; blok
channels.bluebubbleslama diabaikan oleh OpenClaw saat ini dan dapat dibiarkan berdampingan sebagai referensi: -
Alihkan dan lakukan pemeriksaan. Atur
channels.imessage.enabled: true, mulai ulang Gateway, lalu pastikan kanal dilaporkan dalam kondisi sehat:Pemeriksaan memerlukan Gateway yang dapat dijangkau dan hanya memeriksa akun yang telah dikonfigurasi serta diaktifkan. Gunakan perintah langsungimsgdi Sebelum memulai untuk memvalidasi Mac itu sendiri. - Verifikasi DM. Kirim pesan langsung kepada agen; pastikan balasannya diterima.
-
Verifikasi grup secara terpisah. DM dan grup menggunakan jalur kode yang berbeda — keberhasilan DM tidak membuktikan bahwa perutean grup berfungsi. Kirim pesan di obrolan grup yang diizinkan dan pastikan balasannya diterima. Jika grup tidak memberikan respons (tidak ada balasan agen maupun kesalahan), periksa log Gateway untuk dua baris
warndari “Jebakan registri grup” di atas. Peringatan saat awal proses berarti daftar pengirim yang diizinkan secara efektif kosong; peringatan per-chat_idberarti registrigroupsyang terisi tidak memuat obrolan tersebut. -
Verifikasi permukaan tindakan. Dari DM yang telah dipasangkan, minta agen untuk memberikan reaksi, mengedit, membatalkan pengiriman, membalas, mengirim foto, serta (dalam grup) mengganti nama grup atau menambah/menghapus peserta. Setiap tindakan seharusnya diterapkan secara native di Messages.app. Jika ada tindakan yang menghasilkan
iMessage <action> requires the imsg private API bridge, jalankan kembaliimsg launch, lalu segarkan denganopenclaw channels status --probe. -
Hapus server BlueBubbles dan blok
channels.bluebubblessetelah DM, grup, serta tindakan iMessage selesai diverifikasi. OpenClaw tidak membacachannels.bluebubbles.
Sekilas kesetaraan tindakan
iMessage memulihkan pesan yang terlewat ketika Gateway tidak aktif: saat dimulai, iMessage memutar ulang dari rowid terakhir yang dikirim melalui
imsg watch.subscribe since_rowid, melakukan deduplikasi berdasarkan GUID, dan batas usia backlog lama mencegah “ledakan backlog” akibat pengosongan Push. Proses ini berjalan melalui koneksi RPC imsg, sehingga juga berfungsi untuk penyiapan cliPath SSH jarak jauh; penyiapan lokal mendapatkan jendela pemulihan yang lebih luas karena dapat membaca chat.db. Lihat Pemulihan pesan masuk setelah bridge atau Gateway dimulai ulang.
Pemasangan, sesi, dan pengikatan ACP
- Daftar yang diizinkan dibawa berdasarkan handle.
channels.imessage.allowFrommengenali string+15555550123/user@example.comyang sama dengan yang digunakan BlueBubbles — salin persis tanpa perubahan. - Persetujuan penyimpanan pemasangan tidak ditransfer. Penyimpanan pemasangan berlaku per kanal dan tidak ada proses yang memigrasikan penyimpanan BlueBubbles lama. Pengirim yang hanya disetujui melalui pemasangan harus memasangkan kembali satu kali di iMessage, atau Anda dapat menambahkan handle mereka ke
allowFrom. - Sesi tetap dicakup per agen + obrolan. DM digabungkan ke sesi utama agen dengan pengaturan bawaan
session.dmScope=main; sesi grup tetap terisolasi perchat_id(agent:<agentId>:imessage:group:<chat_id>). Riwayat percakapan lama dalam kunci sesi BlueBubbles tidak dibawa ke sesi iMessage. - Pengikatan ACP yang merujuk ke
match.channel: "bluebubbles"harus diubah menjadi"imessage". Bentukmatch.peer.id(chat_id:,chat_guid:,chat_identifier:, handle tanpa awalan) tetap identik.
Tidak ada kanal untuk kembali
Tidak ada runtime BlueBubbles yang didukung untuk digunakan kembali. Jika verifikasi iMessage gagal, aturchannels.imessage.enabled: false, mulai ulang Gateway, perbaiki penghambat imsg, lalu ulangi pengalihan.
Cache balasan disimpan dalam status Plugin SQLite. openclaw doctor --fix mengimpor dan mengarsipkan berkas pendamping lama imessage/reply-cache.jsonl jika tersedia.
Terkait
- Penghapusan BlueBubbles dan jalur iMessage imsg — pengumuman singkat dan ringkasan untuk operator.
- iMessage — referensi lengkap kanal iMessage, termasuk penyiapan
imsg launchdan deteksi kemampuan. /channels/bluebubbles— URL lama yang dialihkan ke panduan migrasi ini.- Pemasangan — autentikasi DM dan alur pemasangan.
- Perutean Kanal — cara Gateway memilih kanal untuk balasan keluar.