Saltar al contenido principal

Obtener Análisis

Obtiene un análisis específico por su ID único. Usa este endpoint para verificar el estado y obtener resultados de un análisis.

Endpoint

GET /api/v1/analysis/{analysis_id}

Autenticación

Requiere clave de API o token JWT.

MétodoHeaderEjemplo
Clave de APIX-API-Key: {api_key}X-API-Key: sk_live_abc123...
Token JWTAuthorization: Bearer {token}Authorization: Bearer eyJhbGc...
Endpoint Gratuito

Obtener análisis es gratuito - no cuenta contra tus límites de uso. Solo crear nuevos análisis consume minutos.

Parámetros de Path

ParámetroTipoRequeridoDescripción
analysis_idUUIDIdentificador único del análisis devuelto cuando se creó el análisis

Response

Devuelve el objeto AnalysisResponse completo con el estado actual y resultados (si se completó).

Response Exitoso (200 OK)

Cuando el análisis aún está procesando:

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"object": "analysis",
"created": 1705334400,
"status": "processing",
"livemode": false,
"call": {
"agent_id": "agent_001",
"contact_id": "customer_12345",
"duration_ms": 125500,
"duration_seconds": 125.5
},
"audio": {
"url": "https://s3.amazonaws.com/callcov-audio/...",
"size_bytes": 1048576,
"format": "wav",
"duration_seconds": 125.5
},
"transcript": null,
"results": null,
"metadata": {
"webhook_url": "https://your-app.com/webhooks/analysis",
"completed_at": null,
"processing_time_ms": null,
"error_message": null
}
}

Cuando el análisis está completado:

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"object": "analysis",
"created": 1705334400,
"status": "completed",
"livemode": false,
"call": {
"agent_id": "agent_001",
"contact_id": "customer_12345",
"duration_ms": 125500,
"duration_seconds": 125.5
},
"audio": {
"url": "https://s3.amazonaws.com/callcov-audio/...",
"size_bytes": 1048576,
"format": "wav",
"duration_seconds": 125.5
},
"transcript": {
"text": "Transcripción completa de la llamada...",
"segments": [
{
"speaker": "A",
"text": "Hola, ¿en qué puedo ayudarte?",
"start": 0.0,
"end": 2.5
},
{
"speaker": "B",
"text": "Necesito ayuda con mi cuenta.",
"start": 2.8,
"end": 5.2
}
],
"language": "en"
},
"results": {
"compliance": {
"score": 0.92,
"issues": [],
"highlights": ["Saludo apropiado", "Comunicación clara"]
},
"quality": {
"overall_score": 0.88,
"communication_score": 0.90,
"professionalism_score": 0.85
},
"summary": "El agente manejó la consulta del cliente profesionalmente...",
"action_items": ["Dar seguimiento al problema de la cuenta"],
"sentiment": {
"agent": "positive",
"customer": "neutral"
}
},
"metadata": {
"webhook_url": "https://your-app.com/webhooks/analysis",
"completed_at": "2024-01-15T14:32:15.123Z",
"processing_time_ms": 45230,
"error_message": null
}
}

Campos del Response

CampoTipoDescripción
idUUIDIdentificador único del análisis
objectstringSiempre "analysis"
createdintegerTimestamp Unix de creación
statusstringEstado actual: "processing", "completed", o "failed"
livemodebooleanSiempre false (modo test no implementado)
call.agent_idstringTu identificador del agente
call.contact_idstringTu identificador del contacto
call.duration_msintegerDuración del audio en milisegundos
call.duration_secondsfloatDuración del audio en segundos (calculado)
audio.urlstringURL S3 donde se almacena el audio
audio.size_bytesintegerTamaño del archivo en bytes
audio.formatstringFormato de audio (wav, mp3, etc.)
audio.duration_secondsfloatDuración del audio en segundos
transcriptobjectInformación de transcripción (null hasta completarse)
transcript.textstringTexto completo de la transcripción
transcript.segmentsarraySegmentos de transcripción con identificación de hablante
transcript.languagestringCódigo de idioma detectado
resultsobjectResultados del análisis (null hasta completarse)
results.complianceobjectAnálisis de cumplimiento con puntaje y problemas
results.qualityobjectPuntajes de calidad
results.summarystringResumen de la llamada generado por IA
results.action_itemsarrayItems de acción identificados
results.sentimentobjectAnálisis de sentimiento para agente y cliente
metadata.webhook_urlstringTu URL de webhook (si se proporcionó)
metadata.completed_atdatetimeTimestamp de completación (null hasta completarse)
metadata.processing_time_msintegerTiempo total de procesamiento en ms
metadata.error_messagestringMensaje de error si el estado es "failed"

Valores de Estado

EstadoDescripción
processingEl análisis se está procesando actualmente
completedAnálisis completado exitosamente, resultados disponibles
failedEl análisis falló, verificar error_message para detalles

Ejemplos

# Usando Clave de API
curl https://api.callcov.com/api/v1/analysis/550e8400-e29b-41d4-a716-446655440000 \
-H "X-API-Key: sk_live_abc123..."
# Usando Token JWT
curl https://api.callcov.com/api/v1/analysis/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer eyJhbGc..."

Polling para Resultados

Si no proporcionaste una URL de webhook durante la creación, necesitarás hacer polling a este endpoint para verificar cuándo el análisis se complete.

Patrón de Polling

import requests
import time

def wait_for_analysis(analysis_id, api_key, timeout=300, interval=5):
"""
Hacer polling para la completación del análisis.

Args:
analysis_id: UUID del análisis
api_key: Tu clave de API
timeout: Tiempo máximo a esperar (segundos)
interval: Tiempo entre polls (segundos)

Returns:
Objeto de análisis completado o None si hay timeout
"""
url = f"https://api.callcov.com/api/v1/analysis/{analysis_id}"
headers = {"X-API-Key": api_key}

elapsed = 0
while elapsed < timeout:
response = requests.get(url, headers=headers)

if response.status_code == 200:
analysis = response.json()

if analysis['status'] == 'completed':
return analysis
elif analysis['status'] == 'failed':
raise Exception(f"Análisis falló: {analysis['metadata']['error_message']}")

time.sleep(interval)
elapsed += interval

return None # Timeout

# Uso
analysis = wait_for_analysis(
analysis_id="550e8400-e29b-41d4-a716-446655440000",
api_key="sk_live_abc123...",
timeout=300,
interval=5
)

if analysis:
print("¡Análisis completo!")
print(analysis['results'])
else:
print("Timeout esperando el análisis")
Usa Webhooks en su Lugar

El polling es ineficiente y puede alcanzar límites de tasa. Usa webhooks para aplicaciones de producción para recibir notificación inmediatamente cuando el análisis se complete.

Errores

401 Unauthorized

Autenticación inválida o faltante:

{
"detail": "Credenciales de autenticación inválidas"
}

404 Not Found

El análisis no existe o no pertenece a tu cuenta:

{
"detail": "Análisis no encontrado"
}

Seguridad

  • Aislamiento de Usuarios: Solo puedes obtener análisis que pertenecen a tu cuenta
  • Alcance de Clave de API: Las claves de API tienen alcance a tu cuenta de usuario
  • Validación de JWT: Los tokens JWT se validan por expiración y firma

Relacionado