Aller au contenu

iMessage

Statut : intégration externe CLI héritée. Gateway génère imsg rpc et communique via JSON-RPC sur stdio (pas de démon/porte séparé).

BlueBubbles (recommended)

Chemin iMessage privilégié pour les nouvelles configurations.

Appairage

Les iMessage iMessage sont en mode appairage par défaut.

Référence de configuration

Référence complète des champs iMessage.

  1. Installer et vérifier imsg

    Fenêtre de terminal
    brew install steipete/tap/imsg
    imsg rpc --help
  2. Configurer OpenClaw

    {
    channels: {
    imessage: {
    enabled: true,
    cliPath: "/usr/local/bin/imsg",
    dbPath: "/Users/

    /Library/Messages/chat.db”, }, }, }

  3. Démarrer la passerelle

    Fenêtre de terminal
    openclaw gateway
  4. Approuver le premier appariement DM (dmPolicy par défaut)

    Fenêtre de terminal
    openclaw pairing list imessage
    openclaw pairing approve imessage
    Les demandes d'appariement expirent après 1 heure.
  • Messages doit être connecté sur le Mac exécutant imsg.
  • L’accès complet au disque est requis pour le contexte de processus exécutant OpenClaw/imsg (accès à la base de données Messages).
  • L’autorisation d’automatisation est requise pour envoyer des messages via Messages.app.

channels.imessage.dmPolicy contrôle les messages directs :

  • pairing (par défaut)
  • allowlist
  • open (nécessite que allowFrom inclue "*")
  • disabled

Champ de liste d’autorisation : channels.imessage.allowFrom.

Les entrées de la liste d’autorisation peuvent être des identifiants ou des cibles de chat (chat_id:*, chat_guid:*, chat_identifier:*).

Les chats iMessage hérités peuvent également être liés à des sessions ACP.

Flux rapide pour l’opérateur :

  • Exécutez /acp spawn codex --bind here dans le DM ou le chat de groupe autorisé.
  • Les futurs messages de cette même conversation iMessage sont routés vers la session ACP générée.
  • /new et /reset réinitialisent la même session ACP liée en place.
  • /acp close ferme la session ACP et supprime la liaison.

Les liaisons persistantes configurées sont prises en charge via des entrées bindings[] de niveau supérieur avec type: "acp" et match.channel: "imessage".

match.peer.id peut utiliser :

` (recommandé pour les liaisons de groupe stables)

  • `chat_guid:

`

  • `chat_identifier:

`

Exemple :

{
agents: {
list: [
{
id: "codex",
runtime: {
type: "acp",
acp: { agent: "codex", backend: "acpx", mode: "persistent" },
},
},
],
},
bindings: [
{
type: "acp",
agentId: "codex",
match: {
channel: "imessage",
accountId: "default",
peer: { kind: "group", id: "chat_id:123" },
},
acp: { label: "codex-group" },
},
],
}

Voir ACP Agents pour le comportement de liaison ACP partagé.

Utilisateur macOS dédié au bot (identité iMessage distincte)

Utilisez un Apple ID et un utilisateur macOS dédiés afin que le trafic du bot soit isolé de votre profil personnel Messages.

Flux type :

  1. Créez/connectez-vous avec un utilisateur macOS dédié.
  2. Connectez-vous à Messages avec l’Apple ID du bot dans cet utilisateur.
  3. Installez imsg dans cet utilisateur.
  4. Créez un wrapper SSH pour qu’OpenClaw puisse exécuter imsg dans le contexte de cet utilisateur.
  5. Pointez `channels.imessage.accounts.

