Por Alonso Grimaldo · · agentes · whatsapp · automatización · 12 min

Mi asistente ejecutivo es un chat de WhatsApp conmigo mismo

Respuesta corta

Un bot de Node + Baileys en una Mac mini convierte el chat de WhatsApp con vos mismo en asistente ejecutivo: transcribe audios, filtra 39 grupos con un pipeline en capas (regex gratis primero, LLM batcheado después), maneja dos calendarios por lenguaje natural, caza promesas y delega tareas pesadas en Claude Code. Costo: menos de $5 al mes.

Ayer me mandé un audio a mí mismo preguntando qué tenía en la agenda, y me respondió mi asistente con mis reuniones reales, de mis dos calendarios. No es una app nueva ni un SaaS: es un proceso de Node corriendo en mi Mac mini, conectado a mi WhatsApp de siempre, que construí en un par de horas iterando. Este post es el por qué y el cómo, con los bugs incluidos.

Ilustración en tinta: un pequeño robot mayordomo dentro de un teléfono vintage ordena una avalancha de burbujas de chat en bandejas

El porqué: mi vida operativa ES WhatsApp

Cuando listé mis grupos para configurar el bot, eran 993. No es un typo. Entre Latech, 021, clientes, proveedores, familia y cada plan que alguna vez existió, WhatsApp es donde ocurre todo: ahí me piden deploys, ahí me mandan facturas, ahí me proponen reuniones en audios de seis minutos que escucho a 2x caminando.

El problema no es el volumen. El problema es que lo importante viaja mezclado con lo trivial, en el mismo canal, con la misma notificación. La factura del cliente y el meme del grupo de amigos suenan igual. Y las herramientas clásicas de productividad fallan todas por la misma razón: exigen que te mudes. Otro inbox, otra app, otro hábito que mantener.

El mejor asistente no es una app nueva. Es el chat donde ya vivís, con superpoderes.

WhatsApp tiene un rincón perfecto para esto: el chat con vos mismo. Ya lo usaba como bloc de notas. Ahora es mi centro de comando: le hablo (o le mando audios) y del otro lado responde un bot que ve todo lo que yo veo.

T

tu autochat, ahora con asistente

🎙 Audio · 4:12
09:14 ✓✓
📝 Transcripción Llamé al proveedor, quedó en mandar la cotización el jueves. Hay que confirmar el stock antes del viernes y avisarle a Marco… 🧾 Resumen • Proveedor manda cotización el jueves • Confirmar stock antes del viernes • Avisar a Marco
09:15
El origen de todo: audios propios → transcripción + resumen.

El cómo: un dispositivo vinculado con cerebro

La base es Baileys, una librería open source que habla el protocolo de WhatsApp Web. El bot se vincula como un dispositivo más (igual que WhatsApp en tu compu) y corre bajo pm2 en mi Mac mini, que está siempre prendida y conectada: el asistente no depende de que yo abra la laptop. Encima de eso: Whisper para transcribir, gpt-4o-mini para clasificar y entender lenguaje natural, y las APIs de Google Calendar y Gmail para mis dos cuentas.

El principio rector de todo el diseño es uno solo: pipeline barato primero. Cada mensaje pasa por capas de filtrado donde cada capa es más cara que la anterior, y la mayoría muere gratis en la primera:

  • Capa 0, alcance: solo DMs y los 39 grupos de trabajo que elegí vigilar. Estados, canales y los otros 954 grupos no existen.
  • Capa 1, regex a costo $0:stickers, reacciones, "jaja", "ok", emojis sueltos quedan descartados sin gastar un token. Acá muere ~70% de lo que entra.
  • Capa 2, LLM batcheado: lo que sobrevive se acumula y cada 5 minutos un solo call a gpt-4o-mini clasifica el lote entero.
  • Capa 3, acción: urgente → push inmediato al teléfono; importante → digest cada hora; el resto → descartado.
Ilustración en tinta: cientos de burbujas de chat caen en un embudo con tamices; solo tres llegan abajo, sobre un cojín que sostiene un robot

El clasificador devuelve JSON estricto por cada mensaje:

