# Transferencia entre agentes de IA

## Descripción general

La funcionalidad de **transferencia entre agentes de IA** permite que un agente principal delegue automáticamente la conversación a otro agente especializado según la intención detectada del usuario.

Esto permite construir arquitecturas multiagente donde:

- Un agente principal recibe todas las conversaciones.
- Detecta la intención del usuario.
- Decide si debe transferir el chat.
- Envía el contexto al agente especializado.
- El nuevo agente continúa la conversación automáticamente.

---

# Flujo general de transferencia

```text
Usuario
   ↓
Agente principal
   ↓
Detecta intención
   ↓
POST /transfer/
   ↓
Agente especializado
   ↓
Continúa la conversación
```

---

# Caso de uso

## Ejemplo práctico

El usuario escribe:

> "Necesito información sobre el ticket que generé por un error en mi sistema Maxicomercio R5"

El agente principal detecta que la intención corresponde a:

- soporte técnico
- asesoría comercial
- asuntos administrativos

Entonces transfiere la conversación al agente especializado `ANI`.

---

# Configuración de intención

## Ejemplo

### Descripción

```txt
Asesoría comercial, soporte técnico y asuntos administrativos
```

### Instrucciones

```txt
Usuarios interesados los transferirás al agente ANI especialista en el tema

campos requeridos

to= ID del agente
token=Token de autorización
context=un breve resumen de la necesidad del usuario
summary=un breve resumen de la conversación
```

### Punto final

```txt
https://agent.induxsoft.net/transfer/
```

---

# Funcionamiento interno

Cuando el agente detecta que la intención coincide con el escenario configurado:

1. Ejecuta la transferencia mediante HTTP POST.
2. El sistema cambia el agente activo.
3. El nuevo agente responde automáticamente.

---

# Endpoint de transferencia

## URL

```http
POST https://agent.induxsoft.net/transfer/
```

---

# Headers requeridos

```http
Authorization: Bearer <token>
Content-Type: application/json
```

---

# Body de la solicitud

## Parámetros

| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| to | string | Sí | ID del agente destino |
| context | string | Sí | Resumen breve de la necesidad actual |
| summary | string | Sí | Resumen breve de la conversación |

---

# Ejemplo de solicitud

## Request

```http
POST /transfer/ HTTP/1.1
Host: agent.induxsoft.net
Authorization: Bearer 9c7a2f25dad14077950cbc87990234e1
Content-Type: application/json
```

```json
{
  "to": "91d68623133d4a7baac25f28622e73c0",
  "context": "El usuario solicita información sobre un ticket relacionado con un error en Maxicomercio R5.",
  "summary": "El usuario reporta fallas en su sistema y desea conocer el estado del ticket generado previamente."
}
```

---

# Ejemplo completo de conversación

## Conversación inicial

### Usuario

```txt
Necesito saber qué pasó con el ticket que levanté por un error en Maxicomercio R5
```

---

## Detección de intención

El agente principal identifica:

```txt
Asesoría comercial, soporte técnico y asuntos administrativos
```

---

## Acción automática del agente principal

### Susurro de transferencia

```txt
Ahora eres @ANI
```

### Mensaje de transferencia

```txt
Te transfiero con mi compañero(a) @ANI
```

---

# Transferencia ejecutada

## Request generado

```json
{
  "to": "Id de agente",
  "context": "Usuario solicita seguimiento de ticket por error en Maxicomercio R5.",
  "summary": "El usuario menciona problemas técnicos en su sistema y solicita información del ticket generado."
}
```

---

# Respuesta del agente especializado

Una vez realizada la transferencia, el nuevo agente toma el control del chat automáticamente.

## Ejemplo

### Agente ANI

```txt
Hola, soy ANI del área de soporte técnico.

Con gusto te ayudaré a revisar el estado de tu ticket relacionado con Maxicomercio R5.

¿Podrías indicarme el número de ticket o el correo con el que fue generado?
```

---

# Recomendaciones técnicas

## Generar contextos cortos

El campo `context` debe contener únicamente la necesidad actual.

### Correcto

```txt
Usuario solicita seguimiento de ticket por error en Maxicomercio R5.
```

### Incorrecto

```txt
El usuario saludó, luego preguntó varias cosas y después comentó...
```

---

## Generar summaries compactos

El campo `summary` debe resumir la conversación previa.

### Recomendado

- máximo 500 caracteres
- información relevante únicamente
- evitar ruido conversacional

---

# Buenas prácticas

## 1. Transferir únicamente cuando exista alta confianza

Evitar transferencias innecesarias o ambiguas.

---

## 2. Mantener continuidad conversacional

El agente destino debe conocer:

- intención
- contexto
- historial resumido

---

## 3. Especialización por dominio

Separar agentes por áreas:

| Área | Agente |
|---|---|
| Ventas | ANI Comercial |
| Soporte | ANI Soporte |
| Facturación | ANI Administración |
| RH | ANI Recursos Humanos |

---

# Arquitectura sugerida

```text
                ┌──────────────────┐
                │ Agente Principal │
                └────────┬─────────┘
                         │
         ┌───────────────┼────────────────┐
         │               │                │
         ▼               ▼                ▼
 ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
 │ ANI Ventas  │ │ ANI Soporte │ │ ANI Admin   │
 └─────────────┘ └─────────────┘ └─────────────┘
```

---

# Casos de uso recomendados

- Soporte técnico
- Escalamiento humano
- Ventas especializadas
- Cobranza
- Facturación
- Atención multidepartamental
- Flujos multiagente
- IA jerárquica
- Sistemas helpdesk
- ERPs y CRMs

---

# Resultado final esperado

Después de la transferencia:

- El usuario mantiene la misma conversación  
- Cambia el agente activo  
- Se conserva el contexto  
- El nuevo agente responde automáticamente  
- La experiencia es transparente para el usuario