imsg на тому самому хості macOS із виконаним входом у Messages. Якщо Gateway працює в іншому місці, укажіть для channels.imessage.cliPath прозору SSH-обгортку, яка запускає imsg на Mac.Відновлення вхідних повідомлень відбувається автоматично. Після перезапуску мосту або Gateway iMessage повторно відтворює повідомлення, пропущені під час простою, і пригнічує застарілу «лавину накопичених повідомлень», яку Apple може надіслати після відновлення Push, усуваючи дублікати, щоб жодне повідомлення не було передано двічі. Для ввімкнення не потрібна конфігурація — див. Відновлення вхідних повідомлень після перезапуску мосту або Gateway.imsg rpc і взаємодіє через JSON-RPC у stdio — без окремого демона чи порту. Для повноцінного каналу iMessage наполегливо рекомендовано режим Private API; відповіді, реакції tapback, ефекти, опитування, відповіді на вкладення та групові дії потребують imsg launch й успішної перевірки Private API.
Для поширеного локального налаштування майстер OpenClaw може запропонувати підтверджене користувачем установлення або оновлення imsg через Homebrew на Mac із виконаним входом у Messages. Ручне налаштування й топології з SSH-обгорткою залишаються під керуванням оператора: установлюйте або оновлюйте imsg у тому самому користувацькому контексті, у якому працюватиме Gateway або обгортка.
Дії Private API
Сполучення
Віддалений Mac
Довідник із конфігурації
Швидке налаштування
- Локальний Mac (швидкий шлях)
- Віддалений Mac через SSH
Установіть і перевірте imsg
imsg, він може запропонувати встановити steipete/tap/imsg через Homebrew. Якщо він виявляє керований Homebrew компонент imsg, то може запропонувати повторно встановити або оновити його. Користувацькі обгортки cliPath не змінюються.Налаштуйте OpenClaw
Запустіть Gateway
Схваліть перше сполучення для приватних повідомлень (типова dmPolicy)
Вимоги та дозволи (macOS)
- На Mac, де працює
imsg, має бути виконано вхід у Messages. - Для контексту процесу, у якому працює OpenClaw/
imsg, потрібен Full Disk Access (для доступу до бази даних Messages). - Для надсилання повідомлень через Messages.app потрібен дозвіл Automation.
- Для розширених дій (реакція / редагування / скасування надсилання / відповідь у гілці / ефекти / опитування / групові операції) потрібно вимкнути System Integrity Protection — див. Увімкнення Private API imsg. Базове надсилання й отримання тексту та медіафайлів працює без цього.
Надсилання через SSH-обгортку завершується помилкою AppleEvents -1743
Надсилання через SSH-обгортку завершується помилкою AppleEvents -1743
channels status --probe та обробляти вхідні повідомлення, хоча надсилання вихідних повідомлень і далі завершується помилкою авторизації AppleEvents:/usr/libexec/sshd-keygen-wrapper, а не для imsg або процесу локальної оболонки, macOS може не показувати придатний перемикач Messages для цього серверного клієнта SSH:tccutil reset AppleEvents або повторний запуск imsg send через ту саму SSH-обгортку може й надалі завершуватися помилкою, оскільки доступ до Automation для Messages потрібен контексту процесу SSH-обгортки, а не застосунку, якому інтерфейс може надати дозвіл.Натомість використовуйте один із підтримуваних контекстів процесу imsg:- Запускайте Gateway або принаймні міст
imsgу локальному сеансі користувача, який увійшов у Messages. - Запускайте Gateway за допомогою LaunchAgent цього користувача після надання Full Disk Access і Automation у тому самому сеансі.
- Якщо зберігається двокористувацька топологія SSH, перед увімкненням каналу перевірте, що реальне вихідне надсилання
imsg sendуспішно виконується через цю точну обгортку. Якщо надати їй Automation неможливо, замість використання SSH-обгортки для надсилання перейдіть на однокористувацьку конфігураціюimsg.
Увімкнення Private API imsg
imsg постачається у двох режимах роботи. Для OpenClaw рекомендовано режим Private API, оскільки він надає каналу нативні дії iMessage, на які очікують користувачі. Базовий режим залишається корисним для встановлень із низьким ризиком, початкової перевірки або хостів, де SIP неможливо вимкнути.
- Базовий режим (типовий, не потребує змін SIP): вихідні текстові й медіаповідомлення через
send, спостереження за вхідними повідомленнями та історією, список чатів. Це доступно одразу після нового встановленняbrew install steipete/tap/imsgі надання стандартних дозволів macOS, зазначених вище. - Режим Private API:
imsgвпроваджує допоміжну dylib уMessages.appдля виклику внутрішніх функційIMCore. Це відкриває доступ доreact,edit,unsend,reply(у гілці),sendWithEffect,pollіpoll-vote(нативні опитування Messages),renameGroup,setGroupIcon,addParticipant,removeParticipant,leaveGroup, а також індикаторів набору тексту та сповіщень про прочитання.
imsg прямо зазначає цю вимогу:
Розширені функції, як-отМетод впровадження допоміжної бібліотеки використовує власну dylib компонентаread,typing,launch, розширене надсилання через міст, зміна повідомлень і керування чатами, є необов’язковими. Для них потрібно вимкнути SIP і впровадити допоміжну dylib уMessages.app.imsg launchвідмовляється виконувати впровадження, коли SIP увімкнено.
imsg для доступу до приватних API Messages. У шляху iMessage для OpenClaw немає стороннього сервера чи середовища виконання BlueBubbles.
Налаштування
-
Установіть (або оновіть)
imsgна Mac, де працює Messages.app:Вивідimsg status --jsonповідомляє проbridge_version,rpc_methodsіselectorsдля кожного методу, щоб перед початком роботи можна було побачити, що підтримує поточна збірка. -
Вимкніть захист цілісності системи, а в сучасних версіях macOS — також перевірку бібліотек. Для впровадження допоміжної бібліотеки dylib не від Apple у підписаний Apple процес
Messages.appпотрібно вимкнути SIP і послабити перевірку бібліотек. Крок із SIP у режимі відновлення залежить від версії macOS:- macOS 10.13–10.15 (Sierra–Catalina): вимкніть перевірку бібліотек через Terminal, перезавантажтеся в режим відновлення, виконайте
csrutil disable, перезапустіть систему. - macOS 11+ (Big Sur і новіші), Intel: перейдіть у режим відновлення (або відновлення через інтернет), виконайте
csrutil disable, перезапустіть систему. - macOS 11+, Apple Silicon: скористайтеся послідовністю запуску кнопкою живлення, щоб увійти в режим відновлення; у нових версіях macOS утримуйте клавішу Left Shift, коли натискаєте Continue, а потім виконайте
csrutil disable. Для віртуальних машин діє окрема процедура, тому спочатку створіть знімок віртуальної машини.
csrutil disableзазвичай недостатньо. Apple усе одно застосовує перевірку бібліотек доMessages.appяк до платформного виконуваного файла, тому допоміжний компонент зі спеціальним підписом відхиляється (Library Validation failed: ... platform binary, but mapped file is not) навіть за вимкненого SIP. Після вимкнення SIP також вимкніть перевірку бібліотек і перезавантажте систему:macOS 26 (Tahoe), перевірено у версії 26.5.1: вимкненого SIP разом із наведеною вище командоюDisableLibraryValidationдостатньо для впровадження допоміжного компонента у версіях від 26.0 до 26.5.x. Жодні параметри завантаження не потрібні. Вирішальним чинником є файл plist, і саме цей крок найчастіше пропускають, коли впровадження в Tahoe завершується невдало:- З файлом plist:
imsg launchвиконує впровадження, аimsg statusповідомляєadvanced_features: true. - Без файла plist (навіть за вимкненого SIP):
imsg launchзавершується помилкоюFailed to launch: Timeout waiting for Messages.app to initialize. AMFI відхиляє допоміжний компонент зі спеціальним підписом під час завантаження, тому міст не переходить у стан готовності, а запуск завершується через перевищення часу очікування. Саме з таким симптомом найчастіше стикаються в Tahoe; виправленням є наведений вище файл plist, а не радикальніше послаблення захисту.
imsg launchабо певніselectorsпочинають повертати false, звичайною причиною є ця перевірка. Перш ніж припускати, що сам крок із SIP не спрацював, перевірте стан SIP і перевірки бібліотек. Якщо ці параметри правильні, але міст усе одно не може виконати впровадження, зберітьimsg status --jsonразом із виводомimsg launchі повідомте про це в проєктimsg, замість того щоб додатково послаблювати загальносистемні засоби захисту. - macOS 10.13–10.15 (Sierra–Catalina): вимкніть перевірку бібліотек через Terminal, перезавантажтеся в режим відновлення, виконайте
-
Впровадьте допоміжний компонент. Коли SIP вимкнено, а в Messages.app виконано вхід:
imsg launchвідмовляється виконувати впровадження, якщо SIP усе ще ввімкнено, тож це також підтверджує успішність кроку 2. -
Перевірте міст з OpenClaw:
Запис iMessage має повідомити
works, аimsg status --json | jq '{rpc_methods, selectors}'— показати можливості, доступні у вашій збірці macOS. Для створення опитувань потрібенselectors.pollPayloadMessage; для голосування потрібні іselectors.pollVoteMessage, і метод RPCpoll.vote. Plugin OpenClaw оголошує лише дії, підтримувані кешованою перевіркою, тоді як за порожнього кешу він оптимістично вважає їх доступними та виконує перевірку під час першого надсилання.
openclaw channels status --probe повідомляє, що канал має стан works, але певні дії під час надсилання спричиняють помилку “iMessage <action> requires the imsg private API bridge”, знову виконайте imsg launch — допоміжний компонент може від’єднатися (через перезапуск Messages.app, оновлення ОС тощо), а кешований стан available: true продовжуватиме оголошувати дії до наступного оновлення перевірки.
Коли SIP залишається ввімкненим
Якщо вимкнення SIP неприйнятне для вашої моделі загроз:imsgпереходить у базовий режим — лише текст, медіафайли та отримання.- Plugin OpenClaw усе одно оголошує надсилання тексту й медіафайлів та моніторинг вхідних повідомлень; він приховує
react,edit,unsend,reply,sendWithEffectі групові операції з поверхні дій (відповідно до перевірки можливостей для кожного методу). - Для навантаження iMessage можна використовувати окремий Mac без Apple Silicon (або спеціалізований Mac для бота) з вимкненим SIP, залишивши SIP увімкненим на основних пристроях. Див. нижче Спеціалізований користувач macOS для бота (окрема ідентичність iMessage).
Керування доступом і маршрутизація
- Політика приватних повідомлень
- Політика груп і згадки
- Сеанси й детерміновані відповіді
channels.imessage.dmPolicy керує приватними повідомленнями:pairing(типове значення)allowlist(потрібен принаймні один записallowFrom)open(потрібно, щобallowFromмістив"*")disabled
channels.imessage.allowFrom.Записи списку дозволених мають ідентифікувати відправників: дескриптори або статичні групи доступу відправників (accessGroup:<name>). Використовуйте channels.imessage.groupAllowFrom для цілей чатів, як-от chat_id:*, chat_guid:* або chat_identifier:*; використовуйте channels.imessage.groups для числових ключів реєстру chat_id.Прив’язки розмов 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>
Схеми розгортання
Спеціалізований користувач macOS для бота (окрема ідентичність iMessage)
Спеціалізований користувач macOS для бота (окрема ідентичність iMessage)
- Створіть окремого користувача macOS або ввійдіть до його облікового запису.
- Увійдіть у Messages за допомогою Apple ID бота в обліковому записі цього користувача.
- Установіть
imsgв обліковому записі цього користувача. - Створіть обгортку SSH, щоб OpenClaw міг запускати
imsgу контексті цього користувача. - Спрямуйте
channels.imessage.accounts.<id>.cliPathі.dbPathдо профілю цього користувача.
Віддалений Mac через Tailscale (приклад)
Віддалений Mac через Tailscale (приклад)
- Gateway працює на Linux/VM
- iMessage +
imsgпрацює на Mac у вашій мережі tailnet - Обгортка
cliPathвикористовує SSH для запускуimsg remoteHostуможливлює отримання вкладень через SCP
ssh bot@mac-mini.tailnet-1234.ts.net), щоб заповнити known_hosts.Схема з кількома обліковими записами
Схема з кількома обліковими записами
channels.imessage.accounts.Для кожного облікового запису можна перевизначити такі поля, як cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, налаштування історії та списки дозволених кореневих каталогів вкладень.Історія особистих повідомлень
Історія особистих повідомлень
channels.imessage.dmHistoryLimit, щоб додавати до нових сеансів особистих повідомлень нещодавню декодовану історію imsg для цієї розмови. Використовуйте channels.imessage.dms["<sender>"].historyLimit для перевизначень для окремих відправників, зокрема 0, щоб вимкнути історію для певного відправника.Історія особистих повідомлень iMessage отримується на вимогу з imsg. Якщо не задавати dmHistoryLimit, глобальне початкове заповнення історії особистих повідомлень буде вимкнено, але додатне значення channels.imessage.dms["<sender>"].historyLimit для окремого відправника все одно ввімкне початкове заповнення для нього.Медіафайли, поділ на фрагменти та цілі доставлення
Вкладення та медіафайли
Вкладення та медіафайли
- Приймання вхідних вкладень типово вимкнено — установіть
channels.imessage.includeAttachments: true, щоб передавати фотографії, голосові нотатки, відео та інші вкладення агенту. Коли цю функцію вимкнено, повідомлення iMessage, що містять лише вкладення, відкидаються до надходження агенту й можуть узагалі не створювати рядок журналуInbound message. - Шляхи до віддалених вкладень можна отримувати через 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.streaming.chunkModelength(типово)newline(поділ насамперед за абзацами)
- Вихідне форматування Markdown — напівжирний текст, курсив, підкреслення та закреслення — перетворюється на текст із нативними стилями (одержувачі з macOS 15+ бачать форматування, а зі старішими версіями — звичайний текст без маркерів); таблиці Markdown перетворюються відповідно до режиму таблиць Markdown каналу
channels.imessage.sendTransport(autoтипово,bridge,applescript) визначає, якimsgдоставляє надіслані повідомлення
Формати адресації
Формати адресації
chat_id:123(рекомендовано для стабільного маршрутизування)chat_guid:...chat_identifier:...
imessage:+1555...sms:+1555...user@example.com
Дії приватного API
Колиimsg launch працює, а openclaw channels status --probe повідомляє privateApi.available: true, інструмент повідомлень може використовувати нативні дії iMessage на додачу до звичайного надсилання тексту.
Усі дії типово ввімкнено; використовуйте channels.imessage.actions, щоб вимкнути окремі дії:
Доступні дії
Доступні дії
- react: Додає або видаляє реакції iMessage (
messageId,emoji,remove). Підтримувані реакції відповідають любові, схваленню, несхваленню, сміху, наголосу та запитанню. Видалення без емодзі очищує будь-яку встановлену реакцію. - reply: Надсилає відповідь у гілці на наявне повідомлення (
messageId,textабоmessage, а такожchatGuid,chatId,chatIdentifierабоto). Для відповіді з вкладенням додатково потрібна збіркаimsg, у якійsend-richпідтримує--file. - sendWithEffect: Надсилає текст з ефектом iMessage (
textабоmessage,effectабоeffectId). Короткі назви: slam, loud, gentle, invisibleink, confetti, lasers, fireworks, balloon, heart, echo, happybirthday, shootingstar, sparkles, spotlight. - edit: Редагує надіслане повідомлення в підтримуваних версіях macOS/приватного API (
messageId,textабоnewText). Редагувати можна лише повідомлення, надіслані самим Gateway. - unsend: Відкликає надіслане повідомлення в підтримуваних версіях macOS/приватного API (
messageId). Відкликати можна лише повідомлення, надіслані самим Gateway. - upload-file: Надсилає медіафайли/файли (
bufferу форматі base64 або завантаженийmedia/path/filePath,filename, необов’язковийasVoice). Застарілий псевдонім:sendAttachment. - renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup: Керують груповими чатами, коли поточною ціллю є групова розмова. Ці дії змінюють ідентичність Messages на хості, тому їх має виконувати відправник-власник або клієнт Gateway
operator.admin. - poll: Створює нативне опитування Apple Messages (
pollQuestion,pollOption, повторений від 2 до 12 разів, а такожchatGuid,chatId,chatIdentifierабоto). Одержувачі з iOS/iPadOS/macOS 26+ бачать його та голосують у нативному інтерфейсі; користувачі старіших версій ОС натомість отримують текст «Sent a poll». Потрібенselectors.pollPayloadMessage. - poll-vote: Голосує в наявному опитуванні (
pollIdабоmessageId, а також рівно один ізpollOptionIndex,pollOptionIdабоpollOptionText). Потрібніselectors.pollVoteMessageі метод RPCpoll.vote.
poll-vote.Ідентифікатори повідомлень
Ідентифікатори повідомлень
MessageSid, так і повні GUID повідомлень (MessageSidFull), якщо вони доступні. Короткі ідентифікатори діють у межах нещодавнього кешу відповідей на основі SQLite та перед використанням перевіряються щодо поточного чату. Якщо термін дії короткого ідентифікатора сплив, повторіть спробу з його MessageSidFull, указавши ціллю розмову, з якої його отримано. Повні ідентифікатори не обходять прив’язку до розмови або облікового запису, тому замініть ідентифікатор з іншого чату на ідентифікатор із поточної цілі. Віддалені делеговані виклики можуть відхиляти застарілі повні ідентифікатори, коли немає підтвердження їхньої належності до поточної розмови.Виявлення можливостей
Виявлення можливостей
imsg launch без окремого ручного оновлення стану.Сповіщення про прочитання та введення тексту
Сповіщення про прочитання та введення тексту
imsg, створених до появи списку можливостей для окремих методів, введення тексту та сповіщення про прочитання мовчки вимикаються; OpenClaw записує одноразове попередження після кожного перезапуску, щоб можна було визначити причину відсутності сповіщення.Вхідні реакції
Вхідні реакції
channels.imessage.reactionNotifications:"own"(типово): сповіщати лише тоді, коли користувачі реагують на повідомлення, створені ботом."all": сповіщати про всі вхідні реакції від авторизованих відправників."off": ігнорувати вхідні реакції.
channels.imessage.accounts.<id>.reactionNotifications.Реакції для схвалення (👍 / 👎)
Реакції для схвалення (👍 / 👎)
approvals.exec.enabled або approvals.plugin.enabled має значення true, а запит маршрутизується до iMessage, Gateway доставляє запит на схвалення в нативному форматі та приймає реакцію для його вирішення:👍(реакція Like) →allow-once👎(реакція Dislike) →denyallow-alwaysзалишається ручним запасним варіантом: надішліть/approve <id> allow-alwaysяк звичайну відповідь.
channels.imessage.allowFrom (або channels.imessage.accounts.<id>.allowFrom); додайте номер телефону користувача у форматі E.164 або адресу електронної пошти його Apple ID (цілі чату, як-от chat_id:*, не є допустимими записами цього списку). Запис із символом узагальнення "*" підтримується, але дає змогу будь-якому відправнику схвалювати запити; порожній список повністю вимикає швидке схвалення за допомогою реакції. Цей спосіб навмисно обходить reactionNotifications, dmPolicy і groupAllowFrom, оскільки для вирішення запиту на схвалення має значення лише явний список дозволених осіб.Авторизація текстової команди /approve використовує той самий список: коли channels.imessage.allowFrom не порожній, /approve <id> <decision> авторизується за цим списком осіб, уповноважених схвалювати запити (а не за ширшим списком дозволених особистих повідомлень), і відправники, яким дозволено надсилати особисті повідомлення, але яких немає в allowFrom, отримують явну відмову. Коли allowFrom порожній, продовжує діяти запасний механізм у межах того самого чату, а /approve авторизує всіх, кому дозволено надсилати особисті повідомлення. Додайте кожного оператора, який повинен мати змогу схвалювати запити — через /approve або за допомогою реакцій, — до allowFrom.Примітки для оператора:- Прив’язка реакції зберігається як у пам’яті, так і в постійному сховищі Gateway із ключами (TTL відповідає терміну дії схвалення), а Gateway також опитує запити, що очікують, щодо реакцій tapback, тож реакція tapback, яка надходить невдовзі після перезапуску Gateway, усе одно завершує схвалення.
- Власна реакція tapback оператора
is_from_me=true(наприклад, зі спареного пристрою Apple) завершує схвалення, якщо цей ідентифікатор явно вказано як схвалювача. - Запити на схвалення спрямовуються до групової розмови лише тоді, коли явно налаштовано схвалювачів; інакше схвалити міг би будь-який учасник групи.
- Застарілі текстові реакції tapback (
Liked "…"у вигляді звичайного тексту з дуже старих клієнтів Apple) не можуть завершувати схвалення, оскільки не містять GUID повідомлення; для визначення реакції потрібні структуровані метадані tapback, які надсилають сучасні клієнти macOS / iOS.
Запис конфігурації
iMessage за замовчуванням дозволяє ініційований каналом запис конфігурації (для/config set|unset, коли commands.config: true).
Щоб вимкнути:
Об’єднання розділених надсилань у приватних повідомленнях (команда + URL в одному введенні)
Коли користувач вводить разом команду та URL — наприклад,Dump https://example.com/article — застосунок Apple Messages розділяє надсилання на два окремі рядки chat.db:
- Текстове повідомлення (
"Dump"). - Бульбашка попереднього перегляду URL (
"https://...") із зображеннями попереднього перегляду OG як вкладеннями.
imsg.
channels.imessage.coalesceSameSenderDms вмикає для приватної розмови буферизацію послідовних рядків від одного відправника. Коли imsg надає структурний маркер попереднього перегляду URL balloon_bundle_id: "com.apple.messages.URLBalloonProvider" в одному з вихідних рядків, OpenClaw об’єднує лише це справжнє розділене надсилання, а всі інші буферизовані рядки залишає окремими ходами. У старіших збірках imsg, які взагалі не надають метаданих бульбашки, OpenClaw не може відрізнити розділене надсилання від окремих надсилань, тому натомість об’єднує весь пакет. Це зберігає поведінку до появи метаданих і не допускає регресії, за якої розділені надсилання Dump <url> знову оброблялися б у два ходи. Групові чати й надалі обробляють кожне повідомлення окремо, щоб зберегти структуру ходів за участю кількох користувачів.
- Коли вмикати
- Увімкнення
- Компроміси
- Ви постачаєте Skills, які очікують
command + payloadв одному повідомленні (dump, paste, save, queue тощо). - Ваші користувачі вставляють URL разом із командами.
- Для вас прийнятна додаткова затримка ходу в приватній розмові (див. нижче).
- Вам потрібна мінімальна затримка команд для однослівних тригерів у приватних повідомленнях.
- Усі ваші потоки — одноразові команди без подальшого надсилання корисного навантаження.
Сценарії та те, що бачить агент
Стовпець «Прапорець увімкнено» показує поведінку збіркиimsg, яка надає balloon_bundle_id. У старіших збірках imsg, які взагалі не надають метаданих бульбашки, позначені нижче рядки «Два ходи» / «N ходів» натомість використовують застаріле об’єднання (один хід): OpenClaw не може структурно відрізнити розділене надсилання від окремих надсилань, тому зберігає об’єднання, що застосовувалося до появи метаданих. Точне розділення активується, коли збірка починає надавати метадані бульбашки.
Відновлення вхідних повідомлень після перезапуску мосту або Gateway
iMessage відновлює повідомлення, пропущені під час простою Gateway, і водночас пригнічує застарілу «лавину накопичених повідомлень», яку Apple може надіслати після відновлення Push. Ця типова поведінка завжди ввімкнена й побудована на усуненні дублікатів вхідних повідомлень.- Усунення дублікатів повторного відтворення. Кожне оброблене вхідне повідомлення записується за його Apple GUID у постійному стані Plugin (
imessage.inbound-dedupe): резервується під час приймання та фіксується після обробки (звільняється в разі тимчасової помилки, щоб повторити спробу). Усе вже оброблене відкидається замість повторної обробки. Завдяки цьому відновлення може активно повторно відтворювати повідомлення без окремого обліку кожного з них. - Відновлення після простою. Під час запуску монітор пам’ятає останній оброблений rowid
chat.db(збережений курсор для кожного облікового запису) і передає його доimsg watch.subscribeякsince_rowid, тому imsg повторно відтворює рядки, що надійшли під час простою Gateway, а потім переходить до відстеження в реальному часі. Повторне відтворення обмежене 500 найновішими рядками та повідомленнями віком до ~2 годин, а механізм усунення дублікатів відкидає все вже оброблене. - Часова межа для застарілих накопичених повідомлень. Рядки вище початкової межі справді надходять у реальному часі; якщо дата надсилання одного з них більш ніж на ~15 хвилин передує часу його надходження, це накопичені повідомлення після Push-відновлення, і вони пригнічуються. Для повторно відтворених рядків (на межі або нижче неї) натомість використовується ширше вікно відновлення, тому нещодавно пропущене повідомлення доставляється, а давня історія — ні.
cliPath, оскільки повторне відтворення since_rowid виконується через те саме RPC-з’єднання imsg. Відмінність полягає у вікні: коли Gateway може читати chat.db (локально), він прив’язується до початкової межі rowid, обмежує діапазон повторного відтворення й доставляє пропущені повідомлення віком до кількох годин. Через віддалений SSH cliPath він не може читати базу даних, тому повторне відтворення не обмежується, а до кожного рядка застосовується часова межа реального часу — нещодавно пропущені повідомлення все одно відновлюються, а старі накопичені повідомлення пригнічуються, але з вужчим вікном реального часу. Для ширшого вікна відновлення запускайте Gateway на комп’ютері Mac із Messages.
Сигнал, видимий оператору
Пригнічені накопичені повідомлення реєструються на типовому рівні й ніколи не відкидаються без повідомлення (прапорецьrecovery указує, яке вікно застосовано):
Міграція
channels.imessage.catchup.* застарів — відновлення після простою виконується автоматично й не потребує конфігурації для нових установок. Наявні конфігурації з catchup.enabled: true і надалі підтримуються як профіль сумісності для вікна повторного відтворення під час відновлення. Вимкнені блоки наздоганяння (enabled: false або без enabled: true) вилучено; openclaw doctor --fix видаляє їх.
Усунення несправностей
imsg не знайдено або RPC не підтримується
imsg не знайдено або RPC не підтримується
imsg. Якщо дії приватного API недоступні, запустіть imsg launch у сеансі користувача macOS, який увійшов у систему, і повторіть перевірку. Якщо Gateway не працює в macOS, використовуйте описану вище конфігурацію віддаленого Mac через SSH замість типового локального шляху imsg.Повідомлення надсилаються, але вхідні iMessage не надходять
Повідомлення надсилаються, але вхідні iMessage не надходять
chat.db не змінюється, OpenClaw не може отримати повідомлення, навіть якщо imsg status --json повідомляє про справний міст.chat.db або подія imsg watch, перш ніж налагоджувати сеанси OpenClaw. Не запускайте це як періодичний цикл повторного запуску моста; повторні imsg launch разом із перезапусками Gateway під час активної роботи можуть перервати доставлення та залишити незавершені запуски каналу в завислому стані.Gateway не запущено в macOS
Gateway не запущено в macOS
cliPath: "imsg" має виконуватися на Mac, на якому здійснено вхід у Messages. У Linux або Windows задайте для channels.imessage.cliPath сценарій-обгортку, який підключається до цього Mac через SSH і запускає imsg "$@".Приватні повідомлення ігноруються
Приватні повідомлення ігноруються
channels.imessage.dmPolicychannels.imessage.allowFrom- схвалення сполучення (
openclaw pairing list imessage)
Групові повідомлення ігноруються
Групові повідомлення ігноруються
channels.imessage.groupPolicychannels.imessage.groupAllowFromchannels.imessage.groupsповедінку списку дозволених- налаштування шаблону згадок (
agents.list[].groupChat.mentionPatterns)
Віддалені вкладення не завантажуються
Віддалені вкладення не завантажуються
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- автентифікацію за ключем SSH/SCP з хоста Gateway
- наявність ключа хоста в
~/.ssh/known_hostsна хості Gateway - доступність віддаленого шляху для читання на Mac, де працює Messages
Запити дозволів macOS було пропущено
Запити дозволів macOS було пропущено
imsg, надано повний доступ до диска й дозвіл на автоматизацію.Посилання на довідник із налаштування
Пов’язані матеріали
- Огляд каналів — усі підтримувані канали
- Вилучення BlueBubbles і шлях iMessage через imsg — оголошення та огляд міграції
- Перехід із BlueBubbles — таблиця перетворення конфігурації та покрокове перемикання
- Сполучення — автентифікація в особистих повідомленнях і процес сполучення
- Групи — поведінка групових чатів і обмеження за згадками
- Маршрутизація каналів — маршрутизація сеансів для повідомлень
- Безпека — модель доступу та посилення захисту