Biblioteca · Asistentes y bots de mensajería

Mensajería con IA: Telegram, Slack, WhatsApp y Teams en piloto automático

Creador65 minActualizado: octubre de 2026
56 de 105 en la biblioteca

Tiempo: unos 25 min de lectura + 40 min de práctica


Lo esencial

Las apps de mensajería ya no son solo chats. Son plataformas de negocio completas: ventas, soporte, incorporación de clientes, trabajo en equipo. El problema es uno: todo eso requiere personas, que se cansan, se enferman y se van de vacaciones. La IA cambia la ecuación. En esta lección construimos bots inteligentes para Telegram, Slack, WhatsApp y Microsoft Teams: el cliente escribe → Claude analiza → responde en segundos → si es complicado → lo pasa a un responsable.

🎨 Imagínalo así: el community manager ideal no duerme, contesta al instante, recuerda a cada cliente y lleva 500 conversaciones a la vez. No es una persona. Es un bot de IA en tu app de mensajería.


Conceptos clave

  • Telegram Bot API: la interfaz oficial para bots; python-telegram-bot es el estándar en Python
  • Webhook vs. polling: dos formas de recibir mensajes; el webhook es más rápido y barato en producción
  • Slack Bolt SDK: el SDK oficial: eventos, atajos y slash commands en un solo lugar
  • WhatsApp Business API: tres caminos: Twilio (confiable), 360dialog (especializado), Meta Cloud API (directo)
  • Microsoft Teams: notificaciones por webhook con la app Workflows y el Teams MCP oficial de Microsoft (preview)
  • ManyChat: un constructor de flujos sin código para mensajes directos (Instagram, WhatsApp, Messenger, Telegram y otros)
  • Unified Messaging Hub (centro unificado de mensajes): una sola entrada para todos los canales; Claude clasifica y enruta
  • Lógica de escalamiento: cuándo responde el bot y cuándo pasa el caso a una persona

Teoría

Qué app de mensajería para qué negocio

🎨 Imagínalo así: las apps de mensajería son como locales en distintas zonas de la ciudad. Telegram es el barrio de oficinas y comunidades tech, Slack es el corporativo, WhatsApp es el mercado del barrio donde todos se conocen, Teams es el edificio sede de una gran empresa.

App Público Mejor para Complejidad
Telegram Comunidades tech, creadores, algunos países; en Latinoamérica es menos común que WhatsApp Comunidades, contenido, prospectos, ventas Baja
Slack Equipos, SaaS, B2B Procesos internos, notificaciones, DevOps Media
WhatsApp Latinoamérica (el canal principal), Europa, todo el mundo Atención a clientes, pequeños negocios Media
Teams B2B corporativo Clientes empresariales, integración con Office 365 Alta

La regla para elegir: ve a donde ya está tu público. No crees un canal nuevo: intégrate en el que ya existe.


Bot de Telegram: de cero a asistente inteligente

Paso 1: Crear el bot

Escribe /newbot a @BotFather → pon un nombre y un username → recibe el token. Ese token = el acceso para controlar el bot.

Paso 2: Integración básica con Claude

python
import os
import logging
from telegram import Update
from telegram.ext import (
    Application, CommandHandler, MessageHandler,
    filters, ContextTypes
)
import anthropic
from dotenv import load_dotenv

load_dotenv()

claude = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
BOT_TOKEN = os.environ["TELEGRAM_BOT_TOKEN"]

# Historial de la conversación en memoria
# En producción, cámbialo por Redis o SQLite
conversation_history: dict[int, list] = {}

SYSTEM_PROMPT = """Eres el asistente de IA de la inmobiliaria Acme Realty.
Respondes preguntas sobre bienes raíces en Ecuador: precios, zonas, proceso de compra.
Tono: experto amable, no vendedor.
Si la pregunta requiere la asesoría de un asesor, dilo con claridad y ofrece dejar un contacto.
Responde breve: 1–3 oraciones si la pregunta es simple, hasta 5 párrafos si es compleja.
Idioma: español."""


