fix: evitar doble saludo y URL duplicada en mensaje de términos

- sendTermsMessage: solo agrega PDF al final si la URL no está ya en el mensaje
- sendTermsMessage: marca welcome_sent_at=now() junto con terms_pending=1
  para evitar race condition donde un segundo webhook concurrente cae en
  isNewUser() y envía la bienvenida mientras los términos ya fueron enviados
This commit is contained in:
Lizandro Guarnizo
2026-03-13 19:10:43 -05:00
parent 46a9d97a07
commit 0e9c6935d8
+5 -3
View File
@@ -503,7 +503,7 @@ class BotService {
if (!$msg) return;
// Adjuntar URL del documento solo si es una URL pública (no localhost)
// Adjuntar URL del documento solo si es una URL pública y no está ya incluida en el mensaje
if (!empty($terms['documento_url'])) {
$docUrl = $terms['documento_url'];
$isLocal = (
@@ -511,7 +511,7 @@ class BotService {
strpos($docUrl, '127.0.0.1') !== false ||
preg_match('/https?:\/\/\d+\.\d+\.\d+\.\d+:\d+/', $docUrl)
);
if (!$isLocal) {
if (!$isLocal && strpos($msg, $docUrl) === false) {
$msg .= "\n\n📄 Documento: " . $docUrl;
}
}
@@ -519,10 +519,12 @@ class BotService {
$this->whatsappService->sendTextMessage($phoneNumber, $msg);
// Marcar usuario como "esperando respuesta de términos"
// También marcamos welcome_sent_at para evitar que una llamada concurrente
// al webhook envíe el mensaje de bienvenida por race condition.
try {
$this->db->update(
'users',
['terms_pending' => 1],
['terms_pending' => 1, 'welcome_sent_at' => date('Y-m-d H:i:s')],
'id = :id',
['id' => $user['id']]
);