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

# Conversaciones de asesores

> Consulta conversaciones atendidas por asesores humanos

Recuperas las conversaciones que atendió un asesor humano para analizar tiempos de respuesta, estados de cierre y asignaciones. Recibes metadatos de operadores, usuarios y bots involucrados dentro de un rango de fechas definido.

***

## Endpoint

```
GET https://api.jelou.ai/v1/external/conversations
```

***

## Autenticación

| Campo             | Ubicación | Tipo   | Requerido | Descripción                                      |
| ----------------- | --------- | ------ | --------- | ------------------------------------------------ |
| **Authorization** | Header    | string | Sí        | Credenciales en formato `clientId:clientSecret`. |

***

## Parámetros de consulta

| Campo              | Ubicación | Tipo    | Requerido | Valor por defecto | Descripción                                                                                     |
| ------------------ | --------- | ------- | --------- | ----------------- | ----------------------------------------------------------------------------------------------- |
| **startAt**        | Query     | string  | Sí        | —                 | Fecha de inicio del rango en formato ISO 8601 (UTC). Ejemplo: `2026-03-10T00:00:00.000Z`        |
| **endAt**          | Query     | string  | Sí        | —                 | Fecha de fin del rango en formato ISO 8601 (UTC). Ejemplo: `2026-03-17T23:59:59.999Z`           |
| **limit**          | Query     | integer | No        | 10                | Número máximo de conversaciones por página. Máximo: `50`.                                       |
| **page**           | Query     | integer | No        | 1                 | Número de página.                                                                               |
| **botId**          | Query     | string  | No        | —                 | Filtra conversaciones por el identificador del bot.                                             |
| **userId**         | Query     | string  | No        | —                 | Filtra conversaciones por el identificador del usuario.                                         |
| **operatorId**     | Query     | integer | No        | —                 | Filtra conversaciones por el identificador del operador.                                        |
| **conversationId** | Query     | string  | No        | —                 | Filtra por el identificador único de una conversación.                                          |
| **state**          | Query     | string  | No        | —                 | Filtra por estado de la conversación: `active`, `closed`, `resolved`, `expired`, `transferred`. |

<Tip>
  Usa ventanas de tiempo acotadas para optimizar la consulta y evita rangos demasiado amplios si manejas altos volúmenes de conversaciones.
</Tip>

***