async def cmd_start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    """Comando /start: saludo al usuario nuevo."""
    user = update.effective_user
    await update.message.reply_text(
        f"¡Hola, {user.first_name}! 👋\n\n"
        "Te ayudo con tus preguntas sobre bienes raíces en Cuenca, Ecuador. "
        "Pregunta por precios, zonas o el proceso de compra y te respondo al instante.\n\n"
        "Si necesitas una asesoría personal, solo dímelo."
    )


async def cmd_contact(update: Update, context: ContextTypes.DEFAULT_TYPE):
    """Comando /contact: pide los datos de contacto."""
    await update.message.reply_text(
        "Déjanos tu email o tu teléfono, "
        "y un asesor te contactará en menos de 2 horas en horario laboral."
    )
    # En un bot real aquí va un ConversationHandler para recibir y guardar el contacto


async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    """El manejador principal de los mensajes entrantes."""
    user_id = update.effective_user.id
    user_text = update.message.text

    # Inicializamos el historial si es el primer mensaje
    if user_id not in conversation_history:
        conversation_history[user_id] = []

    # Agregamos el mensaje del usuario
    conversation_history[user_id].append({
        "role": "user",
        "content": user_text
    })

    # Limitamos el historial: los últimos 10 mensajes
    if len(conversation_history[user_id]) > 10:
        conversation_history[user_id] = conversation_history[user_id][-10:]

    # Mostramos "escribiendo..." para una buena experiencia
    await context.bot.send_chat_action(
        chat_id=update.effective_chat.id,
        action="typing"
    )

    # Solicitud a Claude (modelos vigentes: página «Lo vigente»)
    response = claude.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=1024,
        system=SYSTEM_PROMPT,
        messages=conversation_history[user_id]
    )

    assistant_reply = "".join(b.text for b in response.content if b.type == "text")

    # Guardamos la respuesta en el historial
    conversation_history[user_id].append({
        "role": "assistant",
        "content": assistant_reply
    })

    await update.message.reply_text(assistant_reply)


async def handle_error(update: object, context: ContextTypes.DEFAULT_TYPE):
    """Registramos los errores."""
    logging.error("Exception while handling update:", exc_info=context.error)


def main():
    app = Application.builder().token(BOT_TOKEN).build()

    app.add_handler(CommandHandler("start", cmd_start))
    app.add_handler(CommandHandler("contact", cmd_contact))
    app.add_handler(MessageHandler(
        filters.TEXT & ~filters.COMMAND, handle_message
    ))
    app.add_error_handler(handle_error)

    print("Bot de Telegram en marcha (modo polling)...")
    app.run_polling(allowed_updates=Update.ALL_TYPES)


if __name__ == "__main__":
    main()

Telegram: los cuatro patrones principales de bot

1. Bot de preguntas frecuentes (FAQ): responde las preguntas típicas sobre el producto, los precios, los envíos. El system prompt contiene toda la base de conocimiento. Se encarga de las preguntas típicas y le quita una parte notable de la carga al equipo de soporte.

2. Calificador de prospectos: le hace una serie de preguntas al usuario nuevo (presupuesto, plazos, necesidades), determina qué tan "caliente" está el prospecto y le ofrece una reunión o lo manda a una secuencia de seguimiento (nurture).

3. Bot de agenda: se integra con Calendly por API, ofrece horarios libres y crea la reservación directo en el chat. El cliente no sale de la app.

4. Publicador de contenido: Claude genera una publicación según un horario y el bot la publica en el canal. Planear el contenido de la semana toma 20 minutos, una vez, el lunes.


Slack: automatizar los procesos del equipo

Slack con Bolt SDK no es solo un chat. Es una plataforma para bots de equipo inteligentes.

