iMessage (legacy: imsg)
Aanbevolen: Gebruik BlueBubbles voor nieuwe iMessage-installaties.
Het kanaal imsg is een legacy externe-CLI-integratie en kan in een toekomstige release worden verwijderd.
Status: legacy externe CLI-integratie. De Gateway start imsg rpc (JSON-RPC over stdio).
Snelle installatie (beginner)
- Zorg dat Berichten is aangemeld op deze Mac.
- Installeer
imsg:brew install steipete/tap/imsg
- Configureer OpenClaw met
channels.imessage.cliPathenchannels.imessage.dbPath. - Start de Gateway en keur eventuele macOS-prompts goed (Automatisering + Volledige schijftoegang).
Wat het is
- iMessage-kanaal ondersteund door
imsgop macOS. - Deterministische routering: antwoorden gaan altijd terug naar iMessage.
- DM’s delen de hoofdsessie van de agent; groepen zijn geïsoleerd (
agent:<agentId>:imessage:group:<chat_id>). - Als een thread met meerdere deelnemers binnenkomt met
is_group=false, kun je deze alsnog isoleren doorchat_idte gebruiken metchannels.imessage.groups(zie “Group-ish threads” hieronder).
Config-wegschrijvingen
Standaard mag iMessage config-updates wegschrijven die worden getriggerd door/config set|unset (vereist commands.config: true).
Uitschakelen met:
Provideropties
- macOS met Berichten aangemeld.
- Volledige schijftoegang voor OpenClaw +
imsg(toegang tot de Berichten-database). - Automatiseringsrechten bij verzenden.
channels.imessage.cliPathkan verwijzen naar elk commando dat stdin/stdout doorgeeft (bijvoorbeeld een wrapper-script dat via SSH naar een andere Mac gaat enimsg rpcuitvoert).
Problemen oplossen: macOS Privacy en Beveiliging (TCC)
Als verzenden/ontvangen faalt (bijvoorbeeldimsg rpc eindigt met een niet-nul status, time-out optreedt, of de Gateway lijkt te hangen), is een veelvoorkomende oorzaak een macOS-rechtenprompt die nooit is goedgekeurd.
macOS verleent TCC-rechten per app/procescontext. Keur prompts goed in dezelfde context die imsg uitvoert (bijvoorbeeld Terminal/iTerm, een LaunchAgent-sessie of een via SSH gestart proces).
Checklist:
- Volledige schijftoegang: sta toegang toe voor het proces dat OpenClaw uitvoert (en elke shell/SSH-wrapper die
imsgstart). Dit is vereist om de Berichten-database te lezen (chat.db). - Automatisering → Berichten: sta toe dat het proces dat OpenClaw uitvoert (en/of je terminal) Messages.app mag bedienen voor uitgaande verzending.
imsgCLI-gezondheid: verifieer datimsgis geïnstalleerd en RPC ondersteunt (imsg rpc --help).
Installatie (snelle route)
- Zorg dat Berichten is aangemeld op deze Mac.
- Configureer iMessage en start de Gateway.
Toegewijde bot-macOS-gebruiker (voor geïsoleerde identiteit)
Als je wilt dat de bot verzendt vanaf een afzonderlijke iMessage-identiteit (en je persoonlijke Berichten schoon wilt houden), gebruik dan een toegewijde Apple ID + een toegewijde macOS-gebruiker.- Maak een toegewijde Apple ID aan (voorbeeld:
[email protected]).- Apple kan een telefoonnummer vereisen voor verificatie / 2FA.
- Maak een macOS-gebruiker aan (voorbeeld:
openclawhome) en meld je daarop aan. - Open Berichten in die macOS-gebruiker en meld je aan bij iMessage met de bot-Apple ID.
- Schakel Inloggen op afstand in (Systeeminstellingen → Algemeen → Delen → Inloggen op afstand).
- Installeer
imsg:brew install steipete/tap/imsg
- Stel SSH zo in dat
ssh <bot-macos-user>@localhost truezonder wachtwoord werkt. - Laat
channels.imessage.accounts.bot.cliPathverwijzen naar een SSH-wrapper dieimsguitvoert als de bot-gebruiker.
imsg rpc vast lijkt te lopen of stopt, log in op die gebruiker (Schermdeling helpt), voer eenmalig imsg chats --limit 1 / imsg send ... uit, keur prompts goed en probeer opnieuw. Zie Problemen oplossen: macOS Privacy en Beveiliging (TCC).
Voorbeeld-wrapper (chmod +x). Vervang <bot-macos-user> door je daadwerkelijke macOS-gebruikersnaam:
channels.imessage.cliPath, channels.imessage.dbPath) in plaats van de accounts-map.
Remote/SSH-variant (optioneel)
Als je iMessage op een andere Mac wilt, stelchannels.imessage.cliPath in op een wrapper die imsg uitvoert op de externe macOS-host via SSH. OpenClaw heeft alleen stdio nodig.
Voorbeeld-wrapper:
cliPath naar een externe host via SSH wijst, verwijzen bijlagepaden in de Berichten-database naar bestanden op de externe machine. OpenClaw kan deze automatisch ophalen via SCP door channels.imessage.remoteHost in te stellen:
remoteHost niet is ingesteld, probeert OpenClaw dit automatisch te detecteren door het SSH-commando in je wrapper-script te parseren. Expliciete configuratie wordt aanbevolen voor betrouwbaarheid.
Externe Mac via Tailscale (voorbeeld)
Als de Gateway op een Linux-host/VM draait maar iMessage op een Mac moet draaien, is Tailscale de eenvoudigste brug: de Gateway praat met de Mac via het tailnet, voertimsg uit via SSH en haalt bijlagen terug via SCP.
Architectuur:
Concreet configvoorbeeld (Tailscale-hostnaam):
~/.openclaw/scripts/imsg-ssh):
- Zorg dat de Mac is aangemeld bij Berichten en dat Inloggen op afstand is ingeschakeld.
- Gebruik SSH-sleutels zodat
ssh [email protected]zonder prompts werkt. remoteHostmoet overeenkomen met het SSH-doel zodat SCP bijlagen kan ophalen.
channels.imessage.accounts met per-account-config en optioneel name. Zie gateway/configuration voor het gedeelde patroon. Commit ~/.openclaw/openclaw.json niet (het bevat vaak tokens).
Toegangsbeheer (DM’s + groepen)
DM’s:- Standaard:
channels.imessage.dmPolicy = "pairing". - Onbekende afzenders ontvangen een koppelingscode; berichten worden genegeerd totdat ze zijn goedgekeurd (codes verlopen na 1 uur).
- Goedkeuren via:
openclaw pairing list imessageopenclaw pairing approve imessage <CODE>
- Koppeling is de standaard tokenuitwisseling voor iMessage-DM’s. Details: Pairing
channels.imessage.groupPolicy = open | allowlist | disabled.channels.imessage.groupAllowFrombepaalt wie in groepen kan triggeren wanneerallowlistis ingesteld.- Mention-gating gebruikt
agents.list[].groupChat.mentionPatterns(ofmessages.groupChat.mentionPatterns) omdat iMessage geen native mention-metadata heeft. - Multi-agent-override: stel per-agent patronen in op
agents.list[].groupChat.mentionPatterns.
Hoe het werkt (gedrag)
imsgstreamt berichtgebeurtenissen; de Gateway normaliseert ze naar de gedeelde kanaal-envelop.- Antwoorden worden altijd teruggestuurd naar dezelfde chat-id of handle.
Group-ish threads (is_group=false)
Sommige iMessage-threads kunnen meerdere deelnemers hebben maar toch binnenkomen met is_group=false, afhankelijk van hoe Berichten de chat-identificatie opslaat.
Als je expliciet een chat_id configureert onder channels.imessage.groups, behandelt OpenClaw die thread als een “groep” voor:
- sessie-isolatie (aparte
agent:<agentId>:imessage:group:<chat_id>-sessiesleutel) - groeps-toegestane lijst / mention-gating-gedrag
Media + limieten
- Optionele bijlage-inname via
channels.imessage.includeAttachments. - Medialimiet via
channels.imessage.mediaMaxMb.
Beperkingen
- Uitgaande tekst wordt gechunked tot
channels.imessage.textChunkLimit(standaard 4000). - Optionele newline-chunking: stel
channels.imessage.chunkMode="newline"in om te splitsen op lege regels (paragraafgrenzen) vóór lengte-chunking. - Media-uploads zijn beperkt door
channels.imessage.mediaMaxMb(standaard 16).
Adressering / afleverdoelen
Geef de voorkeur aanchat_id voor stabiele routering:
chat_id:123(voorkeur)chat_guid:...chat_identifier:...- directe handles:
imessage:+1555/sms:+1555/[email protected]
Configuratiereferentie (iMessage)
Volledige configuratie: Configuratie Provider-opties:channels.imessage.enabled: kanaalstart in-/uitschakelen.channels.imessage.cliPath: pad naarimsg.channels.imessage.dbPath: pad naar de Berichten-database.channels.imessage.remoteHost: SSH-host voor SCP-bijlageoverdracht wanneercliPathnaar een externe Mac wijst (bijv.user@gateway-host). Automatisch gedetecteerd vanuit de SSH-wrapper indien niet ingesteld.channels.imessage.service:imessage | sms | auto.channels.imessage.region: SMS-regio.channels.imessage.dmPolicy:pairing | allowlist | open | disabled(standaard: pairing).channels.imessage.allowFrom: DM-toegestane lijst (handles, e-mails, E.164-nummers ofchat_id:*).openvereist"*". iMessage heeft geen gebruikersnamen; gebruik handles of chatdoelen.channels.imessage.groupPolicy:open | allowlist | disabled(standaard: allowlist).channels.imessage.groupAllowFrom: groepsafzender-toegestane lijst.channels.imessage.historyLimit/channels.imessage.accounts.*.historyLimit: maximaal aantal groepsberichten om als context op te nemen (0 schakelt uit).channels.imessage.dmHistoryLimit: DM-geschiedenislimeit in gebruikersbeurten. Per-gebruiker-overschrijvingen:channels.imessage.dms["<handle>"].historyLimit.channels.imessage.groups: per-groep standaardwaarden + toegestane lijst (gebruik"*"voor globale standaardwaarden).channels.imessage.includeAttachments: neem bijlagen op in de context.channels.imessage.mediaMaxMb: inkomende/uitgaande medialimiet (MB).channels.imessage.textChunkLimit: uitgaande chunkgrootte (tekens).channels.imessage.chunkMode:length(standaard) ofnewlineom te splitsen op lege regels (paragraafgrenzen) vóór lengte-chunking.
agents.list[].groupChat.mentionPatterns(ofmessages.groupChat.mentionPatterns).messages.responsePrefix.