Implementação da IA

This commit is contained in:
RafaelMTA13 2025-10-29 16:02:47 -03:00
parent 626fcc8124
commit f80e0eee81
6 changed files with 765 additions and 254 deletions

2
.env Normal file
View File

@ -0,0 +1,2 @@
OPENAI_API_KEY=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
PORT=5000

897
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -18,10 +18,15 @@
"apexcharts": "^5.3.4",
"bootstrap": "^5.3.8",
"bootstrap-icons": "^1.13.1",
"cors": "^2.8.5",
"dayjs": "^1.11.18",
"dotenv": "^17.2.3",
"express": "^5.1.0",
"flatpickr": "^4.6.13",
"html2pdf.js": "^0.12.1",
"lucide-react": "^0.543.0",
"node-fetch": "^3.3.2",
"openai": "^6.7.0",
"perfect-scrollbar": "^1.5.6",
"powershell": "^2.3.3",
"quill": "^2.0.3",

38
server.js Normal file
View File

@ -0,0 +1,38 @@
import express from "express";
import cors from "cors";
import dotenv from "dotenv";
import OpenAI from "openai";
dotenv.config();
const app = express();
app.use(cors());
app.use(express.json());
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY, // Coloque sua chave no .env
});
app.post("/api/chat", async (req, res) => {
try {
const { message } = req.body;
const completion = await client.chat.completions.create({
model: "gpt-4o-mini", // modelo rápido e leve
messages: [
{
role: "system",
content: "Você é o assistente virtual do site Mediconnect. Responda de forma amigável e informativa, explicando sobre o funcionamento do site, cadastro, agendamento, e suporte técnico.",
},
{ role: "user", content: message },
],
});
const resposta = completion.choices[0].message.content;
res.json({ resposta });
} catch (error) {
console.error("Erro no servidor:", error);
res.status(500).json({ erro: "Erro ao conectar com a IA" });
}
});
app.listen(5000, () => console.log("Servidor rodando na porta 5000"));

View File

@ -25,7 +25,7 @@ const Header = () => {
}
}, [mensagens]);
// Funções de Logout (do seu código)
// --- Logout ---
const handleLogoutClick = () => {
setShowLogoutModal(true);
setIsDropdownOpen(false);
@ -120,7 +120,7 @@ const Header = () => {
setMensagens([
{
id: 1,
texto: 'Olá! Bem-vindo ao suporte Mediconnect. Como podemos ajudar você hoje?',
texto: 'Olá! 👋 Bem-vindo ao suporte Mediconnect. Como posso te ajudar hoje?',
remetente: 'suporte',
hora: new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })
}
@ -132,10 +132,12 @@ const Header = () => {
setMensagem('');
};
const handleEnviarMensagem = (e) => {
// 🚀 Envio de mensagem com IA
const handleEnviarMensagem = async (e) => {
e.preventDefault();
if (mensagem.trim() === '') return;
// Mensagem do usuário
const novaMensagemUsuario = {
id: Date.now(),
texto: mensagem,
@ -146,30 +148,34 @@ const Header = () => {
setMensagens(prev => [...prev, novaMensagemUsuario]);
setMensagem('');
setTimeout(() => {
if (chatInputRef.current) {
chatInputRef.current.focus();
}
}, 0);
try {
const response = await fetch("http://localhost:5000/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ message: mensagem }),
});
setTimeout(() => {
const respostas = [
'Entendi sua dúvida. Vou verificar isso para você.',
'Obrigado pela informação. Estou analisando seu caso.',
'Pode me dar mais detalhes sobre o problema?',
'Já encaminhei sua solicitação para nossa equipe técnica.',
'Vou ajudar você a resolver isso!'
];
const data = await response.json();
// Resposta da IA
const respostaSuporte = {
id: Date.now() + 1,
texto: respostas[Math.floor(Math.random() * respostas.length)],
texto: data.resposta || data.reply || "Desculpe, não consegui processar sua pergunta no momento 😅",
remetente: 'suporte',
hora: new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })
};
setMensagens(prev => [...prev, respostaSuporte]);
}, 1000);
} catch (error) {
console.error("Erro ao conectar com o servidor:", error);
const erroMsg = {
id: Date.now() + 1,
texto: "Ops! 😥 Ocorreu um erro ao tentar falar com o suporte.",
remetente: 'suporte',
hora: new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })
};
setMensagens(prev => [...prev, erroMsg]);
}
};
const SuporteCard = () => (

13
src/openaiService.js Normal file
View File

@ -0,0 +1,13 @@
// src/services/openaiService.js
export async function perguntarOpenAI(mensagem) {
const resposta = await fetch("http://localhost:5000/api/chat", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ message: mensagem }),
});
const data = await resposta.json();
return data.reply;
}