Escenarios típicos:

  • Resumen del standup: el bot junta las respuestas de una encuesta, Claude arma el resumen → lo publica en el canal
  • Avisos de PR: cuando se abre un Pull Request, Claude lee el diff y escribe un resumen breve de los cambios
  • Tareas con un comando: /task Hacer la landing → Claude crea la tarea en Notion/Linear → devuelve el enlace
  • Respuestas a @menciones: el bot "escucha" los canales y responde cuando lo mencionan con @
python
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import anthropic
import os

app = App(token=os.environ["SLACK_BOT_TOKEN"])
claude = anthropic.Anthropic()


@app.event("app_mention")
def handle_mention(event, say):
    """Responde cuando alguien menciona al bot con @."""
    user_text = event["text"]

    # Quitamos la @mención del bot del texto
    clean_text = user_text.split(">", 1)[-1].strip() if ">" in user_text else user_text

    response = claude.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=512,
        system="Eres el asistente del equipo de desarrollo. Responde breve y concreto.",
        messages=[{"role": "user", "content": clean_text}]
    )

    say(f"<@{event['user']}> {''.join(b.text for b in response.content if b.type == 'text')}")


@app.command("/standup")
def handle_standup(ack, say, command):
    """
    /standup: genera el formulario del standup.
    El usuario lo llena, el bot junta las respuestas y hace un resumen.
    """
    ack()
    say({
        "blocks": [
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": f"*Standup de {command['user_name']}*\n"
                            "Responde tres preguntas:"
                }
            },
            {
                "type": "input",
                "block_id": "done",
                "element": {
                    "type": "plain_text_input",
                    "action_id": "done_input",
                    "placeholder": {"type": "plain_text", "text": "¿Qué hiciste ayer?"}
                },
                "label": {"type": "plain_text", "text": "Hecho"}
            }
        ]
    })


@app.command("/summarize")
def handle_summarize(ack, say, command):
    """
    /summarize [texto]: resume un mensaje largo.
    Útil para descripciones largas de PR o documentos en los canales.
    """
    ack()
    text_to_summarize = command.get("text", "")

    if not text_to_summarize:
        say("Escribe el texto después del comando: `/summarize [tu texto]`")
        return

    response = claude.messages.create(
        model="claude-haiku-4-5",
        max_tokens=300,
        messages=[{
            "role": "user",
            "content": f"Resume este texto en 3–5 puntos:\n\n{text_to_summarize}"
        }]
    )

    say(f"📋 *Resumen:*\n{''.join(b.text for b in response.content if b.type == 'text')}")


if __name__ == "__main__":
    handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])
    print("Bot de Slack en marcha...")
    handler.start()

WhatsApp Business API: el mayor alcance

WhatsApp es una de las apps de mensajería más usadas del mundo: la usan miles de millones de personas. Para los negocios en Latinoamérica y Europa, muchas veces es el único canal que prefieren sus clientes.

Ojo con las reglas de Meta: desde el 15 de enero de 2026, Meta no permite en WhatsApp los asistentes de IA de uso general (como ChatGPT) en Latinoamérica, salvo Brasil. Un bot que atiende a los clientes de tu propio negocio es otro caso, pero antes de lanzar revisa las políticas vigentes de WhatsApp Business y lo que permite tu proveedor.

Tres caminos para conectarte:

Proveedor Ventajas Desventajas Precio
Twilio Confiable, documentación excelente Pagas al proveedor y a Meta según la tarifa de Twilio + cargos de Meta
360dialog Especializado en WhatsApp Menos documentación según la tarifa de 360dialog + cargos de Meta
Meta Cloud API Acceso directo, sin margen de un proveedor Verificación del negocio complicada solo los cargos de Meta

Desde el 1 de julio de 2025, Meta cobra cada mensaje de plantilla entregado (depende de la categoría del mensaje y del país del destinatario); las respuestas al cliente dentro de la ventana de atención son gratis. Las tarifas vigentes están en la página de Meta y con tu proveedor.

Código con Twilio + Claude:

python
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
from twilio.rest import Client
import anthropic
import os

