From fccaa3b649f9e49107a8718b24eaf72c6fb7dbb4 Mon Sep 17 00:00:00 2001 From: lizandrogd <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 21 Jan 2026 11:17:36 -0500 Subject: [PATCH] up --- api/get_last_webhook_time.php | 51 +++++++++++++++++++++++++ api/get_user_conversations.php | 4 ++ assets/js/app_simple.js | 39 +++++++++++++++++++ index.php | 2 +- scripts/test_get_conversations.php | 11 ++++++ scripts/test_get_user_conversations.php | 13 +++++++ 6 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 api/get_last_webhook_time.php create mode 100644 api/get_user_conversations.php create mode 100644 scripts/test_get_conversations.php create mode 100644 scripts/test_get_user_conversations.php diff --git a/api/get_last_webhook_time.php b/api/get_last_webhook_time.php new file mode 100644 index 0000000..5e70016 --- /dev/null +++ b/api/get_last_webhook_time.php @@ -0,0 +1,51 @@ +fetch('SELECT created_at, request_body FROM webhook_logs ORDER BY created_at DESC LIMIT 1'); + if (!$row) { + echo json_encode(['success' => true, 'last_webhook' => null]); + exit; + } + + // Intentar extraer teléfonos afectados del request_body (opcional) + $phones = []; + $req = json_decode($row['request_body'], true); + if ($req && isset($req['entry']) && is_array($req['entry'])) { + foreach ($req['entry'] as $entry) { + if (isset($entry['changes']) && is_array($entry['changes'])) { + foreach ($entry['changes'] as $change) { + $val = $change['value'] ?? []; + // buscar en contacts + if (isset($val['contacts']) && is_array($val['contacts'])) { + foreach ($val['contacts'] as $c) { + if (isset($c['wa_id'])) $phones[] = $c['wa_id']; + } + } + // buscar en messages + if (isset($val['messages']) && is_array($val['messages'])) { + foreach ($val['messages'] as $m) { + if (isset($m['from'])) $phones[] = $m['from']; + } + } + } + } + } + } + + $phones = array_values(array_unique($phones)); + + echo json_encode(['success' => true, 'last_webhook' => $row['created_at'], 'phones' => $phones]); + +} catch (Exception $e) { + http_response_code(500); + echo json_encode(['success' => false, 'error' => 'Error interno del servidor']); +} diff --git a/api/get_user_conversations.php b/api/get_user_conversations.php new file mode 100644 index 0000000..87bfaa2 --- /dev/null +++ b/api/get_user_conversations.php @@ -0,0 +1,4 @@ + { + try { + const res = await fetch(this.apiBaseUrl + 'get_last_webhook_time.php'); + if (!res.ok) return; + const data = await res.json(); + if (!data || !data.success) return; + + const last = data.last_webhook; + if (!last) return; + + if (this._lastWebhook && this._lastWebhook === last) return; + + // Hubo un nuevo webhook + this._lastWebhook = last; + this.log('Nuevo webhook detectado, refrescando conversaciones', 'info'); + + // Refrescar lista de conversaciones + await this.loadUsers(); // reload users (optional) + await this.loadconversations(); // reload message-related selects if on send_message + await this.loadConversations(); + + // Si hay un chat abierto, recargar sus mensajes + if (this.currentTab === 'conversations' && this.currentUserId) { + await this.loadconversations(this.currentUserId, false); + } + + } catch (e) { + this.log('Error polling webhook: ' + e.message, 'error'); + } + }, 5000); + } + async apiCallReal(endpoint, options = {}) { const url = `${this.apiBaseUrl}${endpoint}`; diff --git a/index.php b/index.php index a1000fd..f8effc4 100644 --- a/index.php +++ b/index.php @@ -645,7 +645,7 @@ try { - +