Перейти до основного вмісту

iMessage (застаріле: imsg)

Для нових розгортань iMessage використовуйте BlueBubbles.Інтеграція imsg є застарілою та може бути видалена в одному з майбутніх випусків.
Стан: застаріла зовнішня інтеграція CLI. Gateway запускає imsg rpc і обмінюється даними через JSON-RPC по stdio (без окремого демона/порту).

BlueBubbles (рекомендовано)

Бажаний шлях iMessage для нових налаштувань.

Прив’язка

Для приватних повідомлень iMessage типово використовується режим прив’язки.

Довідник з конфігурації

Повний довідник полів iMessage.

Швидке налаштування

1

Установіть і перевірте imsg

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

Налаштуйте OpenClaw

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

Запустіть gateway

openclaw gateway
4

Підтвердьте першу прив’язку приватного повідомлення (типова `dmPolicy`)

openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
Запити на прив’язку спливають через 1 годину.

Вимоги та дозволи (macOS)

  • У Messages має бути виконано вхід на Mac, де працює imsg.
  • Для контексту процесу, у якому працює OpenClaw/imsg, потрібен Full Disk Access (доступ до бази даних Messages).
  • Для надсилання повідомлень через Messages.app потрібен дозвіл Automation.
Дозволи надаються для кожного контексту процесу окремо. Якщо gateway працює без графічного інтерфейсу (LaunchAgent/SSH), виконайте одноразову інтерактивну команду в цьому самому контексті, щоб викликати підказки:
imsg chats --limit 1
# або
imsg send <handle> "test"

Керування доступом і маршрутизація

channels.imessage.dmPolicy керує прямими повідомленнями:
  • pairing (типово)
  • allowlist
  • open (потрібно, щоб allowFrom включав "*")
  • disabled
Поле allowlist: channels.imessage.allowFrom.Записи allowlist можуть бути дескрипторами або цілями чату (chat_id:*, chat_guid:*, chat_identifier:*).

Прив’язки розмов ACP

Застарілі чати iMessage також можна прив’язувати до сесій ACP. Швидкий операторський сценарій:
  • Виконайте /acp spawn codex --bind here у приватному повідомленні або дозволеному груповому чаті.
  • Подальші повідомлення в цій самій розмові iMessage маршрутизуються до створеної сесії ACP.
  • /new і /reset скидають цю саму прив’язану сесію ACP на місці.
  • /acp close закриває сесію ACP і видаляє прив’язку.
Налаштовані постійні прив’язки підтримуються через записи верхнього рівня bindings[] з type: "acp" і match.channel: "imessage". match.peer.id може використовувати:
  • нормалізований дескриптор приватного повідомлення, наприклад +15555550123 або user@example.com
  • chat_id:<id> (рекомендовано для стабільних групових прив’язок)
  • chat_guid:<guid>
  • chat_identifier:<identifier>
Приклад:
{
  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" },
    },
  ],
}
Див. ACP Agents щодо спільної поведінки прив’язок ACP.

Сценарії розгортання

Використовуйте окремий Apple ID і користувача macOS, щоб трафік бота був ізольований від вашого особистого профілю Messages.Типовий сценарій:
  1. Створіть окремого користувача macOS і ввійдіть у нього.
  2. Увійдіть у Messages з Apple ID бота в цьому користувачі.
  3. Установіть imsg у цього користувача.
  4. Створіть SSH-обгортку, щоб OpenClaw міг запускати imsg у контексті цього користувача.
  5. Вкажіть channels.imessage.accounts.<id>.cliPath і .dbPath на профіль цього користувача.
Перший запуск може вимагати підтверджень у графічному інтерфейсі (Automation + Full Disk Access) у сесії цього користувача бота.
Поширена топологія:
  • gateway працює на Linux/VM
  • iMessage + imsg працює на Mac у вашій tailnet
  • обгортка cliPath використовує SSH для запуску imsg
  • remoteHost вмикає отримання вкладень через SCP
Приклад:
{
  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 "$@"
Використовуйте ключі SSH, щоб і SSH, і SCP були неінтерактивними. Спочатку переконайтеся, що ключ хоста довірений (наприклад, ssh bot@mac-mini.tailnet-1234.ts.net), щоб заповнити known_hosts.
iMessage підтримує конфігурацію для кожного облікового запису окремо в channels.imessage.accounts.Для кожного облікового запису можна перевизначити такі поля, як cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, налаштування історії та allowlist коренів вкладень.

Медіа, фрагментація та цілі доставки

  • отримання вхідних вкладень є необов’язковим: channels.imessage.includeAttachments
  • шляхи віддалених вкладень можна отримувати через SCP, коли задано remoteHost
  • шляхи вкладень мають відповідати дозволеним кореням:
    • channels.imessage.attachmentRoots (локально)
    • channels.imessage.remoteAttachmentRoots (віддалений режим SCP)
    • типовий шаблон кореня: /Users/*/Library/Messages/Attachments
  • SCP використовує сувору перевірку ключа хоста (StrictHostKeyChecking=yes)
  • розмір вихідного медіа керується channels.imessage.mediaMaxMb (типово 16 MB)
  • ліміт фрагмента тексту: channels.imessage.textChunkLimit (типово 4000)
  • режим фрагментації: channels.imessage.chunkMode
    • length (типово)
    • newline (розбиття спочатку за абзацами)
Бажані явні цілі:
  • chat_id:123 (рекомендовано для стабільної маршрутизації)
  • chat_guid:...
  • chat_identifier:...
Також підтримуються цілі-дескриптори:
  • imessage:+1555...
  • sms:+1555...
  • user@example.com
imsg chats --limit 20

Запис конфігурації

iMessage типово дозволяє ініційований каналом запис конфігурації (для /config set|unset, коли commands.config: true). Вимкнення:
{
  channels: {
    imessage: {
      configWrites: false,
    },
  },
}

Усунення несправностей

Перевірте бінарний файл і підтримку RPC:
imsg rpc --help
openclaw channels status --probe
Якщо probe повідомляє, що RPC не підтримується, оновіть imsg.
Перевірте:
  • channels.imessage.dmPolicy
  • channels.imessage.allowFrom
  • підтвердження прив’язки (openclaw pairing list imessage)
Перевірте:
  • channels.imessage.groupPolicy
  • channels.imessage.groupAllowFrom
  • поведінку allowlist для channels.imessage.groups
  • налаштування шаблонів згадок (agents.list[].groupChat.mentionPatterns)
Перевірте:
  • channels.imessage.remoteHost
  • channels.imessage.remoteAttachmentRoots
  • автентифікацію ключами SSH/SCP з хоста gateway
  • наявність ключа хоста в ~/.ssh/known_hosts на хості gateway
  • читабельність віддаленого шляху на Mac, де працює Messages
Повторно виконайте в інтерактивному GUI-терміналі в тому самому контексті користувача/сесії та підтвердьте підказки:
imsg chats --limit 1
imsg send <handle> "test"
Переконайтеся, що Full Disk Access і Automation надано для контексту процесу, у якому працює OpenClaw/imsg.

Вказівники на довідкові матеріали з конфігурації

Пов’язане