Este rol cubre: la configuración y mantenimiento del chatbot (ManyChat + GPT-4o), todos los flujos de automatización en Make y n8n, las integraciones entre plataformas (HubSpot, Calendly, WhatsApp, email) y la generación programática de contenido textual con IA.
Mis tareas
Lo que debo hacer como Especialista en IA y Automatizaciones
1
Fase 1 — Chatbot y Captación (Semanas 1–3)
Prioridad crítica
-
Configurar ManyChat para Instagram DM y Facebook MessengerCrear cuenta ManyChat conectada a la página de Instagram/Facebook de Dental Basté. Configurar el flujo de entrada (trigger por keyword o DM nuevo). Conectar con GPT-4o vía webhook para respuestas inteligentes. System prompt específico para rol dental.Crítico
-
Definir y construir el flujo de cualificación de leadsEl chatbot debe recoger: tratamiento de interés, nombre completo, email o teléfono. Usar function calling de GPT-4o para extraer datos estructurados en JSON y calcular lead score (0–100).Crítico
-
Conectar chatbot con HubSpot CRMUpsert de contacto vía API de HubSpot cada vez que el lead proporciona datos. Asignar propiedades: tratamiento_interes, lead_score_ia, fuente_captacion. Disparar secuencia de nurturing en ActiveCampaign al crear el contacto.Crítico
-
Implementar handoff chatbot → humanoCuando el lead pide hablar con alguien, escalar a la recepción. Notificación interna vía WhatsApp o Slack con el resumen de la conversación.Alta
2
Fase 2 — Automatizaciones y Nurturing (Semanas 4–6)
Make · n8n · WhatsApp · Email
-
Montar escenario Make: Calendly → HubSpot → notificacionesTrigger: nueva cita en Calendly. Acciones: actualizar lifecycle en HubSpot (→ "opportunity"), enviar email de confirmación automático, programar SMS recordatorio 24h antes y WhatsApp 2h antes.Alta
-
Configurar secuencia de nurturing post-lead en HubSpot / ActiveCampaignDía 0: email bienvenida + guía dental gratuita. Día 3: email educativo según tratamiento de interés (generado con GPT-4o). Día 7: WhatsApp con oferta primera visita. Día 14: asignar a comercial si no ha convertido.Alta
-
Integrar WhatsApp Business API (360dialog) en los flujosConfigurar templates aprobados de WhatsApp para recordatorios y nurturing. Los templates requieren aprobación de Meta previamente. Usar Make o n8n para disparar los envíos.Alta
-
Flujo de solicitud automática de reseña post-tratamientoTrigger: cita marcada como completada. +2h: SMS de satisfacción (escala 1-5). Si puntuación ≥ 4: enviar enlace de reseña Google. Si < 4: alerta interna + gestión manual.Media
3
Fase 3 — Análisis y Contenido IA (Semanas 7–12)
Lead scoring avanzado · reseñas · copy
-
Lead scoring avanzado con IA predictivaUsar datos históricos de HubSpot para entrenar un modelo de puntuación. Variables: tratamiento, canal de entrada, interacciones, tiempo de respuesta. Integrar score en pipeline de ventas.Alta
-
Pipeline de análisis de reseñas Google con IAMake + Google Places API: monitorizar nuevas reseñas cada 6h. Enviar texto a GPT-4o para análisis de sentimiento. Si negativa: generar respuesta sugerida y alertar a recepción vía Slack/WhatsApp.Media
-
Generador de copy para spots TV y emails con GPT-4oScript Python que recibe tratamiento + formato (TV spot, email, WhatsApp) y devuelve titulo_1, titulo_2, descripción, CTA. Coordinar salida con el especialista de vídeo.Media
-
Dashboard Looker Studio con métricas de chatbot e IALeads captados por canal (chatbot/web/DM), tasa de cualificación, conversión lead→cita, CSAT del chat. Conectar a HubSpot y datos de Calendly.Baja
Chatbot IA — ManyChat + GPT-4o
Arquitectura, system prompt y flujo de cualificación
ManyChat — qué hace
- Gestiona los flujos de conversación en Instagram DM y Facebook Messenger
- Captura el primer mensaje y decide si escalar a GPT-4o o responder con plantilla
- Recoge nombre, email y teléfono cuando el usuario los proporciona
- Activa la integración con HubSpot vía webhook cuando hay datos suficientes
GPT-4o — qué hace
- Responde con lenguaje natural en castellano a las preguntas del lead
- Extrae datos estructurados (nombre, tratamiento, contacto) con function calling
- Calcula un lead score (0–100) basado en intención y completitud
- Nunca diagnostica: deriva al doctor para preguntas clínicas
System Prompt del Chatbot Dental
Python — Chatbot Handler (Make / n8n webhook)
# Sistema prompt para el chatbot dental IA
SYSTEM_PROMPT = """
Eres el asistente virtual de Dental Basté.
Tu objetivo es:
1. Saludar calurosamente y preguntar en qué puedes ayudar
2. Identificar el tratamiento de interés (ortodoncia, implantes, blanqueamiento, etc.)
3. Recopilar nombre completo y método de contacto
4. Ofrecer disponibilidad de cita y redirigir al booking
5. Nunca diagnosticar. Si preguntan por síntomas, remitir al doctor.
Tono: cercano, profesional, en español. Respuestas máximo 3 frases.
"""
import openai, json
def process_lead_message(user_message: str, conversation_history: list) -> dict:
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
*conversation_history,
{"role": "user", "content": user_message}
]
response = openai.chat.completions.create(
model="gpt-4o",
messages=messages,
temperature=0.4,
max_tokens=200,
functions=[{
"name": "capture_lead_data",
"parameters": {
"type": "object",
"properties": {
"nombre": {"type": "string"},
"tratamiento_interes": {"type": "string"},
"telefono": {"type": "string"},
"lead_score": {"type": "number", "description": "0-100"}
}
}
}]
)
return response.choices[0].message
Lead Scoring — Criterios
| Variable | Peso | Lógica |
|---|---|---|
| Tratamiento de interés | +40 pts | Implantes u ortodoncia = 40. Blanqueamiento = 20. Consulta genérica = 10. |
| Datos de contacto completos | +30 pts | Nombre + teléfono + email = 30. Solo uno de los dos = 15. |
| Intención explícita de cita | +20 pts | Menciona querer pedir cita o preguntar por disponibilidad = 20. |
| Urgencia expresada | +10 pts | Palabras como "dolor", "urgente", "esta semana" = 10. |
Automatizaciones
4 flujos principales en Make y n8n
Make vs n8n: Usar Make para flujos generales entre plataformas (Calendly, HubSpot, WhatsApp, email). Usar n8n self-hosted (VPS en España) para cualquier flujo que maneje datos clínicos o historial de pacientes — obligatorio por RGPD.
Flujo 1 — Captación y Cualificación de Lead (Chatbot IA)
Trigger
Usuario llega a web o envía DM en Instagram/WhatsApp
→
Acción
Chatbot GPT-4o saluda y pregunta tipo de tratamiento
→
Condición
¿Ha proporcionado nombre + email/teléfono?
→
Acción
Crea contacto en HubSpot + asigna etiqueta de interés
→
Salida
Ofrece cita + envía SMS/email de confirmación
Flujo 2 — Reserva Automática de Cita y Recordatorios
Trigger
Lead cualificado acepta proponer cita
→
Acción
Calendly muestra slots disponibles en tiempo real
→
Acción
Cita confirmada → Make crea evento en Google Calendar clínica
→
Acción
Email confirmación + SMS inmediato
→
Recordatorio
WhatsApp 24h antes + SMS 2h antes de la cita
JSON — Make Scenario: Reminder Automation
{
"scenario": "dental_appointment_reminder",
"trigger": {
"app": "calendly",
"event": "invitee.created"
},
"steps": [
{
"id": 1,
"app": "hubspot",
"action": "update_contact",
"data": {
"lifecycle_stage": "opportunity",
"appointment_date": "{{trigger.event.start_time}}"
}
},
{
"id": 2,
"app": "whatsapp_360dialog",
"action": "send_template_message",
"schedule": "-24h",
"template_name": "appointment_reminder_es"
},
{
"id": 3,
"app": "whatsapp_360dialog",
"action": "send_template_message",
"schedule": "-2h",
"template_name": "appointment_reminder_2h_es"
}
]
}
Flujo 3 — Secuencia de Nurturing Post-Lead
Trigger
Nuevo contacto en HubSpot sin cita confirmada
→
Día 0
Email bienvenida + PDF guía dental gratuita
→
Día 3
Email educativo sobre el tratamiento de interés + vídeo
→
Día 7
WhatsApp con oferta de primera visita gratuita
→
Día 14
SMS de seguimiento + transferencia a comercial si no convierte
YAML — HubSpot / ActiveCampaign: Nurture Sequence
automation:
name: "Dental Lead Nurturing ES"
trigger:
type: contact_tag_added
tag: "lead-cualificado"
steps:
- wait: 0
action: send_email
template: "bienvenida_dental"
subject: "Tu sonrisa merece lo mejor — Guía gratuita incluida"
- wait: 3 # días
condition: "NOT has_appointment"
action: send_email
template: "educativo_{{lead.tratamiento_interes}}"
- wait: 7
condition: "NOT has_appointment"
action: send_whatsapp
message: "Hola {{first_name}}, ¿tienes 15 min esta semana? Primera visita sin coste"
- wait: 14
condition: "NOT has_appointment"
action: assign_to_sales_rep
priority: "high"
Flujo 4 — Solicitud de Reseña Post-Tratamiento
Trigger
Cita marcada como "completada" en el sistema
→
+2h
WhatsApp de satisfacción (escala 1–5)
→
Condición
Puntuación ≥ 4 → pedir reseña Google · < 4 → alerta interna
→
Acción
IA analiza texto de reseña negativa y genera respuesta sugerida
→
Salida
Reseña publicada / Incidencia gestionada por recepción
Integraciones y APIs
Mapa de conexiones, credenciales y notas técnicas
Gestión de credenciales: Todas las API Keys deben almacenarse en un gestor de secretos (Bitwarden Secrets Manager o similar). Nunca en texto plano ni en repositorios. Rotación trimestral obligatoria.
Mapa de Conexiones
| Origen | Destino | Método | Dato transferido | Frecuencia |
|---|---|---|---|---|
| Web / Landing | HubSpot CRM | Formulario → Make Webhook | Nombre, email, tratamiento | Tiempo real |
| Chatbot GPT-4o | HubSpot CRM | API REST | Lead data + score | Tiempo real |
| Calendly | HubSpot + WhatsApp | Webhook → Make | Cita confirmada + datos | Tiempo real |
| HubSpot | ActiveCampaign | Webhook bidireccional | Stage cambios, etiquetas | Tiempo real |
| ActiveCampaign | 360dialog (WhatsApp) | Make | Mensajes plantilla aprobados | Programado |
| Google Ads / Meta | HubSpot CRM | Pixel + Offline conversions | Leads, conversiones | Diario |
| Clínica (citas completadas) | WhatsApp + CRM | n8n webhook | Confirmaciones, recordatorios | Programado |
| Google Reviews | Slack + CRM | Make + Places API | Nuevas reseñas | Cada 6h |
HubSpot — Upsert de Contacto
JavaScript — HubSpot Contact Upsert via API
const upsertDentalLead = async (leadData) => {
const { nombre, email, telefono, tratamiento, leadScore } = leadData;
const payload = {
properties: {
firstname: nombre.split(' ')[0],
lastname: nombre.split(' ').slice(1).join(' '),
email: email,
phone: telefono,
tratamiento_interes: tratamiento,
hs_lead_status: 'NEW',
lead_score_ia: leadScore,
fuente_captacion: 'chatbot_web'
}
};
const response = await fetch(
'https://api.hubapi.com/crm/v3/objects/contacts/upsert',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.HUBSPOT_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
}
);
if (response.ok) {
// Disparar secuencia de nurturing en ActiveCampaign
await triggerNurturingSequence(email, tratamiento);
}
};
Generación de Contenido con IA
Emails de nurturing, copy para TV y respuestas a reseñas
Emails de Nurturing
- Generar una plantilla de email por cada tratamiento principal: ortodoncia, implantes, blanqueamiento, periodoncia
- Prompt: tratamiento + perfil (edad 30–55, sin tecnicismos) + CTA a primera visita gratuita
- Incluir un dato educativo relevante para aumentar apertura y confianza
- Revisar y aprobar antes de subir a ActiveCampaign
Copy para TV Escaparate
- Generar titulo_1, titulo_2, titulo_3 y descripción para cada spot mensual
- Input del especialista de vídeo: tratamiento + precio + oferta activa
- Output en JSON para que el pipeline programático lo inserte directamente en el slide
- Máximo 6 palabras por título; descripción máximo 2 líneas
Generador de Copy para Spots
Python — Generador de Copy para TV con GPT-4o
import openai, json
def generar_copy_tv(tratamiento: str, precio: str, oferta: str = "") -> dict:
prompt = f"""
Crea el copy para un slide de TV dental. Devuelve SOLO JSON válido.
Tratamiento: {tratamiento}
Precio: {precio}
Oferta activa: {oferta if oferta else "ninguna"}
Formato de respuesta (JSON):
{{
"titulo_1": "máximo 4 palabras en mayúsculas",
"titulo_2": "beneficio principal, máximo 5 palabras",
"titulo_3": "detalle o puntos clave, máximo 6 palabras",
"descripcion": "2 líneas descriptivas, tono cercano",
"cta": "llamada a la acción breve"
}}
Tono: directo, confianza, sin tecnicismos. Para pacientes 30-55 años.
"""
response = openai.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"},
temperature=0.6
)
return json.loads(response.choices[0].message.content)
# Uso: generar_copy_tv("Implantes dentales", "Desde 900€", "Financiación sin intereses")
Análisis y Respuesta a Reseñas Google
Python — Análisis de Sentimiento y Respuesta Automática
def analizar_resena(texto_resena: str, puntuacion: int) -> dict:
prompt = f"""
Analiza esta reseña de una clínica dental y genera una respuesta profesional.
Reseña ({puntuacion}/5 estrellas): "{texto_resena}"
Devuelve JSON con:
{{
"sentimiento": "positivo | negativo | neutro",
"tema_principal": "descripción breve del tema",
"respuesta": "respuesta profesional en primera persona del plural (nosotros), máximo 3 frases",
"requiere_atencion": true/false
}}
Si la puntuación es < 3, requiere_atencion debe ser true.
Tono: empático, profesional, sin defensividad.
"""
response = openai.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"}
)
resultado = json.loads(response.choices[0].message.content)
if resultado["requiere_atencion"]:
notificar_recepcion(texto_resena, resultado["respuesta"])
return resultado