diff --git a/api/get_conversation_detail.php b/api/get_conversation_detail.php index ddb0687..4f48e46 100644 --- a/api/get_conversation_detail.php +++ b/api/get_conversation_detail.php @@ -70,6 +70,8 @@ try { 'message_type' => $msg['message_type'], 'content' => $msg['content'] ?? '', 'media_url' => (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'])), diff --git a/api/get_user_messages.php b/api/get_user_messages.php index 2d397f3..d89d1c2 100644 --- a/api/get_user_messages.php +++ b/api/get_user_messages.php @@ -87,6 +87,8 @@ try { 'content' => $msg['content'] ?? '', 'message_id' => $msg['message_id'] ?? null, 'media_url' => (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, 'user_phone' => $msg['user_phone'] ?? null, 'direction' => $msg['direction'] ?? 'incoming', 'message_type' => $msg['message_type'] ?? 'text', diff --git a/api/webhook.php b/api/webhook.php index bffaa18..8531dad 100644 --- a/api/webhook.php +++ b/api/webhook.php @@ -160,18 +160,27 @@ class WhatsAppWebhook { } elseif (isset($message['image'])) { $messageText = $message['image']['caption'] ?? ''; $messageType = 'image'; - $mediaUrl = $message['image']['id'] ?? null; + // Preferir URL directo si viene en el webhook (evita resolver media_id) + $mediaUrl = $message['image']['url'] ?? ($message['image']['id'] ?? null); + $mimeType = $message['image']['mime_type'] ?? null; + $filename = $message['image']['filename'] ?? null; } elseif (isset($message['audio'])) { $messageType = 'audio'; - $mediaUrl = $message['audio']['id'] ?? null; + $mediaUrl = $message['audio']['url'] ?? ($message['audio']['id'] ?? null); + $mimeType = $message['audio']['mime_type'] ?? null; + $filename = $message['audio']['filename'] ?? null; } elseif (isset($message['video'])) { $messageText = $message['video']['caption'] ?? ''; $messageType = 'video'; - $mediaUrl = $message['video']['id'] ?? null; + $mediaUrl = $message['video']['url'] ?? ($message['video']['id'] ?? null); + $mimeType = $message['video']['mime_type'] ?? null; + $filename = $message['video']['filename'] ?? null; } elseif (isset($message['document'])) { $messageText = $message['document']['filename'] ?? ''; $messageType = 'document'; - $mediaUrl = $message['document']['id'] ?? null; + $mediaUrl = $message['document']['url'] ?? ($message['document']['id'] ?? null); + $mimeType = $message['document']['mime_type'] ?? null; + $filename = $message['document']['filename'] ?? null; } // Guardar mensaje en base de datos @@ -182,6 +191,8 @@ class WhatsAppWebhook { 'message_type' => $messageType, 'content' => $messageText, 'media_url' => $mediaUrl, + 'filename' => isset($filename) ? $filename : null, + 'mime_type' => isset($mimeType) ? $mimeType : null, 'status' => 'received', 'is_read' => 0 ]; @@ -307,7 +318,7 @@ class WhatsAppWebhook { if (isset($entry['changes'])) { foreach ($entry['changes'] as $change) { error_log("processPayload: processing change field=" . ($change['field'] ?? '')); - if (($change['field'] ?? '') === 'conversations' && isset($change['value'])) { + if ((($change['field'] ?? '') === 'conversations' || ($change['field'] ?? '') === 'messages' || isset($change['value']['messages'])) && isset($change['value'])) { try { $this->processconversations($change['value']); } catch (Exception $e) { diff --git a/scripts/check_inserted_message.php b/scripts/check_inserted_message.php new file mode 100644 index 0000000..1f937ef --- /dev/null +++ b/scripts/check_inserted_message.php @@ -0,0 +1,13 @@ +fetch('SELECT * FROM conversations WHERE message_id = :mid', ['mid' => 'wamid.TEST123']); + if ($row) { + echo "FOUND:\n" . json_encode($row, JSON_PRETTY_PRINT) . "\n"; + } else { + echo "NOT FOUND\n"; + } +} catch (Throwable $t) { + echo "Error: " . $t->getMessage() . "\n"; +} diff --git a/scripts/replay_sample_webhook.php b/scripts/replay_sample_webhook.php new file mode 100644 index 0000000..cf8bfb0 --- /dev/null +++ b/scripts/replay_sample_webhook.php @@ -0,0 +1,59 @@ +processPayload($sample); + echo "processPayload returned: " . ($ok ? 'true' : 'false') . "\n"; + + // Consultar DB para ver entrada + $db = Database::getInstance(); + $row = $db->fetch("SELECT * FROM conversations WHERE message_id = :mid", ['mid' => 'wamid.TEST123']); + echo json_encode($row, JSON_PRETTY_PRINT); +} catch (Throwable $t) { + echo "Error: " . $t->getMessage() . "\n"; + echo $t->getTraceAsString(); +} diff --git a/scripts/replay_sample_webhook_url.php b/scripts/replay_sample_webhook_url.php new file mode 100644 index 0000000..a920d1f --- /dev/null +++ b/scripts/replay_sample_webhook_url.php @@ -0,0 +1,58 @@ +processPayload($sample); + echo "processPayload returned: " . ($ok ? 'true' : 'false') . "\n"; + + $db = Database::getInstance(); + $row = $db->fetchAll('SELECT * FROM conversations WHERE message_id LIKE :mid', ['mid' => '%TESTURL%']); + echo "Rows matching TESTURL: " . count($row) . "\n"; + echo json_encode($row, JSON_PRETTY_PRINT) . "\n"; +} catch (Throwable $t) { + echo "Error: " . $t->getMessage() . "\n"; + echo $t->getTraceAsString(); +} diff --git a/scripts/show_recent_conversations.php b/scripts/show_recent_conversations.php new file mode 100644 index 0000000..a3082ff --- /dev/null +++ b/scripts/show_recent_conversations.php @@ -0,0 +1,9 @@ +fetchAll('SELECT * FROM conversations ORDER BY created_at DESC LIMIT 5'); + echo json_encode($rows, JSON_PRETTY_PRINT); +} catch (Throwable $t) { + echo "Error: " . $t->getMessage() . "\n"; +}