.cliPathet.dbPath` vers ce profil utilisateur.

La première exécution peut nécessiter des approbations de l'interface graphique (Automatisation + Accès complet au disque) dans la session de cet utilisateur bot.
Mac distant via Tailscale (exemple)
Topologie courante :
- la passerelle s'exécute sur Linux/VM
- iMessage + `imsg` s'exécute sur un Mac dans votre tailnet
- le wrapper `cliPath` utilise SSH pour exécuter `imsg`
- `remoteHost` active la récupération des pièces jointes SCP
Exemple :
{
channels: {
imessage: {
enabled: true,
cliPath: "~/.openclaw/scripts/imsg-ssh",
remoteHost: "[email protected]",
includeAttachments: true,
dbPath: "/Users/bot/Library/Messages/chat.db",
},
},
}
#!/usr/bin/env bash
exec ssh -T [email protected] imsg "$@"
Utilisez des clés SSH pour que SSH et SCP soient non interactifs.
Assurez-vous que la clé de l'hôte est d'abord approuvée (par exemple `ssh [email protected]`) afin que `known_hosts` soit rempli.
Multi-account pattern

iMessage prend en charge la configuration par compte sous channels.imessage.accounts.

Chaque compte peut remplacer des champs tels que cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, les paramètres d’historique et les listes d’autorisation des racines de pièces jointes.

Pièces jointes et médias
  • l’ingestion des pièces jointes entrantes est facultative : channels.imessage.includeAttachments
  • les chemins distants des pièces jointes peuvent être récupérés via SCP lorsque remoteHost est défini
  • les chemins des pièces jointes doivent correspondre aux racines autorisées :
    • channels.imessage.attachmentRoots (local)
    • channels.imessage.remoteAttachmentRoots (mode SCP distant)
    • modèle de racine par défaut : /Users/*/Library/Messages/Attachments
  • SCP utilise une vérification stricte de la clé hôte (StrictHostKeyChecking=yes)
  • la taille des médias sortants utilise channels.imessage.mediaMaxMb (par défaut 16 Mo)
Découpage sortant
  • limite de chunk de texte : channels.imessage.textChunkLimit (par défaut 4000) - mode de découpage : channels.imessage.chunkMode - length (par défaut) - newline (découpage paragraphe en premier)
Formats d'adressage
Cibles explicites préférées :
- `chat_id:123` (recommandé pour un acheminement stable)
- `chat_guid:...`
- `chat_identifier:...`
Les cibles de gestionnaire sont également prises en charge :
- `imessage:+1555...`
- `sms:+1555...`
Fenêtre de terminal
imsg chats --limit 20

iMessage permet par défaut les écritures de configuration initiées par le canal (pour /config set|unset quand commands.config: true).

Désactiver :

{
channels: {
imessage: {
configWrites: false,
},
},
}
imsg introuvable ou RPC non pris en charge
Validez le binaire et la prise en charge RPC :
Fenêtre de terminal
imsg rpc --help
openclaw channels status --probe
Si la sonde indique que RPC n'est pas pris en charge, mettez à jour `imsg`.
Les DMs sont ignorés

Vérifiez :

  • channels.imessage.dmPolicy
  • channels.imessage.allowFrom
  • les approbations d’appariement (openclaw pairing list imessage)
Les messages de groupe sont ignorés

Vérifiez :

  • channels.imessage.groupPolicy
  • channels.imessage.groupAllowFrom
  • channels.imessage.groups comportement de la liste d’autorisation
  • configuration du modèle de mention (agents.list[].groupChat.mentionPatterns)
Échec des pièces jointes distantes

Vérifiez :

  • channels.imessage.remoteHost
  • channels.imessage.remoteAttachmentRoots
  • authentification par clé SSH/SCP depuis l’hôte de la passerelle
  • la clé de l’hôte existe dans ~/.ssh/known_hosts sur l’hôte de la passerelle
  • lisibilité du chemin distant sur le Mac exécutant Messages
Les invites d'autorisation macOS ont été manquées
Réexécutez dans un terminal GUI interactif dans le même contexte utilisateur/session et approuvez les invites :
Fenêtre de terminal
imsg chats --limit 1
imsg send

“test”

Confirmez que l'accès complet au disque + l'automatisation sont accordés pour le contexte de processus qui exécute OpenClaw/`imsg`.