app = Flask(__name__)
twilio_client = Client(
    os.environ["TWILIO_ACCOUNT_SID"],
    os.environ["TWILIO_AUTH_TOKEN"]
)
claude = anthropic.Anthropic()

# Historial de conversaciones (en producción: Redis con TTL de 24 h)
wa_conversations: dict[str, list] = {}

WA_SYSTEM = """Eres el asistente de IA de la empresa en WhatsApp.
Responde breve (WhatsApp no es email).
Si la pregunta requiere a un asesor, di: 'Te paso con un especialista, te responde en menos de una hora.'
Sé amable, pero profesional."""


@app.route("/webhook/whatsapp", methods=["POST"])
def whatsapp_webhook():
    """Procesa los mensajes entrantes de WhatsApp."""
    from_number = request.form.get("From", "")
    body = request.form.get("Body", "").strip()

    if not body:
        return str(MessagingResponse())

    # Historial de la conversación
    if from_number not in wa_conversations:
        wa_conversations[from_number] = []

    wa_conversations[from_number].append(
        {"role": "user", "content": body}
    )

    # Limitamos el contexto a los últimos 8 mensajes
    history = wa_conversations[from_number][-8:]

    # Claude genera la respuesta
    response = claude.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=512,
        system=WA_SYSTEM,
        messages=history
    )

    reply = "".join(b.text for b in response.content if b.type == "text")

    wa_conversations[from_number].append(
        {"role": "assistant", "content": reply}
    )

    # Si Claude pasa el caso a un asesor, avisamos internamente
    if "especialista" in reply.lower() or "te paso" in reply.lower():
        notify_manager(from_number, body, reply)

    # Respondemos al usuario
    resp = MessagingResponse()
    resp.message(reply)
    return str(resp)


def notify_manager(customer_number: str, question: str, bot_reply: str):
    """Avisamos al responsable por Telegram cuando el bot no puede ayudar."""
    import requests
    telegram_token = os.environ.get("TELEGRAM_BOT_TOKEN")
    manager_chat = os.environ.get("MANAGER_TELEGRAM_CHAT_ID")

    if not telegram_token or not manager_chat:
        return

    message = (
        f"🔔 *Escalamiento desde WhatsApp*\n\n"
        f"Cliente: `{customer_number}`\n"
        f"Pregunta: {question}\n\n"
        f"El bot respondió: {bot_reply[:200]}..."
    )
    requests.post(
        f"https://api.telegram.org/bot{telegram_token}/sendMessage",
        json={
            "chat_id": manager_chat,
            "text": message,
            "parse_mode": "Markdown"
        }
    )


if __name__ == "__main__":
    app.run(port=5001, debug=False)

En este ejemplo el aviso interno va por Telegram; si tu equipo usa otro canal (Slack, Teams, correo), cambia solo la función notify_manager().


Microsoft Teams: el canal corporativo

Si tus clientes son corporativos, trabajan en Teams. Dos escenarios:

Escenario 1: Notificaciones por webhook en un canal de Teams

La forma más sencilla es la app Workflows de Teams (funciona con Power Automate): te da una dirección a la que puedes mandar una solicitud con un mensaje. Microsoft está retirando los Incoming Webhook antiguos basados en conectores de Office 365, así que las notificaciones nuevas configúralas con Workflows.

python
import requests
import json
import os

TEAMS_WEBHOOK_URL = os.environ["TEAMS_WEBHOOK_URL"]


def send_teams_notification(title: str, message: str,
                             color: str = "0078D4",
                             facts: list[dict] = None) -> bool:
    """
    Envía una tarjeta de notificación a un canal de Teams con la dirección webhook de Workflows.
    Workflows acepta MessageCard y Adaptive Card: revisa el formato en un canal de prueba.
    color: color hex de la franja lateral (0078D4 = azul de Microsoft)
    facts: lista de {"name": "...", "value": "..."} para la tabla de datos
    """
    card = {
        "@type": "MessageCard",
        "@context": "http://schema.org/extensions",
        "themeColor": color,
        "summary": title,
        "sections": [{
            "activityTitle": title,
            "activityText": message,
        }]
    }

    if facts:
        card["sections"][0]["facts"] = facts

    response = requests.post(
        TEAMS_WEBHOOK_URL,
        headers={"Content-Type": "application/json"},
        data=json.dumps(card)
    )
    return response.ok   # cualquier respuesta exitosa (200, 202)


