Skip to main content
La función personalizada le da al agente una capacidad que no trae de fábrica: consultar o escribir en tus sistemas mientras habla con la persona. Tú publicas un endpoint HTTP; el agente decide cuándo llamarlo, con qué datos, y usa la respuesta para continuar la conversación en la misma llamada.

Cómo funciona

La función no se ejecuta en un momento fijo del guion. Se ejecuta cuando el agente reconoce que la necesita, con base en la descripción que escribes al configurarla. El ciclo completo ocurre dentro de la llamada, sin colgar y sin transferir:
  1. La persona dice algo que corresponde a la función: «quiero saber cómo va mi pedido».
  2. El agente extrae de la conversación los datos que tu función pide —número de pedido, teléfono, RFC— según el esquema de parámetros que declaraste. Si le falta un dato, lo pregunta antes de llamar.
  3. La plataforma envía la petición HTTP a tu URL con esos datos, y espera tu respuesta.
  4. El agente recibe el cuerpo de tu respuesta y sigue hablando con esa información: la dice en voz alta, la usa para decidir el siguiente paso, o la guarda como variable para usarla más adelante en la misma llamada.
Mientras tu endpoint responde, hay una persona esperando en la línea. Ese es el criterio que gobierna todo lo demás: la función se diseña como una consulta de voz, no como un proceso por lotes.

El contrato

Por defecto esos datos llegan en la raíz del cuerpo. Si lo configuras al revés, llegan anidados bajo args, acompañados del contexto de la llamada. Devuelve la frase que quieres que se diga, ya resuelta: «Tu pedido va en camino y llega el jueves» funciona mejor que status: 3.
Buena práctica. Incluye siempre un campo que distinga «no encontré nada» de «falló la consulta» —como el encontrado del ejemplo—. Son dos conversaciones distintas: en la primera el agente pide verificar el dato, en la segunda ofrece un canal alterno.

Configuración

Cada función personalizada es una conexión propia del agente. Puedes tener varias en el mismo agente —una para consultar, otra para registrar— y cada una se configura por separado.
Cuándo entra en vigor. Conectar o modificar una función personalizada no cambia el agente que ya está atendiendo. Los cambios se aplican cuando se publica una nueva versión del agente. Si probaste un ajuste y no ves diferencia en las llamadas, ese es el primer punto a revisar.

Conectarla por API

La configuración vive en metadata.connectionConfig de la conexión. Los nombres de los campos son los de la tabla anterior, en camelCase:
Requiere el scope tools:connections:write. Una configuración inválida responde 400 con el detalle del campo que falla, así que un error de captura no se descubre en la primera llamada.

Requisitos del endpoint

  • Accesible desde internet, por HTTPS. Se aceptan sólo direcciones http y https, y se rechazan destinos locales (localhost, 127.0.0.1, 0.0.0.0). Un endpoint que sólo vive en tu red interna no es alcanzable.
  • Autenticación por encabezado. Token, API key o Basic: lo que uses va en los encabezados de la conexión. Nunca en la URL ni en los parámetros de query, que quedan registrados.
  • Sin lista blanca por IP. La petición sale de la infraestructura de voz de la plataforma y su dirección de origen no es fija. Autoriza por credencial, no por IP.
  • Idempotente. El agente puede llamar la misma función más de una vez en una conversación —la persona se corrige, repite el dato, pide reconfirmar—. Si la función escribe algo (crea un ticket, registra una cita), pide en el esquema un identificador propio y descarta duplicados con él.
  • Rápido y predecible. Si tu operación real tarda minutos, no la ejecutes dentro de la llamada: acusa recibo en segundos, procesa después, y avísale al cliente por otro canal.
  • En GET, los datos viajan en la URL. No lleva cuerpo.

Cuando algo falla

La llamada no se cae. Si tu endpoint devuelve un error, tarda más del tiempo configurado o no responde, la conversación continúa: el agente recibe el resultado fallido y sigue con lo que su guion le indique para ese caso. Por eso el plan B es parte del diseño de la función, no un detalle posterior: define en el guion del agente qué debe decir cuando la consulta no está disponible —tomar el dato y prometer seguimiento, ofrecer transferir con un asesor, agendar un callback—. Sin esa instrucción, el agente improvisa.

Antes de salir a producción

  • El endpoint responde por HTTPS desde internet y devuelve 2xx con JSON.
  • Responde en menos de tres segundos con datos reales, no sólo en el ambiente de pruebas.
  • La credencial va en un encabezado y está rotada para este uso.
  • La operación es idempotente, o descarta duplicados con un identificador propio.
  • El esquema declara como obligatorio todo dato sin el cual la consulta no tiene sentido.
  • La respuesta incluye un mensaje listo para decirse en voz alta.
  • Distingue «no encontrado» de «error».
  • El guion del agente tiene un plan B para cuando la función no está disponible.
  • Se publicó una versión nueva del agente y se validó con una llamada de prueba de punta a punta.