Support +44 29 2255 0669
Contacto
Talk to our AI agent Start for free +44 29 2255 0669
Agenți AI

Configurează-ți agentul vocal

Selectează componentele agentului tău și calculează costul pe minut

👂

Recunoaștere vocală (ASR)

Transformă vocea clientului în text

🧠

Model de IA (LLM)

Creierul care înțelege și răspunde

Se încarcă modele...
🎙️

Voce (TTS)

Vocea cu care vorbește agentul tău

Se încarcă vocile...

💰 Cost pe minut

ASR 0,012 €
LLM 0,030 €
TTS 0,015 €
Total 0,057 €/min
ASR: Echilibrat
LLM: Se încarcă...
Voce: Se încarcă...

📊 Estimare lunară

Cost estimat 17,10 €
Creează un agent gratuit
💡
Cum se calculează?

Costul LLM este o estimare bazată pe token-uri tipice pe minut de conversație. Costul real variază în funcție de complexitate.

🔄
Modifică oricând

Poți schimba ASR, LLM sau vocea în orice moment din setările agentului tău.

💳
Plată în funcție de utilizare

Plătești doar pentru minutele pe care le utilizezi. Fără angajamente sau taxe fixe.

Întrebări frecvente

Cum funcționează creditele preplătite?

Creditele reprezintă soldul dvs. unic pentru toate serviciile: apeluri, SMS-uri și servicii de IA. Reîncărcați cu minim 5 € și soldul dvs. nu expiră niciodată.

Pot testa înainte de a cumpăra?

Da, la înregistrare primești credite de testare pentru a putea încerca agenții IA fără angajamente.

Există reduceri pentru volume mari?

Da, dacă gestionezi un volum mare de apeluri, contactează-ne pentru o ofertă personalizată.

Unde pot vedea tarifele de telefonie?

Consultați toate tarifele pentru apeluri și SMS-uri pe pagina noastră de tarife de telefonie.

Ești gata să-ți automatizezi apelurile?

Creează-ți agentul în câteva minute și începe să economisești timp

m.data_type_text == 1); renderLLMOptions(); } } catch (error) { console.error('Error cargando modelos:', error); document.getElementById('llm-loading').innerHTML = 'Error al cargar modelos'; } } async function loadVoices() { try { const res = await fetch(API_VOICES, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: "NONEEDTOKEN" }) }); const data = await res.json(); if (data.status === 'ok' && Array.isArray(data.list_voices)) { allVoices = data.list_voices; populateLanguageFilter(); renderVoices(); } } catch (error) { console.error('Error cargando voces:', error); document.getElementById('voices-loading').innerHTML = 'Error al cargar voces'; } } // ==================== RENDER LLM ==================== function renderLLMOptions() { const container = document.getElementById('llm-options'); const loading = document.getElementById('llm-loading'); if (allModels.length === 0) { container.innerHTML = '

No hay modelos disponibles