# Ejemplo: aviso de una venta nueva
def notify_deal_closed(client_name: str, amount: float,
                        property_address: str) -> None:
    """Aviso en el canal de ventas de Teams cuando se cierra un negocio."""
    send_teams_notification(
        title="🎉 ¡Se cerró un negocio nuevo!",
        message=f"El asesor firmó el contrato con el cliente.",
        color="00B050",   # verde
        facts=[
            {"name": "Cliente", "value": client_name},
            {"name": "Monto", "value": f"${amount:,.0f}"},
            {"name": "Propiedad", "value": property_address},
        ]
    )

Cómo configurar el webhook en Teams con Workflows:

  1. En Teams → Canal → ⋯ (tres puntos) → Workflows
  2. Elige la plantilla "Send webhook alerts to a channel" (enviar avisos de webhook a un canal)
  3. Configura los parámetros y guarda
  4. Copia la dirección del webhook → guárdala en una variable de entorno

Escenario 2: Teams MCP de Microsoft

Microsoft tiene un servidor MCP oficial para Teams (forma parte de Microsoft Agent 365, en preview). Permite que un agente lea chats y canales, publique mensajes y responda en hilos. Es un servidor alojado, no un paquete que se instala con npx: la conexión la configura el administrador de la organización (registro de la app en Microsoft Entra y otorgamiento de permisos), y los nombres de las herramientas pueden cambiar durante el preview. Herramientas y forma de conexión vigentes: documentación de Microsoft. Qué clientes MCP se admiten, revísalo en esa misma documentación.

Cuándo usar cada uno:

  • Webhook con Workflows: avisos de procesos de negocio (CRM, despliegues, ventas). Rápido, sin registrar una app.
  • Teams MCP: un agente interactivo que lee y responde en los canales. Requiere registrar la app en Entra y permisos de administrador.

ManyChat: cuando no quieres código

Para emprendedores que no programan: ManyChat. Un constructor visual de flujos para mensajes directos: Instagram, Messenger, WhatsApp, TikTok, Telegram.

Qué puede hacer ManyChat:

  • Secuencias visuales de mensajes con condiciones (if/else sin código)
  • Integración con Google Sheets, Zapier, Make
  • Segmentar al público con etiquetas
  • Pruebas A/B de mensajes
  • Envíos masivos (broadcast)

ManyChat + Claude con Zapier: Las funciones de IA propias de ManyChat dependen del plan, y conectar específicamente a Claude suele ser más fácil con Zapier: ManyChat → Webhook → Zapier → API de Claude → respuesta de vuelta a ManyChat. Un poco más complicado, pero sin código.


Unified Messaging Hub: un solo sistema para todos los canales

🎨 Imagínalo así: la central de un sitio de taxis. Todas las llamadas llegan a un solo lugar. El despachador asigna los autos. El Unified Hub es tu central para los mensajes de todos los canales.

python
from flask import Flask, request, jsonify
import anthropic
import json
import os

app = Flask(__name__)
claude = anthropic.Anthropic()

ROUTING_SYSTEM = """Eres un enrutador de mensajes de clientes. Analiza la solicitud y devuelve JSON:
{
  "intent": "faq|lead|complaint|consultation|other",
  "urgency": "low|medium|high",
  "language": "es|en|pt",
  "should_escalate": true|false,
  "suggested_response": "respuesta breve si intent=faq"
}"""


