Skip to main content

Requisitos Previos

Antes de comenzar necesitas:
1

Credenciales de API

Solicita tu client_id y client_secret a [email protected].
2

Modelo de Análisis

Ten al menos un modelo configurado (puede ser el default).
3

Archivos de Audio

Grabaciones en formato soportado (MP3, WAV, etc.).

Paso 1: Configurar Entorno

Variables de Entorno

export NEURACALL_CLIENT_ID="tu_client_id"
export NEURACALL_CLIENT_SECRET="tu_client_secret"
export NEURACALL_API_URL="https://api.neuracall.com"

Dependencias

pip install requests

Paso 2: Implementar Autenticación

Crea una clase o modulo para manejar tokens:
import os
import time
import requests

class NeuracallClient:
    def __init__(self):
        self.base_url = os.environ.get("NEURACALL_API_URL", "https://api.neuracall.com")
        self.client_id = os.environ["NEURACALL_CLIENT_ID"]
        self.client_secret = os.environ["NEURACALL_CLIENT_SECRET"]
        self.token = None
        self.expires_at = 0

    def get_token(self):
        # Renovar si expira en menos de 5 minutos
        if time.time() > self.expires_at - 300:
            response = requests.post(
                f"{self.base_url}/v1/auth",
                json={
                    "client_id": self.client_id,
                    "client_secret": self.client_secret
                }
            )
            response.raise_for_status()
            data = response.json()
            self.token = data["access_token"]
            self.expires_at = data["expires_at"]
        return self.token

    def _headers(self):
        return {"Authorization": f"Bearer {self.get_token()}"}

Paso 3: Crear Análisis

Agrega el método para enviar llamadas:
def create_analysis(self, audio_path, external_id, agent_id, agent_name, model_name, additional_params=None):
    with open(audio_path, "rb") as audio_file:
        files = {"audio_file": audio_file}
        data = {
            "external_id": external_id,
            "agent_id": agent_id,
            "agent_name": agent_name,
            "model_name": model_name
        }
        if additional_params:
            data["additional_parameters"] = json.dumps(additional_params)

        response = requests.post(
            f"{self.base_url}/v1/call-analysis",
            headers=self._headers(),
            files=files,
            data=data
        )
        response.raise_for_status()
        return response.json()

Paso 4: Obtener Resultados

Agrega métodos para consultar el estado:
def get_analysis(self, analysis_id):
    response = requests.get(
        f"{self.base_url}/v1/call-analysis/{analysis_id}",
        headers=self._headers()
    )
    response.raise_for_status()
    return response.json()

def wait_for_completion(self, analysis_id, timeout=600, poll_interval=5):
    start = time.time()
    while time.time() - start < timeout:
        result = self.get_analysis(analysis_id)
        if result["status"] == "PROCESS_COMPLETED":
            return result
        elif result["status"] == "ERROR":
            raise Exception(f"Analysis failed: {result.get('error_message')}")
        time.sleep(poll_interval)
    raise TimeoutError("Analysis did not complete in time")

Paso 5: Uso Completo

# Ejemplo de uso completo
client = NeuracallClient()

# Crear análisis
analysis = client.create_analysis(
    audio_path="llamada.mp3",
    external_id="CALL-2024-001",
    agent_id="AGT-001",
    agent_name="Juan Perez",
    model_name="Evaluación Servicio Cliente"
)
print(f"Análisis creado: {analysis['id']}")

# Esperar resultado
result = client.wait_for_completion(analysis["id"])
print(f"NeuraScore: {result['score_percentage']}%")
print(f"Resumen: {result['summary']}")

Siguientes Pasos