This commit is contained in:
lizandrogd
2026-01-21 11:58:17 -05:00
parent 932820d02d
commit c7d0b8b70c
11 changed files with 250 additions and 3 deletions
+26 -2
View File
@@ -194,12 +194,18 @@ 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
];
// Añadir campos opcionales solo si existen para evitar errores en esquemas antiguos
if (isset($filename) && $filename !== null) {
$saveData['filename'] = $filename;
}
if (isset($mimeType) && $mimeType !== null) {
$saveData['mime_type'] = $mimeType;
}
// Si el mensaje incluye contexto (es respuesta a otro mensaje)
if (isset($message['context']) && isset($message['context']['id'])) {
$saveData['reply_to_message_id'] = $message['context']['id'];
@@ -210,6 +216,8 @@ class WhatsAppWebhook {
$saveData = array_merge($saveData, $extraFields);
}
// Filtrar campos según columnas existentes para evitar errores en esquemas antiguos
$saveData = $this->filterColumns('conversations', $saveData);
$this->saveMessage($saveData);
// Crear notificación para UI (nuevo mensaje entrante)
@@ -290,6 +298,22 @@ class WhatsAppWebhook {
private function saveMessage($messageData) {
return $this->db->insert('conversations', $messageData);
}
/**
* Filtrar los datos para dejar solo las columnas que existen en la tabla
* Evita errores cuando la BD está en un esquema más antiguo
*/
private function filterColumns($table, array $data) {
static $columnsCache = [];
if (!isset($columnsCache[$table])) {
$cols = $this->db->fetchAll("SHOW COLUMNS FROM {$table}");
$columnsCache[$table] = array_map(function($c){ return $c['Field']; }, $cols);
}
$allowed = $columnsCache[$table];
return array_filter($data, function($v, $k) use ($allowed) {
return in_array($k, $allowed, true);
}, ARRAY_FILTER_USE_BOTH);
}
private function logWebhook($requestBody, $responseBody, $statusCode) {
if (ENABLE_LOGGING) {