/** * scan.ts * * @author Descomplicar® Crescimento Digital * @link https://descomplicar.pt * @copyright 2025 Descomplicar® */ // Este arquivo representa o seu backend sem servidor (Serverless Function). // Você deve implementá-lo em uma plataforma como Google Cloud Run, Vercel ou Netlify Functions. // As credenciais (API Key, CRM Token) devem ser configuradas como variáveis de ambiente na sua plataforma de hospedagem. import { classifyEmails } from '../services/geminiService'; import { deleteTicketsFromSendersInPerfex } from '../services/perfexCrmService'; import { mockEmails } from '../data/mockEmails'; import { EmailCategory, type CrmSettings } from '../types'; // Em um ambiente de servidor real, você precisaria de um framework como Express // para lidar com requisições HTTP. Esta é uma simulação para fins de demonstração. // A função `handleRequest` simula o ponto de entrada da sua função na nuvem. async function handleRequest() { console.log('Iniciando tarefa de limpeza automática...'); // 1. Ler configurações das variáveis de ambiente const apiKey = process.env.GEMINI_API_KEY; const crmSettings: CrmSettings = { url: process.env.PERFEX_CRM_URL || '', token: process.env.PERFEX_CRM_TOKEN || '', autoDeleteTickets: process.env.PERFEX_AUTO_DELETE_TICKETS === 'true', }; // Validação básica if (!apiKey) { console.error('Erro: A variável de ambiente GEMINI_API_KEY não está definida.'); return { success: false, message: 'Chave da API do Gemini não configurada no servidor.' }; } try { // 2. Classificar e-mails usando o serviço Gemini const categorizedEmails = await classifyEmails(mockEmails, apiKey); console.log('E-mails classificados com sucesso.'); // 3. Excluir tickets do CRM, se configurado if (crmSettings.autoDeleteTickets && crmSettings.url && crmSettings.token) { const spamAndNotificationEmails = [ ...(categorizedEmails[EmailCategory.SPAM]?.emails || []), ...(categorizedEmails[EmailCategory.NOTIFICATIONS]?.emails || []) ]; const senderEmails = [...new Set(spamAndNotificationEmails.map(email => email.sender))]; if (senderEmails.length > 0) { try { const deletedCount = await deleteTicketsFromSendersInPerfex(crmSettings, senderEmails); console.log(`${deletedCount} tickets foram excluídos do CRM.`); } catch (err) { console.error('Erro ao excluir tickets do CRM:', (err as Error).message); } } else { console.log('Nenhum e-mail de spam ou notificação encontrado para exclusão de tickets.'); } } else { console.log('A exclusão automática de tickets está desativada ou o CRM não está configurado.'); } console.log('Tarefa de limpeza automática concluída com sucesso.'); return { success: true, message: 'Limpeza automática executada com sucesso.' }; } catch (error) { console.error('Ocorreu um erro durante a execução da tarefa de limpeza automática:', error); return { success: false, message: 'Falha na execução da limpeza automática.' }; } } // Para simular a execução, você pode chamar a função. // Numa implementação real, o seu provedor de nuvem (ex: Cloud Run) chamaria // uma função exportada quando o endpoint HTTP fosse acionado. // Ex: `export default async (req, res) => { ... }` handleRequest();