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

# Tipos de herramienta

> Configura los seis tipos de herramienta compatibles con los agentes de IA.

Usa `toolType` para elegir el comportamiento de la herramienta. La API admite
estos seis tipos públicos:

| `toolType` | Uso |
| - | - |
| `http` | Envía una solicitud HTTP y entrega su respuesta al agente. |
| `human_handoff` | Transfiere la conversación a un departamento disponible. |
| `conversation_ended` | Marca la conversación como terminada. |
| `phone_connect` | Conecta una llamada de voz con un número. |
| `department_availability` | Consulta horarios y excepciones de departamentos. |
| `run_code` | Ejecuta JavaScript de forma remota. |

> [!WARNING]
>
> No uses `endTurn` como `apiName`: ese nombre está reservado por el agente.

Todos los tipos requieren `name`, `apiName` e `instructions`, y pueden definir
`inputs`. `http`, `phone_connect` y `department_availability` también admiten
`loadingText` y `showLoadingText`; `human_handoff` admite `loadingText`.
`conversation_ended` y `run_code` no usan esos campos de presentación.

## HTTP

Usa `http` para llamar una URL con `GET`, `POST`, `PUT`, `DELETE` o `PATCH`.
`details` requiere `endpoint`, `method` y `authentication`.

```json theme={null}
{
  "toolType": "http",
  "details": {
    "endpoint": "https://api.example.com/customers/{{customerId}}",
    "method": "GET",
    "headers": {
      "x-service-token": "<token-de-servicio>"
    },
    "queryParams": {
      "include": "status"
    },
    "authentication": {
      "type": "no_auth"
    }
  },
  "storeOutputAsVariable": true,
  "outputVariableName": "customer",
  "outputVariablePath": "data"
}
```

* `authentication` admite `{"type":"no_auth"}` o
  `{"type":"bearer","token":"<token>"}`.
* `headers` y `queryParams` son mapas de strings.
* `body` es un objeto JSON.
* Puedes usar placeholders `{{parametro}}` en la URL, headers, query params y body.
* `outputVariablePath` usa notación de puntos. Si lo omites, se guarda la respuesta completa.

> [!WARNING]
>
> La configuración guardada y las respuestas de lectura contienen tokens y
> headers sin redactar. Además, la solicitud saliente no verifica el certificado
> TLS. Usa solo destinos de confianza y credenciales de alcance mínimo.

## Transferencia humana

`human_handoff` verifica que el departamento esté permitido y disponible. Si la
transferencia se completa, termina el turno y la ejecución del agente puede
devolver `handoff`.

```json theme={null}
{
  "toolType": "human_handoff",
  "details": {
    "allowedDepartments": ["<departmentId>"],
    "userNotificationMessage": "Te conecto con una persona del equipo."
  }
}
```

Si omites `allowedDepartments` o envías un arreglo vacío, el agente puede elegir
cualquier departamento disponible. Durante la ejecución, este tipo usa tres
argumentos fijos: `summary`, `reason` y `departmentId`; la configuración de
`inputs` se reemplaza por esos argumentos.

## Fin de conversación

`conversation_ended` marca la conversación como terminada. No necesita
configuración específica:

```json theme={null}
{
  "toolType": "conversation_ended",
  "details": {}
}
```

Este tipo es distinto de `endTurn`: `endTurn` solo termina el turno actual y
queda reservado para uso interno del agente.

## Conexión telefónica

`phone_connect` inicia el flujo de marcado únicamente cuando el agente se
ejecuta en un contexto de llamada de voz. En otros contextos no conecta una
llamada. Define un input `phoneNumber` de tipo `string` para que el agente
proporcione el destino.

```json theme={null}
{
  "toolType": "phone_connect",
  "inputs": [
    {
      "name": "phoneNumber",
      "type": "string",
      "description": "Número de destino.",
      "required": true,
      "collectFromUser": true
    }
  ],
  "details": {
    "ringTimeoutSeconds": 30,
    "retryAttempts": 2,
    "noAnswerMessage": "No fue posible completar la llamada."
  }
}
```

| Campo | Límites y comportamiento |
| - | - |
| `ringTimeoutSeconds` | De 5 a 120. Si lo omites, el flujo de voz usa 30 segundos. |
| `retryAttempts` | De 0 a 10 al guardar. El flujo de voz realiza entre 1 y 5 intentos. |
| `noAnswerMessage` | Hasta 500 caracteres. Se incluye en los datos del handoff de voz; actualmente el callback de marcado no reproduce este texto. |

## Disponibilidad de departamentos

`department_availability` consulta la disponibilidad de uno o todos los
departamentos permitidos:

```json theme={null}
{
  "toolType": "department_availability",
  "details": {
    "allowedDepartments": ["<departmentId>"],
    "includeFormattedSchedule": true
  }
}
```

Si omites `allowedDepartments`, consulta todos los departamentos. Si lo envías,
debe contener al menos un ID. La herramienta expone un único input opcional
`departmentId`; si se omite, devuelve todos los departamentos permitidos.
`includeFormattedSchedule` es `true` por defecto durante la ejecución.

El resultado incluye `checkedAt` y, para cada departamento, `available`,
`decision`, `description`, rangos efectivos y, si lo solicitaste, `schedule`.

## Ejecutar código

`run_code` ejecuta JavaScript durante un máximo de 60 segundos:

> [!NOTE]
>
> El código se ejecuta de forma remota en infraestructura administrada por la
> plataforma, no en tu dispositivo. Cada ejecución tiene una duración limitada
> y recibe únicamente los datos proporcionados por la plataforma.

```json theme={null}
{
  "toolType": "run_code",
  "details": {
    "code": "output = { total: Number(input.amount) * 2 };",
    "network": {
      "enabled": false
    }
  }
}
```

* `code` admite hasta 100,000 caracteres y no puede quedar vacío.
* Lee los parámetros desde `input` y asigna el resultado a `output`.
* `output` debe ser un objeto JSON serializable de hasta 32 KiB. No puede ser un arreglo ni un valor primitivo.
* Con `network.enabled: true`, dispone de `fetch`, `axios`, `Headers`, `Request`
  y `Response`.
* Con la red deshabilitada, esas APIs no están disponibles.

> [!WARNING]
>
> Si habilitas el acceso de red, ejecuta únicamente código de confianza y evita
> incluir información sensible que no sea necesaria.

> [!WARNING]
>
> Las respuestas de lectura devuelven `details.code` sin redactar. No incluyas
> API keys, tokens ni otros secretos directamente en el código.

Antes de guardar, puedes ejecutar la misma configuración con
[Probar código](https://developers.insuranceboosters.com/agentes/herramientas/probar-codigo.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.