diff --git a/api/get_conversation_detail.php b/api/get_conversation_detail.php index 77420af..6d64a35 100644 --- a/api/get_conversation_detail.php +++ b/api/get_conversation_detail.php @@ -63,25 +63,54 @@ try { // Formatear mensajes $conversations = array_map(function($msg) { - return [ - 'id' => intval($msg['id']), - 'message_id' => $msg['message_id'] ?? '', - 'direction' => $msg['direction'], - 'message_type' => $msg['message_type'], - 'content' => $msg['content'] ?? '', - 'media_url' => null, - 'local_file' => $msg['local_file'] ?? null, - 'local_thumb' => $msg['local_thumb'] ?? null, - 'media_url_external' => (isset($msg['media_url']) && $msg['media_url']) ? (preg_match('#^https?://#i', $msg['media_url']) ? $msg['media_url'] : ("api/get_media.php?id=" . urlencode($msg['media_url']))) : null, - 'filename' => $msg['filename'] ?? null, - 'mime_type' => $msg['mime_type'] ?? null, - 'status' => $msg['status'] ?? 'sent', - 'created_at' => $msg['created_at'], - 'time' => date('H:i', strtotime($msg['created_at'])), - 'date' => date('d/m/Y', strtotime($msg['created_at'])) - ]; - }, $conversations); - + // Build external URL if available (media id -> api/get_media proxy) + $external = (isset($msg['media_url']) && $msg['media_url']) ? (preg_match('#^https?://#i', $msg['media_url']) ? $msg['media_url'] : ("api/get_media.php?id=" . urlencode($msg['media_url']))) : null; + + // Fallback: if no external URL but content is JSON with link, extract it + $contentStr = $msg['content'] ?? ''; + if (!$external && $contentStr) { + $j = json_decode($contentStr, true); + if (is_array($j)) { + // Look for common shapes: image.link, image.url, document.link, audio.link + $candidates = []; + foreach (['image','document','audio','video'] as $k) { + if (isset($j[$k]) && is_array($j[$k])) { + if (!empty($j[$k]['link'])) $candidates[] = $j[$k]['link']; + if (!empty($j[$k]['url'])) $candidates[] = $j[$k]['url']; + if (!empty($j[$k]['id'])) $candidates[] = $j[$k]['id']; + } + } + // also top-level 'link' + if (!empty($j['link'])) $candidates[] = $j['link']; + // first valid candidate wins + foreach ($candidates as $cand) { + if ($cand) { + // if looks like id or url + $external = preg_match('#^https?://#i', $cand) ? $cand : (strpos($cand, 'http') === false ? "api/get_media.php?id=" . urlencode($cand) : $cand); + break; + } + } + } + } + + return [ + 'id' => intval($msg['id']), + 'message_id' => $msg['message_id'] ?? '', + 'direction' => $msg['direction'], + 'message_type' => $msg['message_type'], + 'content' => $msg['content'] ?? '', + 'media_url' => null, + 'local_file' => $msg['local_file'] ?? null, + 'local_thumb' => $msg['local_thumb'] ?? null, + 'media_url_external' => $external, + 'filename' => $msg['filename'] ?? null, + 'mime_type' => $msg['mime_type'] ?? null, + 'status' => $msg['status'] ?? 'sent', + 'created_at' => $msg['created_at'], + 'time' => date('H:i', strtotime($msg['created_at'])), + 'date' => date('d/m/Y', strtotime($msg['created_at'])) + ]; + }, $conversations); // Marcar mensajes como leídos $db->query( "UPDATE conversations SET status = 'read' WHERE user_id = ? AND direction = 'incoming' AND status != 'read'", diff --git a/api/get_user_messages.php b/api/get_user_messages.php index 013adda..9b96216 100644 --- a/api/get_user_messages.php +++ b/api/get_user_messages.php @@ -81,6 +81,22 @@ try { // Formatear fechas y limpiar datos $conversations = array_map(function($msg) { + $external = (isset($msg['media_url']) && $msg['media_url']) ? (preg_match('#^https?://#i', $msg['media_url']) ? $msg['media_url'] : ("api/get_media.php?id=" . urlencode($msg['media_url']))) : null; + $contentStr = $msg['content'] ?? ''; + if (!$external && $contentStr) { + $j = json_decode($contentStr, true); + if (is_array($j)) { + foreach (['image','document','audio','video'] as $k) { + if (isset($j[$k]) && is_array($j[$k])) { + if (!empty($j[$k]['link'])) { $external = $j[$k]['link']; break; } + if (!empty($j[$k]['url'])) { $external = $j[$k]['url']; break; } + if (!empty($j[$k]['id'])) { $external = "api/get_media.php?id=" . urlencode($j[$k]['id']); break; } + } + } + if (!$external && !empty($j['link'])) $external = $j['link']; + } + } + return [ 'id' => intval($msg['id']), 'user_id' => intval($msg['user_id']), @@ -89,7 +105,7 @@ try { 'media_url' => null, 'local_file' => $msg['local_file'] ?? null, 'local_thumb' => $msg['local_thumb'] ?? null, - 'media_url_external' => (isset($msg['media_url']) && $msg['media_url']) ? (preg_match('#^https?://#i', $msg['media_url']) ? $msg['media_url'] : ("api/get_media.php?id=" . urlencode($msg['media_url']))) : null, + 'media_url_external' => $external, 'filename' => $msg['filename'] ?? null, 'mime_type' => $msg['mime_type'] ?? null, 'user_phone' => $msg['user_phone'] ?? null, diff --git a/conversations.php b/conversations.php index 57bc31a..15c0f3f 100644 --- a/conversations.php +++ b/conversations.php @@ -1378,7 +1378,9 @@ } return `
- Imagen + + Imagen +
${caption ? `
${caption}
` : ''} `; @@ -1453,12 +1455,25 @@ docUrl = `/api/version/media-url.php?url=${encodeURIComponent(msg.media_url_external)}&download=1`; } } + if (!docUrl) { + return ` +
+ +
+
${caption || 'Documento'}
+
No disponible para descargar
+
+
+ `; + } return ` -
+
${caption || 'Documento'}
-
Haz clic para descargar
+
+ Descargar +
diff --git a/index.php b/index.php index f8effc4..722eaab 100644 --- a/index.php +++ b/index.php @@ -645,7 +645,7 @@ try { - +