109 lines
4.8 KiB
PHP
109 lines
4.8 KiB
PHP
<?php
|
|
if (session_status() === PHP_SESSION_NONE) {
|
|
session_start();
|
|
}
|
|
|
|
// Forzamos que si hay cualquier mínimo detalle, lo podamos ver
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 1);
|
|
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
// Incluimos tu conexión centralizada a la base de datos
|
|
require_once 'db.php';
|
|
|
|
$respuesta = "";
|
|
$accion = "ninguna";
|
|
|
|
if (isset($_POST['mensaje'])) {
|
|
$mensaje_usuario = trim($_POST['mensaje']);
|
|
$mensaje_usuario = mb_strtolower($mensaje_usuario, 'UTF-8');
|
|
|
|
$query = "SELECT respuesta, keywords FROM bot_preguntas";
|
|
$result = $conexion->query($query);
|
|
|
|
$encontrado = false;
|
|
|
|
if ($result && $result->num_rows > 0) {
|
|
while ($row = $result->fetch_assoc()) {
|
|
$keywords = explode(',', $row['keywords']);
|
|
|
|
foreach ($keywords as $keyword) {
|
|
$keyword_limpia = trim(mb_strtolower($keyword, 'UTF-8'));
|
|
|
|
if (!empty($keyword_limpia) && strpos($mensaje_usuario, $keyword_limpia) !== false) {
|
|
$respuesta = $row['respuesta'];
|
|
$encontrado = true;
|
|
|
|
if (in_array($keyword_limpia, ['ubicacion', 'ubicación', 'direccion', 'dirección', 'donde', 'dónde'])) {
|
|
$accion = "abrir_mapa";
|
|
} elseif (in_array($keyword_limpia, ['horario', 'horarios'])) {
|
|
$accion = "abrir_horarios";
|
|
} elseif (in_array($keyword_limpia, ['novedad', 'novedades'])) {
|
|
$accion = "abrir_novedades";
|
|
} elseif (in_array($keyword_limpia, ['telefono', 'teléfono', 'llamar', 'numero', 'número'])) {
|
|
$accion = "mostrar_telefonos";
|
|
} elseif ($keyword_limpia === 'contacto') {
|
|
$accion = "mostrar_contacto";
|
|
} elseif (in_array($keyword_limpia, ['redes', 'instagram'])) {
|
|
$accion = "mostrar_redes";
|
|
} elseif (in_array($keyword_limpia, ['pago', 'pagos', 'transferencia', 'efectivo'])) {
|
|
$accion = "mostrar_pagos";
|
|
} elseif (in_array($keyword_limpia, ['promo', 'promos', 'promocion', 'promoción', 'promociones', 'oferta', 'ofertas', 'menu', 'menú'])) {
|
|
// ▼ Promos: consulta dinámica a la BD (últimas 24hs)
|
|
$accion = "ninguna";
|
|
$res_promos = $conexion->query(
|
|
"SELECT mensaje FROM promociones
|
|
WHERE fecha_publicacion >= NOW() - INTERVAL 24 HOUR
|
|
ORDER BY fecha_publicacion DESC
|
|
LIMIT 5"
|
|
);
|
|
if ($res_promos && $res_promos->num_rows > 0) {
|
|
$lista = [];
|
|
while ($p = $res_promos->fetch_assoc()) {
|
|
$lista[] = "• " . $p['mensaje'];
|
|
}
|
|
$respuesta = "📢 <b>¡Promociones vigentes!</b><br>" . implode("<br>", $lista);
|
|
} else {
|
|
$respuesta = "Por el momento no hay promociones activas. ¡Volvé a consultar más tarde! 😊";
|
|
}
|
|
}
|
|
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 2. Si no se encontró coincidencia, armamos la respuesta dinámica desde la BD
|
|
if (!$encontrado) {
|
|
// Texto base limpio directamente definido sin necesidad de consultar otra tabla
|
|
$texto_base = "No entendí tu consulta. Podés preguntarme sobre:";
|
|
|
|
// ▼ CONSULTA DINÁMICA: Traemos todas las categorías cargadas que no estén vacías
|
|
$res_cats = $conexion->query("SELECT DISTINCT categoria FROM bot_preguntas WHERE categoria IS NOT NULL AND categoria != '' ORDER BY categoria ASC");
|
|
|
|
if ($res_cats && $res_cats->num_rows > 0) {
|
|
$cats_lista = [];
|
|
while ($c = $res_cats->fetch_assoc()) {
|
|
// Las agregamos formateadas limpiamente con un puntito estético
|
|
$cats_lista[] = "• " . htmlspecialchars($c['categoria']);
|
|
}
|
|
// Unimos todo el array con saltos de línea <br>
|
|
$respuesta = $texto_base . "<br>" . implode("<br>", $cats_lista);
|
|
} else {
|
|
// Fallback secundario estático por si la tabla llegara a estar completamente vacía
|
|
$respuesta = $texto_base . "<br>• promo<br>• horarios<br>• nosotros<br>• ubicación";
|
|
}
|
|
|
|
$accion = "forzar_cierre";
|
|
}
|
|
} else {
|
|
$respuesta = "Error: No se recibió ninguna consulta.";
|
|
}
|
|
|
|
// Devolvemos el JSON estructurado
|
|
echo json_encode([
|
|
'respuesta' => $respuesta,
|
|
'accion' => $accion
|
|
]); |