up
This commit is contained in:
@@ -70,6 +70,8 @@ try {
|
|||||||
'message_type' => $msg['message_type'],
|
'message_type' => $msg['message_type'],
|
||||||
'content' => $msg['content'] ?? '',
|
'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,
|
'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',
|
'status' => $msg['status'] ?? 'sent',
|
||||||
'created_at' => $msg['created_at'],
|
'created_at' => $msg['created_at'],
|
||||||
'time' => date('H:i', strtotime($msg['created_at'])),
|
'time' => date('H:i', strtotime($msg['created_at'])),
|
||||||
|
|||||||
@@ -87,6 +87,8 @@ try {
|
|||||||
'content' => $msg['content'] ?? '',
|
'content' => $msg['content'] ?? '',
|
||||||
'message_id' => $msg['message_id'] ?? null,
|
'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,
|
'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,
|
'user_phone' => $msg['user_phone'] ?? null,
|
||||||
'direction' => $msg['direction'] ?? 'incoming',
|
'direction' => $msg['direction'] ?? 'incoming',
|
||||||
'message_type' => $msg['message_type'] ?? 'text',
|
'message_type' => $msg['message_type'] ?? 'text',
|
||||||
|
|||||||
+16
-5
@@ -160,18 +160,27 @@ class WhatsAppWebhook {
|
|||||||
} elseif (isset($message['image'])) {
|
} elseif (isset($message['image'])) {
|
||||||
$messageText = $message['image']['caption'] ?? '';
|
$messageText = $message['image']['caption'] ?? '';
|
||||||
$messageType = 'image';
|
$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'])) {
|
} elseif (isset($message['audio'])) {
|
||||||
$messageType = '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'])) {
|
} elseif (isset($message['video'])) {
|
||||||
$messageText = $message['video']['caption'] ?? '';
|
$messageText = $message['video']['caption'] ?? '';
|
||||||
$messageType = 'video';
|
$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'])) {
|
} elseif (isset($message['document'])) {
|
||||||
$messageText = $message['document']['filename'] ?? '';
|
$messageText = $message['document']['filename'] ?? '';
|
||||||
$messageType = 'document';
|
$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
|
// Guardar mensaje en base de datos
|
||||||
@@ -182,6 +191,8 @@ class WhatsAppWebhook {
|
|||||||
'message_type' => $messageType,
|
'message_type' => $messageType,
|
||||||
'content' => $messageText,
|
'content' => $messageText,
|
||||||
'media_url' => $mediaUrl,
|
'media_url' => $mediaUrl,
|
||||||
|
'filename' => isset($filename) ? $filename : null,
|
||||||
|
'mime_type' => isset($mimeType) ? $mimeType : null,
|
||||||
'status' => 'received',
|
'status' => 'received',
|
||||||
'is_read' => 0
|
'is_read' => 0
|
||||||
];
|
];
|
||||||
@@ -307,7 +318,7 @@ class WhatsAppWebhook {
|
|||||||
if (isset($entry['changes'])) {
|
if (isset($entry['changes'])) {
|
||||||
foreach ($entry['changes'] as $change) {
|
foreach ($entry['changes'] as $change) {
|
||||||
error_log("processPayload: processing change field=" . ($change['field'] ?? ''));
|
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 {
|
try {
|
||||||
$this->processconversations($change['value']);
|
$this->processconversations($change['value']);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
|||||||
@@ -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";
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -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";
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user