iMessage (Legacy: imsg)
Empfohlen: Verwenden Sie BlueBubbles für neue iMessage-Setups.
Der Kanal imsg ist eine Legacy-Integration über eine externe CLI und kann in einer zukünftigen Version entfernt werden.
Status: Legacy-Integration über externe CLI. Der Gateway startet imsg rpc (JSON-RPC über stdio).
Schnellsetup (Einsteiger)
- Stellen Sie sicher, dass „Nachrichten“ auf diesem Mac angemeldet ist.
- Installieren Sie
imsg:brew install steipete/tap/imsg
- Konfigurieren Sie OpenClaw mit
channels.imessage.cliPathundchannels.imessage.dbPath. - Starten Sie den Gateway und genehmigen Sie alle macOS-Abfragen (Automation + Vollzugriff auf die Festplatte).
Was es ist
- iMessage-Kanal auf Basis von
imsgunter macOS. - Deterministisches Routing: Antworten gehen immer zurück zu iMessage.
- Direktnachrichten teilen die Hauptsitzung des Agenten; Gruppen sind isoliert (
agent:<agentId>:imessage:group:<chat_id>). - Wenn ein Thread mit mehreren Teilnehmern mit
is_group=falseeingeht, können Sie ihn dennoch isolieren, indem Siechat_idunter Verwendung vonchannels.imessage.groupskonfigurieren (siehe „Gruppenähnliche Threads“ unten).
Konfigurationsschreibzugriffe
Standardmäßig darf iMessage Konfigurationsaktualisierungen schreiben, die durch/config set|unset ausgelöst werden (erfordert commands.config: true).
Deaktivieren mit:
Anforderungen
- macOS mit angemeldeter Nachrichten-App.
- Vollzugriff auf die Festplatte für OpenClaw +
imsg(Zugriff auf die Nachrichten-Datenbank). - Automationsberechtigung beim Senden.
channels.imessage.cliPathkann auf jeden Befehl zeigen, der stdin/stdout weiterleitet (z. B. ein Wrapper-Skript, das per SSH zu einem anderen Mac verbindet undimsg rpcausführt).
Fehlerbehebung macOS Datenschutz und Sicherheit (TCC)
Wenn Senden/Empfangen fehlschlägt (z. B. wennimsg rpc mit einem Fehlercode beendet wird, ein Timeout auftritt oder der Gateway scheinbar hängt), ist eine häufige Ursache eine macOS-Berechtigungsabfrage, die nie genehmigt wurde.
macOS erteilt TCC-Berechtigungen pro App-/Prozesskontext. Genehmigen Sie Abfragen im selben Kontext, der imsg ausführt (z. B. Terminal/iTerm, eine LaunchAgent-Sitzung oder ein per SSH gestarteter Prozess).
Checkliste:
- Vollzugriff auf die Festplatte: Erlauben Sie Zugriff für den Prozess, der OpenClaw ausführt (und für jeden Shell-/SSH-Wrapper, der
imsgausführt). Dies ist erforderlich, um die Nachrichten-Datenbank zu lesen (chat.db). - Automation → Nachrichten: Erlauben Sie dem Prozess, der OpenClaw ausführt (und/oder Ihrem Terminal), Messages.app für ausgehende Sendungen zu steuern.
imsgCLI-Gesundheit: Verifizieren Sie, dassimsginstalliert ist und RPC unterstützt (imsg rpc --help).
Setup (schneller Pfad)
- Stellen Sie sicher, dass „Nachrichten“ auf diesem Mac angemeldet ist.
- Konfigurieren Sie iMessage und starten Sie den Gateway.
Dedizierter Bot-macOS-Benutzer (für isolierte Identität)
Wenn der Bot von einer separaten iMessage-Identität senden soll (und Ihre persönlichen Nachrichten sauber bleiben sollen), verwenden Sie eine dedizierte Apple-ID + einen dedizierten macOS-Benutzer.- Erstellen Sie eine dedizierte Apple-ID (Beispiel:
[email protected]).- Apple kann für die Verifizierung / 2FA eine Telefonnummer verlangen.
- Erstellen Sie einen macOS-Benutzer (Beispiel:
openclawhome) und melden Sie sich an. - Öffnen Sie „Nachrichten“ in diesem macOS-Benutzer und melden Sie sich mit der Bot-Apple-ID bei iMessage an.
- Aktivieren Sie „Remote Login“ (Systemeinstellungen → Allgemein → Freigabe → Remote Login).
- Installieren Sie
imsg:brew install steipete/tap/imsg
- Richten Sie SSH so ein, dass
ssh <bot-macos-user>@localhost trueohne Passwort funktioniert. - Verweisen Sie
channels.imessage.accounts.bot.cliPathauf einen SSH-Wrapper, derimsgals Bot-Benutzer ausführt.
imsg rpc festzustecken scheint oder beendet wird, melden Sie sich bei diesem Benutzer an (Bildschirmfreigabe hilft), führen Sie einmalig imsg chats --limit 1 / imsg send ... aus, genehmigen Sie die Abfragen und versuchen Sie es erneut. Siehe Fehlerbehebung macOS Datenschutz und Sicherheit (TCC).
Beispiel-Wrapper (chmod +x). Ersetzen Sie <bot-macos-user> durch Ihren tatsächlichen macOS-Benutzernamen:
channels.imessage.cliPath, channels.imessage.dbPath) anstelle der accounts-Map.
Remote/SSH-Variante (optional)
Wenn Sie iMessage auf einem anderen Mac betreiben möchten, setzen Siechannels.imessage.cliPath auf einen Wrapper, der imsg auf dem entfernten macOS-Host über SSH ausführt. OpenClaw benötigt nur stdio.
Beispiel-Wrapper:
cliPath über SSH auf einen Remote-Host zeigt, referenzieren Anhangspfade in der Nachrichten-Datenbank Dateien auf der Remote-Maschine. OpenClaw kann diese automatisch per SCP abrufen, indem Sie channels.imessage.remoteHost setzen:
remoteHost nicht gesetzt ist, versucht OpenClaw, dies durch Parsen des SSH-Befehls in Ihrem Wrapper-Skript automatisch zu erkennen. Eine explizite Konfiguration wird für Zuverlässigkeit empfohlen.
Remote-Mac über Tailscale (Beispiel)
Wenn der Gateway auf einem Linux-Host/VM läuft, iMessage jedoch auf einem Mac laufen muss, ist Tailscale die einfachste Brücke: Der Gateway spricht über das Tailnet mit dem Mac, führtimsg per SSH aus und lädt Anhänge per SCP zurück.
Architektur:
Konkretes Konfigurationsbeispiel (Tailscale-Hostname):
~/.openclaw/scripts/imsg-ssh):
- Stellen Sie sicher, dass der Mac bei „Nachrichten“ angemeldet ist und „Remote Login“ aktiviert ist.
- Verwenden Sie SSH-Schlüssel, damit
ssh [email protected]ohne Abfragen funktioniert. remoteHostsollte dem SSH-Ziel entsprechen, damit SCP Anhänge abrufen kann.
channels.imessage.accounts mit einer Konfiguration pro Konto und optionalem name. Siehe gateway/configuration für das gemeinsame Muster. Committen Sie ~/.openclaw/openclaw.json nicht (enthält häufig Tokens).
Zugriffskontrolle (Direktnachrichten + Gruppen)
DMs:- Standard:
channels.imessage.dmPolicy = "pairing". - Unbekannte Absender erhalten einen Kopplungscode; Nachrichten werden ignoriert, bis sie genehmigt sind (Codes laufen nach 1 Stunde ab).
- Genehmigung über:
openclaw pairing list imessageopenclaw pairing approve imessage <CODE>
- Kopplung ist der Standard-Token-Austausch für iMessage-Direktnachrichten. Details: Kopplung
channels.imessage.groupPolicy = open | allowlist | disabled.channels.imessage.groupAllowFromsteuert, wer in Gruppen auslösen darf, wennallowlistgesetzt ist.- Mention-Gating verwendet
agents.list[].groupChat.mentionPatterns(odermessages.groupChat.mentionPatterns), da iMessage keine nativen Mention-Metadaten hat. - Multi-Agent-Override: Setzen Sie pro Agent Muster auf
agents.list[].groupChat.mentionPatterns.
Funktionsweise (Verhalten)
imsgstreamt Nachrichtenereignisse; der Gateway normalisiert sie in den gemeinsamen Kanal-Umschlag.- Antworten werden immer an dieselbe Chat-ID oder denselben Handle zurückgeroutet.
Gruppenähnliche Threads (is_group=false)
Einige iMessage-Threads können mehrere Teilnehmer haben, kommen aber dennoch mit is_group=false an, abhängig davon, wie „Nachrichten“ die Chat-Kennung speichert.
Wenn Sie explizit einen chat_id unter channels.imessage.groups konfigurieren, behandelt OpenClaw diesen Thread als „Gruppe“ für:
- Sitzungsisolation (separater
agent:<agentId>:imessage:group:<chat_id>-Sitzungsschlüssel) - Gruppen-Allowlisting / Mention-Gating-Verhalten
Medien + Limits
- Optionale Anhangsaufnahme über
channels.imessage.includeAttachments. - Medienlimit über
channels.imessage.mediaMaxMb.
Limits
- Ausgehender Text wird auf
channels.imessage.textChunkLimitsegmentiert (Standard 4000). - Optionale Zeilenumbruch-Segmentierung: Setzen Sie
channels.imessage.chunkMode="newline", um an Leerzeilen (Absatzgrenzen) vor der Längensegmentierung zu trennen. - Medien-Uploads sind durch
channels.imessage.mediaMaxMbbegrenzt (Standard 16).
Adressierung / Zustellziele
Bevorzugen Siechat_id für stabiles Routing:
chat_id:123(bevorzugt)chat_guid:...chat_identifier:...- direkte Handles:
imessage:+1555/sms:+1555/[email protected]
Konfigurationsreferenz (iMessage)
Vollständige Konfiguration: Konfiguration Anbieteroptionen:channels.imessage.enabled: Kanalstart aktivieren/deaktivieren.channels.imessage.cliPath: Pfad zuimsg.channels.imessage.dbPath: Pfad zur Nachrichten-Datenbank.channels.imessage.remoteHost: SSH-Host für SCP-Anhangsübertragung, wenncliPathauf einen Remote-Mac zeigt (z. B.user@gateway-host). Automatisch aus dem SSH-Wrapper erkannt, falls nicht gesetzt.channels.imessage.service:imessage | sms | auto.channels.imessage.region: SMS-Region.channels.imessage.dmPolicy:pairing | allowlist | open | disabled(Standard: Kopplung).channels.imessage.allowFrom: DM-Allowlist (Handles, E-Mails, E.164-Nummern oderchat_id:*).openerfordert"*". iMessage hat keine Benutzernamen; verwenden Sie Handles oder Chat-Ziele.channels.imessage.groupPolicy:open | allowlist | disabled(Standard: Allowlist).channels.imessage.groupAllowFrom: Gruppen-Absender-Allowlist.channels.imessage.historyLimit/channels.imessage.accounts.*.historyLimit: Maximale Anzahl an Gruppennachrichten, die als Kontext einbezogen werden (0 deaktiviert).channels.imessage.dmHistoryLimit: DM-Historienlimit in Benutzerzügen. Pro-Benutzer-Overrides:channels.imessage.dms["<handle>"].historyLimit.channels.imessage.groups: Pro-Gruppen-Standards + Allowlist (verwenden Sie"*"für globale Standards).channels.imessage.includeAttachments: Anhänge in den Kontext aufnehmen.channels.imessage.mediaMaxMb: Eingehendes/ausgehendes Medienlimit (MB).channels.imessage.textChunkLimit: Größe der ausgehenden Segmente (Zeichen).channels.imessage.chunkMode:length(Standard) odernewline, um an Leerzeilen (Absatzgrenzen) vor der Längensegmentierung zu trennen.
agents.list[].groupChat.mentionPatterns(odermessages.groupChat.mentionPatterns).messages.responsePrefix.