asistente virtual
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
<?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
|
||||
]);
|
||||
Reference in New Issue
Block a user