Gemini Live en una llamada real con la API de Wixzel Voice
Cuatro peticiones HTTP te llevan de una cuenta vacía a un teléfono sonando con el modelo Gemini Live de Google en la línea: conectar tu troncal SIP, registrar un número, crear un agente en tiempo real y hacer la llamada. Una quinta consulta el registro, con la transcripción y lo que costó la llamada. Con tu operador ya configurado lleva unos 10 minutos. El motor Gemini Live cuesta $0.0491 por minuto conectado, el precio más bajo de la lista de precios, así que una llamada de tres minutos sale por unos $0.15, facturados por segundo desde un saldo prepago, más la tarifa de tu operador.
Por Aqeel Shamsudheen · Publicado el · Actualizado el
- Duración
- Unos 10 minutos con tu operador ya configurado
- Motor
- gemini-live
- Tiempo de motor
- $0.0491 por minuto conectado
¿Qué necesitas antes de empezar?
- Una clave de API de Wixzel Voice con crédito. La recarga mínima es de $5.
- Una troncal SIP en tu operador y un número en ella que el operador te permita mostrar como identificador de llamada.
- curl, jq y uuidgen.
¿Cómo construyes esto en Wixzel Voice, paso a paso?
01Conecta tu troncal SIP
Define tu clave y la base de la API una vez, y luego crea la troncal.
teeguarda la respuesta completa, porque además del id necesitas dos valores de ella:shellexport WIXZEL_API_KEY="wv_live_..." API=https://api.voice.wixzel.com/v1 TRUNK_ID=$(curl -s $API/sip-trunks \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "My carrier", "host": "sip.your-carrier.example", "username": "your-sip-username", "password": "your-sip-password" }' | tee trunk.json | jq -r .id) jq -r '.platform_ip, .origination_uri' trunk.jsonOmite
usernameypasswordsi tu operador autoriza por IP. En cualquier caso, añadeplatform_ipa la lista de IP permitidas del operador para que acepte llamadas desde la plataforma;origination_uries adonde el operador debe enviar las llamadas entrantes, algo que esta guía no necesita.02Registra el número desde el que vas a llamar
Usa tu propio número, en formato E.164:
shellNUMBER_ID=$(jq -n --arg trunk "$TRUNK_ID" \ '{phone_number: "+14155550100", sip_trunk_id: $trunk}' | curl -s $API/phone-numbers \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d @- | jq -r .id)03Crea el agente Gemini Live
La voz es un solo modelo en tiempo real en lugar de tres etapas:
shellAGENT_ID=$(jq -n --arg number "$NUMBER_ID" '{ name: "Gemini Live", system_prompt: "You are a friendly assistant on a phone call. Keep answers to one or two sentences.", opening_message: "Hi, this is an automated assistant. Do you have a minute?", outbound_phone_number_id: $number, voice: { realtime: { model: "google/gemini-live", voice: "Charon" } } }' | curl -s $API/agents \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d @- | jq -r .id)voice.realtimeentrega todo el turno (escuchar, razonar y hablar) a Gemini Live, así que no hay bloquestt,llmnitts; la API rechaza una voz que nombre ambas formas.Charones una de las voces predefinidas de Gemini, yGET /v1/engines/gemini_live/voiceslas lista todas con las descripciones de una palabra de Google.outbound_phone_number_idle da al agente un identificador de llamada, y eso es lo que permite que la siguiente petición omitafrom_number_id.04Haz la llamada
Sustituye el número
topor el teléfono al que quieres llamar:shellCALL_ID=$(jq -n --arg agent "$AGENT_ID" '{to: "+14155551234", agent_id: $agent}' | curl -s $API/calls \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d @- | jq -r .id)La API responde
201constatus: "queued"al instante, y el teléfono suena un momento después.Idempotency-Keyes obligatorio aquí: si la red agota el tiempo de espera, no sabes si la llamada se hizo, y un reintento con la misma clave devuelve la llamada original en lugar de marcar dos veces, así que conserva la clave si programas reintentos. Una llamada que no puede cubrir sus primeros 15 segundos se rechaza con402antes de marcar.05Consulta qué pasó
La quinta petición consulta la llamada:
shellcurl -s $API/calls/$CALL_ID \ -H "Authorization: Bearer $WIXZEL_API_KEY" | jqExample response, shortened{ "id": "6a96a3ead6e886d42462dd3e", "object": "call", "session_id": "sip-5b0c7c0e-9d1f-4c52-8a9e-2f0d3a4b6c7d", "status": "completed", "direction": "outbound", "channel": "phone", "engine": "gemini_live", "to": "+14155551234", "duration_seconds": 94, "cost_micros": 76923, "failure_code": null, "failure_reason": null, "transcript": [ { "role": "assistant", "content": "Hi, this is an automated assistant. Do you have a minute?" }, { "role": "user", "content": "Sure, go ahead." } ] }statuspasa dequeuedporringingein-progressacompleted, o termina comofailed,busyono-answer.cost_microsse escribe cuando la llamada se liquida (1 000 000 equivale a $1.00) y queda ennullen una llamada que nunca se conectó, porque esa llamada no se cobra. Cuando una llamada falla,failure_codees la causa Q.850 del operador (17 ocupado, 19 sin respuesta, 21 rechazada por el operador) yfailure_reasondice qué hacer al respecto.GET /v1/usage/events?session_id=…detalla cada cargo.
¿Cuánto cuesta esto en Wixzel Voice?
Tiempo de motor para llamadas de 3 minutos con el motor gemini-live a $0.0491 por minuto conectado: unos $0.15 por llamada. La telefonía es tu propia troncal con la tarifa de tu operador y no está incluida.
| Llamadas al mes | Minutos conectados | Costo de motor al mes |
|---|---|---|
| 300 | 900 | $44.19 |
| 1500 | 4500 | $221 |
| 6000 | 18.000 | $884 |
La cifra por minuto corresponde a un ritmo de habla típico e incluye la cuota de orquestación. Gemini Live se mide en tokens de audio mientras la llamada está en curso, así que una llamada con poca conversación cuesta menos que la estimación y una con mucha conversación, más. La respuesta de ejemplo de arriba calcula el precio de una llamada de 94 segundos con la tarifa por minuto. Tu operador factura la línea por separado, sin margen.
Prepago, sin suscripción y sin plan gratuito: agrega crédito desde $5 y el uso lo va consumiendo. Calcula tu propia combinación.
¿Qué límites de Wixzel Voice se aplican a esto?
- Las llamadas telefónicas necesitan tu propia troncal SIP. Wixzel Voice no vende, porta ni aloja números. Puede comprarte uno en una cuenta de Twilio, Telnyx, Plivo, Vobiz o Vonage que conectes desde la consola, facturado por tu operador.
- Una llamada de prueba con
POST /v1/agents/{id}/test-calldice su frase mediante el pipeline de voz classic, porque Gemini Live no tiene un modo de frase única. Para oír la propia voz de Gemini, haz una llamada normal. - Por defecto, cada cuenta puede tener cinco llamadas en curso a la vez; el límite se amplía a petición.
- No se publica ninguna cifra de latencia: un motor en tiempo real responde tan rápido como el propio modelo. Los cambios de comportamiento de Wixzel Voice se publican detrás de un encabezado
Wixzel-Versioncon fecha.
Preguntas frecuentes
¿Puede Gemini Live hacer llamadas telefónicas?
{"realtime": {"model": "google/gemini-live"}}, y POST /v1/calls marca un número real por tu propia troncal SIP con Gemini Live en la línea.¿Necesito una clave de Google Cloud o de la API de Gemini?
wv_live_ y un saldo prepago cubren Gemini Live y todos los demás motores.¿Qué voces puede usar Gemini Live en una llamada?
Charon, Kore y Puck. GET /v1/engines/gemini_live/voices las lista todas. Una voz de la lista de otro motor se rechaza al crear el agente.¿Cuánto cuesta una llamada telefónica con Gemini Live?
¿El agente Gemini Live también puede atender llamadas entrantes?
inbound_agent_id del número de teléfono con PATCH /v1/phone-numbers/{id}, y apunta la ruta entrante de tu operador al origination_uri de la troncal.Dónde leer más
- Inicio rápidodocumentación
Las mismas cuatro peticiones, también con los SDK de TypeScript y Dart.
- Motores de vozdocumentación
La forma de voz en tiempo real, las listas de voces y los idiomas.
- Troncales SIPdocumentación
Lista de IP permitidas, enrutamiento entrante y qué significa cada código de fallo.
- Idempotenciadocumentación
Por qué POST /v1/calls necesita una clave y cómo funcionan las repeticiones.
Acerca de Wixzel Voice
Wixzel Voice es una API de IA de voz para crear agentes de IA que hacen y contestan llamadas telefónicas reales a través de tu propia troncal SIP, o que hablan con personas en tus apps web y móviles. Una clave de API y un saldo prepagado cubren todos los motores de voz, con cobro por segundo de uso real.
Más guías
Claude, en Claude Code o claude.ai, haciendo una llamada real por tu troncal SIP y leyéndote la transcripción, con una confirmación antes de marcar.
Tu número actual de Twilio atendido por un recepcionista de IA que agenda citas en la API, hecho en Node.js.
Dos agentes telefónicos, uno en hindi y otro en malayalam, con los modelos de Sarvam para idiomas de la India, que atienden o hacen llamadas por tu troncal SIP.
Una app Flutter en la que los usuarios hablan con tu agente de voz por WebSocket, con la clave de API guardada en tu servidor y sin ningún número de teléfono.
Una lista de leads llamados por tu agente a través de tu troncal SIP, en lotes ajustados a tu límite de llamadas simultáneas, con el estado y la transcripción de cada llamada.
Una mascota que habla en la esquina de tu sitio web, a la que los visitantes llaman desde el navegador, limitada a tus dominios y a tus límites diarios, con cada persona que llama registrada.
Una pantalla de Flutter con la mascota de tu agente, que mueve la boca con la voz del agente durante una llamada en tiempo real, con tu clave de API guardada en tu servidor.
Crea tu primer agente de voz

