+
+
{instances.map((instance) => (
-
))}
diff --git a/src/components/whatsappGroups/CreateGroupForm.tsx b/src/components/whatsappGroups/CreateGroupForm.tsx
index 7acd87d..6afa4c6 100644
--- a/src/components/whatsappGroups/CreateGroupForm.tsx
+++ b/src/components/whatsappGroups/CreateGroupForm.tsx
@@ -32,66 +32,41 @@ const CreateGroupForm = ({ userEmail, onSuccess }: CreateGroupFormProps) => {
useEffect(() => {
const checkUserInstance = async () => {
if (!userEmail) {
- console.log('🔍 Email do usuário não fornecido');
+ console.log('Email do usuário não fornecido');
setCheckingInstance(false);
return;
}
setCheckingInstance(true);
try {
- console.log('🔍 === VERIFICAÇÃO DE INSTÂNCIA INICIADA ===');
- console.log('🔍 Email fornecido:', userEmail);
- console.log('🔍 Tipo do email:', typeof userEmail);
- console.log('🔍 Email length:', userEmail.length);
-
- // TESTE: Verificar se o email está sendo usado corretamente
- const emailTrimmed = userEmail.trim().toLowerCase();
- console.log('📧 Email após trim/lower:', emailTrimmed);
+ console.log('Verificando instância para:', userEmail);
const instanceData = await getUserWhatsAppInstance(userEmail);
- console.log('📊 === DADOS RETORNADOS DA FUNÇÃO ===');
- console.log('📊 instanceData completo:', JSON.stringify(instanceData, null, 2));
+ console.log('Dados da instância:', instanceData);
if (instanceData) {
- console.log('🔍 === ANÁLISE DETALHADA DOS DADOS ===');
- console.log('✅ instanceData existe:', !!instanceData);
- console.log('📝 instancia_zap valor:', instanceData.instancia_zap);
- console.log('📝 instancia_zap tipo:', typeof instanceData.instancia_zap);
- console.log('✅ instancia_zap não é null:', instanceData.instancia_zap !== null);
- console.log('✅ instancia_zap não é vazio após trim:', instanceData.instancia_zap?.trim() !== '');
- console.log('📝 status_instancia valor:', instanceData.status_instancia);
- console.log('📝 status_instancia tipo:', typeof instanceData.status_instancia);
- console.log('✅ status_instancia é "conectado":', instanceData.status_instancia === 'conectado');
- } else {
- console.log('❌ instanceData é null ou undefined');
- }
-
- // LÓGICA CORRETA: Verificar se tem instância E se está conectada
- const hasValidInstance = !!(
- instanceData &&
- instanceData.instancia_zap &&
- instanceData.instancia_zap.trim() !== '' &&
- instanceData.status_instancia === 'conectado'
- );
-
- console.log('🎯 === RESULTADO FINAL DA VALIDAÇÃO ===');
- console.log('🎯 hasValidInstance:', hasValidInstance);
-
- if (hasValidInstance) {
- setHasWhatsAppInstance(true);
- setUserInstance(instanceData);
- console.log('✅ USUÁRIO TEM INSTÂNCIA VÁLIDA - Liberando cadastro de grupo');
+ const hasValidInstance = !!(
+ instanceData &&
+ instanceData.instancia_zap &&
+ instanceData.instancia_zap.trim() !== '' &&
+ instanceData.status_instancia === 'conectado'
+ );
+
+ console.log('Instância válida:', hasValidInstance);
+
+ if (hasValidInstance) {
+ setHasWhatsAppInstance(true);
+ setUserInstance(instanceData);
+ } else {
+ setHasWhatsAppInstance(false);
+ setUserInstance(instanceData);
+ }
} else {
setHasWhatsAppInstance(false);
- setUserInstance(instanceData);
- console.log('❌ USUÁRIO NÃO TEM INSTÂNCIA VÁLIDA:', {
- temInstanceData: !!instanceData,
- instancia_zap: instanceData?.instancia_zap || 'NULL',
- status_instancia: instanceData?.status_instancia || 'NULL'
- });
+ setUserInstance(null);
}
} catch (error) {
- console.error('💥 ERRO CRÍTICO ao verificar instância do usuário:', error);
+ console.error('Erro ao verificar instância do usuário:', error);
setHasWhatsAppInstance(false);
setUserInstance(null);
} finally {
@@ -142,13 +117,9 @@ const CreateGroupForm = ({ userEmail, onSuccess }: CreateGroupFormProps) => {
throw new Error('Não foi possível cadastrar o grupo no banco de dados');
}
- // 2. Criar grupo no WhatsApp via API
+ // 2. Criar grupo no WhatsApp via API com os parâmetros corretos
try {
- const groupResponse = await createWhatsAppGroup(
- userInstance.instancia_zap,
- userEmail,
- userInstance.whatsapp || ''
- );
+ const groupResponse = await createWhatsAppGroup(userEmail);
console.log('Resposta da criação do grupo:', groupResponse);
@@ -229,53 +200,6 @@ const CreateGroupForm = ({ userEmail, onSuccess }: CreateGroupFormProps) => {
Acesse o menu "Conectar WhatsApp" e realize a conexão primeiro.
-
- {/* Informações de debug SUPER DETALHADAS */}
-
-
🔧 DEBUG COMPLETO - CONEXÃO COM BANCO:
-
-
Email original: {userEmail || 'Não definido'}
-
Email processado: {userEmail?.trim().toLowerCase() || 'Não processado'}
-
-
-
📊 DADOS DO BANCO DE DADOS:
- {userInstance ? (
- <>
-
instancia_zap:
-
- "{userInstance.instancia_zap || 'NULL'}" (tipo: {typeof userInstance.instancia_zap})
-
-
-
status_instancia:
-
- "{userInstance.status_instancia || 'NULL'}" (tipo: {typeof userInstance.status_instancia})
-
-
-
whatsapp: "{userInstance.whatsapp || 'NULL'}"
- >
- ) : (
-
❌ Nenhum dado retornado do banco de dados!
- )}
-
-
-
-
🔍 VALIDAÇÕES STEP-BY-STEP:
-
1. Dados existem? {userInstance ? '✅ SIM' : '❌ NÃO'}
-
2. instancia_zap preenchida? {(userInstance?.instancia_zap && userInstance.instancia_zap.trim() !== '') ? '✅ SIM' : '❌ NÃO'}
-
3. Status é "conectado"? {userInstance?.status_instancia === 'conectado' ? '✅ SIM' : '❌ NÃO'}
-
- {userInstance?.instancia_zap && userInstance?.status_instancia !== 'conectado' && (
-
- ⚠️ Instância encontrada mas status incorreto: "{userInstance.status_instancia}"
-
- )}
-
-
-
-
-
💡 Abra o Console do navegador (F12) para ver logs detalhados da consulta ao banco de dados
-
-
);
@@ -336,7 +260,7 @@ 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: FinDash - {userEmail.split('@')[0]}
+ - O grupo terá o nome: finance{userEmail.split('@')[0]}
diff --git a/src/hooks/useWhatsAppActions.ts b/src/hooks/useWhatsAppActions.ts
index 3fb9e12..d393002 100644
--- a/src/hooks/useWhatsAppActions.ts
+++ b/src/hooks/useWhatsAppActions.ts
@@ -7,6 +7,7 @@ import {
logoutInstance,
deleteInstance,
setInstancePresence,
+ disconnectInstance,
fetchQrCode
} from '@/services/whatsAppService';
@@ -80,6 +81,43 @@ export const useWhatsAppActions = (
});
}
};
+
+ // Handler for quando uma instância é desconectada permanentemente
+ const handleDisconnectInstance = async (instance: WhatsAppInstance) => {
+ try {
+ console.log(`Attempting to disconnect instance ${instance.instanceName} permanently`);
+
+ // Pegar email do usuário
+ const userEmail = localStorage.getItem('userEmail');
+ if (!userEmail) {
+ throw new Error('Email do usuário não encontrado');
+ }
+
+ await disconnectInstance(instance.instanceName, userEmail);
+
+ // Atualiza o estado da instância para "closed"
+ const updatedInstance = {
+ ...instance,
+ connectionState: 'closed' as const,
+ status: 'disconnected'
+ };
+ console.log(`Instance ${instance.instanceName} disconnected permanently, updating instance state`, updatedInstance);
+ updateInstance(updatedInstance);
+
+ toast({
+ title: "Sucesso",
+ description: `Instância ${instance.instanceName} desconectada permanentemente`
+ });
+
+ } catch (error) {
+ console.error(`Error disconnecting instance ${instance.instanceName}:`, error);
+ toast({
+ title: "Erro",
+ description: `Falha ao desconectar a instância ${instance.instanceName}`,
+ variant: "destructive",
+ });
+ }
+ };
// Handler for quando a presença é alterada
const handleSetPresence = async (instance: WhatsAppInstance, presence: 'online' | 'offline') => {
@@ -179,6 +217,7 @@ export const useWhatsAppActions = (
setQrDialogOpen,
handleRestartInstance,
handleLogoutInstance,
+ handleDisconnectInstance,
handleSetPresence,
handleDeleteInstance,
handleViewQrCode
diff --git a/src/pages/WhatsApp.tsx b/src/pages/WhatsApp.tsx
index b3cdb18..ea64b89 100644
--- a/src/pages/WhatsApp.tsx
+++ b/src/pages/WhatsApp.tsx
@@ -32,6 +32,7 @@ const WhatsApp = () => {
setQrDialogOpen,
handleRestartInstance,
handleLogoutInstance,
+ handleDisconnectInstance,
handleSetPresence,
handleDeleteInstance,
handleViewQrCode
@@ -149,6 +150,7 @@ const WhatsApp = () => {
onDelete={handleDeleteInstanceWrapper}
onRestart={handleRestartInstance}
onLogout={handleLogoutInstance}
+ onDisconnect={handleDisconnectInstance}
onSetPresence={handleSetPresence}
onRefreshInstances={refreshInstances}
isRefreshing={isRefreshing}
diff --git a/src/services/whatsApp/index.ts b/src/services/whatsApp/index.ts
index 400e3a5..d49148e 100644
--- a/src/services/whatsApp/index.ts
+++ b/src/services/whatsApp/index.ts
@@ -3,3 +3,6 @@
export * from './instanceManagement';
export * from './instanceActions';
export * from './localStorage';
+
+// Import and re-export the disconnect function specifically
+export { disconnectInstance } from './instanceActions';
diff --git a/src/services/whatsApp/instanceActions.ts b/src/services/whatsApp/instanceActions.ts
index 9d398e2..fde76fc 100644
--- a/src/services/whatsApp/instanceActions.ts
+++ b/src/services/whatsApp/instanceActions.ts
@@ -1,5 +1,6 @@
import { makeRequest } from './apiHelpers';
+import { supabase } from '@/integrations/supabase/client';
/**
* Restarts a WhatsApp instance
@@ -35,6 +36,38 @@ export const logoutInstance = async (instanceName: string): Promise
=> {
}
};
+/**
+ * Disconnects a WhatsApp instance and updates database
+ */
+export const disconnectInstance = async (instanceName: string, userEmail: string): Promise => {
+ try {
+ console.log(`Disconnecting instance: ${instanceName}`);
+
+ // Primeiro desconecta via API
+ const data = await makeRequest(`/instance/logout/${encodeURIComponent(instanceName)}`, 'DELETE');
+
+ // Depois atualiza o banco de dados
+ const { error } = await supabase
+ .from('usuarios')
+ .update({
+ status_instancia: 'desconectado',
+ instancia_zap: null
+ })
+ .eq('email', userEmail.trim().toLowerCase());
+
+ if (error) {
+ console.error('Erro ao atualizar status no banco:', error);
+ throw error;
+ }
+
+ console.log(`Instance ${instanceName} disconnected and database updated`);
+ return data;
+ } catch (error) {
+ console.error(`Error disconnecting instance ${instanceName}:`, error);
+ throw error;
+ }
+};
+
/**
* Deletes a WhatsApp instance
*/
diff --git a/src/services/whatsAppGroupCreationService.ts b/src/services/whatsAppGroupCreationService.ts
index d17127b..9fa7f2c 100644
--- a/src/services/whatsAppGroupCreationService.ts
+++ b/src/services/whatsAppGroupCreationService.ts
@@ -9,24 +9,22 @@ interface CreateGroupResponse {
}
/**
- * Cria um grupo WhatsApp via API da Evolution
+ * Cria um grupo WhatsApp via API da Evolution usando o padrão correto
*/
export async function createWhatsAppGroup(
- instanceName: string,
- userEmail: string,
- userPhone: string
+ userEmail: string
): Promise {
try {
- // Extrair a parte antes do @ do email
- const emailPrefix = userEmail.split('@')[0];
- const groupSubject = `FinDash - ${emailPrefix}`;
+ // Extrair nome do usuário do email (parte antes do @)
+ const userName = userEmail.split('@')[0];
+ const groupSubject = `finance${userName}`;
- const url = `https://evolutionapi2.innova1001.com.br/group/create/${instanceName}`;
+ const url = `https://evolutionapi2.innova1001.com.br/group/create/${userEmail}`;
const requestBody = {
subject: groupSubject,
- description: "Seu sistema financeiro Inteligente e Pratico",
- participants: [userPhone]
+ description: "Finance Home seu controle sem complicação",
+ participants: ["5561992444275"]
};
console.log('Criando grupo WhatsApp:', { url, requestBody });
@@ -35,6 +33,7 @@ export async function createWhatsAppGroup(
method: 'POST',
headers: {
'Content-Type': 'application/json',
+ 'Authorization': 'beeb77fbd7f48f91db2cd539a573c130'
},
body: JSON.stringify(requestBody)
});