Saltar al contenido
Volver al inicio

IA conversacional · ERP

Un asistente IA que deja a un equipo comercial hablar con su ERP

Bot de Telegram que da a ~50 técnicos comerciales una interfaz en lenguaje natural sobre el ERP de la empresa. Construido alrededor de Claude con tool calling: el modelo decide qué herramientas invocar contra el ERP, el bot las ejecuta, y el técnico recibe respuestas en segundos en vez de navegar seis pantallas.

Asistente IA

en línea

qué tareas tengo hoy?

9:24

Tienes 4 tareas pendientes:

1. Llamada · ACME · hoy

2. Visita · Riverbend · mañana

3. Correo · García e Hijos · hoy

4. Muestra · Northwind · mañana

9:24

stock de arroz?

9:25

ARROZ (MP) — Stock total: 4

Almacén 90: 2 · Almacén 9: 2

El resto de artículos con "arroz" están a 0.

9:25
Conversación real, ERP detrás (los datos mostrados son ilustrativos).

Contexto

Empresa de distribución con un ERP propio. Los técnicos comerciales pasan el día en ruta visitando clientes. El ERP tiene app móvil pero requiere varios toques para responder a preguntas simples: qué tareas tengo hoy, qué pidió este cliente el mes pasado, hay stock de este artículo. El brief fue: déjame preguntar por Telegram lo que de otro modo tengo que navegar para encontrar.

Arquitectura

Cuatro capas con interfaces estables y motores intercambiables. Canal, orquestador, herramientas y acceso al ERP. Cualquier pieza dentro de una capa puede sustituirse sin reescribir las otras.

Adaptador de canal Telegram (en producción) · WhatsApp (futuro) MessageEvent normalizado Orquestador LLM (Claude Sonnet 4.6, intercambiable) · Tool runner Memoria (20 turnos / 30 min) · Identidad (teléfono → id técnico) tool_call(name, args) Tools (catálogo tipado) 6 tools de lectura · escritura planeada Acceso al ERP (REST) Token manager (pools de sistema y de acción) Caches en proceso · Saneo de errores (3 capas)

Ejemplos de conversación

Los datos reales se han sustituido por valores inventados. La forma de las respuestas, las reglas de formato y el tono son los reales.

Técnico

→ qué tareas tengo hoy?

Bot

Tienes 4 tareas pendientes:
1. Llamada · Cliente: Northwind Distribuciones · Vence: hoy
2. Visita · Cliente: ACME Alimentación · Vence: mañana
3. Correo · Cliente: García e Hijos · Vence: hoy
4. Entrega de muestras · Cliente: Riverbend Mercados · Vence: mañana

Técnico

→ muéstrame los últimos 3 pedidos de ACME

Bot

1. Pedido 600014 · 14/04/2026 · 270,00 € · Pendiente
2. Pedido 600011 · 14/04/2026 · 428,92 € · Pendiente
3. Pedido 600012 · 14/04/2026 · 1.088,41 € · Pendiente

Técnico

→ stock de arroz?

Bot

ARROZ (MP) — Stock total: 4 · Almacén 90: 2 · Almacén 9: 2
El resto de artículos con "arroz" tienen stock a 0.

Catálogo de tools (lectura)

  • buscar_cliente

    Busca un cliente por nombre o CIF y devuelve las mejores coincidencias.

  • obtener_cliente

    Detalle completo de un cliente: direcciones, contactos, última actividad.

  • obtener_agenda

    Reuniones y visitas del técnico para una fecha concreta.

  • obtener_tareas

    Todas las acciones CRM pendientes asignadas al técnico.

  • obtener_pedidos

    Últimos N pedidos de un cliente con estado e importe.

  • obtener_articulo

    Detalle de un artículo, incluyendo stock desglosado por almacén.

Decisiones técnicas clave

  1. 01

    Tool calling, no parsing de texto

    El LLM no inventa datos ni clasifica intenciones con regex. Recibe un catálogo tipado de herramientas y decide cuáles invocar. Eso hace que el bot sea depurable: cada acción tiene nombre, argumentos y resultado que puedo registrar.

  2. 02

    Identidad por teléfono, no por usuario de chat

    La primera vez que un técnico abre el bot, Telegram comparte su contacto con consentimiento explícito. El teléfono se cruza con el directorio de la empresa para encontrar el id de técnico. Esto permite atribuir escrituras a una persona real, no a un alias.

  3. 03

    Dos pools de tokens: sistema y acción

    Las lecturas corren con identidad de sistema (el log de auditoría registra ai_assistant). Las escrituras futuras correrán con un token vinculado al técnico real. Los auditores pueden separar lo que hizo el bot por su cuenta de lo que hizo en nombre del usuario.

  4. 04

    Los errores nunca llegan al usuario en crudo

    Modelo de error en tres capas: respuesta cruda → error tipado interno → mensaje neutro en el chat con un trace_id corto. Los técnicos no ven SQL ni stack traces. Soporte usa el trace_id para encontrar el contexto completo en los logs.

  5. 05

    Caches en memoria con TTL, sin servidor de caché aparte

    Clientes, artículos, pedidos y catálogos CRM se cachean en proceso con TTLs cortos y refresco perezoso. Los reinicios repueblan desde la fuente de verdad. Sin dependencia de Redis para el piloto. Fácil migrar si la escala lo pide.

  6. 06

    Patrón de confirmación para escrituras

    Las escrituras no se ejecutan en el momento. El bot resume la acción, pide un sí explícito, y entonces ejecuta con una idempotency key. Si el usuario repite la petición, la acción se ejecuta una vez, no dos.

Stack

  • Python 3.12
  • Claude Sonnet 4.6 (Anthropic)
  • Telegram Bot API
  • httpx (async)
  • SQLAlchemy + Alembic
  • SQLite → Postgres
  • pytest
  • Docker

Estado actual

Técnicos comerciales
~50
Herramientas de lectura
6
Tests
36
Canales activos
Telegram (en producción) · WhatsApp (planeado)

El piloto de sólo lectura está entregado. Próximas fases en la hoja de ruta: tools de escritura con confirmación, transcripción de voz, recordatorios proactivos, adaptador para WhatsApp, y endurecimiento del despliegue.