This commit is contained in:
lizandrogd
2026-01-21 12:33:11 -05:00
parent b6ef6179b8
commit 3f6e723fac
6 changed files with 84 additions and 74 deletions
+5 -73
View File
@@ -165,54 +165,7 @@ class WhatsAppWebhook {
$mimeType = $message['image']['mime_type'] ?? null;
$filename = $message['image']['filename'] ?? null;
// Intentar descargar y almacenar imagen localmente
try {
$ms = new MediaService();
$res = null;
if ($mediaUrl && preg_match('#^https?://#i', $mediaUrl)) {
// Si venía URL directa, descargar desde URL
$content = $ms->downloadUrl($mediaUrl);
if ($content !== false) {
$subdir = date('Y/m');
$dir = 'uploads/media/' . $subdir;
if (!is_dir(__DIR__ . '/../' . $dir)) mkdir(__DIR__ . '/../' . $dir, 0755, true);
$ext = $ms->extensionFromMime($mimeType) ?: pathinfo(parse_url($mediaUrl, PHP_URL_PATH), PATHINFO_EXTENSION) ?: 'jpg';
$fname = uniqid('m_') . '.' . $ext;
$path = __DIR__ . '/../' . $dir . '/' . $fname;
file_put_contents($path, $content);
$res = ['local_file' => $dir . '/' . $fname];
// crear thumb
if ($ms->isImageMime($mimeType)) {
$thumbPath = __DIR__ . '/../' . $dir . '/thumb_' . $fname . '.jpg';
if ($ms->createThumbnail($path, $thumbPath)) {
$res['local_thumb'] = $dir . '/thumb_' . $fname . '.jpg';
}
}
}
} elseif ($mediaUrl) {
// mediaUrl probablemente es media id -> usar fetchAndStoreFromGraph
$res = $ms->fetchAndStoreFromGraph($mediaUrl, date('Y/m'));
}
if ($res) {
$localFile = $res['local_file'] ?? null;
$localThumb = $res['local_thumb'] ?? null;
}
} catch (Exception $e) {
error_log('Media download failed: ' . $e->getMessage());
// Encolar para reintento si tenemos un media id (no descargar documentos aquí)
try {
if ($mediaUrl && !preg_match('#^https?://#i', $mediaUrl)) {
$this->db->insert('media_queue', [
'media_id' => $mediaUrl,
'subdir' => date('Y/m'),
'status' => 'pending',
'created_at' => date('Y-m-d H:i:s')
]);
}
} catch (Exception $e2) {
error_log('Failed to enqueue media download: ' . $e2->getMessage());
}
}
} elseif (isset($message['audio'])) {
$messageType = 'audio';
@@ -220,18 +173,7 @@ class WhatsAppWebhook {
$mimeType = $message['audio']['mime_type'] ?? null;
$filename = $message['audio']['filename'] ?? null;
// Descargar audio y guardar local (opcional)
try {
$ms = new MediaService();
if ($mediaUrl && !preg_match('#^https?://#i', $mediaUrl)) {
$res = $ms->fetchAndStoreFromGraph($mediaUrl, date('Y/m'));
if ($res) {
$localFile = $res['local_file'] ?? null;
}
}
} catch (Exception $e) {
error_log('Audio download failed: ' . $e->getMessage());
}
} elseif (isset($message['video'])) {
$messageText = $message['video']['caption'] ?? '';
@@ -240,18 +182,7 @@ class WhatsAppWebhook {
$mimeType = $message['video']['mime_type'] ?? null;
$filename = $message['video']['filename'] ?? null;
// Descargar video y guardar local (opcional)
try {
$ms = new MediaService();
if ($mediaUrl && !preg_match('#^https?://#i', $mediaUrl)) {
$res = $ms->fetchAndStoreFromGraph($mediaUrl, date('Y/m'));
if ($res) {
$localFile = $res['local_file'] ?? null;
}
}
} catch (Exception $e) {
error_log('Video download failed: ' . $e->getMessage());
}
} elseif (isset($message['document'])) {
$messageText = $message['document']['filename'] ?? '';
@@ -305,7 +236,8 @@ class WhatsAppWebhook {
// Filtrar campos según columnas existentes para evitar errores en esquemas antiguos
$saveData = $this->filterColumns('conversations', $saveData);
$this->saveMessage($saveData);
// Guardar mensaje y conservar el id de la conversación para posibles encolamientos
$conversationId = $this->saveMessage($saveData);
// Crear notificación para UI (nuevo mensaje entrante)
try {