El problema: prospectos en un JSON y emails en Discord
En los posts anteriores de esta serie contamos cómo montamos un pipeline multi-agente para prospección comercial: un agente Prospector que busca empresas, y un agente Designer que verifica sus webs con un navegador real y compone emails de venta aplicando los principios de Cialdini.
Funcionaba, pero tenía un problema serio: toda la información vivía en un archivo JSON en el servidor. Los prospectos se guardaban en prospects.json, los borradores de email llegaban por Discord DM, y no había forma de visualizar el pipeline, trackear si un prospecto respondió, o saber qué emails se abrieron.
Necesitábamos un CRM real. Pero uno que se integrara con OpenClaw sin romper el flujo automatizado.
Por qué elegimos Zoho CRM
Evaluamos cuatro opciones. La decisión no fue obvia:
| Zoho CRM | HubSpot | Monday | Holded | |
|---|---|---|---|---|
| Contactos gratis | 5.000 | 1.000 | 1.000 | N/A |
| Automatización gratis | Sí | Muy limitada | No | No |
| Skill nativo OpenClaw | Sí (3+ skills) | No | No | No |
| MCP servers oficiales | 4 de Zoho | No | No | 1 community |
| Data center EU | Sí | No | Sí | Sí |
| Upgrade si creces | 14€/mes | 45€+/mes | 12€+/mes | 15€/mes |
Los factores decisivos fueron tres:
- Skill nativo de OpenClaw — se instala con un comando y gestiona OAuth automáticamente
- Data center EU — estamos en España, GDPR sin complicaciones
- Free tier generoso — 5.000 contactos con automatización incluida, 5x más que HubSpot
Cómo conectar Zoho CRM con OpenClaw
La integración se hace en tres pasos. No hace falta tocar código:
Paso 1: Instalar el skill
openclaw skills install zoho-crmEsto descarga el skill desde ClawHub y lo instala en el workspace. El skill usa Maton como gateway OAuth — Maton gestiona los tokens de Zoho automáticamente para que no tengas que lidiar con refresh tokens.
Paso 2: Configurar la API key de Maton
Creá una cuenta gratuita en maton.ai, copiá tu API key desde la configuración, y añadila al entorno de OpenClaw:
# Añadir la key al entorno del gateway
export MATON_API_KEY="<TU_API_KEY_DE_MATON>"
# Reiniciar el gateway para que cargue la variable
openclaw gateway restartPaso 3: Autorizar la conexión con Zoho
Desde el servidor de OpenClaw, creá la conexión OAuth:
# Crear conexión
python3 -c "
import urllib.request, os, json
data = json.dumps({'app': 'zoho-crm'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', 'Bearer ' + os.environ['MATON_API_KEY'])
req.add_header('Content-Type', 'application/json')
resp = json.load(urllib.request.urlopen(req))
print('Abrí esta URL en tu navegador:')
# Obtener URL de autorización
req2 = urllib.request.Request('https://api.maton.ai/connections/' + resp['connection_id'])
req2.add_header('Authorization', 'Bearer ' + os.environ['MATON_API_KEY'])
resp2 = json.load(urllib.request.urlopen(req2))
print(resp2['connection']['url'])
"Abrís la URL en tu navegador, autorizás con tu cuenta de Zoho, y listo. La conexión queda activa y los tokens se renuevan solos.
El pipeline de ventas que diseñamos
Separamos el flujo en dos módulos de Zoho CRM, cada uno con su propio ciclo:
Leads — territorio de los agentes
Los agentes de OpenClaw crean y actualizan Leads automáticamente. El ciclo:
No contactado → Contactar en el futuro → Previamente clasificado → Intento de contacto → Contactado
(Prospector (Designer verifica (Roberto aprueba (Designer compone (Prospecto
encuentra) con browser) en Zoho UI) email + Nota) respondió)Deals — territorio humano
Cuando un Lead responde y hay interés real, Roberto hace clic en "Convertir" dentro de Zoho. Esto crea automáticamente un Contacto + Cuenta + Deal, que se mueve por el pipeline de ventas:
Reunión programada (20%) → Reunión realizada (40%) → Propuesta enviada (60%) → Negociación (80%) → Cerrado ganado/perdidoLa separación es clave: los agentes nunca tocan los Deals. Su trabajo termina cuando el email está listo. La decisión de enviar, negociar y cerrar es siempre humana.
Cómo los agentes usan Zoho CRM
El Prospector: busca y crea
Cada martes y jueves, el agente Prospector se despierta por un cron job. Antes de auditar una empresa, busca en Zoho para no crear duplicados:
# Verificar si la empresa ya existe en Zoho
criteria = "(Company:equals:NOMBRE_EMPRESA)"
# GET /Leads/search?criteria=...
# Si devuelve 204 (No Content) → no existe, crear Lead
# Si devuelve datos → skip, ya está en el CRMPara cada empresa que pasa el filtro, crea un Lead con los datos de auditoría: sector, ciudad, problemas detectados, score, y pitch angle. Todo en el campo Description con un formato estructurado que el Designer puede parsear.
El Designer: verifica y prepara el email
El Designer lee Leads por status. Para verificación, busca Leads con status "No contactado", navega sus webs con un navegador real (Playwright/Chromium), y actualiza los datos verificados. Para emails, busca Leads con status "Previamente clasificado" (aprobados por Roberto), navega competidores del sector, y compone el email aplicando los 6 principios de Cialdini.
El borrador del email se guarda como Nota en el Lead de Zoho:
# Guardar borrador como Nota en el Lead
# POST /Leads/{lead_id}/Notes
note = {
"Note_Title": "EMAIL BORRADOR - Listo para enviar",
"Note_Content": "SUBJECT: ...\n\n[cuerpo del email]\n\n---\nÁNGULO DE VENTA: ...\nSEGUIMIENTO: ..."
}Email tracking nativo
Esta es la funcionalidad que más nos faltaba con el flujo anterior (prospects.json + Discord). Cuando enviás un email desde un Lead en Zoho CRM:
- Zoho inserta un pixel de tracking invisible
- Sabés si el email fue abierto (y cuántas veces)
- Sabés si hizo clic en algún enlace
- Sabés si rebotó
- Todo queda en el timeline del Lead — historial completo de la relación
[email protected]).Resultado
En una tarde pasamos de un JSON en un servidor a un CRM profesional con:
- 14 prospectos migrados con todos sus datos de auditoría y verificación
- Pipeline visual — ves de un vistazo cuántos leads hay en cada etapa
- Email tracking — sabés si el prospecto leyó tu email
- Historial completo — cada interacción queda registrada en el Lead
- Sin Discord para emails — todo vive en Zoho, con un solo clic para enviar
- Coste: 0€ — todo dentro del free tier de Zoho CRM
La lección más importante: no hace falta un CRM caro para tener un pipeline profesional. Zoho CRM gratis + OpenClaw + Maton te dan un sistema de prospección automatizada con tracking que hace 5 años habría costado miles de euros en licencias y desarrollo.
Próximos pasos
El sistema está funcionando, pero hay mejoras en el horizonte:
- Envío directo desde la API — cuando Maton añada el scope de email, los agentes podrán enviar directamente desde Zoho con tracking, sin paso manual
- Workflows automatizados — Zoho permite crear reglas como "si un Lead lleva 7 días en Intento de contacto sin respuesta, crear tarea de seguimiento"
- Modelo gratuito para el blog — mover el agente blog-writer a Google Gemini (free tier) para reducir costes de Bedrock
Si tenés preguntas o querés montar algo similar para tu empresa, escríbenos a [email protected].