Skip to main content
Las herramientas integradas son acciones listas para usar que el asistente puede invocar durante una conversación en vivo. A diferencia de un Flow, no necesitan ningún grafo: crea una herramienta reutilizable del espacio de trabajo, describe cuándo debe ejecutarse y asígnala a uno o más asistentes. Son una segunda vía adicional junto a los nodos de Flow. Toda herramienta integrada es defensiva: una herramienta mal configurada registra un evento de llamada builtin_tool_error y el asistente sigue hablando con quien llama — una herramienta rota nunca hace fallar una llamada. En las respuestas automáticas de mensajería (Telegram, Slack, Messenger, Teams, Discord, Google Chat, X) y de correo electrónico, se ejecutan las mismas herramientas integradas aptas para texto en la ruta de respuesta de Next.js (también API/MCP/base de conocimientos/calendario). Los tipos exclusivos de voz (end_call, transferencias, DTMF/teclado, tarjeta de pago) no están registrados ahí.

Las herramientas independientes

La recopilación por teclado pertenece al Flow: agrega un nodo Collect en generador de Flow, donde el worker puede gestionar de forma segura el estado y las transiciones DTMF. Las acciones de calendario las proporciona Integraciones. Las antiguas configuraciones independientes dtmf_input, collect_keypad y calendar_integration se conservan solo para mantener la visualización de versiones anteriores y ya no se pueden crear como herramientas reutilizables nuevas.

Habilitar una herramienta

Abre Herramientas, crea una herramienta Integrada, completa sus campos y asígnala a un asistente. Su nombre, obligatorio, es el nombre exacto de la función expuesta al modelo, mientras que la descripción le indica al modelo cuándo usarla. Las llamadas se atribuyen a la herramienta reutilizable en la vista de Ejecuciones.

Finalizar llamada

No hay más configuración que la descripción. El modelo debe completar la solicitud y despedirse antes de invocar la función; luego el worker marca la llamada como finalizada y cuelga.

Transferencia de llamada (en frío)

  • Número de teléfono — el destino fijo.
  • La IA puede determinar el número de transferencia dinámicamente — expone el destino como argumento de la función en su lugar.
  • Mensaje de transferencia en caliente — aviso opcional no interrumpible antes de la transferencia en frío.

Transferencia de llamada en caliente

Pone en espera a quien llama y primero marca el número de un colega:
  • Teléfono del supervisor — a quién llamar; se usa la troncal SIP saliente configurada del espacio de trabajo.
  • Música en espera — activada o desactivada, más un mensaje en espera hablado opcional.
  • Briefinginstrucciones de resumen (cómo resumir la llamada para el colega) y una apertura del briefing que se le dice al colega; ambas admiten {{variables}}.
  • Tiempo de espera de timbre y alternativa — continuar la conversación, finalizar, o hacer una transferencia en frío si falla la llamada de consulta.

Transferir a asistente (KI→KI)

Entrega la sesión en vivo a otro asistente del mismo espacio de trabajo sin colgar:
  • Asistente de destino (assistant_id) — obligatorio; debe pertenecer al espacio de trabajo.
  • Mensaje antes de la transferencia — línea opcional no interrumpible que se dice antes del traspaso.
  • Decir saludo de transferencia — cuando está activado (por defecto), el primer mensaje/saludo del asistente de destino se reproduce después del cambio.
  • Descripción — obligatoria: indica al modelo cuándo hacer el traspaso (por ejemplo, preguntas de precio → asistente de ventas).
El modelo puede enviar un breve reason y un conversation_summary para que el asistente receptor conserve el contexto. El worker reconstruye STT/LLM/TTS (o el modo realtime) para el destino, invoca session.update_agent y escribe los eventos de llamada assistant_transfer / assistant_transfer_failed. Una llamada puede traspasarse como máximo tres veces (protección contra bucles). Se rechaza la autotransferencia al mismo asistente.

Enviar SMS

El asistente redacta el texto del mensaje a partir de la conversación y lo envía durante la llamada:
  • Destinatario (sms_to_mode) — caller (por defecto: el propio número de quien llama) o custom con un número personalizado fijo (sms_custom_number, E.164, por ejemplo +491701234567).
Uso típico: enviar por SMS una confirmación, una dirección o un enlace de pago sin colgar el teléfono.

Enviar correo electrónico

La herramienta de correo separa la captura del destinatario, la identidad del remitente, el contenido y la firma, de modo que cada parte pueda ser determinista donde haga falta:
  • Destinatario (email_to_mode) — ask usa un flujo dedicado de captura de correo para normalizar el habla ruidosa y obtener una confirmación explícita; fixed usa email_fixed_to. Las direcciones mal formadas o dictadas nunca se adivinan al momento de enviar.
  • Remitente (email_sender_mode) — auto prueba primero la dirección de SendGrid verificada del asistente, luego el SMTP del espacio de trabajo/reseller y por último el correo de la plataforma. O selecciona explícitamente SMTP del espacio de trabajo, Correo de la plataforma, o una dirección verificada desde GET /api/v1/email-senders. Las selecciones explícitas fallan de forma clara en lugar de recurrir a un respaldo silencioso.
  • Nombre para mostrar (email_from_name) — anulación opcional por herramienta.
  • Contenido (email_content_mode) — llm deja que el modelo escriba el asunto/cuerpo a partir de la llamada; fixed siempre envía el texto literal configurado; template resuelve {{call_variables}} y bloquea el envío si falta un valor.
  • Firma (email_signature_mode) — la firma predeterminada del espacio de trabajo (con {agent_name} / {{assistant_name}}), una firma personalizada por herramienta, o ninguna. La añade una sola vez el código de la aplicación, no la improvisa el modelo.
  • Estado de entrega — un resultado exitoso de la herramienta significa que el proveedor SMTP aceptó el mensaje, no que llegó a la bandeja de entrada. Las supresiones conocidas de SendGrid por rebote/bloqueo/spam se comprueban antes de enviar y se devuelven al asistente como un fallo de entrega.
