Skip to main content
Las variables personalizadas te permiten escribir un asistente una sola vez y personalizar cada llamada. En lugar de codificar un nombre, una cita o un número de cuenta directamente en el prompt del sistema, haces referencia a un marcador como {{customer_name}} y le das el valor en cada llamada: desde tu solicitud a la API, un lead de campaña, un webhook de enriquecimiento entrante o el contexto del sistema integrado en la plataforma.

Sintaxis de referencia

Haz referencia a una variable con llaves dobles, la forma preferida y segura para JSON:
La forma antigua de llave simple {customer_name} también se resuelve, pero solo para claves que realmente existen (una variable definida o del sistema). Así se mantienen intactas las llaves literales, por ejemplo el JSON dentro del cuerpo de una herramienta. Cualquier marcador cuya clave sea desconocida se deja tal cual.

Definir variables en un asistente

Cada asistente tiene una lista de definiciones de variables. Una definición incluye:
Las claves se validan al guardar: se rechazan un formato inválido, una colisión con una variable de sistema reservada, una clave duplicada o una etiqueta faltante.

Dónde se sustituyen las variables

Los valores se sustituyen al inicio de la llamada, antes de que se ejecute el modelo o el Flow, en estos campos:
  • Prompt del sistema del asistente
  • Primer mensaje del asistente (saludo)
  • Nodo start.greeting del Flow
  • Nodo agent.instructions del Flow
  • URL de la solicitud y valores de encabezado del nodo de herramienta del Flow
Así, un nodo de herramienta puede llamar a https://app.famulor.de/api/user/orders/{{order_id}} o enviar Authorization: Bearer {{api_token}} con valores propios de cada llamada.

Origen de los valores y prioridad

Un valor puede llegar desde varios lugares. Al inicio de la llamada, el worker resuelve cada clave según este orden de prioridad, de mayor a menor:
  1. Explícito: valores pasados con la llamada, ya sea el variables de la API make-call o los campos personalizados de un lead de campaña mapeados a claves coincidentes.
  2. Webhook de variables entrante: enriquecimiento obtenido al inicio de la llamada (ver más abajo).
  3. Variables de sistema: completadas por la plataforma a partir del contexto de la llamada.
  4. Predeterminado: el default_value de la definición.
Un marcador sin valor en ningún nivel se deja tal cual.

Valores explícitos mediante la API

Leads de campaña → variables

En una campaña, cada lead lleva campos personalizados de formato libre (leads.custom_fields). Al marcar, el campo personalizado de un lead se mapea a una variable con la misma clave. Así, una columna del CSV se convierte en una variable:
Aquí las columnas customer_name y appointment_date completan {{customer_name}} y {{appointment_date}} en cada llamada. Asigna source: "lead" a una variable proveniente de un lead para documentar su origen.

Variables de sistema

Estas claves siempre están disponibles y el worker las completa al inicio de la llamada. Están reservadas: no puedes definir una variable personalizada con ninguna de estas claves.

Webhook de variables entrante

En las llamadas entrantes muchas veces no conoces de antemano a quien llama. Configura un webhook de variables en el asistente (variable_webhook_url + variable_webhook_secret) y el worker lo llama al inicio de la llamada para enriquecer las variables, por ejemplo, buscando a un cliente por su número de llamada.

Solicitud

El worker envía un POST con un cuerpo JSON:
El cuerpo de la solicitud, sin procesar, se firma con HMAC-SHA256 usando el variable_webhook_secret del asistente, y se envía en el encabezado:

Respuesta

Devuelve las variables que quieres fusionar:
Estos valores se fusionan por encima de las variables de sistema y los valores predeterminados, pero por debajo de cualquier valor explícito enviado en el dispatch. La llamada tiene un tiempo límite de ~5 s; un fallo no es crítico: el worker lo registra y continúa con los valores que ya tiene.

Automatización nativa (alternativa)

En lugar de un variable_webhook_url propio, puedes crear una Automatización con el disparador Inyectar variables de entrada (call.variables) vinculada al asistente. Al iniciar la llamada, el worker ejecuta esa automatización de forma síncrona y espera una acción Devolver variables (con la misma estructura { variables: {…} }). Si no existe ninguna automatización activa que coincida, se usa como alternativa la URL del webhook clásico.

Verificar la firma

Calcula siempre el HMAC sobre los bytes sin procesar del cuerpo de la solicitud, no sobre un objeto reserializado: la reserialización puede cambiar los espacios en blanco o el orden de las claves y romper la firma. Usa una comparación de tiempo constante.

Solicitud de ejemplo

API y MCP

  • GET /v1/assistants/{id}/variables: lee las definiciones de variables del asistente; alcance assistants:read.
  • PATCH /v1/assistants/{id}/variables: reemplaza las definiciones de variables; alcance assistants:write.
  • Herramientas MCP: get_assistant_variables, set_assistant_variables.
La referencia completa de la REST API está en docs.famulor.io. Usa {{key}} en cualquier lugar donde necesites un valor propio de cada llamada, mantén las claves en snake_case y dale a cada variable un default_value razonable para que las llamadas se degraden con elegancia cuando falte una fuente.