81 lines
3.4 KiB
TypeScript
Executable File
81 lines
3.4 KiB
TypeScript
Executable File
/**
|
|
* 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();
|