// 1. IMPORTAÇÕES require('dotenv').config(); // Carrega as variáveis do arquivo .env const express = require('express'); const cors = require('cors'); const axios = require('axios'); // Importa o axios // 2. INICIALIZAÇÃO DO APP const app = express(); const PORT = 3001; // 3. MIDDLEWARE app.use(cors()); app.use(express.json()); // 4. DADOS MOCK - Adicionamos o patientPhone let conversationsData = [ { id: 1, patientName: 'Ana Costa', // Coloque seu número de WhatsApp verificado aqui! // Formato: 55 + DDD + NUMERO (tudo junto) patientPhone: '5575988104585', avatarUrl: 'https://placehold.co/100x100/E2D9FF/6B46C1?text=AC', lastMessage: 'Ok, doutor. Muito obrigada!', timestamp: '10:45', unread: 2, messages: [ { id: 1, sender: 'Ana Costa', text: 'Boa tarde, doutor.', time: '09:15' }, ], }, { id: 2, patientName: 'Carlos Andrade', patientPhone: '5511888888888', // Número de exemplo avatarUrl: 'https://placehold.co/100x100/D1E7DD/146C43?text=CA', lastMessage: 'Amanhã, às 14h, está ótimo.', timestamp: 'Ontem', unread: 0, messages: [ { id: 1, sender: 'Carlos Andrade', text: 'Doutor, preciso remarcar.', time: 'Ontem' }, ], }, ]; // 5. FUNÇÃO PARA ENVIAR MENSAGEM VIA WHATSAPP async function sendWhatsAppMessage(phoneNumber, messageText) { const WHATSAPP_TOKEN = process.env.WHATSAPP_TOKEN; const WHATSAPP_PHONE_NUMBER_ID = process.env.WHATSAPP_PHONE_NUMBER_ID; // URL da API do WhatsApp const url = `https://graph.facebook.com/v19.0/${WHATSAPP_PHONE_NUMBER_ID}/messages`; // Corpo da requisição const data = { messaging_product: 'whatsapp', to: phoneNumber, type: 'text', text: { body: messageText } }; // Cabeçalhos com a autorização const headers = { 'Authorization': `Bearer ${WHATSAPP_TOKEN}`, 'Content-Type': 'application/json' }; try { console.log(`Enviando mensagem para ${phoneNumber}...`); await axios.post(url, data, { headers: headers }); console.log('✅ Mensagem enviada com sucesso para a API do WhatsApp!'); } catch (error) { console.error('❌ Erro ao enviar mensagem para o WhatsApp:'); // A resposta de erro da Meta geralmente está em error.response.data if (error.response) { console.error(JSON.stringify(error.response.data, null, 2)); } else { console.error(error.message); } } } // 6. ROTAS DA API app.get('/api/conversations', (req, res) => { const conversationList = conversationsData.map(({ messages, ...convo }) => convo); res.json(conversationList); }); app.get('/api/conversations/:id', (req, res) => { const conversationId = parseInt(req.params.id); const conversation = conversationsData.find(c => c.id === conversationId); if (conversation) { res.json(conversation); } else { res.status(404).json({ message: 'Conversa não encontrada' }); } }); // 7. ROTA DE ENVIO DE MENSAGEM ATUALIZADA app.post('/api/conversations/:id/messages', async (req, res) => { // A rota agora é async const conversationId = parseInt(req.params.id); const { text } = req.body; const conversation = conversationsData.find(c => c.id === conversationId); if (!conversation) { return res.status(404).json({ message: 'Conversa não encontrada.' }); } if (!text) { return res.status(400).json({ message: 'O texto da mensagem é obrigatório.' }); } // Envia para o WhatsApp primeiro await sendWhatsAppMessage(conversation.patientPhone, text); // Depois, salva localmente (como antes) const newMessage = { id: Date.now(), sender: 'Você', text: text, time: new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' }), }; conversationsData = conversationsData.map(convo => { if (convo.id === conversationId) { return { ...convo, messages: [...convo.messages, newMessage], lastMessage: text, timestamp: 'Agora' }; } return convo; }); res.status(201).json(newMessage); }); // 8. INICIANDO O SERVIDOR app.listen(PORT, () => { console.log(`🚀 Servidor backend rodando na porta ${PORT}`); });