From 51f1b04293c7bb8a8975ff3f6cc7e2b97fc420ef Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Sat, 21 Feb 2026 11:45:32 -0500 Subject: [PATCH] up --- api/send_media_message_debug.log | 18 ++++++++++++++++++ conversations.php | 25 +++++++++++++------------ services/WhatsAppService.php | 6 +++++- 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/api/send_media_message_debug.log b/api/send_media_message_debug.log index a2e5d82..66856b2 100644 --- a/api/send_media_message_debug.log +++ b/api/send_media_message_debug.log @@ -335,3 +335,21 @@ [2026-02-21 11:19:26] Send media by id response: {"messaging_product":"whatsapp","contacts":[{"input":"573022548060","wa_id":"573022548060"}],"messages":[{"id":"wamid.HBgMNTczMDIyNTQ4MDYwFQIAERgSNEI4QkZFQjk2QjEyNkQ4RkMwAA=="}]} [2026-02-21 11:19:26] WhatsApp response (successful): {"messaging_product":"whatsapp","contacts":[{"input":"573022548060","wa_id":"573022548060"}],"messages":[{"id":"wamid.HBgMNTczMDIyNTQ4MDYwFQIAERgSNEI4QkZFQjk2QjEyNkQ4RkMwAA=="}]} [2026-02-21 11:19:26] Saving to DB - content: image.png, media_url: 25968821909466059, local_file: uploads/media_6999db0b6b3f01.27857143.png, local_thumb: uploads/media_6999db0b6b3f01.27857143.png +[2026-02-21 11:44:57] Raw input: {"recipient":"573022548060","media_url":"https://bot.u-s.app/uploads/media_6999e109e773c4.27559683.png","media_type":"image","caption":null,"filename":"image.png","is_voice":false} +[2026-02-21 11:44:57] Input decoded: {"recipient":"573022548060","media_url":"https:\/\/bot.u-s.app\/uploads\/media_6999e109e773c4.27559683.png","media_type":"image","caption":null,"filename":"image.png","is_voice":false} +[2026-02-21 11:44:57] is_voice: false +[2026-02-21 11:44:57] Local file: /var/www/html/api/../uploads/media_6999e109e773c4.27559683.png exists=yes size=959684 +[2026-02-21 11:44:59] Upload result: {"id":"1263460085721419"} +[2026-02-21 11:44:59] Media ID obtained: 1263460085721419 +[2026-02-21 11:44:59] Send media by id response: {"messaging_product":"whatsapp","contacts":[{"input":"573022548060","wa_id":"573022548060"}],"messages":[{"id":"wamid.HBgMNTczMDIyNTQ4MDYwFQIAERgSMDZBMUY3QjAwNDdEMzc4OEQ5AA=="}]} +[2026-02-21 11:44:59] WhatsApp response (successful): {"messaging_product":"whatsapp","contacts":[{"input":"573022548060","wa_id":"573022548060"}],"messages":[{"id":"wamid.HBgMNTczMDIyNTQ4MDYwFQIAERgSMDZBMUY3QjAwNDdEMzc4OEQ5AA=="}]} +[2026-02-21 11:44:59] Saving to DB - content: image.png, media_url: 1263460085721419, local_file: uploads/media_6999e109e773c4.27559683.png, local_thumb: uploads/media_6999e109e773c4.27559683.png +[2026-02-21 11:45:15] Raw input: {"recipient":"573022548060","media_url":"https://bot.u-s.app/uploads/media_6999e11b12d2b8.79834878.png","media_type":"image","caption":null,"filename":"image.png","is_voice":false} +[2026-02-21 11:45:15] Input decoded: {"recipient":"573022548060","media_url":"https:\/\/bot.u-s.app\/uploads\/media_6999e11b12d2b8.79834878.png","media_type":"image","caption":null,"filename":"image.png","is_voice":false} +[2026-02-21 11:45:15] is_voice: false +[2026-02-21 11:45:15] Local file: /var/www/html/api/../uploads/media_6999e11b12d2b8.79834878.png exists=yes size=959684 +[2026-02-21 11:45:16] Upload result: {"id":"883897194529314"} +[2026-02-21 11:45:16] Media ID obtained: 883897194529314 +[2026-02-21 11:45:17] Send media by id response: {"messaging_product":"whatsapp","contacts":[{"input":"573022548060","wa_id":"573022548060"}],"messages":[{"id":"wamid.HBgMNTczMDIyNTQ4MDYwFQIAERgSMzAxOUE0NEQ4QjZDN0E1MDUzAA=="}]} +[2026-02-21 11:45:17] WhatsApp response (successful): {"messaging_product":"whatsapp","contacts":[{"input":"573022548060","wa_id":"573022548060"}],"messages":[{"id":"wamid.HBgMNTczMDIyNTQ4MDYwFQIAERgSMzAxOUE0NEQ4QjZDN0E1MDUzAA=="}]} +[2026-02-21 11:45:17] Saving to DB - content: image.png, media_url: 883897194529314, local_file: uploads/media_6999e11b12d2b8.79834878.png, local_thumb: uploads/media_6999e11b12d2b8.79834878.png diff --git a/conversations.php b/conversations.php index 02403c7..c339622 100644 --- a/conversations.php +++ b/conversations.php @@ -2547,6 +2547,7 @@ if (!isset($_SESSION['user_id'])) { if (append) { this.conversations = this.conversations.concat(items); + this._justLoadedMore = true; // evita que renderConversations baje el scroll y dispare otro loadMore } else { this.conversations = items; } @@ -2688,29 +2689,29 @@ if (!isset($_SESSION['user_id'])) { this._prevConversations[c.user_id] = { unread_count: c.unread_count }; }); - // Preserve sidebar scroll position as best-effort: snapshot and restore using delta + // Preservar posición visual del scroll del sidebar try { - const prevScrollTop = container.scrollTop; + const prevScrollTop = container.scrollTop; const prevScrollHeight = container.scrollHeight; - const wasAtTop = prevScrollTop <= 4; + const wasAtTop = prevScrollTop <= 4; + // Flag: si veníamos de un loadMore (items appended al fondo) NO compensar + const wasLoadingMore = !!this._justLoadedMore; + this._justLoadedMore = false; container.innerHTML = html; void container.offsetHeight; // forzar repaint - const newScrollHeight = container.scrollHeight; - const scrollDelta = newScrollHeight - prevScrollHeight; - if (wasAtTop) { container.scrollTop = 0; + } else if (wasLoadingMore) { + // Items se agregaron al FONDO — mantener posición exacta sin compensar + // (compensar causaría que el scroll baje y disparara otro loadMore) + container.scrollTop = prevScrollTop; } else { - // Restaurar posición visual exacta compensando cambio de altura del contenido + // Re-render normal (SSE update): compensar cambio de altura + const scrollDelta = container.scrollHeight - prevScrollHeight; container.scrollTop = Math.max(0, prevScrollTop + scrollDelta); - // NOTA: NO llamar scrollIntoView aquí — se ejecuta en cada update SSE - // y causa que el scroll baje solo continuamente hasta el fondo. - // scrollIntoView solo se llama manualmente al abrir una conversación. } - - console.log('✅ renderConversations COMPLETADO'); } catch (e) { console.warn('renderConversations: scroll preservation failed', e); container.innerHTML = html; diff --git a/services/WhatsAppService.php b/services/WhatsAppService.php index d5e5e1f..0909597 100644 --- a/services/WhatsAppService.php +++ b/services/WhatsAppService.php @@ -497,7 +497,10 @@ class WhatsAppService 'file' => new CURLFile($filePath, $mimeType), 'type' => $mimeType, ], - CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $this->token], + CURLOPT_HTTPHEADER => [ + 'Authorization: Bearer ' . $this->token, + 'Expect:', // deshabilitar 100-Continue: evita errno 55 (Send failure) con Meta + ], CURLOPT_TIMEOUT => 300, CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, @@ -624,6 +627,7 @@ class WhatsAppService '-w', '%{http_code}', '-X', 'POST', '-H', 'Authorization: Bearer ' . $this->token, + '-H', 'Expect:', // deshabilitar 100-Continue: evita errno 55 con Meta API '-F', 'messaging_product=whatsapp', '-F', 'type=' . $mimeType, '-F', 'file=@' . $filePath . ';type=' . $mimeType,