Passer au contenu principal

iMessage (hérité : imsg)

Pour les nouveaux déploiements iMessage, utilisez BlueBubbles.L’intégration imsg est héritée et pourra être supprimée dans une future version.
Statut : intégration CLI externe héritée. Gateway lance imsg rpc et communique via JSON-RPC sur stdio (pas de démon/port séparé).

BlueBubbles (recommandé)

Voie iMessage privilégiée pour les nouvelles installations.

Appairage

Les DM iMessage utilisent par défaut le mode d’appairage.

Référence de configuration

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

Configuration rapide

1

Installer et vérifier imsg

brew install steipete/tap/imsg
imsg rpc --help
2

Configurer OpenClaw

{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "/usr/local/bin/imsg",
      dbPath: "/Users/<you>/Library/Messages/chat.db",
    },
  },
}
3

Démarrer gateway

openclaw gateway
4

Approuver le premier appairage de DM (dmPolicy par défaut)

openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
Les demandes d’appairage expirent après 1 heure.

Exigences et autorisations (macOS)

  • Messages doit être connecté sur le Mac qui exécute imsg.
  • Un accès complet au disque est requis pour le contexte de processus qui exécute OpenClaw/imsg (accès à la base de données Messages).
  • L’autorisation Automation est requise pour envoyer des messages via Messages.app.
Les autorisations sont accordées par contexte de processus. Si gateway s’exécute sans interface (LaunchAgent/SSH), exécutez une commande interactive unique dans ce même contexte pour déclencher les invites :
imsg chats --limit 1
# ou
imsg send <handle> "test"

Contrôle d’accès et routage

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 liste d’autorisation peuvent être des handles ou des cibles de chat (chat_id:*, chat_guid:*, chat_identifier:*).

Liaisons de conversation ACP

Les anciens chats iMessage peuvent aussi être liés à des sessions ACP. Flux opérateur rapide :
  • Exécutez /acp spawn codex --bind here dans le DM ou le chat de groupe autorisé.
  • Les messages suivants dans cette même conversation iMessage sont acheminés vers la session ACP lancée.
  • /new et /reset réinitialisent la même session ACP liée sur 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 :
  • un handle de DM normalisé tel que +15555550123 ou user@example.com
  • chat_id:<id> (recommandé pour des liaisons de groupe stables)
  • chat_guid:<guid>
  • chat_identifier:<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 Agents ACP pour le comportement partagé des liaisons ACP.

Modèles de déploiement

Utilisez un Apple ID et un utilisateur macOS dédiés afin d’isoler le trafic du bot de votre profil Messages personnel.Flux typique :
  1. Créez/connectez 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 afin qu’OpenClaw puisse exécuter imsg dans le contexte de cet utilisateur.
  5. Faites pointer channels.imessage.accounts.<id>.cliPath et .dbPath vers ce profil utilisateur.
La première exécution peut nécessiter des approbations GUI (Automation + accès complet au disque) dans la session de cet utilisateur bot.
Topologie courante :
  • gateway 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 les récupérations de pièces jointes via SCP
Exemple :
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "~/.openclaw/scripts/imsg-ssh",
      remoteHost: "bot@mac-mini.tailnet-1234.ts.net",
      includeAttachments: true,
      dbPath: "/Users/bot/Library/Messages/chat.db",
    },
  },
}
#!/usr/bin/env bash
exec ssh -T bot@mac-mini.tailnet-1234.ts.net imsg "$@"
Utilisez des clés SSH afin que SSH et SCP soient tous deux non interactifs. Assurez-vous d’abord que la clé d’hôte est approuvée (par exemple ssh bot@mac-mini.tailnet-1234.ts.net) afin que known_hosts soit renseigné.
iMessage prend en charge une 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.

Médias, segmentation et cibles de livraison

  • l’ingestion des pièces jointes entrantes est facultative : channels.imessage.includeAttachments
  • les chemins de pièces jointes distants peuvent être récupérés via SCP lorsque remoteHost est défini
  • les chemins de pièces jointes doivent correspondre aux racines autorisées :
    • channels.imessage.attachmentRoots (local)
    • channels.imessage.remoteAttachmentRoots (mode SCP distant)
    • motif de racine par défaut : /Users/*/Library/Messages/Attachments
  • SCP utilise une vérification stricte de la clé d’hôte (StrictHostKeyChecking=yes)
  • la taille des médias sortants utilise channels.imessage.mediaMaxMb (16 MB par défaut)
  • limite de segmentation du texte : channels.imessage.textChunkLimit (4000 par défaut)
  • mode de segmentation : channels.imessage.chunkMode
    • length (par défaut)
    • newline (segmentation en privilégiant les paragraphes)
Cibles explicites recommandées :
  • chat_id:123 (recommandé pour un routage stable)
  • chat_guid:...
  • chat_identifier:...
Les cibles handle sont également prises en charge :
  • imessage:+1555...
  • sms:+1555...
  • user@example.com
imsg chats --limit 20

Écritures de configuration

iMessage autorise par défaut les écritures de configuration initiées par le canal (pour /config set|unset lorsque commands.config: true). Désactiver :
{
  channels: {
    imessage: {
      configWrites: false,
    },
  },
}

Dépannage

Validez le binaire et la prise en charge RPC :
imsg rpc --help
openclaw channels status --probe
Si la sonde indique que RPC n’est pas pris en charge, mettez imsg à jour.
Vérifiez :
  • channels.imessage.dmPolicy
  • channels.imessage.allowFrom
  • les approbations d’appairage (openclaw pairing list imessage)
Vérifiez :
  • channels.imessage.groupPolicy
  • channels.imessage.groupAllowFrom
  • le comportement de liste d’autorisation de channels.imessage.groups
  • la configuration des motifs de mention (agents.list[].groupChat.mentionPatterns)
Vérifiez :
  • channels.imessage.remoteHost
  • channels.imessage.remoteAttachmentRoots
  • l’authentification par clé SSH/SCP depuis l’hôte gateway
  • la présence de la clé d’hôte dans ~/.ssh/known_hosts sur l’hôte gateway
  • la lisibilité du chemin distant sur le Mac exécutant Messages
Réexécutez dans un terminal GUI interactif dans le même contexte utilisateur/session et approuvez les invites :
imsg chats --limit 1
imsg send <handle> "test"
Confirmez qu’Accès complet au disque + Automation sont accordés pour le contexte de processus qui exécute OpenClaw/imsg.

Pointeurs de référence de configuration

Liens associés