El envío, al ser irreversible, desactiva las interrupciones, lleva el ID de la llamada al historial de correos y usa una clave de idempotencia para que una llamada de función repetida no cree intencionalmente un segundo mensaje.

Horario comercial

Permite que el asistente responda con sinceridad a “¿estás abierto ahora mismo?” — y que actúe de forma distinta fuera del horario de apertura:
  • Horario comercial (business_hours) — un horario semanal, con una o varias franjas horarias por día de la semana ({"mon": [["09:00", "17:00"]], ...} — la misma forma que las ventanas de llamada de una campaña).
  • Nota (hours_note) — una sugerencia opcional de texto libre que se devuelve junto con el resultado (por ejemplo, “Cerrado los días festivos”).
La comprobación se evalúa según la zona horaria del asistente (la zona horaria de una campaña la anula en cada llamada), así que “abierto” siempre significa abierto localmente.

Programar devolución de llamada

El asistente acuerda con quien llama una hora para la devolución de llamada; la plataforma la guarda y un cron job marca el número automáticamente cuando llega el momento:
  • Número de devolución de llamada (callback_to_mode) — caller (por defecto: devolver la llamada al mismo número de quien llamó) o custom con un número personalizado fijo (callback_custom_number, E.164).
  • Días máximos de anticipación (max_days_ahead) — con cuánta antelación se puede programar una devolución de llamada (de 1 a 365 días).
En tiempo de ejecución, la función exige una hora exacta en ISO-8601 y una marca de confirmación positiva. Se rechazan las fechas pasadas y las que superan el límite configurado; el worker nunca recurre en silencio a un valor por defecto de 30 minutos ni ajusta la elección de quien llama.

Recoger tarjeta de pago

Habilita los nodos Collect de tipo Tarjeta de pago en generador de Flow. Esta no es una acción invocable por el LLM: controla el acceso al nodo del Flow y define qué cuenta de Stripe recibe el método de pago.
  1. Agrega tu clave secreta de Stripe en Herramientas → App Store → Stripe.
  2. Crea una herramienta integrada de tipo collect_payment_card y selecciona esa cuenta de Stripe (stripe_connection_id).
  3. Asigna la herramienta a un asistente.
  4. Agrega un nodo Collect de tipo Tarjeta de pago en el Flow.
Durante la llamada, el agente recopila los datos de la tarjeta de forma segura; la plataforma crea un método de pago de Stripe en tu cuenta de Stripe usando tu clave secreta. Solo se guardan card_last4, card_brand y stripe_payment_method_id — nunca el número completo de la tarjeta ni el CVV. Requiere la función de plan Recoger tarjetas de pago. Se cobra por cada recolección exitosa (consulta la configuración de créditos). Sin una conexión de clave secreta de Stripe, el formulario de la herramienta muestra un aviso para agregar una primero — no hay alternativa de la plataforma para los datos de tarjeta del cliente.

Establecer variable de llamada

Permite que el asistente guarde un valor durante la llamada (por ejemplo, el nombre de la empresa de quien llama) para que herramientas posteriores, correos, condiciones del Flow y el webhook posterior a la llamada puedan usarlo:
  • Claves permitidas (allowed_keys) — lista blanca opcional en snake_case. Vacío = cualquier clave válida excepto las claves reservadas de la plataforma (assistant_name, direction, call_id, date, time, datetime, weekday).
  • Descripción — indica al modelo cuándo guardar (por ejemplo, después de que quien llama menciona el nombre de su empresa).
La herramienta escribe en el mapa de variables de la llamada en vivo y devuelve {"updated":{"key":"value"}} para que el modelo conozca el valor guardado a través del resultado de la herramienta. No reescribe el prompt del sistema durante la llamada (los modelos realtime lo ignorarían). Una cadena vacía borra una clave.

Herramienta del sistema: get_current_time

Independientemente de las herramientas configurables anteriores, todo asistente siempre cuenta con la herramienta de sistema get_current_time — no requiere configuración y no se puede desactivar. El modelo la invoca siempre que la fecha o la hora actuales son relevantes (resolver “mañana a las 3”, comprobar un plazo, reservar una cita). La hora devuelta se localiza según la zona horaria del asistente (assistants.timezone, un identificador IANA como Europe/Berlin). En las llamadas de campaña, la zona horaria de la campaña la anula en cada llamada (meta.timezone ?? assistant.timezone) — consulta Zona horaria.

API y MCP

Las herramientas integradas viven en el array builtin_tools del asistente (también se acepta tools por compatibilidad). Configúralas mediante la API pública:
El editor, la API REST y MCP usan el mismo contrato de campos. GET /api/v1/email-senders y el MCP list_email_senders exponen el catálogo de remitentes sin secretos; consulta la referencia de la API.