BlueBubbles (macOS REST)
Статус: вбудований плагін, який взаємодіє із сервером BlueBubbles macOS через HTTP. Рекомендовано для інтеграції з iMessage завдяки багатшому API та простішому налаштуванню порівняно із застарілим каналом imsg.Вбудований плагін
Поточні випуски OpenClaw постачаються з BlueBubbles, тому звичайним пакетним збіркам не потрібен окремий крокopenclaw plugins install.
Огляд
- Працює на macOS через допоміжну програму BlueBubbles (bluebubbles.app).
- Рекомендовано/протестовано: macOS Sequoia (15). macOS Tahoe (26) працює; редагування наразі не працює на Tahoe, а оновлення значка групи можуть повідомляти про успіх, але не синхронізуватися.
- OpenClaw взаємодіє з ним через REST API (
GET /api/v1/ping,POST /message/text,POST /chat/:id/*). - Вхідні повідомлення надходять через вебхуки; вихідні відповіді, індикатори введення, підтвердження прочитання та tapback-реакції надсилаються через REST-виклики.
- Вкладення та стікери обробляються як вхідні медіа (і, за можливості, передаються агенту).
- Парування/список дозволених працює так само, як і в інших каналах (
/channels/pairingтощо), за допомогоюchannels.bluebubbles.allowFrom+ кодів парування. - Реакції відображаються як системні події так само, як у Slack/Telegram, тому агенти можуть “згадати” їх перед відповіддю.
- Розширені можливості: редагування, скасування надсилання, ланцюжки відповідей, ефекти повідомлень, керування групами.
Швидкий старт
- Установіть сервер BlueBubbles на свій Mac (дотримуйтесь інструкцій на bluebubbles.app/install).
- У конфігурації BlueBubbles увімкніть web API і задайте пароль.
-
Запустіть
openclaw onboardі виберіть BlueBubbles, або налаштуйте вручну: -
Спрямуйте вебхуки BlueBubbles на свій gateway (приклад:
https://your-gateway-host:3000/bluebubbles-webhook?password=<password>). - Запустіть gateway; він зареєструє обробник вебхука і почне парування.
- Завжди встановлюйте пароль вебхука.
- Автентифікація вебхука є обов’язковою завжди. OpenClaw відхиляє запити вебхука BlueBubbles, якщо вони не містять password/guid, що збігається з
channels.bluebubbles.password(наприклад,?password=<password>абоx-password), незалежно від топології local loopback/проксі. - Автентифікація за паролем перевіряється до читання/розбору повних тіл вебхуків.
Підтримання активності Messages.app (VM / headless-налаштування)
У деяких налаштуваннях macOS VM / always-on може статися так, що Messages.app переходить у стан “idle” (вхідні події припиняються, доки програму не буде відкрито/виведено на передній план). Простий обхідний шлях — торкатися Messages кожні 5 хвилин за допомогою AppleScript + LaunchAgent.1) Збережіть AppleScript
Збережіть це як:~/Scripts/poke-messages.scpt
2) Установіть LaunchAgent
Збережіть це як:~/Library/LaunchAgents/com.user.poke-messages.plist
- Це запускається кожні 300 секунд і під час входу в систему.
- Перший запуск може викликати запити macOS Automation (
osascript→ Messages). Підтвердьте їх у тій самій сесії користувача, у якій працює LaunchAgent.
Онбординг
BlueBubbles доступний в інтерактивному онбордингу:- URL сервера (обов’язково): адреса сервера BlueBubbles (наприклад,
http://192.168.1.100:1234) - Пароль (обов’язково): пароль API з налаштувань BlueBubbles Server
- Шлях вебхука (необов’язково): типово
/bluebubbles-webhook - Політика DM: pairing, allowlist, open або disabled
- Список дозволених: телефонні номери, електронні адреси або цілі чатів
Керування доступом (DM + групи)
DM:- Типово:
channels.bluebubbles.dmPolicy = "pairing". - Невідомі відправники отримують код парування; повідомлення ігноруються до схвалення (коди спливають через 1 годину).
- Схвалення через:
openclaw pairing list bluebubblesopenclaw pairing approve bluebubbles <CODE>
- Парування є типовим обміном токенами. Докладніше: Парування
channels.bluebubbles.groupPolicy = open | allowlist | disabled(типово:allowlist).channels.bluebubbles.groupAllowFromвизначає, хто може запускати в групах, коли встановленоallowlist.
Збагачення імен контактів (macOS, необов’язково)
Групові вебхуки BlueBubbles часто містять лише сирі адреси учасників. Якщо ви хочете, щоб контекстGroupMembers замість цього показував локальні імена контактів, на macOS можна увімкнути локальне збагачення з Contacts:
channels.bluebubbles.enrichGroupParticipantsFromContacts = trueвмикає пошук. Типово:false.- Пошук виконується лише після того, як доступ до групи, авторизація команди й перевірка згадки вже пропустили повідомлення.
- Збагачуються лише безіменні телефонні учасники.
- Сирі телефонні номери залишаються запасним варіантом, якщо локального збігу не знайдено.
Перевірка згадки (групи)
BlueBubbles підтримує перевірку згадки для групових чатів, як і iMessage/WhatsApp:- Використовує
agents.list[].groupChat.mentionPatterns(абоmessages.groupChat.mentionPatterns) для виявлення згадок. - Коли для групи ввімкнено
requireMention, агент відповідає лише тоді, коли його згадано. - Команди керування від авторизованих відправників обходять перевірку згадки.
Перевірка команд
- Команди керування (наприклад,
/config,/model) потребують авторизації. - Для визначення авторизації команд використовуються
allowFromіgroupAllowFrom. - Авторизовані відправники можуть виконувати команди керування навіть без згадки в групах.
Прив’язки розмов ACP
Чати BlueBubbles можна перетворити на довготривалі робочі простори ACP без зміни транспортного рівня. Швидкий операторський сценарій:- Виконайте
/acp spawn codex --bind hereу DM або дозволеному груповому чаті. - Майбутні повідомлення в цій самій розмові BlueBubbles маршрутизуватимуться до створеної сесії ACP.
/newі/resetскидають ту саму прив’язану сесію ACP на місці./acp closeзакриває сесію ACP і видаляє прив’язку.
bindings[] з type: "acp" і match.channel: "bluebubbles".
match.peer.id може використовувати будь-яку підтримувану форму цілі BlueBubbles:
- нормалізований дескриптор DM, наприклад
+15555550123абоuser@example.com chat_id:<id>chat_guid:<guid>chat_identifier:<identifier>
chat_id:* або chat_identifier:*.
Приклад:
Індикатори введення + підтвердження прочитання
- Індикатори введення: надсилаються автоматично перед і під час генерації відповіді.
- Підтвердження прочитання: керуються
channels.bluebubbles.sendReadReceipts(типово:true). - Індикатори введення: OpenClaw надсилає події початку введення; BlueBubbles очищує стан введення автоматично після надсилання або тайм-ауту (ручна зупинка через DELETE ненадійна).
Розширені дії
BlueBubbles підтримує розширені дії з повідомленнями, якщо їх увімкнено в конфігурації:- react: додати/видалити tapback-реакції (
messageId,emoji,remove) - edit: відредагувати надіслане повідомлення (
messageId,text) - unsend: скасувати надсилання повідомлення (
messageId) - reply: відповісти на конкретне повідомлення (
messageId,text,to) - sendWithEffect: надіслати з ефектом iMessage (
text,to,effectId) - renameGroup: перейменувати груповий чат (
chatGuid,displayName) - setGroupIcon: установити значок/фото групового чату (
chatGuid,media) — нестабільно на macOS 26 Tahoe (API може повертати успіх, але значок не синхронізується). - addParticipant: додати когось до групи (
chatGuid,address) - removeParticipant: видалити когось із групи (
chatGuid,address) - leaveGroup: залишити груповий чат (
chatGuid) - upload-file: надіслати медіа/файли (
to,buffer,filename,asVoice)- Голосові повідомлення: установіть
asVoice: trueз аудіо MP3 або CAF, щоб надіслати як голосове повідомлення iMessage. BlueBubbles перетворює MP3 → CAF під час надсилання голосових повідомлень.
- Голосові повідомлення: установіть
- Застарілий псевдонім:
sendAttachmentусе ще працює, алеupload-fileє канонічною назвою дії.
ID повідомлень (короткі проти повних)
OpenClaw може відображати короткі ID повідомлень (наприклад,1, 2) для економії токенів.
MessageSid/ReplyToIdможуть бути короткими ID.MessageSidFull/ReplyToIdFullмістять повні ID провайдера.- Короткі ID зберігаються в пам’яті; вони можуть зникнути після перезапуску або витіснення з кешу.
- Дії приймають короткий або повний
messageId, але короткі ID спричинятимуть помилку, якщо вони вже недоступні.
- Шаблони:
{{MessageSidFull}},{{ReplyToIdFull}} - Контекст:
MessageSidFull/ReplyToIdFullу вхідних payload
Потокове надсилання блоками
Керуйте тим, чи відповіді надсилатимуться як одне повідомлення, чи потоково блоками:Медіа + обмеження
- Вхідні вкладення завантажуються й зберігаються в кеші медіа.
- Обмеження медіа через
channels.bluebubbles.mediaMaxMbдля вхідних і вихідних медіа (типово: 8 MB). - Вихідний текст розбивається на частини за
channels.bluebubbles.textChunkLimit(типово: 4000 символів).
Довідник конфігурації
Повна конфігурація: Configuration Параметри провайдера:channels.bluebubbles.enabled: увімкнути/вимкнути канал.channels.bluebubbles.serverUrl: базовий URL REST API BlueBubbles.channels.bluebubbles.password: пароль API.channels.bluebubbles.webhookPath: шлях кінцевої точки вебхука (типово:/bluebubbles-webhook).channels.bluebubbles.dmPolicy:pairing | allowlist | open | disabled(типово:pairing).channels.bluebubbles.allowFrom: список дозволених DM (дескриптори, електронні адреси, номери E.164,chat_id:*,chat_guid:*).channels.bluebubbles.groupPolicy:open | allowlist | disabled(типово:allowlist).channels.bluebubbles.groupAllowFrom: список дозволених відправників у групах.channels.bluebubbles.enrichGroupParticipantsFromContacts: на macOS необов’язково збагачує безіменних учасників груп із локальних Contacts після проходження перевірок. Типово:false.channels.bluebubbles.groups: конфігурація окремих груп (requireMentionтощо).channels.bluebubbles.sendReadReceipts: надсилати підтвердження прочитання (типово:true).channels.bluebubbles.blockStreaming: увімкнути потокове надсилання блоками (типово:false; потрібне для потокових відповідей).channels.bluebubbles.textChunkLimit: розмір вихідного блока в символах (типово: 4000).channels.bluebubbles.chunkMode:length(типово) розбиває лише при перевищенніtextChunkLimit;newlineрозбиває за порожніми рядками (межами абзаців) перед розбиттям за довжиною.channels.bluebubbles.mediaMaxMb: обмеження вхідних/вихідних медіа в MB (типово: 8).channels.bluebubbles.mediaLocalRoots: явний список дозволених абсолютних локальних каталогів для вихідних шляхів локальних медіа. Надсилання локальних шляхів типово заборонене, якщо це не налаштовано. Перевизначення для окремого облікового запису:channels.bluebubbles.accounts.<accountId>.mediaLocalRoots.channels.bluebubbles.historyLimit: максимальна кількість групових повідомлень для контексту (0 вимикає).channels.bluebubbles.dmHistoryLimit: обмеження історії DM.channels.bluebubbles.actions: увімкнути/вимкнути окремі дії.channels.bluebubbles.accounts: конфігурація кількох облікових записів.
agents.list[].groupChat.mentionPatterns(абоmessages.groupChat.mentionPatterns).messages.responsePrefix.
Адресація / цілі доставки
Для стабільної маршрутизації віддавайте перевагуchat_guid:
chat_guid:iMessage;-;+15555550123(рекомендовано для груп)chat_id:123chat_identifier:...- Прямі дескриптори:
+15555550123,user@example.com- Якщо для прямого дескриптора немає наявного чату DM, OpenClaw створить його через
POST /api/v1/chat/new. Для цього потрібно, щоб було ввімкнено BlueBubbles Private API.
- Якщо для прямого дескриптора немає наявного чату DM, OpenClaw створить його через
Безпека
- Запити вебхука автентифікуються шляхом порівняння параметрів запиту
guid/passwordабо заголовків ізchannels.bluebubbles.password. - Тримайте пароль API і кінцеву точку вебхука в секреті (ставтеся до них як до облікових даних).
- Для автентифікації вебхуків BlueBubbles немає обходу через localhost. Якщо ви проксіюєте трафік вебхуків, зберігайте пароль BlueBubbles в запиті від початку до кінця.
gateway.trustedProxiesтут не замінюєchannels.bluebubbles.password. Див. Безпека gateway. - Якщо ви відкриваєте сервер BlueBubbles за межі своєї LAN, увімкніть HTTPS + правила брандмауера.
Усунення проблем
- Якщо індикатори введення/прочитання перестали працювати, перевірте журнали вебхуків BlueBubbles і переконайтеся, що шлях gateway збігається з
channels.bluebubbles.webhookPath. - Коди парування спливають через одну годину; використовуйте
openclaw pairing list bluebubblesіopenclaw pairing approve bluebubbles <code>. - Для реакцій потрібен BlueBubbles private API (
POST /api/v1/message/react); переконайтеся, що версія сервера його надає. - Для редагування/скасування надсилання потрібні macOS 13+ і сумісна версія сервера BlueBubbles. У macOS 26 (Tahoe) редагування наразі не працює через зміни private API.
- Оновлення значка групи можуть бути нестабільними на macOS 26 (Tahoe): API може повертати успіх, але новий значок не синхронізується.
- OpenClaw автоматично приховує відомі зламані дії залежно від версії macOS сервера BlueBubbles. Якщо редагування все ще відображається на macOS 26 (Tahoe), вимкніть його вручну через
channels.bluebubbles.actions.edit=false. - Для інформації про стан/здоров’я:
openclaw status --allабоopenclaw status --deep.
Пов’язане
- Огляд каналів — усі підтримувані канали
- Парування — автентифікація DM і потік парування
- Групи — поведінка групового чату й перевірка згадки
- Маршрутизація каналів — маршрутизація сесій для повідомлень
- Безпека — модель доступу та зміцнення безпеки