'; loading.style.display = 'none'; container.style.display = 'flex'; return; } // Ordenar por precio estimado const sortedModels = [...allModels].sort((a, b) => { return (a.costmin_estimated || 0) - (b.costmin_estimated || 0); }); let html = ''; let defaultSet = false; sortedModels.forEach((model, index) => { const price = (model.costmin_estimated || 0) * CREDIT_MULTIPLIER; const inputPrice = model.input_price_per_million_tokens ? formatPrice(model.input_price_per_million_tokens * CREDIT_MULTIPLIER) : '--'; const inputCachedPrice = model.input_cached_price_per_million_tokens ? formatPrice(model.input_cached_price_per_million_tokens * CREDIT_MULTIPLIER) : null; const outputPrice = model.output_price_per_million_tokens ? formatPrice(model.output_price_per_million_tokens * CREDIT_MULTIPLIER) : '--'; // Seleccionar por defecto el modelo intermedio o el primero si hay pocos const isDefault = index === Math.floor(sortedModels.length / 2); if (isDefault && !defaultSet) { selectedLLM = { name: model.comercial_name || model.model_code, price: price }; defaultSet = true; } // Tooltip con precios en tokens let tooltipContent = `
Precio por minuto estimado
Input: €${inputPrice}/1M tokens
${inputCachedPrice ? `
Input (caché): €${inputCachedPrice}/1M tokens
` : ''}
Output: €${outputPrice}/1M tokens
Estimación basada en uso típico de tokens por minuto.
`; const modelName = model.comercial_name || model.model_code; const modelDesc = model.model_description || 'Modelo de lenguaje avanzado'; html += ` `; }); container.innerHTML = html; loading.style.display = 'none'; container.style.display = 'flex'; // Event listeners container.querySelectorAll('input[name="llm"]').forEach(input => { input.addEventListener('change', function() { selectedLLM = { name: this.dataset.name, price: parseFloat(this.value) }; updateCostSummary(); }); }); updateCostSummary(); } // ==================== RENDER VOCES ==================== function populateLanguageFilter() { const select = document.getElementById('voice-lang-filter'); const languages = new Map(); allVoices.forEach(voice => { const locale = voice.locale || ''; const lang = locale.split('-')[0]; if (lang && !languages.has(lang)) { languages.set(lang, getLanguageName(lang)); } }); const sorted = Array.from(languages.entries()).sort((a, b) => a[1].localeCompare(b[1], 'es')); sorted.forEach(([code, name]) => { const opt = document.createElement('option'); opt.value = code; opt.textContent = name; select.appendChild(opt); }); } function getLanguageName(code) { const names = { 'es': 'Español', 'en': 'Inglés', 'fr': 'Francés', 'de': 'Alemán', 'it': 'Italiano', 'pt': 'Portugués', 'nl': 'Neerlandés', 'ja': 'Japonés', 'ko': 'Coreano', 'zh': 'Chino', 'ru': 'Ruso', 'ar': 'Árabe', 'hi': 'Hindi', 'pl': 'Polaco', 'tr': 'Turco', 'sv': 'Sueco', 'da': 'Danés', 'fi': 'Finlandés', 'no': 'Noruego', 'cs': 'Checo', 'el': 'Griego', 'he': 'Hebreo', 'hu': 'Húngaro', 'id': 'Indonesio', 'ms': 'Malayo', 'ro': 'Rumano', 'sk': 'Eslovaco', 'th': 'Tailandés', 'uk': 'Ucraniano', 'vi': 'Vietnamita', 'ca': 'Catalán', 'multi': 'Multiidioma' }; return names[code] || code.toUpperCase(); } function calculateVoicePricePerMin(voice) { // price_per_1k_chars está en créditos, asumimos ~500 chars por minuto de habla // Multiplicamos por CREDIT_MULTIPLIER para convertir a euros if (voice.price_per_1k_chars) { return (voice.price_per_1k_chars / 2) * CREDIT_MULTIPLIER; } return 0.015; // Precio por defecto } function renderVoices() { const container = document.getElementById('voice-list'); const loadingEl = document.getElementById('voices-loading'); const selectorEl = document.getElementById('voice-selector'); const emptyEl = document.getElementById('voices-empty'); const langFilter = document.getElementById('voice-lang-filter').value; const genderFilter = document.getElementById('voice-gender-filter').value; const searchQuery = document.getElementById('voice-search').value.toLowerCase(); let filtered = allVoices; if (langFilter) { filtered = filtered.filter(v => (v.locale || '').toLowerCase().startsWith(langFilter)); } if (genderFilter) { filtered = filtered.filter(v => v.gender === genderFilter); } if (searchQuery) { filtered = filtered.filter(v => (v.name || '').toLowerCase().includes(searchQuery) || (v.descriptive || '').toLowerCase().includes(searchQuery) ); } loadingEl.style.display = 'none'; if (filtered.length === 0) { selectorEl.style.display = 'none'; emptyEl.style.display = 'block'; return; } selectorEl.style.display = 'block'; emptyEl.style.display = 'none'; // Seleccionar la primera voz en español si existe, si no la primera disponible if (!selectedVoice.name && filtered.length > 0) { let defaultVoice = filtered.find(v => (v.locale || '').startsWith('es')) || filtered[0]; const price = calculateVoicePricePerMin(defaultVoice); selectedVoice = { name: defaultVoice.name, price: price }; } let html = ''; filtered.slice(0, 50).forEach(voice => { const pricePerMin = calculateVoicePricePerMin(voice); const pricePer1kChars = voice.price_per_1k_chars ? formatPrice(voice.price_per_1k_chars * CREDIT_MULTIPLIER) : '--'; const isSelected = voice.name === selectedVoice.name; const genderIcon = voice.gender === 'male' ? '♂' : '♀'; const voiceNameEscaped = (voice.name || '').replace(/'/g, "\\'"); html += `
${voice.name}
${genderIcon} ${voice.gender || ''} ${voice.locale || ''}
~€${formatPrice(pricePerMin)}
Precio por minuto estimado
Precio real: €${pricePer1kChars}/1K chars
~500 caracteres/minuto de habla
`; }); container.innerHTML = html; updateCostSummary(); } function selectVoice(element, name, price) { // Quitar selección anterior document.querySelectorAll('.voice-item').forEach(el => el.classList.remove('selected')); // Añadir selección element.classList.add('selected'); selectedVoice = { name, price }; updateCostSummary(); } function playVoice(url) { if (!url) { alert('Vista previa no disponible'); return; } if (audioPlayer.src === url && !audioPlayer.paused) { audioPlayer.pause(); } else { audioPlayer.src = url; audioPlayer.play(); } } // ==================== ACTUALIZAR RESUMEN ==================== function updateCostSummary() { // Actualizar precios individuales (ASR es fijo, LLM y TTS son aproximados) document.getElementById('cost-asr').textContent = '€' + formatPrice(selectedASR.price); document.getElementById('cost-llm').textContent = '~€' + formatPrice(selectedLLM.price); document.getElementById('cost-tts').textContent = '~€' + formatPrice(selectedVoice.price); // Calcular total const total = selectedASR.price + selectedLLM.price + selectedVoice.price; document.getElementById('cost-total').textContent = '~€' + formatPrice(total) + '/min'; // Actualizar selecciones document.getElementById('selected-asr').textContent = selectedASR.name; document.getElementById('selected-llm').textContent = selectedLLM.name || 'Selecciona...'; document.getElementById('selected-voice').textContent = selectedVoice.name || 'Selecciona...'; // Actualizar calculadora mensual updateMonthlyCalc(); } function updateMonthlyCalc() { const calls = parseInt(document.getElementById('calc-calls').value) || 100; const duration = parseFloat(document.getElementById('calc-duration').value) || 3; const totalMinutes = calls * duration; const totalPrice = selectedASR.price + selectedLLM.price + selectedVoice.price; const monthlyCost = totalMinutes * totalPrice; document.getElementById('calc-monthly').textContent = '€' + monthlyCost.toFixed(2); } // ==================== UTILIDADES ==================== function formatPrice(price) { if (price === null || price === undefined || !isFinite(price)) return '--'; if (price < 0.01) return price.toFixed(4); if (price < 0.1) return price.toFixed(3); return price.toFixed(2); } // ==================== EVENT LISTENERS ==================== document.addEventListener('DOMContentLoaded', function() { // Cargar datos loadModels(); loadVoices(); // ASR listeners document.querySelectorAll('input[name="asr"]').forEach(input => { input.addEventListener('change', function() { selectedASR = { name: this.dataset.name, price: parseFloat(this.value) }; updateCostSummary(); }); }); // Voice filter listeners document.getElementById('voice-lang-filter').addEventListener('change', renderVoices); document.getElementById('voice-gender-filter').addEventListener('change', renderVoices); document.getElementById('voice-search').addEventListener('input', renderVoices); // Calculator listeners document.getElementById('calc-calls').addEventListener('input', updateMonthlyCalc); document.getElementById('calc-duration').addEventListener('input', updateMonthlyCalc); });