De meegeleverdeDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
imessage-Plugin bereikt nu hetzelfde private API-oppervlak als BlueBubbles (react, edit, unsend, reply, sendWithEffect, groepsbeheer, bijlagen) door steipete/imsg via JSON-RPC aan te sturen. Als je al een Mac met imsg geinstalleerd gebruikt, kun je de BlueBubbles-server verwijderen en de Plugin rechtstreeks met Messages.app laten praten.
Ondersteuning voor BlueBubbles is verwijderd. OpenClaw ondersteunt iMessage alleen via imsg. Deze handleiding is voor het migreren van oude channels.bluebubbles-configs naar channels.imessage; er is geen ander ondersteund migratiepad.
Wanneer deze migratie zinvol is
- Je gebruikt
imsgal op dezelfde Mac (of een Mac die via SSH bereikbaar is) waarop Messages.app is aangemeld. - Je wilt een bewegend onderdeel minder — geen aparte BlueBubbles-server, geen REST-eindpunt om te authenticeren, geen Webhook-bedrading. Een enkele CLI-binary in plaats van een server + client-app + helper.
- Je gebruikt een ondersteunde macOS- /
imsg-build waarbij de private API-probeavailable: truerapporteert.
Wat imsg doet
imsg is een lokale macOS CLI voor Messages. OpenClaw start imsg rpc als een childproces en praat JSON-RPC via stdin/stdout. Er is geen HTTP-server, Webhook-URL, achtergronddaemon, launch agent of poort om bloot te stellen.
- Leesbewerkingen komen uit
~/Library/Messages/chat.dbvia een read-only SQLite-handle. - Live inkomende berichten komen uit
imsg watch/watch.subscribe, datchat.db-bestandssysteemgebeurtenissen volgt met een polling-fallback. - Verzenden gebruikt Messages.app-automatisering voor normale tekst- en bestandsverzendingen.
- Geavanceerde acties gebruiken
imsg launchom deimsg-helper in Messages.app te injecteren. Dat ontgrendelt leesbevestigingen, type-indicatoren, rijke verzendbewerkingen, bewerken, verzenden ongedaan maken, reply in threads, tapbacks en groepsbeheer. - Linux-builds kunnen een gekopieerde
chat.dbinspecteren, maar kunnen niet verzenden, de live Mac-database volgen of Messages.app aansturen. Voor OpenClaw iMessage voer jeimsguit op de aangemelde Mac of via een SSH-wrapper naar die Mac.
Voordat je begint
-
Installeer
imsgop de Mac waarop Messages.app draait:Alsimsg chatsmislukt metunable to open database file, lege uitvoer ofauthorization denied, geef dan Volledige schijftoegang aan de terminal, editor, het Node-proces, de Gateway-service of het SSH-ouderproces datimsgstart, en open dat ouderproces daarna opnieuw. -
Controleer de lees-, watch-, verzend- en RPC-oppervlakken voordat je de OpenClaw-config wijzigt:
Vervang
42door een echte chat-id uitimsg chats. Verzenden vereist Automation-toestemming voor Messages.app. Als OpenClaw via SSH zal draaien, voer deze opdrachten dan uit via dezelfde SSH-wrapper of gebruikerscontext die OpenClaw zal gebruiken. -
Schakel de private API-brug in wanneer je geavanceerde acties nodig hebt:
imsg launchvereist dat SIP is uitgeschakeld. Basisverzending, geschiedenis en watch werken zonderimsg launch; geavanceerde acties niet. -
Controleer de brug via OpenClaw:
Je wilt
imessage.privateApi.available: true. Als ditfalserapporteert, los dat dan eerst op — zie Mogelijkhedendetectie. -
Maak een snapshot van je config:
Configvertaling
iMessage en BlueBubbles delen veel config op kanaalniveau. De sleutels die veranderen zijn vooral transport (REST server vs lokale CLI). Gedragssleutels (dmPolicy, groupPolicy, allowFrom, enz.) behouden dezelfde betekenis.
| BlueBubbles | meegeleverde iMessage | Opmerkingen |
|---|---|---|
channels.bluebubbles.enabled | channels.imessage.enabled | Dezelfde semantiek. |
channels.bluebubbles.serverUrl | (verwijderd) | Geen REST-server — de Plugin start imsg rpc over stdio. |
channels.bluebubbles.password | (verwijderd) | Geen webhook-authenticatie nodig. |
| (impliciet) | channels.imessage.cliPath | Pad naar imsg (standaard imsg); gebruik een wrapperscript voor SSH. |
| (impliciet) | channels.imessage.dbPath | Optionele overschrijving voor Messages.app chat.db; automatisch gedetecteerd wanneer weggelaten. |
| (impliciet) | channels.imessage.remoteHost | host of user@host — alleen nodig wanneer cliPath een SSH-wrapper is en je SCP-bijlage-ophalingen wilt. |
channels.bluebubbles.dmPolicy | channels.imessage.dmPolicy | Dezelfde waarden (pairing / allowlist / open / disabled). |
channels.bluebubbles.allowFrom | channels.imessage.allowFrom | Koppelingsgoedkeuringen worden per handle overgenomen, niet per token. |
channels.bluebubbles.groupPolicy | channels.imessage.groupPolicy | Dezelfde waarden (allowlist / open / disabled). |
channels.bluebubbles.groupAllowFrom | channels.imessage.groupAllowFrom | Hetzelfde. |
channels.bluebubbles.groups | channels.imessage.groups | Kopieer dit letterlijk, inclusief eventuele wildcardvermelding groups: { "*": { ... } }. Per-groep requireMention, tools, toolsBySender worden overgenomen. Met groupPolicy: "allowlist" laat een leeg of ontbrekend groups-blok elk groepsbericht stilzwijgend vallen — zie “Valkuil met groepsregister” hieronder. |
channels.bluebubbles.sendReadReceipts | channels.imessage.sendReadReceipts | Standaard true. Met de meegeleverde Plugin wordt dit alleen uitgevoerd wanneer de private API-probe actief is. |
channels.bluebubbles.includeAttachments | channels.imessage.includeAttachments | Dezelfde vorm, ook standaard uitgeschakeld. Als je bijlagen via BlueBubbles liet doorstromen, moet je dit expliciet opnieuw instellen in het iMessage-blok — het wordt niet impliciet overgenomen, en inkomende foto’s/media worden stilzwijgend weggelaten zonder logregel Inbound message totdat je dit doet. |
channels.bluebubbles.attachmentRoots | channels.imessage.attachmentRoots | Lokale roots; dezelfde wildcardregels. |
| (N.v.t.) | channels.imessage.remoteAttachmentRoots | Alleen gebruikt wanneer remoteHost is ingesteld voor SCP-ophalingen. |
channels.bluebubbles.mediaMaxMb | channels.imessage.mediaMaxMb | Standaard 16 MB op iMessage (standaard bij BlueBubbles was 8 MB). Stel expliciet in als je de lagere limiet wilt behouden. |
channels.bluebubbles.textChunkLimit | channels.imessage.textChunkLimit | Standaard 4000 op beide. |
channels.bluebubbles.coalesceSameSenderDms | channels.imessage.coalesceSameSenderDms | Dezelfde opt-in. Alleen DM’s — groepschats behouden directe verzending per bericht op beide kanalen. Verbreedt de standaard inkomende debounce naar 2500 ms wanneer ingeschakeld zonder expliciete messages.inbound.byChannel.imessage. Zie iMessage-documentatie § Samengevoegde gesplitst verzonden DM’s. |
channels.bluebubbles.enrichGroupParticipantsFromContacts | (N.v.t.) | iMessage leest weergavenamen van afzenders al uit chat.db. |
channels.bluebubbles.actions.* | channels.imessage.actions.* | Schakelaars per actie: reactions, edit, unsend, reply, sendWithEffect, renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup, sendAttachment. |
channels.bluebubbles.accounts.*) worden een-op-een vertaald naar channels.imessage.accounts.*.
Valkuil met groepsregister
De meegeleverde iMessage-Plugin voert twee afzonderlijke allowlist-poorten voor groepen direct na elkaar uit. Beide moeten slagen voordat een groepsbericht de agent bereikt:- Allowlist voor afzender / chatdoel (
channels.imessage.groupAllowFrom) — gecontroleerd doorisAllowedIMessageSender. Matcht inkomende berichten op afzenderhandle,chat_guid,chat_identifierofchat_id. Dezelfde vorm als BlueBubbles. - Groepsregister (
channels.imessage.groups) — gecontroleerd doorresolveChannelGroupPolicyuitinbound-processing.ts:199. MetgroupPolicy: "allowlist"vereist deze poort een van beide:- een wildcardvermelding
groups: { "*": { ... } }(steltallowAll = truein), of - een expliciete per-
chat_id-vermelding ondergroups.
- een wildcardvermelding
warn-niveau, zodat dit niet langer stil is op het standaard logniveau:
- Een eenmalige
warnbij het opstarten per account wanneergroupPolicy: "allowlist"is ingesteld maarchannels.imessage.groupsleeg is (geen wildcard"*", geen per-chat_id-vermeldingen) — afgevuurd voordat er berichten binnenkomen. - Een eenmalige
warnperchat_idwanneer een specifieke groep voor het eerst tijdens runtime wordt weggelaten, met de chat_id en de exacte sleutel die aangroupsmoet worden toegevoegd om deze toe te staan.
groupAllowFrom en groupPolicy, maar slaan het groups-blok over, omdat groups: { "*": { "requireMention": true } } van BlueBubbles eruitziet als een niet-gerelateerde vermeldingsinstelling. Het is in werkelijkheid essentieel voor de registerpoort.
De minimale configuratie om groepsberichten te laten blijven doorstromen na groupPolicy: "allowlist":
requireMention: true onder * is onschadelijk wanneer er geen vermeldingspatronen zijn geconfigureerd: de runtime stelt canDetectMention = false in en breekt de mention-drop af bij inbound-processing.ts:512. Met geconfigureerde vermeldingspatronen (agents.list[].groupChat.mentionPatterns) werkt het zoals verwacht.
Als de Gateway-logboeken imessage: dropping group message from chat_id=<id> tonen of de opstartregel imessage: groupPolicy="allowlist" but channels.imessage.groups is empty, dan dropt gate 2 — voeg het groups-blok toe.
Stap voor stap
-
Voeg een iMessage-blok toe naast het bestaande BlueBubbles-blok. Bewaar het oude blok alleen als kopieerbron totdat het nieuwe pad is geverifieerd:
-
Dry-run-probe — start de Gateway en bevestig dat iMessage als gezond wordt gerapporteerd:
Omdat
imessage.enablednog steedsfalseis, wordt er nog geen inkomend iMessage-verkeer gerouteerd — maar--probetest de bridge zodat je permissie- of installatieproblemen ontdekt vóór de overgang. -
Schakel over. Verwijder de BlueBubbles-configuratie en schakel iMessage in met één configuratiebewerking:
Herstart de Gateway. Inkomend iMessage-verkeer loopt nu via de gebundelde Plugin.
- Verifieer DM’s. Stuur de agent een direct message; bevestig dat het antwoord aankomt.
-
Verifieer groepen afzonderlijk. DM’s en groepen gebruiken verschillende codepaden — een succesvolle DM bewijst niet dat groepen worden gerouteerd. Stuur de agent een bericht in een gekoppelde groepschat en bevestig dat het antwoord aankomt. Als de groep stilvalt (geen agentantwoord, geen fout), controleer dan het Gateway-logboek op
imessage: dropping group message from chat_id=<id>of de opstartregelimessage: groupPolicy="allowlist" but channels.imessage.groups is empty— beide worden op het standaard logniveau weergegeven. Als een van beide verschijnt, ontbreekt jegroups-blok of is het leeg — zie “Group registry footgun” hierboven. -
Verifieer het actie-oppervlak — vraag de agent vanuit een gekoppelde DM om te reageren, te bewerken, te verwijderen, te antwoorden, een foto te sturen en (in een groep) de groep te hernoemen / een deelnemer toe te voegen of te verwijderen. Elke actie moet native aankomen in Messages.app. Als een actie “iMessage
<action>requires the imsg private API bridge” gooit, voer dan opnieuwimsg launchuit en vernieuwchannels status --probe. -
Verwijder de BlueBubbles-server en -configuratie zodra iMessage-DM’s, groepen en acties zijn geverifieerd. OpenClaw gebruikt
channels.bluebubblesniet.
Actiepariteit in één oogopslag
| Actie | legacy BlueBubbles | gebundelde iMessage |
|---|---|---|
| Tekst verzenden / SMS-terugval | ✅ | ✅ |
| Media verzenden (foto, video, bestand, spraak) | ✅ | ✅ |
Threaded reply (reply_to_guid) | ✅ | ✅ (sluit #51892) |
Tapback (react) | ✅ | ✅ |
| Bewerken / verwijderen (macOS 13+-ontvangers) | ✅ | ✅ |
| Verzenden met schermeffect | ✅ | ✅ (sluit een deel van #9394) |
| Rijke tekst vet / cursief / onderstreept / doorgehaald | ✅ | ✅ (typed-run-opmaak via attributedBody) |
| Groep hernoemen / groepspictogram instellen | ✅ | ✅ |
| Deelnemer toevoegen / verwijderen, groep verlaten | ✅ | ✅ |
| Leesbevestigingen en typindicator | ✅ | ✅ (achter private API-probe) |
| DM-coalescing voor dezelfde afzender | ✅ | ✅ (alleen DM; opt-in via channels.imessage.coalesceSameSenderDms) |
| Inhalen van inkomende berichten ontvangen terwijl Gateway uitstaat | ✅ (Webhook-replay + geschiedenis ophalen) | ✅ (opt-in via channels.imessage.catchup.enabled; sluit #78649) |
channels.imessage.catchup.enabled true is, voert de Gateway één chats.list + per-chat messages.history-pass uit tegen dezelfde JSON-RPC-client die door imsg watch wordt gebruikt, speelt elke gemiste inkomende rij opnieuw af via het live dispatch-pad (allowlists, groepsbeleid, debouncer, echo-cache), en bewaart een cursor per account zodat latere starts verdergaan waar ze waren gebleven. Zie Inhalen na Gateway-downtime voor afstemming.
Koppeling, sessies en ACP-bindingen
- Koppelingsgoedkeuringen worden per handle overgenomen. Je hoeft bekende afzenders niet opnieuw goed te keuren —
channels.imessage.allowFromherkent dezelfde+15555550123/user@example.com-strings die BlueBubbles gebruikte. - Sessies blijven gescopeerd per agent + chat. DM’s worden samengevoegd in de hoofdsessie van de agent onder de standaard
session.dmScope=main; groepssessies blijven geïsoleerd perchat_id. De sessiesleutels verschillen (agent:<id>:imessage:group:<chat_id>versus het BlueBubbles-equivalent) — oude gespreksgeschiedenis onder BlueBubbles-sessiesleutels wordt niet meegenomen naar iMessage-sessies. - ACP-bindingen die verwijzen naar
match.channel: "bluebubbles"moeten worden bijgewerkt naar"imessage". De vormen vanmatch.peer.id(chat_id:,chat_guid:,chat_identifier:, kale handle) zijn identiek.
Geen rollbackkanaal
Er is geen ondersteunde BlueBubbles-runtime om naar terug te schakelen. Als iMessage-verificatie mislukt, stel danchannels.imessage.enabled: false in, herstart de Gateway, los de imsg-blokkade op en probeer de overgang opnieuw.
De antwoordcache staat op ~/.openclaw/state/imessage/reply-cache.jsonl (modus 0600, bovenliggende map 0700). Je kunt die veilig verwijderen als je met een schone lei wilt beginnen.
Gerelateerd
- iMessage — volledige iMessage-kanaalreferentie, inclusief
imsg launch-setup en capaciteitsdetectie. /channels/bluebubbles— legacy-URL die doorverwijst naar deze migratiegids.- Koppeling — DM-authenticatie en koppelingsflow.
- Kanaalroutering — hoe de Gateway een kanaal kiest voor uitgaande antwoorden.