imessage incluido, que controla steipete/imsg a través de JSON-RPC y accede a la misma superficie de API privada que utilizaba BlueBubbles (react, edit, unsend, reply, sendWithEffect, encuestas nativas, gestión de grupos y archivos adjuntos). Un único binario de CLI sustituye el servidor de BlueBubbles, la aplicación cliente y la infraestructura de webhooks: no hay ningún endpoint REST ni autenticación de webhooks.
Esta guía permite migrar las configuraciones antiguas de channels.bluebubbles a channels.imessage. No existe ninguna otra ruta de migración compatible. En la versión actual de OpenClaw, cualquier bloque channels.bluebubbles restante queda inerte: ningún componente del entorno de ejecución lo lee.
Para consultar el anuncio breve y el resumen para operadores, véase Eliminación de BlueBubbles y la ruta de iMessage mediante imsg.
Lista de comprobación para la migración
La ruta segura más corta si ya se conoce la configuración antigua de BlueBubbles:- Verificar
imsgdirectamente en el Mac que ejecuta Messages.app (imsg chats,imsg history,imsg send,imsg rpc --help). - Copiar las claves de comportamiento de
channels.bluebubblesachannels.imessage:dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,includeAttachments,attachmentRoots,mediaMaxMb,textChunkLimityactions. - Eliminar las claves de transporte que ya no existen:
serverUrl,password, las URL de webhooks y la configuración del servidor de BlueBubbles. - Si el Gateway no se ejecuta en el Mac de Messages, establecer
channels.imessage.cliPathen un contenedor SSH y configurarremoteHostpara la obtención remota de archivos adjuntos. - Habilitar
channels.imessage, reiniciar el Gateway y, a continuación, ejecutaropenclaw channels status --probe --channel imessage. - Probar un mensaje directo, un grupo permitido, los archivos adjuntos si están habilitados y todas las acciones de la API privada que se espere que utilice el agente.
- Eliminar el servidor de BlueBubbles y la configuración antigua de
channels.bluebubblesdespués de verificar la ruta de iMessage.
Qué hace imsg
imsg es una CLI local de macOS para Messages. OpenClaw inicia imsg rpc como proceso secundario y se comunica mediante JSON-RPC a través de stdin/stdout. No hay ningún servidor HTTP, URL de webhook, daemon en segundo plano, agente de inicio ni puerto que exponer.
- Las lecturas proceden de
~/Library/Messages/chat.dbmediante un identificador de SQLite de solo lectura. - Los mensajes entrantes en tiempo real proceden de
imsg watch/watch.subscribe, que sigue los eventos del sistema de archivos dechat.dbcon un mecanismo alternativo de sondeo. - Los envíos utilizan la automatización de Messages.app para enviar texto normal y archivos.
- Las acciones avanzadas utilizan
imsg launchpara inyectar el asistenteimsgen Messages.app. Esto habilita las confirmaciones de lectura, los indicadores de escritura, los envíos enriquecidos, la edición, la anulación de envíos, las respuestas en hilos, las reacciones, las encuestas y la gestión de grupos. - Las compilaciones de Linux pueden inspeccionar una copia de
chat.db, pero no pueden enviar mensajes, observar la base de datos activa del Mac ni controlar Messages.app. Para utilizar iMessage con OpenClaw, se debe ejecutarimsgen el Mac con la sesión iniciada o mediante un contenedor SSH que se conecte a ese Mac.
Antes de comenzar
-
Instalar
imsgen el Mac que ejecuta Messages.app:Para la configuración local habitual, la configuración de OpenClaw puede ofrecer una instalación o actualización de Homebrew deimsgconfirmada por el usuario en el Mac con la sesión de Messages iniciada. La configuración manual y las topologías con contenedores SSH siguen estando administradas por el operador: se debe repetir la actualización de Homebrew en el mismo contexto de usuario local o remoto que ejecutaráimsg. Siimsg chatsfalla conunable to open database file, no produce ninguna salida o muestraauthorization denied, se debe conceder acceso total al disco al terminal, editor, proceso de Node, servicio Gateway o proceso principal de SSH que iniciaimsgy, a continuación, volver a abrir ese proceso principal. -
Verificar las superficies de lectura, observación, envío y RPC antes de cambiar la configuración de OpenClaw:
Sustituir
42por un identificador de chat real obtenido deimsg chats. El envío requiere permiso de automatización para Messages.app. Si OpenClaw se ejecutará mediante SSH, se deben ejecutar estos comandos a través del mismo contenedor SSH o contexto de usuario que utilizará OpenClaw. Si las lecturas funcionan, pero los envíos fallan con el error-1743de AppleEvents, se debe comprobar si el permiso de automatización se concedió a/usr/libexec/sshd-keygen-wrapper; véase Los envíos mediante el contenedor SSH fallan con el error -1743 de AppleEvents. -
Habilitar el puente de la API privada. Se recomienda encarecidamente para iMessage con OpenClaw, ya que las respuestas, las reacciones, los efectos, las encuestas, las respuestas a archivos adjuntos y las acciones de grupo dependen de él:
imsg launchrequiere que SIP esté deshabilitado (y, en las versiones modernas de macOS, que la validación de bibliotecas esté flexibilizada; véase Habilitación de la API privada de imsg). El envío básico, el historial y la observación funcionan sinimsg launch; la superficie completa de acciones de iMessage de OpenClaw no. -
Después de habilitar
channels.imessagee iniciar el Gateway, verificar el puente mediante OpenClaw:La cuenta de iMessage debería indicarworks; con--json, la carga útil de la comprobación incluyeprivateApi.available: true. Si indicafalse, se debe corregir primero; véase Detección de capacidades. La comprobación requiere un Gateway accesible (de lo contrario, la CLI recurre a una salida basada únicamente en la configuración) y solo comprueba las cuentas configuradas y habilitadas. -
Crear una copia de la configuración:
Traducción de la configuración
iMessage y BlueBubbles comparten la mayoría de las claves de comportamiento del canal. Lo que cambia es el transporte (servidor REST frente a CLI local) y el formato de las claves del registro de grupos.
Las configuraciones de varias cuentas (
channels.bluebubbles.accounts.*) se traducen individualmente a channels.imessage.accounts.*.
Riesgo del registro de grupos
El plugin de iMessage incluido ejecuta dos filtros de grupo consecutivos. Un mensaje de grupo debe superar ambos para llegar al agente:- Lista de remitentes u objetivos de chat permitidos (
channels.imessage.groupAllowFrom): coincide con el identificador del remitente o con el objetivo del chat (entradaschat_id:,chat_guid:,chat_identifier:). CuandogroupAllowFromno está establecido, este filtro recurre aallowFrom; ungroupAllowFrom: []explícito desactiva ese mecanismo alternativo y descarta todos los mensajes de grupo congroupPolicy: "allowlist". - Registro de grupos (
channels.imessage.groups): usa como clave elchat_idnumérico de iMessage:- Sin bloque
groups(o con uno vacío): los grupos superan este filtro siempre que el filtro 1 tenga una lista efectiva de remitentes permitidos que no esté vacía; el filtrado de remitentes controla el acceso y no se activa ninguna advertencia de descarte total durante el inicio. groupscon entradas pero sin"*": solo se aceptan las claveschat_idindicadas. Incluir cualquier grupo convierte el registro en una lista de permitidos, incluso congroupPolicy: "open".groups: { "*": { ... } }: todos los grupos superan este filtro.
- Sin bloque
groups, mientras que el registro de iMessage usa el chat_id numérico. Copiar literalmente las entradas de cada grupo crea un registro no vacío cuyas claves nunca coinciden, por lo que todos los mensajes de grupo se descartan en el filtro 2. Copie literalmente el comodín "*"; cambie las claves de las entradas de grupos específicos para usar los valores chat_id de imsg chats.
Ambas rutas de descarte son visibles con el nivel de registro predeterminado mediante líneas warn:
- Una vez por cuenta durante el inicio, cuando se establece
groupPolicy: "allowlist"y la lista efectiva de remitentes de grupo permitidos está vacía:imessage: groupPolicy="allowlist" for account "<id>" but no group sender allowlist is configured .... EstablezcagroupAllowFrom(oallowFrom) para admitir remitentes; añadir sologroupsno satisface el filtro de remitentes. - Una vez por
chat_iddurante la ejecución, cuando el registro descarta un grupo:imessage: dropping group message from chat_id=<id> ... not in channels.imessage.groups allowlist, indicando la clave exacta que debe añadirse.
groupPolicy: "allowlist":
groups para limitar los chats permitidos o establecer opciones por chat, como requireMention; copie literalmente la entrada "*" de BlueBubbles, pero cambie las claves de las entradas específicas para usar los valores chat_id numéricos de iMessage.
Paso a paso
-
Traduzca la configuración. Mantenga el nuevo bloque desactivado mientras lo edita; el bloque antiguo
channels.bluebubblesse ignora en la versión actual de OpenClaw y puede conservarse junto al nuevo como referencia: -
Realice la transición y compruebe el funcionamiento. Establezca
channels.imessage.enabled: true, reinicie el Gateway y confirme que el canal indique que funciona correctamente:La comprobación requiere un Gateway accesible y solo comprueba las cuentas configuradas y habilitadas. Use los comandos directosimsgde Antes de empezar para validar el propio Mac. - Verifique los mensajes directos. Envíe un mensaje directo al agente y confirme que llega la respuesta.
-
Verifique los grupos por separado. Los mensajes directos y los grupos siguen rutas de código diferentes: que los mensajes directos funcionen no demuestra que los grupos se enruten correctamente. Envíe un mensaje en un chat grupal permitido y confirme que llega la respuesta. Si el grupo queda en silencio (sin respuesta del agente ni error), compruebe en el registro del Gateway las dos líneas
warnde «Group registry footgun» más arriba. La advertencia de inicio significa que la lista efectiva de remitentes permitidos está vacía; una advertencia porchat_idsignifica que un registrogroupscon entradas no contiene ese chat. -
Verifique las acciones disponibles. Desde un mensaje directo emparejado, pida al agente que añada una reacción, edite, anule el envío, responda, envíe una foto y, en un grupo, cambie el nombre del grupo o añada o elimine un participante. Cada acción debe reflejarse de forma nativa en Messages.app. Si alguna acción genera
iMessage <action> requires the imsg private API bridge, vuelva a ejecutarimsg launchy actualice conopenclaw channels status --probe. -
Elimine el servidor BlueBubbles y el bloque
channels.bluebubblesuna vez verificados los mensajes directos, los grupos y las acciones de iMessage. OpenClaw no leechannels.bluebubbles.
Comparación rápida de acciones
iMessage recupera los mensajes que no se recibieron mientras el Gateway estaba inactivo: al iniciarse, los reproduce desde el último rowid enviado mediante
imsg watch.subscribe since_rowid, los deduplica por GUID y un límite de antigüedad de los mensajes pendientes obsoletos impide la «bomba de mensajes pendientes» del vaciado de Push. Esto se ejecuta mediante la conexión RPC imsg, por lo que también funciona en configuraciones remotas de cliPath mediante SSH; las configuraciones locales disponen de una ventana de recuperación más amplia porque pueden leer chat.db. Consulte Recuperación de mensajes entrantes tras reiniciar un puente o el Gateway.
Emparejamiento, sesiones y vinculaciones ACP
- Las listas de permitidos se conservan por identificador.
channels.imessage.allowFromreconoce las mismas cadenas+15555550123/user@example.comque utilizaba BlueBubbles; cópielas literalmente. - Las aprobaciones del almacén de emparejamiento no se transfieren. El almacén de emparejamiento es específico de cada canal y nada migra el antiguo almacén de BlueBubbles. Los remitentes aprobados únicamente mediante emparejamiento deben volver a emparejarse una vez en iMessage, o bien se deben añadir sus identificadores a
allowFrom. - Las sesiones siguen estando delimitadas por agente y chat. Los mensajes directos se agrupan en la sesión principal del agente con el valor predeterminado
session.dmScope=main; las sesiones grupales permanecen aisladas porchat_id(agent:<agentId>:imessage:group:<chat_id>). El historial de conversaciones anterior asociado a claves de sesión de BlueBubbles no se transfiere a las sesiones de iMessage. - Las vinculaciones ACP que hagan referencia a
match.channel: "bluebubbles"deben cambiarse a"imessage". Los formatosmatch.peer.id(chat_id:,chat_guid:,chat_identifier:, identificador sin formato) son idénticos.
No existe un canal de reversión
No existe un entorno de ejecución compatible de BlueBubbles al que volver. Si falla la verificación de iMessage, establezcachannels.imessage.enabled: false, reinicie el Gateway, resuelva el bloqueo de imsg y vuelva a intentar la migración.
La caché de respuestas reside en el estado SQLite del Plugin. openclaw doctor --fix importa y archiva el antiguo archivo auxiliar imessage/reply-cache.jsonl cuando está presente.
Contenido relacionado
- Eliminación de BlueBubbles y la ruta de iMessage mediante imsg — anuncio breve y resumen para operadores.
- iMessage — referencia completa del canal iMessage, incluida la configuración de
imsg launchy la detección de capacidades. /channels/bluebubbles— URL heredada que redirige a esta guía de migración.- Emparejamiento — autenticación de mensajes directos y flujo de emparejamiento.
- Enrutamiento de canales — cómo el Gateway selecciona un canal para las respuestas salientes.