> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ouraicalling.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Análisis posterior a la llamada

> Puntúa automáticamente el sentimiento y el éxito, y extrae datos estructurados de cada llamada

Cuando termina una llamada, un **juez LLM** lee la transcripción y la evalúa según la configuración de análisis del Asistente. Puede calificar el sentimiento de quien llama, decidir si la llamada cumplió un criterio de éxito y extraer campos estructurados (un número de devolución de llamada, un ID de pedido, una respuesta de sí o no). El resultado se guarda en la llamada y está disponible en los filtros del Historial, la API pública y MCP.

## Qué produce

Para cada llamada analizada, el juez escribe un resultado con:

* **Sentimiento** — `positive`, `neutral` o `negative` (sentimiento general de quien llama).
* **Éxito** — `true` / `false` (o `null` cuando la evaluación de éxito está desactivada), más una breve **razón** que explica el veredicto.
* **Datos** — un mapa de los campos estructurados que definiste, indexado por nombre de campo.
* **Model** y **analyzed\_at** — qué modelo de juez se ejecutó, y cuándo.

El sentimiento y el éxito también se guardan como **columnas desnormalizadas** en la llamada, para que puedas filtrar listas grandes de llamadas rápidamente (en la vista del Historial y mediante `GET /calls?sentiment=&success=`).

<Note>
  El análisis se ejecuta **después** de la llamada y nunca afecta la conversación en curso. Si el juez falla o devuelve un resultado inutilizable, la llamada queda intacta: se registra un evento de llamada `analysis_failed` y no se escribe nada en el análisis de la llamada.
</Note>

## Configurar un Asistente

Abre la tarjeta **Análisis** del Asistente y activa las partes que necesites. Todo es opcional; una configuración vacía significa que no se ejecuta ningún análisis.

<Steps>
  <Step title="Sentimiento">
    Activado de forma predeterminada. Desactívalo si no necesitas el sentimiento por llamada.
  </Step>

  <Step title="Criterio de éxito">
    Activa **Éxito** y describe, en lenguaje sencillo, cómo es una llamada exitosa; por ejemplo, *"La persona que llama reservó una cita"* o *"La persona que llama confirmó su dirección de entrega"*. El juez devuelve un booleano más una razón.
  </Step>

  <Step title="Campos estructurados">
    Agrega los campos que quieras extraer. Cada campo tiene un `name` (snake\_case, único), un `type` (`string`, `number`, `boolean` o `enum`), una `description` que le indica al juez qué extraer (máx. 500 caracteres), un indicador `required` opcional y, para `enum`, una lista de `choices`.
  </Step>
</Steps>

### Ejemplo de configuración

```json theme={null}
{
  "sentiment": true,
  "success": {
    "enabled": true,
    "criteria": "The caller booked an appointment"
  },
  "fields": [
    { "name": "callback_number", "type": "string", "description": "Phone number the caller wants a callback on" },
    { "name": "appointment_day", "type": "enum", "description": "Requested weekday", "choices": ["mon", "tue", "wed", "thu", "fri"] },
    { "name": "is_existing_customer", "type": "boolean", "description": "Whether the caller is already a customer", "required": true }
  ]
}
```

Un `calls.analysis` resultante se ve así:

```json theme={null}
{
  "sentiment": "positive",
  "success": true,
  "success_reason": "Caller agreed to a Tuesday appointment and gave a callback number.",
  "data": {
    "callback_number": "+493012345678",
    "appointment_day": "tue",
    "is_existing_customer": false
  },
  "model": "gpt-...",
  "analyzed_at": "2026-07-05T09:12:44Z"
}
```

## Usar los resultados

* **Filtros del Historial** — filtra la lista de llamadas por sentimiento y éxito para encontrar, por ejemplo, todas las llamadas negativas que *no* tuvieron éxito.
* **API pública** — toda llamada en `GET /calls` y `GET /calls/{id}` incluye `analysis`, `sentiment` y `success`. Filtra la lista con `?sentiment=negative` y `?success=false`.
* **MCP** — los mismos campos de la llamada se exponen a través de las herramientas `list_calls` / `get_call` de MCP.

## Configurar mediante la API

`analysis_config` es un campo del Asistente que se puede escribir, así que puedes administrarlo mediante programación:

```bash theme={null}
curl -X PATCH https://app.famulor.io/api/v1/assistants/{id} \
  -H "Authorization: Bearer fam_..." \
  -H "Content-Type: application/json" \
  -d '{
    "analysis_config": {
      "sentiment": true,
      "success": { "enabled": true, "criteria": "The caller booked an appointment" },
      "fields": [
        { "name": "callback_number", "type": "string", "description": "Callback number" }
      ]
    }
  }'
```

Consulta la [referencia de la API](/api-reference/introduction) (`PATCH /assistants/{id}` y el esquema `AnalysisConfig`) para conocer el contrato completo de campos.
