ThunderPhone 2.0 ya está disponible.Empieza por tu cuenta desde 2¢/min.Lee el anuncio

Developer cookbook

Variables por llamada

Personaliza un agente guardado para cada llamada sin cambiar su prompt, herramientas ni configuración implementados.

Coloca marcadores de posición en el prompt de tu agente guardado y luego proporciona un objeto variables al iniciar una llamada. La configuración guardada y el historial de versiones permanecen sin cambios. ThunderPhone procesa el texto antes de enviar la configuración de la llamada al entorno de ejecución de voz.

Cuando no se necesiten valores, omite variables; no envíes null (se rechaza con 400).

Marcadores de posición y valores predeterminados

You are calling {{name|Friend}} about account {{account_id}}.
The available appointment is {{ appointment_slot }}.

Los nombres distinguen entre mayúsculas y minúsculas y siguen el patrón [A-Za-z_][A-Za-z0-9_]*. Se permiten espacios en blanco alrededor del nombre; los espacios en blanco después de | forman parte del valor predeterminado y se conservan. {{name|Friend}} usa Friend cuando falta name o es null; una cadena vacía es un valor proporcionado explícitamente. Los valores faltantes sin un valor predeterminado se convierten en cadenas vacías y sus nombres aparecen en unresolved_variables. Se elimina el texto entre llaves dobles que no sea un marcador de posición válido. El texto entre llaves dobles dentro de cada valor proporcionado se elimina de forma independiente; un valor no puede eliminar el texto circundante del prompt ni otro valor. También se eliminan los delimitadores de llaves dobles sin pareja. Los ejemplos de JSON en los prompts no deben usar {{. Los valores son texto sin formato y nunca se evalúan como código ni se expanden recursivamente como plantillas.

Las variables también pueden aparecer en los prompts de confirmación, los mensajes de buzón de voz salientes y el texto del anuncio de consentimiento cuando ese campo se envía para una llamada telefónica. El agente no tiene un campo first_message independiente: incluye sus instrucciones de apertura en el prompt. Los marcadores de posición existentes de buzón de voz {agent_name} y {org_name} siguen funcionando.

Los valores pueden ser cadenas, números, valores booleanos o null; los valores booleanos se representan como true y false. Se eliminan los caracteres de control Unicode (Cc), excepto salto de línea (\n), tabulación (\t) y retorno de carro (\r); todos los caracteres de formato (Cf) y los puntos de código sustitutos (Cs); \r\n se normaliza a \n. Cada valor está limitado a 2,000 caracteres al procesarse. Las cadenas proporcionadas también se limpian y truncan antes de almacenarse. El objeto original debe caber en 32 KB de JSON UTF-8; los objetos más grandes reciben 400 en las solicitudes de llamada/sesión, mientras que las importaciones de campañas informan las filas no válidas individualmente. No se aceptan arreglos ni objetos anidados como valores. Las claves de metadatos que no coincidan (por ejemplo, un encabezado de CSV con un espacio) se conservan y se devuelven, pero no pueden referenciarse mediante un marcador de posición.

De dónde provienen los valores

API de llamadas salientes

Envía variables junto con agent_id en POST /v1/call:

{
  "from_number": "+15551234567",
  "to_number": "+14155550199",
  "agent_id": 12,
  "variables": {
    "name": "Ada",
    "account_id": "A-17",
    "appointment_slot": "Tuesday at 10 AM"
  }
}

También funciona con el agente saliente predeterminado del número de teléfono o con un config.prompt en línea. No se puede reutilizar una clave de idempotencia con variables diferentes.

CSV de campañas

Las columnas de CSV que no son de teléfono ya se almacenan como variables de contacto. Cada marcación ahora las usa automáticamente. Usa encabezados como name, account_id y appointment_slot para que coincidan con tus marcadores de posición. La asignación de nombre existente puede combinar las columnas de nombre y apellido en la variable name.

Webhook de configuración dinámica

En la ruta bloqueante del webhook de configuración, devuelve un agente guardado en tu organización junto con los valores por llamada:

{"agent_id": 12, "variables": {"name": "Ada", "account_id": "A-17"}}

Las claves de la respuesta sobrescriben las variables del nivel de solicitud, mientras que las demás claves de la solicitud se mantienen. Un valor de respuesta de null selecciona el valor predeterminado del marcador de posición. El objeto combinado también debe caber en 32 KB. Las respuestas de agentes guardados aceptan solo agent_id y variables; devuelve una configuración en línea cuando necesites reemplazar el prompt o la configuración. Una respuesta que contiene prompt siempre usa una configuración en línea: cualquier agent_id de esa respuesta se ignora, incluidos los metadatos nulos o que no sean enteros. El prompt en línea aún debe superar la validación normal. Las respuestas de webhook en línea también pueden incluir variables. Las respuestas de webhook de agentes guardados usan la división A/B implementada del agente tanto en llamadas telefónicas como de widget; las variables se procesan después de seleccionar la variante. En las llamadas telefónicas entrantes, usa un número sin agente entrante asignado y configura su webhook de número de teléfono o de organización; las claves de widget usan mode="webhook". Las notificaciones entrantes del sistema de endpoints no proporcionan respuestas de configuración bloqueantes.

APIs de sesión de Widget y Realtime

POST /v1/widget/session acepta un objeto variables de nivel superior. Su clave publicable selecciona el agente guardado. Las claves en modo webhook reenvían estos valores al webhook de configuración y combinan la respuesta como se describió anteriormente. Las variables de widget/realtime proporcionadas por el navegador están controladas por el cliente, se reenvían sin cambios en web.incoming después de la validación y limpieza de cadenas descritas anteriormente, y se incluyen en los webhooks de finalización y el historial de llamadas. No las trates como datos confiables de identidad o autorización.

POST /v1/realtime/sessions acepta variables junto con agent_id (o config en línea). Estos son campos de la API de creación de sesiones. El puente WebSocket de Realtime no reenvía una opción de variables; proporciónala directamente a la API de creación de sesiones. Los clientes de Widget deben incluir variables en la carga útil de sesión enviada; el reenvío del SDK no forma parte de este cambio de API. Las llamadas de prueba con micrófono y simuladas del Builder resuelven valores predeterminados y marcadores de posición faltantes, pero no tienen entrada de variables por llamada.

Valores devueltos después de la llamada

GET /v1/calls, GET /v1/calls/{call_id}, telephony.complete y web.complete incluyen las variables y unresolved_variables combinadas finales. Las cargas útiles de finalización heredadas que incluyen data.history también las incluyen:

{
  "variables": {"name": "Ada", "account_id": "A-17"},
  "unresolved_variables": ["appointment_slot"]
}

Almacena tu identificador de CRM o de tarea en el objeto de variables para vincular la llamada completada con su registro de origen. Estos campos se conservan con el registro de llamada; envía solo información que sea apropiada conservar en el historial de llamadas y los webhooks.

Compatibilidad con prompts existentes

El renderizado también se aplica a los prompts existentes de agentes guardados y variantes A/B, configuraciones integradas de llamadas salientes y en tiempo real, y prompts devueltos por webhooks de configuración. Los marcadores de posición {{name}} desconocidos se convierten en texto en blanco, incluso cuando no se proporcionan variables. Revisa los prompts existentes antes del lanzamiento, incluidos los prompts integrados o de webhook proporcionados externamente que ThunderPhone no puede inventariar. Las llamadas de micrófono y simulación del Builder aplican el mismo comportamiento predeterminado/en blanco.