This commit is contained in:
lizandrogd
2026-01-21 10:57:02 -05:00
parent f6a62ce360
commit 5e9220590a
7 changed files with 159 additions and 5 deletions
+2
View File
@@ -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'])),
+2
View File
@@ -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',
+16 -5
View File
@@ -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) {
+13
View File
@@ -0,0 +1,13 @@
<?php
require_once __DIR__ . '/../config/config.php';
try {
$db = Database::getInstance();
$row = $db->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";
}
+59
View File
@@ -0,0 +1,59 @@
<?php
// Script para reproducir payload de ejemplo y verificar que media_url se guarde como URL cuando existe
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../api/webhook.php';
$sample = json_decode('{
"object": "whatsapp_business_account",
"entry": [
{
"id": "639871912520412",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "573053370116",
"phone_number_id": "959898150536936"
},
"contacts": [
{
"profile": { "name": "Usite" },
"wa_id": "573168950803"
}
],
"messages": [
{
"from": "573168950803",
"id": "wamid.TEST123",
"timestamp": "1769010028",
"type": "image",
"image": {
"mime_type": "image/jpeg",
"sha256": "uzRfL5tvbqab4eorbpRrPr4Simdfknt0pRxHK5VGqOo=",
"id": "1211305863907885",
"url": "https://lookaside.fbsbx.com/whatsapp_business/attachments/?mid=1211305863907885&source=webhook&ext=1769010330&hash=EXAMPLE"
}
}
]
},
"field": "messages"
}
]
}
]
}', true);
try {
$webhook = new WhatsAppWebhook();
$ok = $webhook->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();
}
+58
View File
@@ -0,0 +1,58 @@
<?php
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../api/webhook.php';
$sample = json_decode('{
"object": "whatsapp_business_account",
"entry": [
{
"id": "639871912520412",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "573053370116",
"phone_number_id": "959898150536936"
},
"contacts": [
{
"profile": { "name": "Usite" },
"wa_id": "573168950803"
}
],
"messages": [
{
"from": "573168950803",
"id": "wamid.TESTURL",
"timestamp": "1769010028",
"type": "image",
"image": {
"mime_type": "image/jpeg",
"sha256": "uzRfL5tvbqab4eorbpRrPr4Simdfknt0pRxHK5VGqOo=",
"id": "1211305863907885",
"url": "https://lookaside.fbsbx.com/whatsapp_business/attachments/?mid=1211305863907885&source=webhook&ext=1769010330&hash=EXAMPLE"
}
}
]
},
"field": "messages"
}
]
}
]
}', true);
try {
$webhook = new WhatsAppWebhook();
$ok = $webhook->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();
}
+9
View File
@@ -0,0 +1,9 @@
<?php
require_once __DIR__ . '/../config/config.php';
try {
$db = Database::getInstance();
$rows = $db->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";
}