def route_message(message: str, channel: str, user_id: str) -> dict:
    """
    Analiza el mensaje entrante y decide la ruta.
    channel: telegram|whatsapp|slack|teams
    """
    response = claude.messages.create(
        model="claude-haiku-4-5",   # Haiku para enrutar: rápido y barato; comprueba que el modelo siga disponible
        max_tokens=256,
        system=ROUTING_SYSTEM,
        messages=[{
            "role": "user",
            "content": f"Canal: {channel}\nMensaje: {message}"
        }]
    )

    try:
        return json.loads("".join(b.text for b in response.content if b.type == "text"))
    except json.JSONDecodeError:
        return {
            "intent": "other",
            "urgency": "medium",
            "language": "es",
            "should_escalate": False,
            "suggested_response": ""
        }


@app.route("/hub/incoming", methods=["POST"])
def unified_incoming():
    """
    Una sola entrada para los mensajes de todos los canales.
    Cada fuente (bot de Telegram, webhook de WhatsApp, evento de Slack)
    manda el mensaje aquí en un formato estandarizado.
    """
    data = request.json
    channel = data.get("channel", "unknown")
    user_id = data.get("user_id", "")
    message = data.get("message", "")

    # 1. Enrutamiento con Claude Haiku (barato y rápido)
    routing = route_message(message, channel, user_id)

    # 2. Lógica según la intención
    if routing["should_escalate"]:
        # Lo pasamos a una persona
        escalate_to_manager(channel, user_id, message, routing)
        reply = "Paso tu pregunta a un especialista. Te respondemos en menos de 1 hora."

    elif routing["intent"] == "faq" and routing["suggested_response"]:
        # Usamos la respuesta lista del enrutamiento
        reply = routing["suggested_response"]

    else:
        # Respuesta completa con Claude Sonnet
        response = claude.messages.create(
            model="claude-sonnet-5-5",
            max_tokens=512,
            system="Eres un asistente amable. Responde en el idioma del cliente.",
            messages=[{"role": "user", "content": message}]
        )
        reply = "".join(b.text for b in response.content if b.type == "text")

    return jsonify({
        "reply": reply,
        "routing": routing,
        "channel": channel
    })


def escalate_to_manager(channel: str, user_id: str,
                         message: str, routing: dict) -> None:
    """Avisa al responsable por Telegram."""
    bot_token = os.environ.get("TELEGRAM_BOT_TOKEN")
    manager_chat = os.environ.get("MANAGER_TELEGRAM_CHAT_ID")
    if not bot_token or not manager_chat:
        return

    import requests
    requests.post(
        f"https://api.telegram.org/bot{bot_token}/sendMessage",
        json={
            "chat_id": manager_chat,
            "text": (
                f"🔔 *Escalamiento*\n"
                f"Canal: {channel} | Usuario: `{user_id}`\n"
                f"Urgencia: {routing.get('urgency', '?')}\n"
                f"Mensaje: {message[:300]}"
            ),
            "parse_mode": "Markdown"
        }
    )


if __name__ == "__main__":
    app.run(port=5002, debug=False)

Cómo cobrar: vender bots a clientes

Es un servicio aparte. Los pequeños negocios necesitan bots, pero no saben cómo hacerlos.

Paquetes típicos y de qué se compone el precio:

Paquete Qué incluye De qué se compone el precio
Bot básico de FAQ Bot de WhatsApp o Telegram, 20–50 preguntas en la base de conocimiento horas de configuración y de llenar la base de conocimiento; mantenimiento: ajustes al prompt y monitoreo
Calificador de prospectos Bot + integración con el CRM horas de integración con el CRM; mantenimiento: revisar que los prospectos lleguen bien
Bot de WhatsApp WhatsApp Business API + Claude configuración y verificación del negocio; mantenimiento + cargos de Meta y del proveedor
Sistema completo Todos los canales + CRM + Unified Hub + analítica horas sumadas de todos los canales + gastos de hosting y tokens

