diff --git a/src/components/whatsapp/CreateInstanceForm.tsx b/src/components/whatsapp/CreateInstanceForm.tsx
index 91da40b..5b8acf1 100644
--- a/src/components/whatsapp/CreateInstanceForm.tsx
+++ b/src/components/whatsapp/CreateInstanceForm.tsx
@@ -1,221 +1,285 @@
-import React, { useState } from 'react';
-import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
-import { Button } from '@/components/ui/button';
+
+import { useState, useEffect } from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { Input } from '@/components/ui/input';
+import { Button } from '@/components/ui/button';
import { Label } from '@/components/ui/label';
-import { Alert, AlertDescription } from '@/components/ui/alert';
-import { Loader2, Plus, AlertCircle } from 'lucide-react';
+import { MessageCircle, AlertCircle } from 'lucide-react';
import { useToast } from '@/hooks/use-toast';
-import { restartInstance } from '@/services/whatsAppService';
+import { createWhatsAppInstance } from '@/services/whatsAppService';
+import { updateUserWhatsAppInstance, getUserWhatsAppInstance, activateUserWorkflow } from '@/services/whatsAppInstanceService';
import { WhatsAppInstance } from '@/types/whatsAppTypes';
-import { updateUserWhatsAppInstance } from '@/services/whatsAppInstance/userOperations';
-import { createEvolutionWebhook } from '@/services/whatsApp/webhookService';
+import { Alert, AlertDescription } from '@/components/ui/alert';
interface CreateInstanceFormProps {
onInstanceCreated: (instance: WhatsAppInstance) => void;
initialInstanceName?: string;
}
-const CreateInstanceForm = ({ onInstanceCreated, initialInstanceName = '' }: CreateInstanceFormProps) => {
+const CreateInstanceForm = ({
+ onInstanceCreated,
+ initialInstanceName = ''
+}: CreateInstanceFormProps) => {
const { toast } = useToast();
- const [isCreating, setIsCreating] = useState(false);
- const [userEmail, setUserEmail] = useState(initialInstanceName);
- const [ddd, setDdd] = useState('');
+ const [loading, setLoading] = useState(false);
const [phoneNumber, setPhoneNumber] = useState('');
+ const [hasExistingInstance, setHasExistingInstance] = useState(false);
+ const [checkingExistingInstance, setCheckingExistingInstance] = useState(true);
+ const currentUserId = localStorage.getItem('userId') || '';
+ const userEmail = localStorage.getItem('userEmail') || '';
+
+ // Nome da instância será sempre o email do usuário
+ const instanceName = userEmail;
- const handleCreateInstance = async (e: React.FormEvent) => {
- e.preventDefault();
-
- if (!userEmail.trim()) {
+ // Verificar se o usuário já tem uma instância
+ useEffect(() => {
+ const checkExistingInstance = async () => {
+ if (!userEmail) {
+ setCheckingExistingInstance(false);
+ return;
+ }
+
+ try {
+ console.log('Verificando se usuário já tem instância:', userEmail);
+ const existingInstance = await getUserWhatsAppInstance(userEmail);
+
+ if (existingInstance && existingInstance.instancia_zap) {
+ console.log('Usuário já possui instância:', existingInstance.instancia_zap);
+ setHasExistingInstance(true);
+ } else {
+ console.log('Usuário não possui instância');
+ setHasExistingInstance(false);
+ }
+ } catch (error) {
+ console.error('Erro ao verificar instância existente:', error);
+ setHasExistingInstance(false);
+ } finally {
+ setCheckingExistingInstance(false);
+ }
+ };
+
+ checkExistingInstance();
+ }, [userEmail]);
+
+ const handleCreateInstance = async () => {
+ // Validate form fields
+ if (!userEmail) {
toast({
title: "Erro",
- description: "Por favor, informe seu email",
+ description: "Email do usuário não encontrado. Faça login novamente.",
variant: "destructive",
});
return;
}
- if (!ddd.trim() || ddd.length !== 2) {
- toast({
- title: "Erro",
- description: "Por favor, informe um DDD válido (2 dígitos)",
- variant: "destructive",
- });
- return;
- }
-
- if (!phoneNumber.trim() || phoneNumber.length < 8) {
+ if (!phoneNumber.trim() || !/^[0-9]{10,15}$/.test(phoneNumber)) {
toast({
title: "Erro",
- description: "Por favor, informe um número de telefone válido",
+ description: "Insira um número válido com DDD e país (ex: 559999999999)",
variant: "destructive",
});
return;
}
- setIsCreating(true);
+ // Ensure user is logged in
+ if (!currentUserId) {
+ toast({
+ title: "Erro de autenticação",
+ description: "Você precisa estar logado para criar uma instância",
+ variant: "destructive",
+ });
+ return;
+ }
+
+ // Verificar novamente se já existe instância antes de criar
+ if (hasExistingInstance) {
+ toast({
+ title: "Erro",
+ description: "Você já possui uma instância WhatsApp. Apenas uma instância por usuário é permitida.",
+ variant: "destructive",
+ });
+ return;
+ }
+
+ setLoading(true);
try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
+ console.log(`🚀 Iniciando criação de instância com nome ${instanceName} e número ${phoneNumber}`);
- // Construir o número completo: +55 + DDD + número
- const fullPhoneNumber = `55${ddd}${phoneNumber}`;
-
- console.log(`🚀 Criando instância para: ${normalizedEmail} com número: ${fullPhoneNumber}`);
+ // 1. Criar instância na API
+ console.log('📡 Passo 1: Criando instância na API...');
+ const data = await createWhatsAppInstance(instanceName, phoneNumber);
+ console.log('✅ Resposta da API de criação de instância:', data);
- // Criar a instância no Evolution API - passar apenas o email
- const response = await restartInstance(normalizedEmail);
-
- if (response && response.instance) {
- const instanceData: WhatsAppInstance = {
- instanceId: `${normalizedEmail}-${Date.now()}`,
- instanceName: normalizedEmail,
- phoneNumber: fullPhoneNumber,
- connectionState: response.instance.state || 'closed',
- qrcode: response.qrcode || null,
- status: response.instance.state === 'open' ? 'connected' : 'disconnected',
- lastSeen: new Date().toISOString(),
- presence: 'offline',
- userId: normalizedEmail
- };
-
- console.log('✅ Instância criada:', instanceData);
-
- // Atualizar no banco de dados local com o número de telefone
- await updateUserWhatsAppInstance(normalizedEmail, normalizedEmail, 'conectado', fullPhoneNumber);
-
- // Criar webhook na Evolution API
- await createEvolutionWebhook(normalizedEmail);
+ // 2. Atualizar o banco de dados com status "conectado"
+ console.log('💾 Passo 2: Atualizando banco de dados...');
+ await updateUserWhatsAppInstance(userEmail, instanceName, 'conectado');
+ console.log('✅ Instância registrada no banco de dados com status "conectado"');
+ // 3. Ativar o workflow do usuário no n8n
+ console.log('🔄 Passo 3: Ativando workflow do usuário no n8n...');
+ try {
+ await activateUserWorkflow(userEmail);
+ console.log('✅ Workflow ativado com sucesso no n8n');
+ } catch (workflowError) {
+ console.error('⚠️ Erro ao ativar workflow, mas instância foi criada:', workflowError);
+ // Não bloquear o fluxo se o workflow falhar, apenas loggar
toast({
- title: "Sucesso!",
- description: "Instância criada com sucesso. Use o QR Code para conectar.",
+ title: "Aviso",
+ description: "Instância criada, mas houve um problema ao ativar a automação. Entre em contato com o suporte.",
+ variant: "destructive",
});
-
- onInstanceCreated(instanceData);
-
- } else {
- throw new Error('Resposta inválida da API');
}
- } catch (error) {
- console.error('❌ Erro ao criar instância:', error);
+ // 4. Criar objeto da instância
+ const newInstance: WhatsAppInstance = {
+ instanceName,
+ instanceId: instanceName,
+ phoneNumber,
+ userId: currentUserId,
+ status: data.instance?.status || 'created',
+ qrcode: data.qrcode?.base64 || null,
+ connectionState: 'closed'
+ };
+
+ console.log('✅ Nova instância criada:', newInstance);
+
+ // 5. Atualizar estado para evitar nova criação
+ setHasExistingInstance(true);
+
+ // 6. Notificar componente pai
+ onInstanceCreated(newInstance);
- let errorMessage = 'Erro desconhecido ao criar instância';
- if (error instanceof Error) {
- errorMessage = error.message;
- }
-
toast({
- title: "Erro ao criar instância",
- description: errorMessage,
+ title: "Sucesso!",
+ description: "Instância do WhatsApp criada e ativada com sucesso!"
+ });
+
+ // Reset form fields
+ setPhoneNumber('');
+
+ } catch (error) {
+ console.error("💥 Erro ao criar instância WhatsApp:", error);
+
+ // Se houve erro na API, tentar reverter no banco de dados
+ try {
+ await updateUserWhatsAppInstance(userEmail, '', 'desconectado');
+ console.log('🔄 Instância removida do banco devido ao erro na API');
+ } catch (dbError) {
+ console.error('❌ Erro ao reverter instância no banco:', dbError);
+ }
+
+ toast({
+ title: "Erro na criação da instância",
+ description: "Ocorreu um erro ao conectar com a API. Tente novamente mais tarde.",
variant: "destructive",
});
} finally {
- setIsCreating(false);
+ setLoading(false);
}
};
+ if (checkingExistingInstance) {
+ return (
+
+
+
+
+
Verificando instâncias existentes...
+
+
+
+ );
+ }
+
+ if (hasExistingInstance) {
+ return (
+
+
+
+
+ WhatsApp já Conectado
+
+
+ Você já possui uma instância WhatsApp vinculada ao seu email
+
+
+
+
+
+
+ Apenas uma instância WhatsApp por usuário é permitida.
+ Sua instância atual: {instanceName}
+
+
+
+
+
+ ✓ Instância ativa: {instanceName}
+
+
+ Para gerenciar sua instância, utilize os botões na lista de instâncias acima.
+
+
+
+
+ );
+ }
+
return (
-
-
- Conectar WhatsApp
-
+
+
+ Vincular WhatsApp ao App
+
- Conecte uma nova instância do WhatsApp para enviar mensagens automáticas
+ Preencha os campos abaixo para conectar sua conta WhatsApp
-
-
+
+
+
Nome da Instância
+
+
+ O nome da instância será automaticamente seu email de login
+
+
+
+
+
Número do WhatsApp
+
setPhoneNumber(e.target.value)}
+ placeholder="559999999999"
+ required
+ />
+
Digite o número com DDD e código do país
+
+
+
+ {loading ? "Criando..." : "Criar Instância"}
+
+
+
+
Importante:
+
+ • Apenas uma instância por usuário é permitida
+ • O nome da instância será seu email de login
+ • Após criar, você precisará escanear o QR Code para conectar
+ • Sua automação financeira será ativada automaticamente
+
+
);
diff --git a/src/components/whatsappGroups/CreateGroupForm.tsx b/src/components/whatsappGroups/CreateGroupForm.tsx
index bb15cc2..b3cdf06 100644
--- a/src/components/whatsappGroups/CreateGroupForm.tsx
+++ b/src/components/whatsappGroups/CreateGroupForm.tsx
@@ -1,3 +1,4 @@
+
import { useState, useEffect } from 'react';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
@@ -8,7 +9,6 @@ import { Alert, AlertDescription } from '@/components/ui/alert';
import { findOrCreateWhatsAppGroup } from '@/services/whatsAppGroupsService';
import { getUserWhatsAppInstance } from '@/services/whatsAppInstanceService';
import { createWhatsAppGroup, updateGroupRemoteJid } from '@/services/whatsAppGroupCreationService';
-import { activateUserWorkflow } from '@/services/whatsAppInstanceService';
import { useToast } from '@/hooks/use-toast';
interface CreateGroupFormProps {
@@ -39,11 +39,9 @@ const CreateGroupForm = ({ userEmail, onSuccess }: CreateGroupFormProps) => {
setCheckingInstance(true);
try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
- console.log('Verificando instância para:', normalizedEmail);
+ console.log('Verificando instância para:', userEmail);
- const instanceData = await getUserWhatsAppInstance(normalizedEmail);
+ const instanceData = await getUserWhatsAppInstance(userEmail);
console.log('Dados da instância:', instanceData);
if (instanceData) {
@@ -110,9 +108,6 @@ const CreateGroupForm = ({ userEmail, onSuccess }: CreateGroupFormProps) => {
setCadastrando(true);
try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
-
console.log("Iniciando processo de cadastro de grupo...");
// 1. Cadastrar grupo no banco de dados local
@@ -124,32 +119,24 @@ const CreateGroupForm = ({ userEmail, onSuccess }: CreateGroupFormProps) => {
// 2. Criar grupo no WhatsApp via API com o nome escolhido pelo usuário
try {
- const groupResponse = await createWhatsAppGroup(normalizedEmail, nomeGrupo.trim());
+ const groupResponse = await createWhatsAppGroup(userEmail, nomeGrupo.trim());
console.log('Resposta da criação do grupo:', groupResponse);
// 3. Atualizar remote_jid no banco de dados
if (groupResponse.id) {
await updateGroupRemoteJid(grupo.id, groupResponse.id);
- }
-
- // 4. 🚀 NOVO: Ativar workflow n8n após criar o grupo com sucesso
- try {
- console.log('🔔 Ativando workflow n8n para o usuário após criação do grupo...');
- await activateUserWorkflow(normalizedEmail);
toast({
title: 'Sucesso!',
- description: `Grupo "${nomeGrupo}" criado e automação ativada com sucesso!`,
+ description: `Grupo "${nomeGrupo}" criado com sucesso no seu WhatsApp!`,
variant: 'default',
});
- } catch (workflowError) {
- console.error('Erro ao ativar workflow:', workflowError);
- // Não falhar o processo todo se o workflow não ativar
+ } else {
toast({
- title: 'Grupo criado!',
- description: `Grupo "${nomeGrupo}" criado com sucesso. Automação será ativada em breve.`,
- variant: 'default',
+ title: 'Atenção',
+ description: 'Grupo cadastrado no sistema, mas não foi possível criar no WhatsApp',
+ variant: 'destructive',
});
}
@@ -274,7 +261,6 @@ const CreateGroupForm = ({ userEmail, onSuccess }: CreateGroupFormProps) => {
O grupo será criado automaticamente no seu WhatsApp
Você será adicionado como participante do grupo
O grupo terá o nome que você escolheu: {nomeGrupo || 'Digite um nome acima'}
- A automação será ativada automaticamente após a criação
diff --git a/src/services/whatsApp/webhookService.ts b/src/services/whatsApp/webhookService.ts
index 788bf6f..0a53d2b 100644
--- a/src/services/whatsApp/webhookService.ts
+++ b/src/services/whatsApp/webhookService.ts
@@ -6,19 +6,16 @@ import { makeRequest } from './apiHelpers';
*/
export const createEvolutionWebhook = async (userEmail: string): Promise => {
try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
-
- console.log(`Criando webhook para o usuário: ${normalizedEmail}`);
+ console.log(`Criando webhook para o usuário: ${userEmail}`);
// URL do endpoint - mantém o @ normal no email
- const endpoint = `/webhook/set/${normalizedEmail}`;
+ const endpoint = `/webhook/set/${userEmail}`;
// Agora mantemos o email original com @ também na URL do webhook
const webhookBody = {
webhook: {
enabled: true,
- url: `https://webhookn8n.innova1001.com.br/webhook/${normalizedEmail}`,
+ url: `https://webhookn8n.innova1001.com.br/webhook/${userEmail}`,
webhookByEvents: true,
webhookBase64: true,
events: [
@@ -29,13 +26,13 @@ export const createEvolutionWebhook = async (userEmail: string): Promise =>
console.log('Dados do webhook:', {
endpoint,
- emailOriginal: normalizedEmail,
+ emailOriginal: userEmail,
webhookUrl: webhookBody.webhook.url
});
const response = await makeRequest(endpoint, 'POST', webhookBody);
- console.log(`✅ Webhook criado com sucesso para ${normalizedEmail}:`, response);
+ console.log(`✅ Webhook criado com sucesso para ${userEmail}:`, response);
return response;
} catch (error) {
diff --git a/src/services/whatsAppGroupsService.ts b/src/services/whatsAppGroupsService.ts
index c134cb3..7789a60 100644
--- a/src/services/whatsAppGroupsService.ts
+++ b/src/services/whatsAppGroupsService.ts
@@ -42,7 +42,7 @@ export async function findOrCreateWhatsAppGroup(nomeGrupo?: string): Promise {
return [];
}
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
+ // Normalizar o email (minúsculo e sem espaços)
const normalizedEmail = userEmail.trim().toLowerCase();
// Buscar grupos associados ao email do usuário
diff --git a/src/services/whatsAppInstance/index.ts b/src/services/whatsAppInstance/index.ts
index dfea93b..637bbc1 100644
--- a/src/services/whatsAppInstance/index.ts
+++ b/src/services/whatsAppInstance/index.ts
@@ -1,30 +1,6 @@
-// Re-export all functions from the new modular structure
+// Re-export all WhatsApp instance service functions
export * from './databaseOperations';
export * from './workflowOperations';
+export * from './userOperations';
export * from './config';
-
-// For backwards compatibility, also export individual functions specifically
-export {
- updateUserWhatsAppInstance,
- getUserWhatsAppInstance,
- removeUserWhatsAppInstance,
- getUserDebugInfo
-} from './databaseOperations';
-
-export {
- activateUserWorkflow
-} from './workflowOperations';
-
-// Export a helper function to check if user has instance
-export async function checkUserHasInstance(userEmail: string): Promise {
- try {
- const { getUserWhatsAppInstance } = await import('./databaseOperations');
- const instanceData = await getUserWhatsAppInstance(userEmail.trim().toLowerCase());
-
- return !!(instanceData && instanceData.instancia_zap && instanceData.instancia_zap.trim() !== '');
- } catch (error) {
- console.error('Erro ao verificar se usuário tem instância:', error);
- return false;
- }
-}
diff --git a/src/services/whatsAppInstance/userOperations.ts b/src/services/whatsAppInstance/userOperations.ts
index f63a8f9..2fb7df7 100644
--- a/src/services/whatsAppInstance/userOperations.ts
+++ b/src/services/whatsAppInstance/userOperations.ts
@@ -1,198 +1,21 @@
-import { supabase } from "@/integrations/supabase/client";
+import { getUserWhatsAppInstance } from './databaseOperations';
/**
- * Updates user WhatsApp instance information in the database
+ * User-related WhatsApp instance operations
*/
-export async function updateUserWhatsAppInstance(
- userEmail: string,
- instanceName: string,
- status: string,
- phoneNumber?: string
-): Promise {
- try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
- const normalizedInstanceName = instanceName.trim().toLowerCase();
-
- console.log(`Atualizando instância WhatsApp para usuário: ${normalizedEmail}`);
-
- // Verificar se já existe um registro para este usuário
- const { data: existingUser, error: fetchError } = await supabase
- .from('usuarios')
- .select('*')
- .eq('email', normalizedEmail)
- .single();
-
- if (fetchError && fetchError.code !== 'PGRST116') { // PGRST116 = no rows returned
- console.error('Erro ao buscar usuário:', fetchError);
- throw fetchError;
- }
-
- if (existingUser) {
- // Atualizar registro existente
- const updateData: any = {
- instancia_zap: normalizedInstanceName,
- status_instancia: status
- };
-
- // Adicionar telefone se fornecido
- if (phoneNumber) {
- updateData.whatsapp = phoneNumber;
- }
-
- const { error: updateError } = await supabase
- .from('usuarios')
- .update(updateData)
- .eq('email', normalizedEmail);
-
- if (updateError) {
- console.error('Erro ao atualizar instância WhatsApp:', updateError);
- throw updateError;
- }
-
- console.log(`✅ Instância WhatsApp atualizada para ${normalizedEmail}: ${normalizedInstanceName} (${status})`);
- } else {
- // Criar novo registro - whatsapp é obrigatório na inserção
- const insertData = {
- email: normalizedEmail,
- instancia_zap: normalizedInstanceName,
- status_instancia: status,
- whatsapp: phoneNumber || '00000000000' // Valor padrão se não fornecido
- };
-
- const { error: insertError } = await supabase
- .from('usuarios')
- .insert(insertData);
-
- if (insertError) {
- console.error('Erro ao criar registro de instância WhatsApp:', insertError);
- throw insertError;
- }
-
- console.log(`✅ Novo registro de instância WhatsApp criado para ${normalizedEmail}: ${normalizedInstanceName} (${status})`);
- }
- } catch (error) {
- console.error('Erro ao atualizar instância WhatsApp do usuário:', error);
- throw error;
- }
-}
/**
- * Gets user WhatsApp instance information from the database
- */
-export async function getUserWhatsAppInstance(userEmail: string): Promise<{
- instancia_zap: string | null;
- status_instancia: string | null;
- whatsapp: string | null;
-} | null> {
- try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
-
- console.log(`Buscando instância WhatsApp para usuário: ${normalizedEmail}`);
-
- const { data, error } = await supabase
- .from('usuarios')
- .select('instancia_zap, status_instancia, whatsapp')
- .eq('email', normalizedEmail)
- .single();
-
- if (error) {
- if (error.code === 'PGRST116') { // No rows returned
- console.log(`Nenhuma instância encontrada para ${normalizedEmail}`);
- return null;
- }
- console.error('Erro ao buscar instância WhatsApp:', error);
- throw error;
- }
-
- console.log(`✅ Instância encontrada para ${normalizedEmail}:`, data);
- return data;
- } catch (error) {
- console.error('Erro ao buscar instância WhatsApp do usuário:', error);
- throw error;
- }
-}
-
-/**
- * Removes user WhatsApp instance information from the database
- */
-export async function removeUserWhatsAppInstance(userEmail: string): Promise {
- try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
-
- console.log(`Removendo instância WhatsApp para usuário: ${normalizedEmail}`);
-
- const { error } = await supabase
- .from('usuarios')
- .update({
- instancia_zap: null,
- status_instancia: null,
- whatsapp: null
- })
- .eq('email', normalizedEmail);
-
- if (error) {
- console.error('Erro ao remover instância WhatsApp:', error);
- throw error;
- }
-
- console.log(`✅ Instância WhatsApp removida para ${normalizedEmail}`);
- } catch (error) {
- console.error('Erro ao remover instância WhatsApp do usuário:', error);
- throw error;
- }
-}
-
-/**
- * Checks if user has a WhatsApp instance
+ * Checks if user has an active WhatsApp instance
*/
export async function checkUserHasInstance(userEmail: string): Promise {
try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
-
- const instanceData = await getUserWhatsAppInstance(normalizedEmail);
-
- return !!(instanceData && instanceData.instancia_zap && instanceData.instancia_zap.trim() !== '');
+ const instanceData = await getUserWhatsAppInstance(userEmail);
+ const hasInstance = !!(instanceData && instanceData.instancia_zap && instanceData.instancia_zap.trim() !== '');
+ console.log(`Usuário ${userEmail} tem instância:`, hasInstance, instanceData);
+ return hasInstance;
} catch (error) {
console.error('Erro ao verificar se usuário tem instância:', error);
return false;
}
}
-
-/**
- * Gets debug information for user WhatsApp instance
- */
-export async function getUserDebugInfo(userEmail: string): Promise {
- try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
-
- console.log(`Buscando informações de debug para: ${normalizedEmail}`);
-
- const { data, error } = await supabase
- .from('usuarios')
- .select('*')
- .eq('email', normalizedEmail)
- .single();
-
- if (error) {
- if (error.code === 'PGRST116') {
- return { message: 'Usuário não encontrado', email: normalizedEmail };
- }
- throw error;
- }
-
- return {
- ...data,
- email_normalizado: normalizedEmail,
- debug_timestamp: new Date().toISOString()
- };
- } catch (error) {
- console.error('Erro ao buscar informações de debug:', error);
- throw error;
- }
-}
diff --git a/src/services/whatsAppInstance/workflowOperations.ts b/src/services/whatsAppInstance/workflowOperations.ts
index cede082..6108e30 100644
--- a/src/services/whatsAppInstance/workflowOperations.ts
+++ b/src/services/whatsAppInstance/workflowOperations.ts
@@ -5,57 +5,19 @@ import { N8N_CONFIG } from './config';
* N8N workflow operations
*/
-/**
- * Ativa um workflow específico no n8n via API direta
- */
-export async function activateN8nWorkflow(workflowId: string): Promise {
- try {
- console.log(`🔔 Ativando workflow no n8n: ${workflowId}`);
-
- const apiUrl = `${N8N_CONFIG.BASE_URL}/workflows/${workflowId}/activate`;
- console.log(`🔗 URL da API: ${apiUrl}`);
-
- const response = await fetch(apiUrl, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'X-N8N-API-KEY': N8N_CONFIG.API_KEY
- }
- });
-
- console.log(`📡 Status da resposta da API: ${response.status}`);
-
- if (!response.ok) {
- const errorText = await response.text();
- console.error(`❌ Erro ao ativar workflow: ${response.status} - ${errorText}`);
- throw new Error(`Erro ao ativar workflow: ${response.status} - ${errorText}`);
- }
-
- const responseData = await response.json();
- console.log('✅ Workflow ativado com sucesso:', responseData);
-
- } catch (error) {
- console.error('💥 Erro crítico ao ativar workflow:', error);
- throw error;
- }
-}
-
/**
* Notifica o n8n para ativar o workflow do usuário via webhook
*/
export async function activateUserWorkflow(userEmail: string): Promise {
try {
- // ⚠️ PADRONIZAÇÃO CRÍTICA: Converter email para lowercase
- const normalizedEmail = userEmail.trim().toLowerCase();
-
- console.log(`🔔 Enviando webhook para ativar workflow do usuário: ${normalizedEmail}`);
+ console.log(`🔔 Enviando webhook para ativar workflow do usuário: ${userEmail}`);
// Nova lógica: webhook simples para o n8n
const webhookUrl = 'https://webhookn8n.innova1001.com.br/webhook/ativarworkflow';
console.log(`🔗 URL do webhook: ${webhookUrl}`);
const webhookBody = {
- email: normalizedEmail
+ email: userEmail
};
console.log('📦 Dados do webhook:', JSON.stringify(webhookBody, null, 2));
diff --git a/src/types/whatsAppTypes.ts b/src/types/whatsAppTypes.ts
index c57fda6..ffd0401 100644
--- a/src/types/whatsAppTypes.ts
+++ b/src/types/whatsAppTypes.ts
@@ -8,5 +8,4 @@ export interface WhatsAppInstance {
qrcode?: string | null;
connectionState?: 'open' | 'closed' | 'connecting' | string;
presence?: 'online' | 'offline';
- lastSeen?: string;
}