develop #83
@ -3,7 +3,7 @@
|
|||||||
import React, { useState, useRef, useCallback, useEffect } from 'react';
|
import React, { useState, useRef, useCallback, useEffect } from 'react';
|
||||||
import { Upload, Paperclip, Send, Moon, Sun, X, FileText, ImageIcon, Video, Music, Archive, MessageCircle, Bot, User, Info, Lock, Mic } from 'lucide-react';
|
import { Upload, Paperclip, Send, Moon, Sun, X, FileText, ImageIcon, Video, Music, Archive, MessageCircle, Bot, User, Info, Lock, Mic } from 'lucide-react';
|
||||||
|
|
||||||
const API_ENDPOINT = "https://n8n.jonasbomfim.store/webhook/cd7d10e6-bcfc-4f3a-b649-351d12b714f1";
|
const API_ENDPOINT = "https://n8n.jonasbomfim.store/webhook/zoe2";
|
||||||
const FALLBACK_RESPONSE = "Tive um problema para responder agora. Tente novamente em alguns instantes.";
|
const FALLBACK_RESPONSE = "Tive um problema para responder agora. Tente novamente em alguns instantes.";
|
||||||
|
|
||||||
const FileUploadChat = ({ onOpenVoice }: { onOpenVoice?: () => void }) => {
|
const FileUploadChat = ({ onOpenVoice }: { onOpenVoice?: () => void }) => {
|
||||||
@ -100,14 +100,35 @@ const FileUploadChat = ({ onOpenVoice }: { onOpenVoice?: () => void }) => {
|
|||||||
setUploadedFiles(prev => prev.filter(file => file.id !== fileId));
|
setUploadedFiles(prev => prev.filter(file => file.id !== fileId));
|
||||||
};
|
};
|
||||||
|
|
||||||
const generateAIResponse = useCallback(async (userMessage: string, files: any[]) => {
|
const generateAIResponse = useCallback(
|
||||||
|
async (userMessage: string, files: any[]) => {
|
||||||
try {
|
try {
|
||||||
|
const hasAudio = files.some((file) => file.name.toLowerCase().endsWith('.mp3'));
|
||||||
|
const hasPdf = files.some((file) => file.name.toLowerCase().endsWith('.pdf'));
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
|
||||||
|
// Adiciona mensagem
|
||||||
|
formData.append("message", userMessage);
|
||||||
|
|
||||||
|
// Adiciona arquivos corretamente
|
||||||
|
files.forEach((file) => {
|
||||||
|
const ext = file.name.toLowerCase().split('.').pop();
|
||||||
|
if (ext === 'mp3') {
|
||||||
|
formData.append("audio", file.file); // nome do campo deve ser 'audio'
|
||||||
|
} else if (ext === 'pdf') {
|
||||||
|
formData.append("pdf", file.file); // nome do campo deve ser 'pdf'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const response = await fetch(API_ENDPOINT, {
|
const response = await fetch(API_ENDPOINT, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
body: hasAudio || hasPdf ? formData : JSON.stringify({ message: userMessage }),
|
||||||
"Content-Type": "application/json",
|
headers: hasAudio || hasPdf
|
||||||
},
|
? undefined // Quando usar FormData, NÃO definir Content-Type, o navegador define com boundary correto
|
||||||
body: JSON.stringify({ message: userMessage }),
|
: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
@ -131,7 +152,10 @@ const FileUploadChat = ({ onOpenVoice }: { onOpenVoice?: () => void }) => {
|
|||||||
console.error("[FileUploadChat] Failed to get API response", error);
|
console.error("[FileUploadChat] Failed to get API response", error);
|
||||||
return FALLBACK_RESPONSE;
|
return FALLBACK_RESPONSE;
|
||||||
}
|
}
|
||||||
}, []);
|
},
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
const sendMessage = useCallback(async () => {
|
const sendMessage = useCallback(async () => {
|
||||||
if (inputValue.trim() || uploadedFiles.length > 0) {
|
if (inputValue.trim() || uploadedFiles.length > 0) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user