Los precios dependen del mercado, del nicho y del tiempo que inviertas. Los ingresos en este nicho no están garantizados: calcula tus gastos y la demanda en tu mercado con las lecciones Empaqueta tu oferta y Precios y monetización.


Práctica

Tarea: asistente de IA en Telegram + webhook en Teams en 5 pasos

Paso 1: Crea un bot de Telegram (10 min)

  1. @BotFather → /newbot → nombre → username → token
  2. Crea el proyecto:
bash
mkdir ai-messenger-bot && cd ai-messenger-bot
python -m venv venv && source venv/bin/activate
pip install python-telegram-bot anthropic python-dotenv flask requests
  1. Crea el .env:
bash
TELEGRAM_BOT_TOKEN=tu_token
ANTHROPIC_API_KEY=sk-ant-...
TEAMS_WEBHOOK_URL=https://...  # lo agregamos en el paso 3
MANAGER_TELEGRAM_CHAT_ID=tu_chat_id

Telegram se usa aquí porque crear un bot de prueba es gratis e inmediato. Si tus clientes están en WhatsApp, el mismo handle_message() se adapta al webhook de WhatsApp de la sección anterior.

Paso 2: Adapta el código a tu nicho (10 min)

Copia handle_message() de la teoría. Cambia el SYSTEM_PROMPT: describe tu negocio o el nicho de tu cliente. Ejecútalo:

bash
python bot.py

Busca el bot en Telegram por su username → manda /start → hazle de 7 a 10 preguntas como si fueras cliente. Evalúa la calidad y mejora el system prompt si hace falta.

Paso 3: Configura el webhook en Teams (5 min)

  1. En tu Teams (o pídeselo a tu cliente): Canal → ⋯ → Workflows → plantilla "Send webhook alerts to a channel"
  2. Ponle de nombre "AI Assistant Bot" y guarda
  3. Copia la dirección del webhook → agrégala al .env como TEAMS_WEBHOOK_URL
  4. Corre una prueba:
python
from dotenv import load_dotenv
load_dotenv()
notify_deal_closed("Juan Pérez", 85000, "Calle Larga 45, Cuenca")

Revisa el canal de Teams: debe aparecer una tarjeta.

Paso 4: Agrega el escalamiento en Telegram (5 min)

Copia la función notify_manager() de la sección de WhatsApp. Intégrala al bot de Telegram: cuando el usuario escriba "quiero hablar con un asesor" o "llámenme", Claude devuelve una señal de escalamiento y te avisas a ti mismo.

Paso 5: Documéntalo como caso (5 min)

  • Captura de la conversación con el bot
  • Captura del aviso en Teams
  • Descripción: para qué negocio es y qué problema resuelve
  • Cálculo del costo para el cliente (configuración + mantenimiento)
  • Agrégalo a tu portafolio

Tarea extra:

Agrega el comando /contact al bot de Telegram. Cuando el usuario lo usa, el bot pide su email o teléfono, lo guarda en una Google Sheet con la biblioteca gspread y te avisa por Telegram. Es tu primer convertidor de prospectos.


Herramientas y recursos


Ideas clave

Una app de mensajería sin bot de IA es como un sitio sin formulario de contacto: el cliente llega, no hay nadie, el cliente se va. El bot atrapa los mensajes que de otro modo se perderían.

Un bot bien configurado se encarga de las preguntas típicas y libera a las personas para los casos difíciles. El costo en tokens de una conversación normal es una fracción pequeña del costo del tiempo de trabajo de una persona, pero calcúlalo para tu volumen. Precios y versiones vigentes: Lo vigente.

Puedes venderles bots a tus clientes como producto, no solo como trabajo de una vez: la base se reutiliza, y para cada nicho cambian el system prompt y la marca. Cuánto te deje depende de tu mercado y tu nicho; no hay garantías.


Para seguir con el tema

→ IA sin código: v0, Webflow AI y Framer para emprendedores

La marca se guarda solo en este navegador y no se envía a ningún sitio. Mi progreso