# Funciones personalizadas

Las **funciones personalizadas** te permiten crear tus propias funciones para que el agente de WhatsApp las ejecute durante la conversación, más allá de las funciones que vienen listas en el catálogo.

Un ejemplo típico: que el agente **registre la fecha en que un cliente quiere ser contactado nuevamente** y la guarde o la envíe a tu CRM.

A diferencia de los [extractores de información](funciones.md) —que capturan datos de forma automática al cualificar el lead— una función personalizada la **ejecuta el agente cuando corresponde**, según lo que definas en su descripción.

## Dónde se crean

En la ficha del agente de WhatsApp, abre la sección **🧩 Funciones personalizadas** (debajo de "Funciones del agente") y haz clic en **+ Agregar función personalizada**.

## Cómo crear una función

Una función tiene tres partes:

1. **Nombre y descripción.** El nombre en `snake_case` (por ejemplo `registrar_fecha_recontacto`) y una descripción clara de **cuándo debe llamarla** el agente. Esa descripción es la que guía al modelo, así que sé específico.
2. **Parámetros.** Los datos que el agente debe completar al llamar la función. Cada parámetro tiene un tipo:
   - **Texto**, **Número**, **Sí/No**
   - **Fecha** (el agente devuelve la fecha en formato `AAAA-MM-DD`)
   - **Opciones** (una lista fija de valores para elegir)
   Puedes marcar un parámetro como **obligatorio**.
3. **Acción al ejecutarse.** Qué hace el sistema con los datos cuando el agente llama la función.

### ✨ Describir con IA

Si no quieres armar la función campo por campo, escribe en un párrafo qué necesitas (por ejemplo: *"cuando el cliente pida que lo contactemos otro día, registrar la fecha de recontacto"*) y haz clic en **✨ Generar**. La IA arma el nombre, la descripción y los parámetros automáticamente. Después puedes ajustarlos antes de guardar.

## Acciones disponibles

Al ejecutarse, la función puede:

- **Guardar en el sistema.** Los datos quedan registrados en la plataforma, asociados al contacto.
- **Enviar a un CRM integrado.** Los datos se envían al CRM que tengas conectado:
  - **Go High Level** y **Clientify**: mapeas cada parámetro a un **campo del CRM** (usa la clave/ID del campo). Las fechas se normalizan al formato que espera el CRM automáticamente.
  - **Odoo**: los datos se dejan como **nota** en el contacto (sin mapeo de campos).
- **Webhook externo.** Se hace un `POST` (o `GET`) con los parámetros a una URL tuya (por ejemplo, tu sistema o una automatización en Make).

> 💡 Si eliges enviar a un CRM, recuerda que el campo destino debe aceptar el tipo de dato: para texto libre del agente usa campos de **tipo Texto** (o **Fecha** para fechas). Los campos de **opciones múltiples** solo aceptan valores que ya existan como opción.

## Ejemplo: fecha de recontacto

1. **+ Agregar función personalizada** (o descríbela con IA).
2. Nombre: `registrar_fecha_recontacto`. Descripción: *"Registra la fecha en que el cliente pide ser contactado nuevamente."*
3. Parámetro: `fecha_recontacto`, tipo **Fecha**, obligatorio.
4. Acción: **Enviar a un CRM integrado → Go High Level**, y mapeas `fecha_recontacto` al campo de fecha de tu CRM.
5. **Guardar función** y luego **Guardar funciones**.

A partir de ahí, cuando un cliente pida que lo contacten otro día, el agente llama la función y la fecha llega a tu CRM.

## Guardar

Cada función se agrega a la lista con **Guardar función**. Para que queden activas en el agente, haz clic en **Guardar funciones** al final de la sección. Puedes editar o eliminar una función en cualquier momento.
