Files
sirpremiumv2/routes/web.php
T
LizandroandClaude Sonnet 4.6 44297aa0bb Add AI usage logs for Gemini and Whisper
- Migration + AiUsageLog model with tokens, duration, time, cost fields
- GeminiIntentService and GeminiVisionService log every API call
  with input/output token counts from usageMetadata and response time
- TelegramBotService logs Whisper calls with audio duration (from Telegram)
  and calculates cost at $1/second
- Whisper voice duration now passed from TelegramWebhookController
- Free text in Telegram now tries Gemini intent detection before showing menu
- /chat/ia-logs: Livewire component with summary cards + filterable table
- Whisper connection test button in config panel
- "Logs IA" link added to Chat/Bot nav section

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 19:13:59 +00:00

119 lines
7.2 KiB
PHP

<?php
use App\Http\Controllers\ChatController;
use App\Http\Controllers\MenuController;
use App\Http\Controllers\TelegramWebhookController;
use App\Http\Controllers\WhatsappController;
use App\Http\Controllers\WhatsappWebhookController;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
if (auth()->check()) {
return redirect('/servicios'); // Usuario autenticado
}
return redirect('/login'); // Usuario no autenticado
});
Route::any('/dashboard', function () {
return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
Route::get('/politica-privacidad', fn() => view('politica-privacidad'))->name('politica-privacidad');
Route::get('/eliminacion-datos', fn() => view('eliminacion-datos'))->name('eliminacion-datos');
Route::get('/condiciones-servicio', fn() => view('condiciones-servicio'))->name('condiciones-servicio');
Route::get('/comprar', [MenuController::class, 'showcomprar'])->name('comprar');
Route::get('/orders', [MenuController::class, 'order'])->name('orders');
Route::get('/wompi_pagos', [MenuController::class, 'wompi_pagos'])->name('wompi_pagos');
Route::any('/wompi_hook', [MenuController::class, 'wompi_hook'])->name('wompi_hook');
Route::get('/compras', [MenuController::class, 'compras'])->name('compras');
Route::get('/pay/{estado}', [MenuController::class, 'pay'])->name('pay');
Route::get('/webhooks', [WhatsappWebhookController::class, 'verify']);
Route::post('/webhooks', [WhatsappWebhookController::class, 'handle'])
->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);
Route::get('/credenciales', [MenuController::class, 'showcredenciales'])->name('credenciales');
Route::get('/oferta', [MenuController::class, 'showoferta'])->name('oferta');
Route::get('/single', [MenuController::class, 'showsingle'])->name('single');
Route::get('/promo', [MenuController::class, 'showpromo'])->name('promo');
Route::get('/categorias', [MenuController::class, 'showcategorias'])->name('categorias');
Route::get('/nequi', [MenuController::class, 'nequi'])->name('nequi');
Route::get('sendSMS', [App\Http\Controllers\TwilioSMSController::class, 'index']);
Route::any('/mp', [MenuController::class, 'showmp'])->name('mp');
Route::any('/pruebas', [MenuController::class, 'pruebas'])->name('pruebas');
//Logueados
Route::middleware(["auth"])->group(function () {
Route::any('/clientes', [MenuController::class, 'showclientes'])->name('clientes');
Route::get('/servicios', [MenuController::class, 'showservicios'])->name('servicios');
Route::get('/top', [MenuController::class, 'showtop'])->name('top');
Route::any('/reportes', [MenuController::class, 'showreportes'])->name('reportes');
Route::get('/perfil', [MenuController::class, 'showperfil'])->name('perfil');
Route::get('/recarga', [MenuController::class, 'showrecarga'])->name('recarga');
Route::post('/recargas', [MenuController::class, 'recargas'])->name('recargas');
Route::get('/promociones', [MenuController::class, 'showpromociones'])->name('promociones');
Route::get('/wompi/{monto}', [MenuController::class, 'showwompi'])->name('wompi');
Route::any('/logs', [MenuController::class, 'showlogs'])->name('logs');
Route::any('/logs-comisiones', [MenuController::class, 'showlogscomisiones'])->name('logs-comisiones');
Route::any('/usuarios', [MenuController::class, 'showusuarios'])->name('usuarios');
Route::any('/roles', [MenuController::class, 'showroles'])->name('roles');
Route::any('/tarifas', [MenuController::class, 'showtarifas'])->name('tarifas');
});
// Editores
Route::middleware(["auth", "solo_usuario_editor"])->group(function () {
Route::any('/planes', [MenuController::class, 'showplanes'])->name('planes');
Route::get('/import', [MenuController::class, 'showimport'])->name('import');
});
//Administradores
Route::middleware(["auth", "solo_usuario_administrador"])->group(function () {
Route::get('/admin', [MenuController::class, 'showadmin'])->middleware(['auth'])->name('admin');
Route::any('/pendientes', [MenuController::class, 'showpendientes'])->name('pendientes');
Route::get('/servicio', [MenuController::class, 'showservicio'])->name('servicio');
Route::get('/configuracion', [MenuController::class, 'showconfiguracion'])->name('configuracion');
Route::get('/categoria', [MenuController::class, 'showcategoria'])->name('categoria');
Route::any('/logs', [MenuController::class, 'showlogs'])->name('logs');
Route::any('/logs-recargas', [MenuController::class, 'showLogRecargas'])->name('logsRecargas');
Route::any('/log-general', [MenuController::class, 'showLogGeneral'])->name('logGeneral');
Route::any('/log-historial', [MenuController::class, 'showLogHistorial'])->name('logHistorial'); Route::get('/diagnostico', [MenuController::class, 'showDiagnostico'])->name('diagnostico'); Route::get('/utilidades', [MenuController::class, 'showutilidad'])->name('utilidades');
Route::get('/mantenimiento', [MenuController::class, 'mantenimiento'])->name('mantenimiento');
Route::get('/reversar', [MenuController::class, 'showReversarCompra'])->name('reversar');
Route::get('/rank-management', [MenuController::class, 'showgestionrangos'])->name('gestion-rangos');
// Módulo WhatsApp
Route::prefix('whatsapp')->name('whatsapp.')->group(function () {
Route::get('/conversaciones', [WhatsappController::class, 'conversaciones'])->name('conversaciones');
Route::get('/menus', [WhatsappController::class, 'menus'])->name('menus');
Route::get('/plantillas', [WhatsappController::class, 'plantillas'])->name('plantillas');
Route::get('/programados', [WhatsappController::class, 'programados'])->name('programados');
Route::get('/configuracion', [WhatsappController::class, 'configuracion'])->name('configuracion');
Route::get('/logs', [WhatsappController::class, 'logs'])->name('logs');
Route::get('/correo', [WhatsappController::class, 'correo'])->name('correo');
});
// Módulo Chat (web + Telegram)
Route::prefix('chat')->name('chat.')->group(function () {
Route::get('/conversaciones', [ChatController::class, 'conversaciones'])->name('conversaciones');
Route::get('/menus', [ChatController::class, 'menus'])->name('menus');
Route::get('/configuracion', [ChatController::class, 'configuracion'])->name('configuracion');
Route::get('/ia-logs', [ChatController::class, 'iaLogs'])->name('ia-logs');
});
});
Route::post('/registrar-accion-compra', [MenuController::class, 'click_compra'])->name('click_compra');
// Rutas públicas del módulo Chat (sin autenticación)
Route::get('/chat', [ChatController::class, 'publicPage'])->name('chat.publico');
Route::post('/chat/webhook/telegram', [TelegramWebhookController::class, 'handle'])
->name('chat.telegram.webhook')
->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);
// Route::get('/ip-test', [MenuController::class, 'ip_test'])->name('ip');
require __DIR__ . '/auth.php';