BlueBubbles (macOS REST)
Статус: встроенный плагин, который взаимодействует с сервером BlueBubbles на macOS через HTTP. Рекомендуется для интеграции iMessage благодаря расширенному API и более простой настройке по сравнению с устаревшим каналом imsg.
Обзор
- Работает на macOS через приложение BlueBubbles (bluebubbles.app).
- Рекомендуется/протестировано: macOS Sequoia (15). macOS Tahoe (26) работает; редактирование в настоящее время не работает на Tahoe, а обновления иконок групп могут сообщать об успехе, но не синхронизируются.
- OpenClaw взаимодействует с ним через REST API (GET /api/v1/ping, POST /message/text, POST /chat/:id/*).
- Входящие сообщения прибывают через webhooks; исходящие ответы, индикаторы набора текста, уведомления о прочтении и реакции — это REST-вызовы.
- Вложения и стикеры принимаются как входящие медиа (и передаются агенту, когда это возможно).
- Сопряжение/белый список работает так же, как и другие каналы (/start/pairing и т.д.) с channels.bluebubbles.allowFrom + коды сопряжения.
- Реакции передаются как системные события так же, как Slack/Telegram, чтобы агенты могли "упомянуть" их перед ответом.
- Расширенные функции: редактирование, отмена отправки, цепочки ответов, эффекты сообщений, управление группами.
Быстрый старт
- Установите сервер BlueBubbles на ваш Mac (следуйте инструкциям на bluebubbles.app/install).
- В конфигурации BlueBubbles включите веб-API и установите пароль.
- Запустите openclaw onboard и выберите BlueBubbles, или настройте вручную:
{ channels: { bluebubbles: { enabled: true, serverUrl: "http://192.168.1.100:1234", password: "example-password", webhookPath: "/bluebubbles-webhook" } } } - Направьте webhooks BlueBubbles на ваш gateway (пример: https://your-gateway-host:3000/bluebubbles-webhook?password=<password>).
- Запустите gateway; он зарегистрирует обработчик webhook и начнет сопряжение.
Подключение
BlueBubbles доступен в интерактивном мастере настройки:
openclaw onboard
Мастер запрашивает:
- URL сервера (обязательно): Адрес сервера BlueBubbles (например, http://192.168.1.100:1234)
- Пароль (обязательно): Пароль API из настроек BlueBubbles Server
- Путь webhook (опционально): По умолчанию /bluebubbles-webhook
- Политика DM: pairing, allowlist, open или disabled
- Белый список: Номера телефонов, email или chat targets
Вы также можете добавить BlueBubbles через CLI:
openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --password <password>
Контроль доступа (личные сообщения + группы)
Личные сообщения:
- По умолчанию: channels.bluebubbles.dmPolicy = "pairing".
- Неизвестные отправители получают код сопряжения; сообщения игнорируются до утверждения (коды истекают через 1 час).
- Утвердите через:
- openclaw pairing list bluebubbles
- openclaw pairing approve bluebubbles <CODE>
- Сопряжение — это обмен токенами по умолчанию. Подробности: Сопряжение
Группы:
- channels.bluebubbles.groupPolicy = open | allowlist | disabled (по умолчанию: allowlist).
- channels.bluebubbles.groupAllowFrom контролирует, кто может вызывать в группах при установке allowlist.
Контроль упоминаний (группы)
BlueBubbles поддерживает контроль упоминаний для групповых чатов, соответствуя поведению iMessage/WhatsApp:
- Использует agents.list[].groupChat.mentionPatterns (или messages.groupChat.mentionPatterns) для обнаружения упоминаний.
- Когда requireMention включен для группы, агент отвечает только при упоминании.
- Управляющие команды от авторизованных отправителей обходят контроль упоминаний.
Конфигурация для конкретной группы:
{
channels: {
bluebubbles: {
groupPolicy: "allowlist",
groupAllowFrom: ["+15555550123"],
groups: {
"*": { requireMention: true }, // по умолчанию для всех групп
"iMessage;-;chat123": { requireMention: false } // переопределение для конкретной группы
}
}
}
}
Контроль команд
- Управляющие команды (например, /config, /model) требуют авторизации.
- Использует allowFrom и groupAllowFrom для определения авторизации команд.
- Авторизованные отправители могут выполнять управляющие команды даже без упоминания в группах.
Набор текста + уведомления о прочтении
- Индикаторы набора текста: Отправляются автоматически перед и во время генерации ответа.
- Уведомления о прочтении: Контролируются channels.bluebubbles.sendReadReceipts (по умолчанию: true).
- Индикаторы набора текста: OpenClaw отправляет события начала набора; BlueBubbles автоматически очищает набор при отправке или таймауте (ручная остановка через DELETE ненадежна).
{
channels: {
bluebubbles: {
sendReadReceipts: false // отключить уведомления о прочтении
}
}
}
Расширенные действия
BlueBubbles поддерживает расширенные действия с сообщениями при включении в конфигурации:
{
channels: {
bluebubbles: {
actions: {
reactions: true, // реакции (по умолчанию: true)
edit: true, // редактирование отправленных сообщений (macOS 13+, не работает на macOS 26 Tahoe)
unsend: true, // отмена отправки сообщений (macOS 13+)
reply: true, // цепочки ответов по GUID сообщения
sendWithEffect: true, // эффекты сообщений (slam, loud и т.д.)
renameGroup: true, // переименование групповых чатов
setGroupIcon: true, // установка иконки/фото группового чата (нестабильно на macOS 26 Tahoe)
addParticipant: true, // добавление участников в группы
removeParticipant: true, // удаление участников из групп
leaveGroup: true, // выход из групповых чатов
sendAttachment: true // отправка вложений/медиа
}
}
}
}
Доступные действия:
- react: Добавить/удалить реакцию (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)
- sendAttachment: Отправить медиа/файлы (to, buffer, filename, asVoice)
- Голосовые заметки: установите asVoice: true с аудио MP3 или CAF для отправки в виде голосового сообщения iMessage. BlueBubbles конвертирует MP3 → CAF при отправке голосовых заметок.
ID сообщений (короткие и полные)
OpenClaw может передавать короткие ID сообщений (например, 1, 2) для экономии токенов.
- MessageSid / ReplyToId могут быть короткими ID.
- MessageSidFull / ReplyToIdFull содержат полные ID провайдера.
- Короткие ID хранятся в памяти; они могут истечь при перезапуске или вытеснении кэша.
- Действия принимают короткие или полные messageId, но короткие ID вызовут ошибку, если больше не доступны.
Используйте полные ID для долговременной автоматизации и хранения:
- Шаблоны: \{\{MessageSidFull\}\}, \{\{ReplyToIdFull\}\}
- Контекст: MessageSidFull / ReplyToIdFull во входящих payload
См. Конфигурация для переменных шаблона.
Блочная потоковая передача
Контролируйте, отправляются ли ответы одним сообщением или транслируются блоками:
{
channels: {
bluebubbles: {
blockStreaming: true // включить блочную потоковую передачу (поведение по умолчанию)
}
}
}
Медиа + лимиты
- Входящие вложения загружаются и сохраняются в кэше медиа.
- Ограничение медиа через channels.bluebubbles.mediaMaxMb (по умолчанию: 8 МБ).
- Исходящий текст разбивается на части до channels.bluebubbles.textChunkLimit (по умолчанию: 4000 символов).
Справочник конфигурации
Полная конфигурация: Конфигурация
Параметры провайдера:
- channels.bluebubbles.enabled: Включить/отключить канал.
- channels.bluebubbles.serverUrl: Базовый URL BlueBubbles REST API.
- channels.bluebubbles.password: Пароль API.
- channels.bluebubbles.webhookPath: Путь конечной точки webhook (по умолчанию: /bluebubbles-webhook).
- channels.bluebubbles.dmPolicy: pairing | allowlist | open | disabled (по умолчанию: pairing).
- channels.bluebubbles.allowFrom: Белый список DM (handles, email, номера E.164, chat_id:*, chat_guid:*).
- channels.bluebubbles.groupPolicy: open | allowlist | disabled (по умолчанию: allowlist).
- channels.bluebubbles.groupAllowFrom: Белый список отправителей группы.
- channels.bluebubbles.groups: Конфигурация для конкретной группы (requireMention и т.д.).
- channels.bluebubbles.sendReadReceipts: Отправлять уведомления о прочтении (по умолчанию: true).
- channels.bluebubbles.blockStreaming: Включить блочную потоковую передачу (по умолчанию: true).
- channels.bluebubbles.textChunkLimit: Размер исходящего фрагмента в символах (по умолчанию: 4000).
- channels.bluebubbles.chunkMode: length (по умолчанию) разбивает только при превышении textChunkLimit; newline разбивает на пустых строках (границы параграфов) перед разбиением по длине.
- channels.bluebubbles.mediaMaxMb: Ограничение входящих медиа в МБ (по умолчанию: 8).
- 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:123
- chat_identifier:...
- Прямые handles: +15555550123, [email protected]
- Если для прямого handle нет существующего DM-чата, OpenClaw создаст его через POST /api/v1/chat/new. Это требует включения BlueBubbles Private API.
Безопасность
- Webhook-запросы аутентифицируются путем сравнения параметров guid/password запроса или заголовков с channels.bluebubbles.password. Запросы с localhost также принимаются.
- Держите пароль API и конечную точку webhook в секрете (обращайтесь с ними как с учетными данными).
- Доверие localhost означает, что обратный прокси на том же хосте может непреднамеренно обойти пароль. Если вы проксируете gateway, требуйте аутентификацию на прокси и настройте gateway.trustedProxies. См. Безопасность Gateway.
- Включите HTTPS + правила брандмауэра на сервере BlueBubbles, если выставляете его за пределы вашей локальной сети.
Устранение неполадок
- Если события набора текста/прочтения перестают работать, проверьте логи webhook 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.
Для общего справочника по рабочему процессу канала см. Каналы и руководство Плагины.