fix: corregir reproducción de audio en chat turnero

- URL absoluta para local_file y media_url_external (igual que conversations.php)
- Múltiples <source> con MIME types (ogg, mpeg, wav, webm) para compatibilidad
- onerror handler cuando el archivo no está disponible
- Fallback visible cuando mediaSrc es null ("Audio pendiente de descarga")

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-03 17:50:43 -05:00
co-authored by Claude Sonnet 4.6
parent 53dc492b5e
commit 282c372de3
+15 -3
View File
@@ -752,7 +752,9 @@ function buildBubble(msg) {
div.dataset.msgId = msg.id;
div.dataset.waId = msg.message_id || '';
const mediaSrc = msg.local_file ? ('../' + msg.local_file) : (msg.media_url_external || null);
const _base = window.location.origin;
const _toAbs = p => p ? (p.startsWith('http') ? p : `${_base}/${p.replace(/^\//, '')}`) : null;
const mediaSrc = msg.local_file ? _toAbs(msg.local_file) : (msg.media_url_external ? _toAbs(msg.media_url_external) : null);
let content = '';
if (msg.message_type === 'image' && mediaSrc) {
@@ -762,8 +764,18 @@ function buildBubble(msg) {
} else if (msg.message_type === 'video' && mediaSrc) {
content = `<video class="msg-video" src="${escHtml(mediaSrc)}" controls preload="metadata"></video>`;
if (msg.content) content += `<div style="font-size:.82rem;margin-top:2px">${escHtml(msg.content)}</div>`;
} else if (msg.message_type === 'audio' && mediaSrc) {
content = `<audio class="msg-audio" src="${escHtml(mediaSrc)}" controls preload="metadata"></audio>`;
} else if (msg.message_type === 'audio') {
if (mediaSrc) {
content = `<audio class="msg-audio" controls preload="metadata"
onerror="this.outerHTML='<div style=\\'font-size:.78rem;color:#e53e3e;padding:4px 0\\'><i class=\\'fas fa-exclamation-circle\\'></i> Audio no disponible</div>'">
<source src="${escHtml(mediaSrc)}" type="audio/ogg">
<source src="${escHtml(mediaSrc)}" type="audio/mpeg">
<source src="${escHtml(mediaSrc)}" type="audio/wav">
<source src="${escHtml(mediaSrc)}" type="audio/webm">
</audio>`;
} else {
content = `<div style="font-size:.78rem;color:#aaa;padding:4px 0"><i class="fas fa-microphone-slash"></i> Audio pendiente de descarga</div>`;
}
} else if (msg.message_type === 'document' && mediaSrc) {
const icon = (msg.mime_type || '').includes('pdf') ? 'fa-file-pdf' :
(msg.mime_type || '').includes('spreadsheet') || (msg.mime_type || '').includes('excel') ? 'fa-file-excel' :