Agrega detalle_tarea al agente de Telegram y doc comercial de uMind

- El bot solo tenía listar_tareas (resumen: título/estado/prioridad),
  sin forma de pedir la descripción completa ni el historial de
  comentarios de una tarea puntual. Nuevo tool detalle_tarea trae la
  tarea completa + comentarios (autor, contenido, adjuntos, fecha).
- UMIND_CASOS_DE_USO.html: documento comercial con casos de uso por
  tipo de negocio, argumentos de venta y límites actuales del
  producto, para ofrecer uMind a clientes.
This commit is contained in:
Lizandro GD
2026-08-07 16:24:43 +00:00
parent 5ee5880dc2
commit 4b9d4a9a5b
2 changed files with 299 additions and 1 deletions
+278
View File
@@ -0,0 +1,278 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>uMind — Casos de uso</title>
<style>
:root {
--verde: #8eb02f;
--verde-oscuro: #5a7a1e;
--texto: #2b2b2b;
--gris: #6b7280;
--borde: #e5e7eb;
--fondo-suave: #f7f8f5;
}
* { box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
color: var(--texto);
line-height: 1.6;
max-width: 860px;
margin: 0 auto;
padding: 40px 24px 80px;
background: #fff;
}
header {
border-bottom: 3px solid var(--verde);
padding-bottom: 20px;
margin-bottom: 32px;
}
header .badge {
display: inline-block;
background: var(--verde);
color: #fff;
font-size: 12px;
font-weight: 700;
letter-spacing: .04em;
padding: 4px 10px;
border-radius: 999px;
margin-bottom: 12px;
}
h1 {
font-size: 32px;
margin: 0 0 6px;
color: #1f2937;
}
header p.subtitulo {
color: var(--gris);
font-size: 14px;
margin: 0;
}
h2 {
font-size: 20px;
color: var(--verde-oscuro);
margin-top: 44px;
margin-bottom: 14px;
padding-bottom: 8px;
border-bottom: 1px solid var(--borde);
}
h3 {
font-size: 15px;
margin: 20px 0 6px;
color: #1f2937;
}
p { margin: 10px 0; }
code {
background: var(--fondo-suave);
border: 1px solid var(--borde);
border-radius: 4px;
padding: 2px 6px;
font-size: 13px;
font-family: "SF Mono", Menlo, Consolas, monospace;
color: #b0530f;
}
pre {
background: #1f2937;
color: #d1fae5;
padding: 16px 18px;
border-radius: 8px;
overflow-x: auto;
font-size: 13px;
font-family: "SF Mono", Menlo, Consolas, monospace;
}
pre code { background: none; border: none; color: inherit; padding: 0; }
ul, ol { padding-left: 22px; }
li { margin: 6px 0; }
.caso {
background: var(--fondo-suave);
border: 1px solid var(--borde);
border-left: 4px solid var(--verde);
border-radius: 8px;
padding: 14px 18px;
margin: 14px 0;
}
.caso h3 { margin-top: 0; color: var(--verde-oscuro); }
.caso p { margin: 4px 0 0; font-size: 14px; color: #374151; }
.grid-casos {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
}
@media (max-width: 640px) {
.grid-casos { grid-template-columns: 1fr; }
body { padding: 24px 16px 60px; }
h1 { font-size: 26px; }
}
.callout {
border-radius: 8px;
padding: 16px 18px;
margin: 18px 0;
font-size: 14px;
}
.callout.bien {
background: #eef6e3;
border: 1px solid #c9e0a3;
}
.callout.limite {
background: #fdf3e7;
border: 1px solid #f0d3a3;
}
.callout strong { display: block; margin-bottom: 6px; }
.lista-check { list-style: none; padding-left: 0; }
.lista-check li { padding-left: 26px; position: relative; }
.lista-check li::before {
content: "✓";
color: var(--verde-oscuro);
font-weight: 700;
position: absolute;
left: 0;
}
.lista-cruz li::before {
content: "✕";
color: #c05621;
}
footer {
margin-top: 60px;
padding-top: 20px;
border-top: 1px solid var(--borde);
font-size: 12px;
color: var(--gris);
text-align: center;
}
@media print {
body { padding: 0; max-width: 100%; }
.caso { break-inside: avoid; }
}
</style>
</head>
<body>
<header>
<span class="badge">DOCUMENTO COMERCIAL</span>
<h1>uMind — Casos de uso</h1>
<p class="subtitulo">Asistente de chat con IA, embebible en cualquier sitio web · Agosto 2026</p>
</header>
<h2>Qué es</h2>
<p>
uMind es un asistente de chat con inteligencia artificial que se instala en cualquier sitio web con una sola línea de código
— igual que Google Analytics o un widget de chat tradicional. A diferencia de un chatbot de respuestas fijas, uMind
<strong>aprende automáticamente el contenido del sitio del cliente</strong> (páginas, servicios, precios, políticas) y
responde preguntas de los visitantes las 24 horas, sin que nadie tenga que programar ni un solo flujo de conversación.
</p>
<p><strong>La instalación es literalmente esto:</strong></p>
<pre><code>&lt;script src="https://admin.u-site.app/widget/umind.js" data-site="SITE_KEY" defer&gt;&lt;/script&gt;</code></pre>
<h2>Cómo funciona (explicación simple para el cliente)</h2>
<ol>
<li>Le pedimos la URL de su sitio.</li>
<li>uMind lo recorre automáticamente y "aprende" el contenido — servicios, productos, preguntas frecuentes, políticas, lo que ya está publicado.</li>
<li>Le entregamos el código de instalación (una línea).</li>
<li>Desde ese momento, cualquier visitante puede hacerle preguntas al asistente por chat, y responde con base en el contenido real del sitio.</li>
<li>Si no sabe algo, no inventa: lo dice honestamente y puede ofrecer que un humano del equipo lo contacte.</li>
</ol>
<h2>Por qué es diferente a un chatbot normal</h2>
<ul>
<li><strong>No hay que escribir guiones de conversación.</strong> El conocimiento sale directo del sitio; si el cliente actualiza su página de precios, basta con volver a "ingestar" el sitio.</li>
<li><strong>No inventa respuestas.</strong> Está instruido para decir "no tengo esa información" en vez de alucinar — algo que preocupa a cualquier negocio serio antes de exponer un bot a sus clientes.</li>
<li><strong>Se instala en minutos, no en semanas.</strong></li>
<li><strong>Funciona en cualquier sitio</strong>, sin importar en qué tecnología esté construido (WordPress, Webflow, HTML plano, una app hecha por U-Site, etc.).</li>
</ul>
<h2>Casos de uso generales</h2>
<div class="caso">
<h3>1. Atención de preguntas frecuentes 24/7</h3>
<p>Horarios, ubicación, formas de pago, políticas de garantía/devolución, sin que el equipo tenga que responder lo mismo veinte veces al día.</p>
</div>
<div class="caso">
<h3>2. Primer filtro de soporte</h3>
<p>Responde lo que puede resolver solo (el 60-80% de las preguntas repetitivas en la mayoría de negocios) y libera al equipo humano para casos que realmente lo requieren.</p>
</div>
<div class="caso">
<h3>3. Guía de productos/servicios</h3>
<p>Un visitante nuevo pregunta "¿qué planes tienen?" o "¿hacen envíos a X ciudad?" y obtiene respuesta inmediata, sin buscar en menús o PDFs.</p>
</div>
<div class="caso">
<h3>4. Reducción de abandono</h3>
<p>Un visitante indeciso que en otro momento se iría del sitio sin comprar/contactar, ahora tiene a quién preguntarle ahí mismo.</p>
</div>
<div class="caso">
<h3>5. Captura de interesados fuera de horario</h3>
<p>El negocio "cierra" pero el asistente sigue respondiendo y puede recoger el interés del visitante para que el equipo humano lo contacte al día siguiente.</p>
</div>
<h2>Casos de uso por tipo de negocio</h2>
<div class="grid-casos">
<div class="caso">
<h3>🍽️ Restaurantes / gastronomía</h3>
<p>Menú, horarios, zona para eventos, reservas, opciones para dietas especiales, ubicación y domicilios.</p>
</div>
<div class="caso">
<h3>🩺 Clínicas / consultorios / salud</h3>
<p>Servicios, especialidades, si atienden una EPS/seguro, cómo agendar cita, requisitos previos. Solo información administrativa ya publicada — sin diagnósticos ni consejos médicos.</p>
</div>
<div class="caso">
<h3>🏠 Inmobiliarias</h3>
<p>Propiedades disponibles por zona/precio, proceso para agendar una visita, requisitos para arrendar/comprar, zonas donde operan.</p>
</div>
<div class="caso">
<h3>🏨 Hoteles / alojamiento</h3>
<p>Disponibilidad general, servicios incluidos, políticas de cancelación, cómo llegar, qué hay cerca.</p>
</div>
<div class="caso">
<h3>🛒 E-commerce / tiendas online</h3>
<p>Políticas de envío y devolución, tallas/variantes, medios de pago, seguimiento de pedido (según lo publicado en el sitio).</p>
</div>
<div class="caso">
<h3>⚖️ Servicios profesionales</h3>
<p>Abogados, contadores, agencias, consultoras: qué servicios prestan, con quién han trabajado, proceso de contratación, tarifas publicadas.</p>
</div>
<div class="caso">
<h3>💻 SaaS / productos digitales</h3>
<p>Incluye los propios productos de U-Site (uLink, uVot, uBox, Habla, UIA): funcionalidades, planes, integraciones, documentación pública — reduce tickets de soporte nivel 1.</p>
</div>
<div class="caso">
<h3>🎓 Educación</h3>
<p>Colegios, institutos, cursos: programas ofrecidos, proceso de admisión/inscripción, costos, fechas importantes, requisitos.</p>
</div>
</div>
<h2>Lo que uMind todavía no hace</h2>
<div class="callout limite">
<strong>Para no prometer de más al vender esto:</strong>
<ul class="lista-check lista-cruz">
<li>No atiende por WhatsApp ni por voz/teléfono todavía — hoy es chat web únicamente. Está en el roadmap.</li>
<li>No ejecuta acciones transaccionales (agendar citas en un calendario real, procesar pagos, crear pedidos) — hoy solo informa con base en el contenido del sitio.</li>
<li>No lee contenido que no esté publicado en el sitio (PDFs privados, Excels internos, etc.) a menos que se cargue aparte.</li>
<li>No reemplaza a un humano en casos sensibles — está instruido para escalar, no para improvisar, en temas delicados (salud, legal, reclamos).</li>
</ul>
</div>
<h2>Argumentos de venta</h2>
<div class="callout bien">
<ul class="lista-check">
<li>Instalación en minutos, sin proyecto largo de desarrollo.</li>
<li>Cero mantenimiento de guiones: si el sitio cambia, se re-entrena con un clic.</li>
<li>Disponible 24/7, sin turnos ni vacaciones.</li>
<li>Reduce carga operativa del equipo de atención al cliente en preguntas repetitivas.</li>
<li>Mejora la percepción de marca: un sitio que responde al instante se siente más profesional.</li>
<li>Escalable por cliente: cada sitio tiene su propio asistente, entrenado solo con su información — nunca se mezcla el conocimiento de un cliente con el de otro.</li>
</ul>
</div>
<h2>Modelo de negocio sugerido</h2>
<p>
<em>(a definir con el equipo comercial)</em> — Un cobro mensual fijo por sitio (incluye hosting del widget y actualizaciones),
con la opción de agregar valor a futuro con paquetes de WhatsApp/voz cuando esas fases del roadmap estén listas. Los costos
operativos por conversación son bajos (fracciones de centavo de dólar por chat de texto), así que el margen sobre una
suscripción mensual es sano incluso en un plan de entrada económico.
</p>
<footer>
U-Site S.A.S BIC · uMind · Documento interno para uso comercial
</footer>
</body>
</html>
+21 -1
View File
@@ -342,10 +342,14 @@ func agentTools() []agentTool {
}, []string{"ticket_id", "mensaje"})),
// ── Tareas ───────────────────────────────────────────────────────────
tool("listar_tareas", "Lista tareas del Kanban.",
tool("listar_tareas", "Lista tareas del Kanban (resumen: título, estado, prioridad, asignado — sin descripción completa ni historial de comentarios). Para ver el detalle completo de una tarea puntual usa detalle_tarea.",
obj(map[string]agentToolParam{
"estado": str("pendiente | en_progreso | completada | cancelada"),
}, nil)),
tool("detalle_tarea", "Trae el detalle completo de una tarea puntual: descripción completa y el historial de comentarios/interacciones (quién comentó, qué dijo, cuándo, y archivos adjuntos si los hay). Úsala cuando el usuario pida el cuerpo, la descripción o el historial de una tarea específica — listar_tareas no trae eso.",
obj(map[string]agentToolParam{
"id": num("ID de la tarea (usa listar_tareas si no lo sabes)"),
}, []string{"id"})),
tool("listar_usuarios", "Lista los usuarios internos del sistema (staff), para poder asignarles tareas.",
obj(map[string]agentToolParam{"search": str("Búsqueda por nombre")}, nil)),
tool("crear_tarea", "Crea una nueva tarea, opcionalmente asignada a alguien desde el inicio.",
@@ -1003,6 +1007,21 @@ func runTool(chatID int64, name string, a map[string]interface{}) (interface{},
}
return filtered, nil
case "detalle_tarea":
id := uint(getInt("id", 0))
if id == 0 {
return nil, fmt.Errorf("id requerido")
}
tarea, err := models.GetTareaByID(id)
if err != nil {
return nil, fmt.Errorf("tarea no encontrada: %w", err)
}
comentarios, err := models.GetComentariosByTarea(id)
if err != nil {
return nil, err
}
return map[string]interface{}{"tarea": tarea, "comentarios": comentarios}, nil
case "listar_usuarios":
users, _, err := models.AllUsersSistema(50, 0, getStr("search"))
if err != nil {
@@ -1514,6 +1533,7 @@ COMPORTAMIENTO:
Si logras identificar los datos necesarios (del documento o de lo que escribió el usuario), guarda directamente sin pedir confirmación — solo pregunta si de verdad no hay forma de determinar el cliente/proyecto/tarea o falta un dato imprescindible. No uses estas tools si el mensaje no menciona ningún documento adjunto
- Para registrar un proyecto nuevo con sus fases (el usuario puede describirlo en texto o mandarlo en un documento), primero usa crear_proyecto y luego llama a crear_fase_proyecto una vez por cada fase que corresponda — no hace falta preguntar confirmación entre cada fase
- Para asignar una tarea a alguien, resuelve el nombre con listar_usuarios y usa asignado_id en crear_tarea (si es nueva) o asignar_tarea (si ya existe) — la persona asignada recibe una notificación. Si además el usuario mandó un archivo junto con la instrucción de asignar, después de crear/asignar la tarea usa también adjuntar_documento_tarea para guardar ese archivo en la tarea
- Si preguntan por el detalle, la descripción completa o el historial/comentarios de una tarea específica, usa detalle_tarea (no listar_tareas, que solo da un resumen sin eso) — resuelve el id con listar_tareas primero si hace falta
COMANDOS ESPECIALES (el usuario puede escribirlos):
- /reset — olvidar el historial de esta conversación