Especialista en IA y Automatizaciones

Chatbot conversacional · Automatizaciones Make/n8n · CRM · Nurturing · Generación de contenido

← Volver al Roadmap  ·  Chatbot IA  ·  Automatizaciones  ·  Integraciones  ·  Contenido IA

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 Messenger
    Crear 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 leads
    El 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 CRM
    Upsert 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 → humano
    Cuando 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 → notificaciones
    Trigger: 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 / ActiveCampaign
    Dí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 flujos
    Configurar 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-tratamiento
    Trigger: 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 predictiva
    Usar 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 IA
    Make + 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-4o
    Script 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 IA
    Leads 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

VariablePesoLó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

OrigenDestinoMétodoDato transferidoFrecuencia
Web / LandingHubSpot CRMFormulario → Make WebhookNombre, email, tratamientoTiempo real
Chatbot GPT-4oHubSpot CRMAPI RESTLead data + scoreTiempo real
CalendlyHubSpot + WhatsAppWebhook → MakeCita confirmada + datosTiempo real
HubSpotActiveCampaignWebhook bidireccionalStage cambios, etiquetasTiempo real
ActiveCampaign360dialog (WhatsApp)MakeMensajes plantilla aprobadosProgramado
Google Ads / MetaHubSpot CRMPixel + Offline conversionsLeads, conversionesDiario
Clínica (citas completadas)WhatsApp + CRMn8n webhookConfirmaciones, recordatoriosProgramado
Google ReviewsSlack + CRMMake + Places APINuevas reseñasCada 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