Soporte de imágenes y medios — 2025-12-05
El canal de WhatsApp funciona vía Baileys Web. Este documento describe las reglas actuales de manejo de medios para envío, gateway y respuestas del agente.
Objetivos
- Enviar medios con subtítulos opcionales mediante
openclaw message send --media. - Permitir que las respuestas automáticas desde la bandeja web incluyan medios junto con texto.
- Mantener límites por tipo razonables y predecibles.
Superficie CLI
openclaw message send --media <ruta-o-url> [--message <subtítulo>]--mediaes opcional; el subtítulo puede estar vacío para envíos de solo medios.--dry-runimprime el payload resuelto;--jsonemite{ channel, to, messageId, mediaUrl, caption }.
Comportamiento del canal WhatsApp Web
- Entrada: ruta de archivo local o URL HTTP(S).
- Flujo: cargar en un Buffer, detectar el tipo de medio y construir el payload correcto:
- Imágenes: redimensionar y recomprimir a JPEG (lado máximo 2048px) buscando
agents.defaults.mediaMaxMb(por defecto 5 MB), con tope en 6 MB. - Audio/Voz/Video: paso directo hasta 16 MB; el audio se envía como nota de voz (
ptt: true). - Documentos: cualquier otra cosa, hasta 100 MB, con nombre de archivo preservado cuando esté disponible.
- Imágenes: redimensionar y recomprimir a JPEG (lado máximo 2048px) buscando
- Reproducción tipo GIF en WhatsApp: envía un MP4 con
gifPlayback: true(CLI:--gif-playback) para que los clientes móviles lo reproduzcan en bucle. - La detección MIME prefiere bytes mágicos, luego headers, luego extensión de archivo.
- El subtítulo proviene de
--messageoreply.text; se permite subtítulo vacío. - Registro: sin verbose muestra
↩️/✅; verbose incluye tamaño y ruta/URL de origen.
Pipeline de respuesta automática
getReplyFromConfigdevuelve{ text?, mediaUrl?, mediaUrls? }.- Cuando hay medios presentes, el remitente web resuelve rutas locales o URLs usando el mismo pipeline que
openclaw message send. - Las entradas de medios múltiples se envían secuencialmente si se proporcionan.
Medios entrantes a comandos (Pi)
- Cuando los mensajes web entrantes incluyen medios, OpenClaw los descarga a un archivo temporal y expone variables de plantilla:
{{MediaUrl}}pseudo-URL del medio entrante.{{MediaPath}}ruta temporal local escrita antes de ejecutar el comando.
- Cuando un sandbox Docker por sesión está habilitado, el medio entrante se copia al workspace del sandbox y
MediaPath/MediaUrlse reescriben a una ruta relativa comomedia/inbound/<nombre-archivo>. - La comprensión de medios (si se configura mediante
tools.media.*otools.media.modelscompartido) se ejecuta antes del procesamiento de plantillas y puede insertar bloques[Image],[Audio]y[Video]enBody.- Audio establece
{{Transcript}}y usa la transcripción para el análisis de comandos, de modo que los comandos slash sigan funcionando. - Las descripciones de video e imagen preservan cualquier texto de subtítulo para el análisis de comandos.
- Audio establece
- Por defecto solo se procesa el primer adjunto coincidente de imagen/audio/video; configura
tools.media.<cap>.attachmentspara procesar múltiples adjuntos.
Límites y errores
Límites de envío saliente (envío web de WhatsApp)
- Imágenes: ~6 MB de tope tras recompresión.
- Audio/voz/video: 16 MB de tope; documentos: 100 MB de tope.
- Medios sobredimensionados o ilegibles → error claro en logs y la respuesta se omite.
Límites de comprensión de medios (transcripción/descripción)
- Imagen por defecto: 10 MB (
tools.media.image.maxBytes). - Audio por defecto: 20 MB (
tools.media.audio.maxBytes). - Video por defecto: 50 MB (
tools.media.video.maxBytes). - Los medios sobredimensionados omiten la comprensión, pero las respuestas siguen con el cuerpo original.
Notas para pruebas
- Cubrir flujos de envío + respuesta para casos de imagen/audio/documento.
- Validar recompresión de imágenes (límite de tamaño) y flag de nota de voz para audio.
- Asegurar que las respuestas con múltiples medios se distribuyan como envíos secuenciales.