{
  "importante": true,
  "urgente": false,
  "categoria": "plata",          // trabajo | plata | fechas | pedido
  "resumen": "María envió la factura de julio y espera el pago",
  "propuestaHorario": null,       // detecta "¿te va mañana 15:00?"
  "todo": "Pagar la factura de julio a María"
}

Ese único JSON alimenta todo: el digest horario agrupado por categoría, las alertas urgentes, los to-dos sugeridos y las propuestas de horario. Un call, cuatro features. El digest se ve así:

T

digest: lo importante de la última hora

📋 Digest 14:00–15:00 (4) 💼 Trabajo/clientes • Marco (Gerencia): necesita cerrar el contrato esta semana 💰 Plata/pagos • María: confirmó la transferencia de 1.500 📅 Fechas • Grupo Dev: la reunión del martes pasa a las 16:00 To-dos sugeridos • Responderle a Marco sobre el contrato
15:00
Cada hora, solo si hay algo. Lo que no llega acá no merecía tu atención.
T

urgencias: del chat al push en segundos

🚨 Urgente — Diego (Ops Acme) Se cayó el servidor de producción y los usuarios no pueden entrar. 👉 Llamar a Diego ya
16:47
Lo urgente salta el digest: aviso inmediato en el autochat.

Y como los mensajes que te mandás a vos mismo no suenan en el teléfono, lo urgente también llega como push real vía ntfy, con prioridad máxima y deep link al chat correcto:

🔔
🚨 Urgente — Diego (Ops Acme)ahora
Se cayó el servidor de producción. 👉 Llamar a Diego ya
Tocar abre el chat de WhatsApp correcto
El push atraviesa el silencio de WhatsApp. Tap y estás en el chat de Diego.

El calendario se maneja hablando

La segunda mitad del bot es un asistente de agenda sobre mis dos cuentas de Google (la personal y la de 021). Acá también hay un gate barato: una regex decide si el texto parecede calendario, y solo entonces gpt-4o-mini lo convierte en una acción estructurada con fechas absolutas. "El jueves 3pm" se vuelve 2026-07-16T15:00 sin que yo piense en zonas horarias.

T

crear, siempre con confirmación

agendame reunión con Marco el jueves 3pm con meet
11:02 ✓✓
📅 Confirmar evento 🏠 personal Reunión con Marco jue 16/07 15:00–16:00 📹 con Google Meet Respondé para agendar.
11:02
11:03 ✓✓
✅ Agendado en 🏠 personal. 📹 meet.google.com/abc-defg-hij
11:03
T

propuestas ajenas, resueltas

📅 Propuesta de horario — Carla "¿Te va mañana 15:00 para revisar el contrato?" mar 14/07 15:00 ✅ Estás libre en ambos calendarios Respondé agendalo para crearlo.
18:21
agendalo
18:24 ✓✓
✅ Agendado en 🏠 personal.
18:24
T

consultar, en texto o audio

qué tengo mañana?
21:40 ✓✓
🗓 mar, 14/07 • 10:30–11:00 🏢 Daily • 11:00–13:00 🏢 Research & planning • 15:00–16:00 🏠 Contrato con Carla
21:40
Agenda por lenguaje natural: crear con confirmación, propuestas ajenas resueltas, y consultas al instante · deslizá para ver más →

Memoria: promesas, gastos y lo que quedó dicho

Mi feature favorita es la que no pedí hasta el final: el detector de promesas. El bot lee lo que yoescribo en chats de trabajo, y cuando prometo algo ("mañana te mando la cotización") lo convierte en to-do con recordatorio a la hora que corresponde. Nadie más te cubre esa espalda.

Ilustración en tinta: burbujas de chat se escapan de un escritorio como globos y un pequeño robot las atrapa con una red y las anota en un libro
T

briefing de las 7:00

☀️ Briefing 🗓 lun 14/07 • 10:30–11:00 🏢 Daily • 15:00–16:00 🏠 Contrato con Carla Recordatorios de hoy • 09:00 Mandar la factura a María To-dos pendientes (3) • 🤝 Mandar la cotización a Carla
07:00
🤝 detectado ayer en tu chat con Carla: “mañana te mando la cotización”
Todas las mañanas: agenda, recordatorios, to-dos. Y las promesas que hice ayer.

