Vai al contenuto principale

iMessage (legacy: imsg)

Per i nuovi deployment iMessage, usa BlueBubbles.L’integrazione imsg è legacy e potrebbe essere rimossa in una futura release.
Stato: integrazione CLI esterna legacy. Il gateway avvia imsg rpc e comunica tramite JSON-RPC su stdio (nessun daemon/porta separato).

BlueBubbles (recommended)

Percorso iMessage preferito per le nuove configurazioni.

Pairing

I DM di iMessage usano per impostazione predefinita la modalità pairing.

Configuration reference

Riferimento completo dei campi iMessage.

Configurazione rapida

1

Install and verify imsg

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

Configure OpenClaw

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

Start gateway

openclaw gateway
4

Approve first DM pairing (default dmPolicy)

openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
Le richieste di pairing scadono dopo 1 ora.

Requisiti e permessi (macOS)

  • Messages deve aver effettuato l’accesso sul Mac che esegue imsg.
  • È richiesto l’accesso completo al disco per il contesto di processo che esegue OpenClaw/imsg (accesso al DB di Messages).
  • È richiesto il permesso Automazione per inviare messaggi tramite Messages.app.
I permessi vengono concessi per contesto di processo. Se il gateway viene eseguito headless (LaunchAgent/SSH), esegui un comando interattivo una tantum nello stesso contesto per attivare le richieste:
imsg chats --limit 1
# oppure
imsg send <handle> "test"

Controllo degli accessi e instradamento

channels.imessage.dmPolicy controlla i messaggi diretti:
  • pairing (predefinito)
  • allowlist
  • open (richiede che allowFrom includa "*")
  • disabled
Campo allowlist: channels.imessage.allowFrom.Le voci allowlist possono essere handle o destinazioni chat (chat_id:*, chat_guid:*, chat_identifier:*).

Binding delle conversazioni ACP

Le chat iMessage legacy possono anche essere associate a sessioni ACP. Flusso operativo rapido:
  • Esegui /acp spawn codex --bind here nel DM o nella chat di gruppo consentita.
  • I messaggi futuri nella stessa conversazione iMessage verranno instradati alla sessione ACP generata.
  • /new e /reset reimpostano sul posto la stessa sessione ACP associata.
  • /acp close chiude la sessione ACP e rimuove l’associazione.
Le associazioni persistenti configurate sono supportate tramite voci bindings[] di primo livello con type: "acp" e match.channel: "imessage". match.peer.id può usare:
  • handle DM normalizzato come +15555550123 oppure user@example.com
  • chat_id:<id> (consigliato per binding di gruppo stabili)
  • chat_guid:<guid>
  • chat_identifier:<identifier>
Esempio:
{
  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" },
    },
  ],
}
Consulta ACP Agents per il comportamento condiviso dei binding ACP.

Pattern di deployment

Usa un Apple ID e un utente macOS dedicati, così il traffico del bot rimane isolato dal tuo profilo personale di Messages.Flusso tipico:
  1. Crea/accedi con un utente macOS dedicato.
  2. Accedi a Messages con l’Apple ID del bot per quell’utente.
  3. Installa imsg per quell’utente.
  4. Crea un wrapper SSH così OpenClaw può eseguire imsg nel contesto di quell’utente.
  5. Imposta channels.imessage.accounts.<id>.cliPath e .dbPath sul profilo di quell’utente.
La prima esecuzione può richiedere approvazioni GUI (Automazione + Accesso completo al disco) nella sessione utente del bot.
Topologia comune:
  • il gateway viene eseguito su Linux/VM
  • iMessage + imsg vengono eseguiti su un Mac nella tua tailnet
  • il wrapper cliPath usa SSH per eseguire imsg
  • remoteHost abilita il recupero degli allegati tramite SCP
Esempio:
{
  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 "$@"
Usa chiavi SSH così sia SSH sia SCP siano non interattivi. Assicurati prima che la chiave host sia affidabile (ad esempio ssh bot@mac-mini.tailnet-1234.ts.net) così known_hosts venga popolato.
iMessage supporta la configurazione per account sotto channels.imessage.accounts.Ogni account può sovrascrivere campi come cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, impostazioni della cronologia e allowlist delle radici degli allegati.

Supporti multimediali, suddivisione e destinazioni di consegna

  • l’acquisizione degli allegati in ingresso è facoltativa: channels.imessage.includeAttachments
  • i percorsi degli allegati remoti possono essere recuperati tramite SCP quando remoteHost è impostato
  • i percorsi degli allegati devono corrispondere alle radici consentite:
    • channels.imessage.attachmentRoots (locale)
    • channels.imessage.remoteAttachmentRoots (modalità SCP remota)
    • pattern radice predefinito: /Users/*/Library/Messages/Attachments
  • SCP usa la verifica rigorosa della chiave host (StrictHostKeyChecking=yes)
  • la dimensione dei media in uscita usa channels.imessage.mediaMaxMb (predefinito 16 MB)
  • limite di suddivisione del testo: channels.imessage.textChunkLimit (predefinito 4000)
  • modalità di suddivisione: channels.imessage.chunkMode
    • length (predefinita)
    • newline (suddivisione prima per paragrafi)
Destinazioni esplicite consigliate:
  • chat_id:123 (consigliato per un instradamento stabile)
  • chat_guid:...
  • chat_identifier:...
Sono supportate anche le destinazioni handle:
  • imessage:+1555...
  • sms:+1555...
  • user@example.com
imsg chats --limit 20

Scritture di configurazione

iMessage consente per impostazione predefinita scritture di configurazione avviate dal canale (per /config set|unset quando commands.config: true). Disabilitazione:
{
  channels: {
    imessage: {
      configWrites: false,
    },
  },
}

Risoluzione dei problemi

Convalida il binario e il supporto RPC:
imsg rpc --help
openclaw channels status --probe
Se il probe segnala che RPC non è supportato, aggiorna imsg.
Verifica:
  • channels.imessage.dmPolicy
  • channels.imessage.allowFrom
  • approvazioni pairing (openclaw pairing list imessage)
Verifica:
  • channels.imessage.groupPolicy
  • channels.imessage.groupAllowFrom
  • comportamento allowlist di channels.imessage.groups
  • configurazione dei pattern di menzione (agents.list[].groupChat.mentionPatterns)
Verifica:
  • channels.imessage.remoteHost
  • channels.imessage.remoteAttachmentRoots
  • autenticazione con chiave SSH/SCP dall’host gateway
  • la chiave host esiste in ~/.ssh/known_hosts sull’host gateway
  • leggibilità del percorso remoto sul Mac che esegue Messages
Esegui di nuovo in un terminale GUI interattivo nello stesso contesto utente/sessione e approva le richieste:
imsg chats --limit 1
imsg send <handle> "test"
Conferma che Accesso completo al disco + Automazione siano concessi al contesto di processo che esegue OpenClaw/imsg.

Puntatori al riferimento di configurazione

Correlati

  • Channels Overview — tutti i canali supportati
  • Pairing — autenticazione DM e flusso pairing
  • Groups — comportamento delle chat di gruppo e controllo delle menzioni
  • Channel Routing — instradamento delle sessioni per i messaggi
  • Security — modello di accesso e hardening