diff --git a/modules/turnero/api/sesion_turno.php b/modules/turnero/api/sesion_turno.php index 71a1319..353e44a 100644 --- a/modules/turnero/api/sesion_turno.php +++ b/modules/turnero/api/sesion_turno.php @@ -80,15 +80,19 @@ if ($accion === 'reabrir') { // ── CONFIG WHATSAPP ────────────────────────────────────────── if ($accion === 'config_wa') { - $template = trim($input['template'] ?? ''); - $lang = trim($input['lang'] ?? 'es_CO'); - $waKiosko = (int)($input['wa_kiosko'] ?? 0); - $waConsent = (int)($input['wa_consent'] ?? 0); + $template = trim($input['template'] ?? ''); + $templateMuestra = trim($input['template_muestra'] ?? ''); + $lang = trim($input['lang'] ?? 'es_CO'); + $waKiosko = (int)($input['wa_kiosko'] ?? 0); + $waConsent = (int)($input['wa_consent'] ?? 0); if ($template === '') jsonError('El nombre de plantilla es requerido'); if (!preg_match('/^[a-z0-9_]{1,64}$/i', $template)) { jsonError('Nombre de plantilla inválido — solo letras, números y guiones bajos'); } + if ($templateMuestra !== '' && !preg_match('/^[a-z0-9_]{1,64}$/i', $templateMuestra)) { + jsonError('Nombre de plantilla muestra inválido — solo letras, números y guiones bajos'); + } if (!preg_match('/^[a-z]{2}_[A-Z]{2}$/i', $lang)) { jsonError('Código de idioma inválido (formato: es_CO)'); } @@ -99,6 +103,7 @@ if ($accion === 'config_wa') { ON DUPLICATE KEY UPDATE valor = VALUES(valor)' ); $upsert->execute(['turnero_wa_template', $template]); + $upsert->execute(['turnero_wa_template_muestra', $templateMuestra]); $upsert->execute(['turnero_wa_lang', $lang]); $upsert->execute(['turnero_wa_kiosko_enabled', (string)$waKiosko]); $upsert->execute(['turnero_wa_consent_enabled', (string)$waConsent]); diff --git a/modules/turnero/views/configuracion.php b/modules/turnero/views/configuracion.php index 9039202..26f20e6 100644 --- a/modules/turnero/views/configuracion.php +++ b/modules/turnero/views/configuracion.php @@ -760,12 +760,19 @@ $tab = $_GET['tab'] ?? 'lugares';
{{1}}) para el enlace de firma del consentimiento.
+ La plantilla con consentimiento debe contener una variable de URL
+ ({{1}}) para el enlace de firma.
El sistema usará texto plano como fallback si la plantilla falla.