Crear llamada web
POST /v3/create-web-call
Crea una llamada de voz que se realiza directamente desde el navegador, sin número de teléfono. La respuesta incluye el access_token y los datos de conexión que tu frontend le pasa al SDK de llamadas web para que el usuario se una a la llamada.
⚠️
/v2/create-web-calldeja de funcionar el 30 de septiembre de 2026. Si tu integración todavía lo usa, sigue la guía de migración a llamadas web v3.
Parámetros del cuerpo
Requeridos
| Campo | Tipo | Descripción |
|---|---|---|
agent_id |
string | ID del agente que conducirá la llamada. Ejemplo: agent_3f9c1a7b2e4d5c6f |
Opcionales
| Campo | Tipo | Descripción |
|---|---|---|
agent_version |
integer | Versión específica del agente. Por defecto, la versión publicada más reciente. |
metadata |
object | Objeto libre para guardar información propia (ID de sesión, de usuario, etc.). Se recupera luego con Obtener llamada. |
retell_llm_dynamic_variables |
object | Variables que se inyectan en el prompt del agente durante la llamada. Ejemplo: {"nombre_cliente": "Ana"} |
El cuerpo es el mismo que en la versión anterior: solo cambian la ruta y la respuesta.
Respuesta — 201 Created
A diferencia de la versión anterior, la respuesta ya no trae el objeto completo de la llamada: trae solo lo necesario para conectarse. El detalle de la llamada (estado, transcripción, grabación, análisis) se consulta con Obtener llamada usando el call_id.
| Campo | Tipo | Descripción |
|---|---|---|
call_id |
string | Identificador único de la llamada. Guárdalo para consultarla después. |
access_token |
string | Token para unirse a la llamada. Vence en pocos segundos si no se usa: créalo justo antes de conectar. |
transport |
string | Tipo de conexión que debe usar el SDK. Pásalo tal cual. |
url |
string | Dirección de conexión (según el transport). Pásala tal cual, si viene. |
ice_servers |
array | Servidores de conexión. Pásalos tal cual, si vienen. |
💡 Pasa todos los datos de conexión al SDK (
transport,url,ice_servers, además del token). Si solo pasas el token, el SDK puede elegir otro tipo de conexión y la llamada no conecta.
Ejemplo de solicitud
Desde tu servidor (nunca desde el navegador: tu API Key no debe quedar expuesta):
curl --request POST \
--url https://calls.anunzi.net/v3/create-web-call \
--header 'Authorization: Bearer anz_live_TU_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"agent_id": "agent_3f9c1a7b2e4d5c6f",
"retell_llm_dynamic_variables": {
"nombre_usuario": "Carlos",
"plan_actual": "Básico"
},
"metadata": {
"session_id": "web-9923"
}
}'
Ejemplo de respuesta
{
"call_id": "Kx2pYnWVmlR3eDsT1Qva59fHgJzLcAXb",
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"transport": "gateway",
"url": "wss://…",
"ice_servers": [ { "urls": ["stun:…"] } ]
}
Unirse a la llamada desde el navegador
Usa el SDK de llamadas web de Anunzi. Es un módulo JavaScript que se importa directamente desde nuestro dominio (no requiere instalar nada):
<button id="llamar">Hablar con el agente</button>
<button id="colgar" disabled>Colgar</button>
<script type="module">
import { VoiceClient } from 'https://panel.anunzi.net/voice/web-sdk.php';
const client = new VoiceClient();
client.on('call_started', () => console.log('Llamada iniciada'));
client.on('call_ended', () => console.log('Llamada terminada'));
client.on('agent_start_talking', () => console.log('El agente habla'));
client.on('agent_stop_talking', () => console.log('El agente escucha'));
client.on('error', (err) => { console.error(err); client.stopCall(); });
document.getElementById('llamar').onclick = async () => {
// 1) Tu backend crea la llamada con POST /v3/create-web-call y te devuelve la respuesta
const r = await fetch('/mi-backend/crear-llamada-web', { method: 'POST' });
const call = await r.json();
// 2) Unirse pasando el token y TODOS los datos de conexión
await client.startCall({
accessToken: call.access_token,
callId: call.call_id,
transport: call.transport,
url: call.url,
iceServers: call.ice_servers,
});
document.getElementById('colgar').disabled = false;
};
document.getElementById('colgar').onclick = () => client.stopCall();
</script>
El navegador pide permiso de micrófono al iniciar la llamada. La página debe servirse por HTTPS.
Eventos disponibles
| Evento | Cuándo ocurre |
|---|---|
call_started |
La conexión se estableció y la llamada comenzó. |
call_ended |
La llamada terminó (colgó el usuario, el agente o por error). |
agent_start_talking |
El agente empieza a hablar (útil para animar la interfaz). |
agent_stop_talking |
El agente deja de hablar. |
error |
Error de conexión o de audio. Recomendado: llamar a stopCall(). |
Para la transcripción, el resumen y la grabación, consulta la llamada al terminar con Obtener llamada.
Códigos de estado
| Código | Descripción |
|---|---|
201 |
Llamada web creada correctamente. |
400 |
Formato de solicitud inválido. Verifica los parámetros. |
401 |
API Key ausente o inválida. |
402 |
Período de prueba vencido. |
403 |
El agente no pertenece a tu cuenta. |
422 |
El agente solicitado no existe bajo tu API Key. |
429 |
Límite de solicitudes alcanzado. |
500 |
Error interno del servidor. |