Plateformes de messagerie
iMessage
⚠️ Pour les nouveaux déploiements iMessage, utilisez BlueBubbles. L'intégration
imsgest héritée et pourrait être supprimée dans une future version.
Statut : intégration CLI externe héritée. La passerelle lance imsg rpc et communique via JSON-RPC sur stdio (pas de démon/port séparé).
Configuration rapide
Prérequis et permissions (macOS)
- L'application Messages doit être connectée 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). - La permission d'automatisation est requise pour envoyer des messages via Messages.app.
💡 Les permissions sont accordées par contexte de processus. Si la passerelle s'exécute sans interface (LaunchAgent/SSH), exécutez une commande interactive unique dans ce même contexte pour déclencher les invites :
Copier
imsg chats --limit 1# ouimsg send <handle> "test"
Contrôle d'accès et routage
channels.imessage.dmPolicy contrôle les messages directs :
pairing(par défaut)allowlistopen(nécessite queallowFrominclue"*")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 discussion (chat_id:*, chat_guid:*, chat_identifier:*).
channels.imessage.groupPolicy contrôle la gestion des groupes :
allowlist(par défaut lorsqu'il est configuré)opendisabled
Liste d'autorisation des expéditeurs de groupe : channels.imessage.groupAllowFrom.Fallback d'exécution : si groupAllowFrom n'est pas défini, les vérifications de l'expéditeur de groupe iMessage utilisent allowFrom lorsqu'il est disponible. Note d'exécution : si channels.imessage est complètement absent, l'exécution utilise groupPolicy="allowlist" et enregistre un avertissement (même si channels.defaults.groupPolicy est défini).Contrôle des mentions pour les groupes :
- iMessage n'a pas de métadonnées de mention natives
- la détection des mentions utilise des motifs regex (
agents.list[].groupChat.mentionPatterns, fallbackmessages.groupChat.mentionPatterns) - sans motifs configurés, le contrôle des mentions ne peut pas être appliqué
Les commandes de contrôle des expéditeurs autorisés peuvent contourner le contrôle des mentions dans les groupes.
- Les messages directs utilisent le routage direct ; les groupes utilisent le routage de groupe.
- Avec
session.dmScope=mainpar défaut, les messages directs iMessage sont regroupés dans la session principale de l'agent. - Les sessions de groupe sont isolées (
agent::imessage:group:<chat_id>). - Les réponses sont routées vers iMessage en utilisant les métadonnées du canal/cible d'origine.
Comportement de fil de discussion de type groupe :Certains fils de discussion iMessage multi-participants peuvent arriver avec is_group=false. Si ce chat_id est explicitement configuré sous channels.imessage.groups, OpenClaw le traite comme du trafic de groupe (contrôle de groupe + isolation de session de groupe).
Modèles de déploiement
Utilisez un identifiant Apple et un utilisateur macOS dédiés pour isoler le trafic du bot de votre profil Messages personnel.Flux typique :
- Créez/connectez un utilisateur macOS dédié.
- Connectez-vous à Messages avec l'identifiant Apple du bot dans cet utilisateur.
- Installez
imsgdans cet utilisateur. - Créez un wrapper SSH pour qu'OpenClaw puisse exécuter
imsgdans le contexte de cet utilisateur. - Pointez
channels.imessage.accounts..cliPathet.dbPathvers le profil de cet utilisateur.
Le premier lancement peut nécessiter des approbations via l'interface graphique (Automatisation + Accès complet au disque) dans la session de l'utilisateur bot.
Topologie courante :
- la passerelle s'exécute sur Linux/VM
- iMessage +
imsgs'exécute sur un Mac dans votre tailnet - le wrapper
cliPathutilise SSH pour exécuterimsg remoteHostactive la récupération des 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 pour que SSH et SCP soient non interactifs. Assurez-vous d'abord que la clé hôte est approuvée (par exemple ssh bot@mac-mini.tailnet-1234.ts.net) pour que known_hosts soit rempli.
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 racine des pièces jointes.
Médias, fragmentation et cibles d'envoi
-
l'ingestion des pièces jointes entrantes est optionnelle :
channels.imessage.includeAttachments -
les chemins distants des pièces jointes peuvent être récupérés via SCP lorsque
remoteHostest défini -
les chemins des pièces jointes doivent correspondre aux racines autorisées :
channels.imessage.attachmentRoots(local)channels.imessage.remoteAttachmentRoots(mode SCP distant)- motif racine par défaut :
/Users/*/Library/Messages/Attachments
-
SCP utilise une vérification stricte des clés hôtes (
StrictHostKeyChecking=yes) -
la taille des médias sortants utilise
channels.imessage.mediaMaxMb(16 Mo par défaut) -
limite de fragmentation de texte :
channels.imessage.textChunkLimit(4000 par défaut) -
mode de fragmentation :
channels.imessage.chunkModelength(par défaut)newline(division par paragraphe en priorité)
Cibles explicites préférées :
chat_id:123(recommandé pour un routage stable)chat_guid:...chat_identifier:...
Les cibles par identifiant 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ésactivez :
{
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 signale que RPC n'est pas pris en charge, mettez à jour imsg.
Vérifiez :
channels.imessage.dmPolicychannels.imessage.allowFrom- les approbations d'appairage (
openclaw pairing list imessage)
Vérifiez :
channels.imessage.groupPolicychannels.imessage.groupAllowFrom- le comportement de la liste d'autorisation
channels.imessage.groups - la configuration des motifs de mention (
agents.list[].groupChat.mentionPatterns)
Vérifiez :
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- l'authentification par clé SSH/SCP depuis l'hôte de la passerelle
- la clé hôte existe dans
~/.ssh/known_hostssur l'hôte de la passerelle - la lisibilité du chemin distant sur le Mac exécutant Messages
Ré-exécutez dans un terminal graphique interactif dans le même contexte utilisateur/session et approuvez les invites :
imsg chats --limit 1
imsg send <handle> "test"
Confirmez que l'Accès complet au disque + l'Automatisation sont accordés pour le contexte de processus qui exécute OpenClaw/imsg.