up
This commit is contained in:
+26
-2
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user