A eso se suman recordatorios por lenguaje natural, registro de gastos por moneda, y un historial de 14 días de los chats vigilados que puedo interrogar como si fuera una persona que estuvo en todas mis conversaciones:

T

recordatorios

recordame mañana 9am mandar la factura a María
22:10 ✓✓
⏰ Te aviso el mar, 14/07 a las 09:00: mandar la factura a María
22:10
⏰ Recordatorio Mandar la factura a María
09:00
T

gastos por moneda

gasté 120 en hosting
13:05 ✓✓
💸 Registrado: 120 USD — hosting
13:05
cuánto gasté este mes?
18:30 ✓✓
💸 Gastos julio Total: 340 USD + 180 PEN (7)
18:30
T

búsqueda en 14 días de chats

qué quedó con el contrato de Acme?
10:12 ✓✓
🔍 El contrato quedó en 3000 USD mensuales con kickoff el lunes 20. Lo dijo Salva en el grupo Gerencia el 13/07.
10:12
T

documentos entrantes

📄 María — factura-julio.pdf: • Factura N° 0042 por 1.500 USD • Vence el 20 de julio • Cuenta BCP para transferencia
12:33
El PDF llegó al chat de María; el bot lo resumió solo
La memoria del bot: recordatorios, gastos, búsqueda histórica y resúmenes por chat · deslizá para ver más →

Hablarle, y que hable por vos

El canal funciona en las dos direcciones. Le puedo hablar por audio (los audios grabados por mí son comandos; los reenviados solo se transcriben), pedirle resúmenes de cualquier chat vigilado, y hasta dictarle respuestas que recién salen cuando yo las confirmo:

T

la voz es un comando

🎙 Audio · 0:06 “qué tengo mañana?”
08:12 ✓✓
🗓 mar, 14/07 • 10:30–11:00 🏢 Daily • 15:00–16:00 🏠 Contrato con Carla
08:12
T

resúmenes de cualquier chat

resumime Gerencia de hoy
19:02 ✓✓
🧠 Resumen Gerencia (32 mensajes) • Se cerró la propuesta en 3.000 • Kickoff el lunes 20 • Pendiente: contrato lo prepara Marco
19:02
T

borradores: vos apretás enviar

respondele a Carla que mañana le mando la cotización
17:40 ✓✓
✍️ Borrador para Carla: "Mañana te mando la cotización, quedate tranqui." Respondé mandalo para enviarlo.
17:40
mandalo
17:41 ✓✓
✅ Enviado a Carla.
17:41
T

los audios ajenos llegan leídos

🎧 Marco (Gerencia): Confirmado lo del cliente, la reunión de kickoff queda para el lunes a las 10. Avisale al equipo y…
11:24
Audio de 3:40 en el grupo Gerencia, transcripto solo
Voz como comando, resúmenes de chats, borradores con confirmación y audios ajenos transcriptos · deslizá para ver más →

La capa que lo cambia todo: Claude Code y mi Brain

Acá es donde el bot deja de ser un filtro inteligente y se vuelve parte de algo más grande. En mi día a día ya trabajo con workflows de agentes: cotizaciones que se generan solas a partir de un PRD, e2e testing que encuentra la causa raíz y se auto-corrige, deploys que corren mientras duermo. Todo eso vive en Claude Code, y Claude ya está conectado al Company Brain de 021, el grafo de conocimiento del que escribí en otro post.

Ilustración en tinta: un teléfono vintage le pasa un mensaje a un robot mayordomo que corre con un pergamino hacia un autómata artesano conectado a una biblioteca con forma de cerebro

El bot es la puerta de entrada por WhatsApp a esa maquinaria: para tareas que le quedan grandes a un clasificador, puede levantar Claude Code y delegarle el trabajo pesado. Se ve así:

claude — cotización delegada desde WhatsApp
Tarea del bot: cotización para app de delivery de FarmaPlus
Leyendo PRD y llamada de discovery del Brain…
Corriendo workflow quotation-maker (templates + pricing)…
cotizacion-farmaplus.pdf generada (12 págs)
Enviando al autochat de WhatsApp para revisión
El bot delega, Claude Code ejecuta el workflow de cotizaciones que ya existe, y el PDF vuelve al chat.
claude — e2e roto, causa raíz y fix
Tarea del bot: “se rompió el checkout en QA”
Corriendo suite e2e de checkout… 3/14 fallan
Causa raíz: el mock de pagos cambió el shape de la respuesta
Fix aplicado + 14/14 verdes + PR abierto
Resumen al autochat: “era el mock de pagos, PR #142 listo”
El mismo flujo de e2e testing de mis workflows, disparado por un mensaje.

