- Chat público en /chat con flujos de compra, recarga y credenciales - Verificación de identidad por código OTP enviado al correo registrado - Botones enriquecidos: cards, links, credenciales, validación de comprobante - Gemini IA para detección de intención en texto libre - Gemini Vision para extraer datos de foto de comprobante - Validador de pagos cruzando IA con correos IMAP (Bancolombia) - MercadoPago como pasarela de pago (reemplaza Wompi en el chat) - Migraciones: payload en chat_messages, user_id en chat_contacts - Config admin: API key Gemini, toggles IA y validación de foto Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
62 lines
2.5 KiB
PHP
62 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Mail;
|
|
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Mail\Mailable;
|
|
use Illuminate\Queue\SerializesModels;
|
|
|
|
class ChatOtpMail extends Mailable
|
|
{
|
|
use Queueable, SerializesModels;
|
|
|
|
public function __construct(
|
|
public string $codigo,
|
|
public string $nombre,
|
|
) {}
|
|
|
|
public function build(): static
|
|
{
|
|
return $this
|
|
->subject('Tu codigo de verificacion - ' . config('app.name'))
|
|
->html($this->renderHtml());
|
|
}
|
|
|
|
private function renderHtml(): string
|
|
{
|
|
$appName = config('app.name', 'SirPremium');
|
|
$codigo = $this->codigo;
|
|
$nombre = htmlspecialchars($this->nombre);
|
|
|
|
return <<<HTML
|
|
<!DOCTYPE html>
|
|
<html lang="es">
|
|
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head>
|
|
<body style="margin:0;padding:0;background:#f4f4f5;font-family:Arial,sans-serif;">
|
|
<table width="100%" cellpadding="0" cellspacing="0" style="background:#f4f4f5;padding:40px 0;">
|
|
<tr><td align="center">
|
|
<table width="480" cellpadding="0" cellspacing="0" style="background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 2px 12px rgba(0,0,0,.08);">
|
|
<tr><td style="background:#10b981;padding:28px 32px;text-align:center;">
|
|
<h1 style="margin:0;color:#fff;font-size:22px;font-weight:700;">{$appName}</h1>
|
|
</td></tr>
|
|
<tr><td style="padding:36px 40px;">
|
|
<p style="margin:0 0 8px;font-size:15px;color:#374151;">Hola, <strong>{$nombre}</strong></p>
|
|
<p style="margin:0 0 28px;font-size:15px;color:#6b7280;">Tu codigo de verificacion para acceder al chat es:</p>
|
|
<div style="text-align:center;margin:0 0 28px;">
|
|
<span style="display:inline-block;background:#f0fdf4;border:2px solid #10b981;border-radius:10px;padding:16px 40px;font-size:36px;font-weight:700;letter-spacing:10px;color:#059669;">{$codigo}</span>
|
|
</div>
|
|
<p style="margin:0 0 6px;font-size:13px;color:#9ca3af;text-align:center;">Este codigo expira en <strong>10 minutos</strong>.</p>
|
|
<p style="margin:0;font-size:13px;color:#9ca3af;text-align:center;">Si no solicitaste este codigo, ignora este correo.</p>
|
|
</td></tr>
|
|
<tr><td style="background:#f9fafb;padding:16px 40px;text-align:center;">
|
|
<p style="margin:0;font-size:12px;color:#9ca3af;">© {$appName} — soporte a traves del chat</p>
|
|
</td></tr>
|
|
</table>
|
|
</td></tr>
|
|
</table>
|
|
</body>
|
|
</html>
|
|
HTML;
|
|
}
|
|
}
|