> For the complete documentation index, see [llms.txt](https://anunzi-ai.gitbook.io/anunzi-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://anunzi-ai.gitbook.io/anunzi-docs/api-widgets/crear-ticket.md).

# Crear ticket desde un agente

Este endpoint permite que un agente de IA abra un ticket de soporte de forma automática al detectar un reclamo, consulta o solicitud durante una conversación.

***

## ¿Para qué sirve?

Configura a tu agente para que, cuando identifique un reclamo, llame a este endpoint. El ticket queda registrado en el panel de la cuenta con toda la información del caso, y el owner recibe una notificación in-app inmediata.

El agente puede entonces informarle al contacto su número de caso (`CAS-XXXXXX`) como confirmación de que el reclamo fue registrado.

***

## Obtener el token del agente

Cada agente tiene su propio **API Token**, que autoriza las operaciones sobre tu cuenta. Para obtenerlo:

1. Ve a **Agentes de Llamada** (o WhatsApp) en el menú lateral.
2. Selecciona el agente que quieres configurar.
3. En la sección **Resumen**, encontrarás el **API Token**.
4. Cópialo para incluirlo en las solicitudes.

> 🔒 Trata el token como una contraseña. No lo compartas públicamente ni lo incluyas en código que suba a repositorios públicos.

***

## Endpoint

```
POST https://panel.anunzi.net/api/tickets.php
```

### Encabezados requeridos

```
Authorization: Bearer TU_TOKEN_DE_AGENTE
Content-Type: application/json
```

***

## Cuerpo de la solicitud (JSON)

| Campo           | Tipo                 | Requerido | Descripción                                                                                                           |
| --------------- | -------------------- | --------- | --------------------------------------------------------------------------------------------------------------------- |
| `title`         | texto                | ✅ Sí      | Título o asunto del ticket. Máximo 255 caracteres.                                                                    |
| `description`   | texto                | ✅ Sí      | Detalle del reclamo o consulta. Se guarda como el primer mensaje en el hilo del ticket.                               |
| `category`      | texto                | No        | Categoría del caso. Ver valores válidos abajo. Por defecto: `reclamo`.                                                |
| `priority`      | texto                | No        | Prioridad del caso. Ver valores válidos abajo. Por defecto: `normal`.                                                 |
| `contact_phone` | texto (solo dígitos) | No        | Teléfono del contacto. Si coincide con un contacto existente en tu cuenta, el ticket queda vinculado automáticamente. |
| `contact_name`  | texto                | No        | Nombre del contacto. Si se omite pero se encontró un lead por teléfono, se usa el nombre del lead.                    |

### Valores válidos para `category`

| Valor        | Etiqueta               |
| ------------ | ---------------------- |
| `reclamo`    | Reclamo                |
| `consulta`   | Consulta               |
| `garantia`   | Garantía               |
| `devolucion` | Devolución / Reembolso |
| `producto`   | Producto / Servicio    |
| `otro`       | Otro                   |

### Valores válidos para `priority`

| Valor     | Etiqueta |
| --------- | -------- |
| `baja`    | Baja     |
| `normal`  | Normal   |
| `alta`    | Alta     |
| `urgente` | Urgente  |

***

## Ejemplos de solicitud

### Crear un reclamo básico

```bash
curl -X POST "https://panel.anunzi.net/api/tickets.php" \
  -H "Authorization: Bearer TU_TOKEN_AQUÍ" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Producto recibido con daños",
    "description": "El cliente indica que recibió el paquete con la caja rota y el producto dañado visualmente. Pidió que se revise el caso antes del viernes.",
    "category": "reclamo",
    "priority": "alta",
    "contact_phone": "5491123456789",
    "contact_name": "María García"
  }'
```

### Crear una consulta de garantía sin vincular contacto

```bash
curl -X POST "https://panel.anunzi.net/api/tickets.php" \
  -H "Authorization: Bearer TU_TOKEN_AQUÍ" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Consulta sobre garantía extendida",
    "description": "El cliente preguntó si su compra de marzo 2025 todavía tiene cobertura de garantía.",
    "category": "garantia"
  }'
```

***

## Respuesta — 200 OK

```json
{
  "ok": true,
  "case_number": "CAS-000042",
  "ticket_id": 42,
  "lead_linked": true
}
```

| Campo         | Descripción                                                                                                 |
| ------------- | ----------------------------------------------------------------------------------------------------------- |
| `ok`          | `true` si el ticket se creó correctamente.                                                                  |
| `case_number` | Número de caso asignado, en formato `CAS-XXXXXX`. Puedes comunicárselo al contacto.                         |
| `ticket_id`   | ID interno del ticket en Anunzi.                                                                            |
| `lead_linked` | `true` si se encontró y vinculó un contacto existente por teléfono. `false` si no se encontró coincidencia. |

***

## Códigos de estado

| Código | Descripción                                                                            |
| ------ | -------------------------------------------------------------------------------------- |
| `200`  | Ticket creado correctamente.                                                           |
| `400`  | Faltan campos requeridos (`title` o `description`). El campo `error` indica el motivo. |
| `401`  | Token ausente o inválido.                                                              |
| `403`  | El agente no tiene un usuario asociado. Contacta a soporte.                            |
| `500`  | Error interno del servidor.                                                            |

### Respuesta de error

```json
{
  "ok": false,
  "error": "El campo title es requerido."
}
```

***

## Vinculación automática de contactos

Si incluyes `contact_phone` en la solicitud, el sistema busca en tu base de contactos si existe alguno con ese número de teléfono. La búsqueda prueba automáticamente variantes (con y sin prefijo de país) para maximizar la tasa de coincidencia.

Si se encuentra una coincidencia, el ticket queda vinculado al contacto y puedes acceder a su ficha completa directamente desde el detalle del ticket en el panel.

***

## Comportamiento en el panel

Una vez creado el ticket:

1. Aparece en la sección **Tickets de Soporte** del panel, con estado **Abierto**.
2. El owner de la cuenta recibe una **notificación in-app** con el número de caso y el título.
3. El primer mensaje del hilo contiene el texto de `description`, atribuido al agente que lo creó.
4. Si se vinculó un contacto, aparece un enlace directo a su ficha en el detalle del ticket.

***

> 💡 **Tip para agentes de voz**: cuando el agente detecte un reclamo, puede llamar a este endpoint al finalizar la llamada y luego decirle al contacto: *"Registré tu caso con el número CAS-000042. Nuestro equipo se pondrá en contacto contigo en breve."*
