From f05df3efe34c522f3170e0027453dba6eecdf8b6 Mon Sep 17 00:00:00 2001 From: Jonas Francisco Date: Sat, 22 Nov 2025 22:04:54 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20integrar=20Zoe=20com=20captura=20de=20?= =?UTF-8?q?=C3=A1udio=20e=20resposta=20em=20voz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- susconecta/components/ZoeIA/ai-voice-flow.tsx | 1 + .../features/pacientes/chat-widget.tsx | 82 +++---------------- 2 files changed, 12 insertions(+), 71 deletions(-) diff --git a/susconecta/components/ZoeIA/ai-voice-flow.tsx b/susconecta/components/ZoeIA/ai-voice-flow.tsx index 2f7cd05..a4c759a 100644 --- a/susconecta/components/ZoeIA/ai-voice-flow.tsx +++ b/susconecta/components/ZoeIA/ai-voice-flow.tsx @@ -5,6 +5,7 @@ import { VoicePoweredOrb } from "@/components/ZoeIA/voice-powered-orb"; import { Button } from "@/components/ui/button"; import { Mic, MicOff } from "lucide-react"; + // ⚠ Coloque aqui o webhook real do seu n8n const N8N_WEBHOOK_URL = "https://n8n.jonasbomfim.store/webhook/zoe2"; diff --git a/susconecta/components/features/pacientes/chat-widget.tsx b/susconecta/components/features/pacientes/chat-widget.tsx index f389724..74381a4 100644 --- a/susconecta/components/features/pacientes/chat-widget.tsx +++ b/susconecta/components/features/pacientes/chat-widget.tsx @@ -1,18 +1,16 @@ - - "use client"; import { useEffect, useMemo, useState } from "react"; -import { ArrowLeft, Mic, MicOff, Sparkles } from "lucide-react"; +import { ArrowLeft, Sparkles } from "lucide-react"; import { Button } from "@/components/ui/button"; import FileUploadChat from "@/components/ui/file-upload-and-chat"; -import { VoicePoweredOrb } from "@/components/ZoeIA/voice-powered-orb"; + +// 👉 AQUI você importa o fluxo correto de voz (já testado e funcionando) +import AIVoiceFlow from "@/components/ZoeIA/ai-voice-flow"; export function ChatWidget() { const [assistantOpen, setAssistantOpen] = useState(false); const [realtimeOpen, setRealtimeOpen] = useState(false); - const [isRecording, setIsRecording] = useState(false); - const [voiceDetected, setVoiceDetected] = useState(false); useEffect(() => { if (!assistantOpen && !realtimeOpen) return; @@ -42,33 +40,11 @@ export function ChatWidget() { const closeRealtime = () => { setRealtimeOpen(false); setAssistantOpen(true); - setIsRecording(false); - setVoiceDetected(false); - }; - - const toggleRecording = () => { - setIsRecording((prev) => { - const next = !prev; - if (!next) { - setVoiceDetected(false); - } - return next; - }); - }; - - const handleOpenDocuments = () => { - console.log("[ChatWidget] Abrindo fluxo de documentos"); - closeAssistant(); - }; - - const handleOpenChat = () => { - console.log("[ChatWidget] Encaminhando para chat em tempo real"); - setAssistantOpen(false); - openRealtime(); }; return ( <> + {/* ----------------- ASSISTANT PANEL ----------------- */} {assistantOpen && (
Voltar
+
)} + {/* ----------------- REALTIME VOICE PANEL ----------------- */} {realtimeOpen && (
-
-
-
- - {voiceDetected && ( - - Ouvindo… - - )} -
- -
- -

- Ative a captura para falar com a equipe em tempo real. Assim que sua voz for detectada, a Zoe sinaliza visualmente e encaminha o atendimento. -

-
-
+ {/* 🔥 Aqui entra o AIVoiceFlow COMPLETO */} +
+
)} + {/* ----------------- FLOATING BUTTON ----------------- */}