Y como Claude ya habla con el Brain, preguntarle algo de la empresa desde el teléfono es un mensaje de WhatsApp: el bot le pregunta a Claude, Claude le pregunta al Brain, y la respuesta vuelve al chat.

WhatsApp es la interfaz. Claude Code es el motor. El Brain es la memoria. El bot solo conecta los cables.

Decisiones de diseño con opinión

  • El bot jamás escribe a terceros por su cuenta.La única función que envía mensajes a otras personas (borradores tipo "respondele a Juan que…") requiere preview exacto y confirmación explícita, y expira a los 5 minutos. Todo lo demás ocurre en mi autochat.
  • Los audios reenviados nunca ejecutan comandos.Un audio grabado por mí puede ser un comando de voz; uno reenviado solo se transcribe. Si no, cualquiera podría mandarme un audio diciendo "borrá mi agenda" y yo reenviármelo sin pensar.
  • markOnlineOnConnect: false. Si el dispositivo vinculado se reporta online, WhatsApp deja de mandar notificaciones push al teléfono. Un bot que te silencia el teléfono es peor que no tener bot.
  • Push por fuera de WhatsApp. Los mensajes que te mandás a vos mismo no suenan. Para urgencias uso ntfy: push real, con prioridad, y el tap abre directamente el chat correcto vía deep link de wa.me.

War stories: los tres bugs que me gustaron

1. El \b que no banca tildes. Mis gates son regex, y JavaScript computa \b con \w ASCII: "é" no es word character. Resultado: "gasté 120 en hosting" no matcheaba gast[eéao]\w*\b y el bot me ignoraba en silencio. La regla que me llevo: en español, nunca cierres un gate con \b después de una posible tilde.

2. Dos instancias peleando por la sesión. Lancé una instancia de prueba mientras la de producción corría bajo pm2. WhatsApp solo permite una conexión por dispositivo vinculado: las dos entraron en un loop de reconexión mutua, pateándose cada 3 segundos. Parecía un bug del bot; era un conflicto de sesión.

3. El recordatorio que viajó al 2023.Le dije al clasificador de promesas qué día y hora era… pero no el año. Dedujo "mañana" en el año de su training data y me agendó un recordatorio tres años en el pasado. Los LLMs no asumen tu presente: decíselo completo.

Los números

  • Costo: menos de $5 al mes todo incluido. Whisper para audios, gpt-4o-mini batcheado para clasificación y lenguaje natural, visión para imágenes. Google Calendar, Gmail y ntfy son gratis.
  • Stack: Node + Baileys + pm2 en una Mac mini siempre prendida. Sin servidores nuevos, sin base de datos: el estado es un JSON y el historial son archivos JSONL con retención de 14 días.
  • Tiempo: un par de horas iterando, usando el flujo de desarrollo con agentes que ya tengo armado. Cada feature se deployó y probó contra mis datos reales antes de la siguiente.

Lo que sigue

La próxima pieza es ops: que el bot haga ping a los servidores de mis clientes y me avise de una caída antes de que me la cuente el cliente, y que "¿está caído el server de X?" se responda con un status real por ssh.

Pero más que un roadmap, esto tiene un modo de crecer: mejora continua. Cada vez que me encuentro haciendo algo a mano dos veces, es candidato a volverse una capability del bot. Así aparecieron las promesas, los gastos y la búsqueda histórica, y así van a aparecer las que siguen.

La tesis ya está probada: no necesitaba otra app de productividad. Necesitaba que el canal donde ya vivo, el chat conmigo mismo, dejara de ser un bloc de notas y empezara a trabajar.

¿Querés algo así para tu operación, o discutir cómo lo armarías vos? Escribime. Por WhatsApp, obvio: wa.me. Y cada capability nueva del bot la voy contando en LinkedIn y X.