## Ejemplos de solicitud

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl --request GET \
      --url 'https://api.jelou.ai/v1/external/conversations?startAt=2026-03-10T00%3A00%3A00.000Z&endAt=2026-03-17T23%3A59%3A59.999Z&page=1' \
      --header 'authorization: Basic <clientId:clientSecret>'
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    const axios = require('axios');

    axios({
      method: 'GET',
      url: 'https://api.jelou.ai/v1/external/conversations',
      params: {
        startAt: '2026-03-10T00:00:00.000Z',
        endAt: '2026-03-17T23:59:59.999Z',
        page: 1,
        limit: 10
      },
      headers: {
        'Authorization': 'Basic <clientId:clientSecret>'
      }
    });
    ```
  </Tab>
</Tabs>

***

## Respuestas

<AccordionGroup>
  <Accordion title="200 - Respuesta exitosa">
    ```json theme={null}
    {
      "pagination": {
        "limit": 10,
        "page": 1,
        "total": 88,
        "offset": 0,
        "totalPages": 9
      },
      "_metadata": {},
      "results": [
        {
          "_id": "CONVERSATION_ID_1",
          "operator": {
            "id": 1000,
            "names": "OPERATOR_NAME",
            "email": "operator@example.com"
          },
          "user": {
            "id": "USER_ID",
            "names": "USER_NAME"
          },
          "bot": {
            "id": "BOT_ID",
            "name": "BOT_NAME"
          },
          "company": {
            "name": "COMPANY_NAME"
          },
          "assignationMethod": {
            "teamName": "TEAM_NAME"
          },
          "state": "transferred",
          "wasReplied": false,
          "childConversation": "CONVERSATION_ID_2",
          "parentConversation": null,
          "endedReason": "transferred",
          "startAt": "2026-03-10 08:00:00",
          "endAt": "2026-03-10 08:01:00",
          "firstRepliedAtOperator": null,
          "origin": "organic",
          "timeRepliedOperator": null,
          "conversationDuration": 60000,
          "avgOperatorResponseTime": null
        },
        {
          "_id": "CONVERSATION_ID_2",
          "operator": {
            "id": 2000,
            "names": "OPERATOR_NAME_2",
            "email": "operator2@example.com"
          },
          "user": {
            "id": "USER_ID",
            "names": "USER_NAME"
          },
          "bot": {
            "id": "BOT_ID",
            "name": "BOT_NAME"
          },
          "company": {
            "name": "COMPANY_NAME"
          },
          "assignationMethod": {
            "teamName": "TEAM_NAME_2"
          },
          "state": "closed",
          "wasReplied": true,
          "childConversation": null,
          "parentConversation": "CONVERSATION_ID_1",
          "endedReason": "closed_by_operator",
          "startAt": "2026-03-10 08:01:00",
          "endAt": "2026-03-10 08:02:00",
          "firstRepliedAtOperator": "2026-03-10 08:01:10",
          "origin": "transfer",
          "timeRepliedOperator": 10000,
          "conversationDuration": 60000,
          "avgOperatorResponseTime": 0
        }
      ],
      "links": [
        {
          "number": 1,
          "url": "/v1/external/conversations?startAt=2026-03-10T02%3A29%3A20.164Z&endAt=2026-03-17T02%3A29%3A20.164Z&page=1&limit=10"
        },
        {
          "number": 2,
          "url": "/v1/external/conversations?startAt=2026-03-10T02%3A29%3A20.164Z&endAt=2026-03-17T02%3A29%3A20.164Z&page=2&limit=10"
        },
        {
          "number": 3,
          "url": "/v1/external/conversations?startAt=2026-03-10T02%3A29%3A20.164Z&endAt=2026-03-17T02%3A29%3A20.164Z&page=3&limit=10"
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="401 - Unauthorized">
    ```json theme={null}
    {
      "message": "Authentication failed"
    }
    ```
  </Accordion>

  <Accordion title="422 - Unprocessable Entity">
    ```json theme={null}
    {
      "message": [
        "Los valores ingresados no son correctos."
      ],
      "statusMessage": "failed",
      "status": 0,
      "error": {
        "code": "E0422",
        "key": "VALIDATOR_ERROR",
        "description": "Error to be thrown when cannot process request because of incoming values",
        "developerMessages": {
          "es": "Los valores del request no son correctos para ser procesados.",
          "en": "The request values are not correct for processing."
        },
        "clientMessages": {
          "es": "Los valores ingresados no son correctos.",
          "en": "The values entered are not correct."
        }
      },
      "validationError": {
        "startAt": [
          {
            "es": "El campo startAt es requerido",
            "en": "The startAt field is required",
            "pt": "O campo startAt é obrigatório"
          }
        ]
      }
    }
    ```
  </Accordion>

  <Accordion title="500 - Internal Server Error">
    ```json theme={null}
    {
      "message": ["We are having trouble processing your request. Please try again later."],
      "statusMessage": "failed",
      "status": 0
    }
    ```
  </Accordion>
</AccordionGroup>

***

## Detalle de la respuesta

### Objeto results

| Campo                          | Tipo           | Descripción                                                                           |
| ------------------------------ | -------------- | ------------------------------------------------------------------------------------- |
| **\_id**                       | string         | Identificador único de la conversación.                                               |
| **operator**                   | object         | Información del operador que atendió la conversación.                                 |
| **operator.id**                | integer        | Identificador del operador.                                                           |
| **operator.names**             | string         | Nombre del operador.                                                                  |
| **operator.email**             | string         | Correo electrónico del operador.                                                      |
| **user**                       | object         | Información del usuario.                                                              |
| **user.id**                    | string         | Identificador del usuario.                                                            |
| **user.names**                 | string         | Nombre del usuario.                                                                   |
| **bot**                        | object         | Información del bot asociado.                                                         |
| **bot.id**                     | string         | Identificador del bot.                                                                |
| **bot.name**                   | string         | Nombre del bot.                                                                       |
| **company**                    | object         | Información de la empresa.                                                            |
| **company.name**               | string         | Nombre de la empresa.                                                                 |
| **assignationMethod**          | object         | Método de asignación.                                                                 |
| **assignationMethod.teamName** | string         | Nombre del equipo al que fue asignada la conversación.                                |
| **state**                      | string         | Estado de la conversación: `active`, `closed`, `resolved`, `expired`, `transferred`.  |
| **wasReplied**                 | boolean        | Indica si la conversación recibió respuesta del operador.                             |
| **childConversation**          | string \| null | Identificador de la conversación hija en caso de transferencia.                       |
| **parentConversation**         | string \| null | Identificador de la conversación padre si fue recibida por transferencia.             |
| **endedReason**                | string         | Motivo de cierre: `closed_by_operator`, `expired`, `transferred`, entre otros.        |
| **startAt**                    | string         | Fecha y hora de inicio de la conversación.                                            |
| **endAt**                      | string         | Fecha y hora de finalización de la conversación.                                      |
| **firstRepliedAtOperator**     | string \| null | Fecha y hora de la primera respuesta del operador.                                    |
| **origin**                     | string         | Origen de la conversación: `organic`, `transfer`, `induced_by_operator`, entre otros. |
| **timeRepliedOperator**        | number \| null | Tiempo hasta la primera respuesta del operador en milisegundos.                       |
| **conversationDuration**       | number         | Duración total de la conversación en milisegundos.                                    |
| **avgOperatorResponseTime**    | number \| null | Tiempo promedio de respuesta del operador en milisegundos.                            |

***

## Métricas de rendimiento

<Tip>
  Usa los campos `timeRepliedOperator` y `conversationDuration` para analizar la eficiencia de tu equipo de soporte:

  * **timeRepliedOperator**: Mide el tiempo que tarda un asesor en dar la primera respuesta (en milisegundos).
  * **conversationDuration**: Mide la duración total desde el inicio hasta el cierre de la conversación (en milisegundos).
</Tip>
