Realiza llamadas salientes (API)
Activa una llamada saliente impulsada por IA desde tu propio código: flujos de encuestas, seguimiento o confirmación.
Las llamadas salientes te permiten proporcionar un número de destino y una configuración de agente a ThunderPhone para que la IA realice la llamada en tu nombre. Casos de uso habituales:
- Confirmaciones de citas
- Llamadas de seguimiento de encuestas
- Seguimientos de "segundo intento" después de una llamada perdida
- Notificaciones de tipo despacho
Requisitos previos
- Usa un número de VoIP
Las llamadas salientes requieren que tengas el
from_numbermediante una conexión de VoIP. Los números de demostración son solo para llamadas entrantes. Consulta Usa tus propios números. - Crea un agente
Un prompt orientado a llamadas salientes suele comenzar con el agente identificándose y explicando su propósito: "Hola, le habla Acme para confirmar su cita de mañana a las 3 p. m.…" Configura
outbound_speak_ordercomoagent_first(el valor predeterminado). - Mantén un saldo positivo
Las llamadas salientes devuelven
402 Payment Requiredsi el saldo es ≤$0.00. Recarga saldo mediantePOST /v1/billing/top-upo activa la recarga automática.
Realiza una llamada con un agente guardado
La forma más sencilla: referencia un agente por ID:
curl -X POST https://api.thunderphone.com/v1/call \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from_number": "+15551234567",
"to_number": "+14155550199",
"agent_id": 12
}'Respuesta:
{ "call_id": 987654321, "status": "initiated" }Realiza una llamada con configuración en línea
Si quieres un prompt único que no vale la pena guardar como agente,
pasa config en su lugar. La estructura coincide con el esquema de respuesta del
webhook call.incoming:
curl -X POST https://api.thunderphone.com/v1/call \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from_number": "+15551234567",
"to_number": "+14155550199",
"config": {
"prompt": "You are confirming Jane Doe appointment for 3pm tomorrow…",
"voice": "john",
"product": "spark"
}
}'Sigue la llamada
En paralelo, suscríbete al
webhook telephony.complete:
es la forma más rápida de saber que una llamada terminó. Si no puedes aceptar
webhooks entrantes, consulta GET /v1/calls/{call_id} cada pocos segundos; el
registro incluye end_reason, duration_seconds y la URL de la grabación
una vez que termina la llamada.
Errores que vale la pena controlar
| Error | Solución |
|---|---|
402 Payment Required | Recarga el saldo o activa la recarga automática |
403 llamadas salientes bloqueadas (número de demostración) | Usa un número de VoIP en su lugar |
403 llamadas salientes bloqueadas (VoIP no verificado) | Ejecuta POST /v1/phone-numbers/{id}/verify-voip |
404 from_number is not registered to this organization | Confirma que el from_number coincida con un número de teléfono que tengas |
502 Bad Gateway | Error transitorio de SIP / LiveKit; puedes reintentar con seguridad |
Control del tiempo en espera
Las llamadas salientes que se prolongan porque la persona que recibe la llamada tarda en responder
(árboles IVR, colas) se pueden limitar con max_hold_seconds:
{
"from_number": "+15551234567",
"to_number": "+14155550199",
"agent_id": 12,
"max_hold_seconds": 120
}El agente cuelga si no ha recibido audio humano en los últimos N segundos. El valor predeterminado es 900 (15 minutos).
Próximos pasos
Cada campo de solicitud y código de error.
Transmite llamadas salientes finalizadas a tu sistema.
Recarga automática para que las llamadas salientes nunca fallen por saldo.
Ejecuta una prueba de tu agente saliente antes de producción.