Fix: Cadastrar Grupo button failing quickly
The "Cadastrar Grupo" button now fails immediately. The priority is to ensure the n8n workflow creation request succeeds. This commit reviews the button's context and related code to address the issue.
This commit is contained in:
parent
7736ab1452
commit
e0f6bc4b86
@ -1,4 +1,3 @@
|
||||
|
||||
import { useState, useEffect } from 'react';
|
||||
import Layout from '@/components/layout/Layout';
|
||||
import { Button } from '@/components/ui/button';
|
||||
@ -50,7 +49,7 @@ const GruposWhatsApp = () => {
|
||||
buscarGrupos();
|
||||
}, []);
|
||||
|
||||
// Cadastrar novo grupo
|
||||
// Cadastrar novo grupo ou atualizar workflow se necessário
|
||||
const handleCadastrarGrupo = async () => {
|
||||
setErrorMessage(null);
|
||||
setDebugInfo(null);
|
||||
@ -67,13 +66,13 @@ const GruposWhatsApp = () => {
|
||||
setCadastrando(true);
|
||||
try {
|
||||
console.log("Iniciando processo de cadastro de grupo...");
|
||||
const novoGrupo = await cadastrarGrupoWhatsApp();
|
||||
const grupo = await cadastrarGrupoWhatsApp();
|
||||
|
||||
if (novoGrupo) {
|
||||
if (grupo) {
|
||||
let successMessage = 'Grupo registrado com sucesso';
|
||||
let variant: 'default' | 'destructive' = 'default';
|
||||
|
||||
if (novoGrupo.workflow_id) {
|
||||
if (grupo.workflow_id) {
|
||||
successMessage = 'Grupo cadastrado e workflow criado com sucesso!';
|
||||
} else {
|
||||
successMessage = 'Grupo cadastrado, mas falha ao criar workflow de automação.';
|
||||
@ -82,7 +81,7 @@ const GruposWhatsApp = () => {
|
||||
}
|
||||
|
||||
toast({
|
||||
title: novoGrupo.workflow_id ? 'Sucesso' : 'Atenção',
|
||||
title: grupo.workflow_id ? 'Sucesso' : 'Atenção',
|
||||
description: successMessage,
|
||||
variant: variant,
|
||||
});
|
||||
|
||||
@ -15,44 +15,74 @@ export async function cadastrarGrupoWhatsApp(): Promise<WhatsAppGroup | null> {
|
||||
// Normalizar o email (minúsculo e sem espaços)
|
||||
const normalizedEmail = userEmail.trim().toLowerCase();
|
||||
|
||||
// Criar registro na tabela grupos_whatsapp
|
||||
const { data, error } = await supabase
|
||||
// Primeiro verificar se já existe um grupo pendente para este usuário
|
||||
const { data: existingGroups } = await supabase
|
||||
.from('grupos_whatsapp')
|
||||
.insert({
|
||||
user_id: localStorage.getItem('userId') || '', // Mantido por compatibilidade
|
||||
remote_jid: '', // Valor temporário vazio - será preenchido pelo backend posteriormente
|
||||
login: normalizedEmail,
|
||||
status: 'pendente'
|
||||
})
|
||||
.select();
|
||||
.select('*')
|
||||
.eq('login', normalizedEmail)
|
||||
.eq('remote_jid', '')
|
||||
.eq('status', 'pendente');
|
||||
|
||||
if (error) {
|
||||
console.error('Erro ao cadastrar grupo do WhatsApp:', error);
|
||||
throw new Error('Não foi possível cadastrar o grupo de WhatsApp');
|
||||
let groupToUse: WhatsAppGroup | null = null;
|
||||
|
||||
if (existingGroups && existingGroups.length > 0) {
|
||||
console.log('Grupo pendente já existe para este usuário:', existingGroups[0]);
|
||||
groupToUse = existingGroups[0];
|
||||
|
||||
// Se já existe um workflow_id, não precisamos criar novamente
|
||||
if (groupToUse.workflow_id) {
|
||||
console.log('Workflow já existe para este grupo:', groupToUse.workflow_id);
|
||||
return groupToUse;
|
||||
}
|
||||
} else {
|
||||
// Criar registro na tabela grupos_whatsapp se não existir
|
||||
console.log('Criando novo grupo para o usuário:', normalizedEmail);
|
||||
const { data, error } = await supabase
|
||||
.from('grupos_whatsapp')
|
||||
.insert({
|
||||
user_id: localStorage.getItem('userId') || '',
|
||||
remote_jid: '',
|
||||
login: normalizedEmail,
|
||||
status: 'pendente'
|
||||
})
|
||||
.select();
|
||||
|
||||
if (error) {
|
||||
console.error('Erro ao cadastrar grupo do WhatsApp:', error);
|
||||
throw new Error('Não foi possível cadastrar o grupo de WhatsApp');
|
||||
}
|
||||
|
||||
if (!data || data.length === 0) {
|
||||
console.error('Nenhum dado retornado após inserção');
|
||||
return null;
|
||||
}
|
||||
|
||||
console.log('Grupo WhatsApp cadastrado com sucesso:', data);
|
||||
groupToUse = data[0];
|
||||
}
|
||||
|
||||
if (!data || data.length === 0) {
|
||||
console.error('Nenhum dado retornado após inserção');
|
||||
// A partir daqui, temos um grupo para usar, seja novo ou existente
|
||||
if (!groupToUse) {
|
||||
console.error('Erro inesperado: não foi possível obter ou criar um grupo');
|
||||
return null;
|
||||
}
|
||||
|
||||
console.log('Grupo WhatsApp cadastrado com sucesso:', data);
|
||||
const newGroup = data[0];
|
||||
|
||||
// Criar workflow no n8n
|
||||
// Criar workflow no n8n se não existir
|
||||
try {
|
||||
console.log(`Iniciando criação de workflow para o email: ${normalizedEmail}`);
|
||||
const workflowResponse = await createWorkflowInN8n(normalizedEmail);
|
||||
|
||||
console.log("Resposta completa do n8n:", workflowResponse);
|
||||
|
||||
if (workflowResponse && workflowResponse.id) {
|
||||
// Atualizar o objeto com o workflow_id
|
||||
await atualizarWorkflowId(newGroup.id, workflowResponse.id);
|
||||
newGroup.workflow_id = workflowResponse.id;
|
||||
console.log('Workflow criado com sucesso no n8n:', workflowResponse.id);
|
||||
} else {
|
||||
console.log('Resposta do n8n não contém ID de workflow válido:', workflowResponse);
|
||||
if (!groupToUse.workflow_id) {
|
||||
console.log(`Iniciando criação de workflow para o email: ${normalizedEmail} e grupo ID: ${groupToUse.id}`);
|
||||
const workflowResponse = await createWorkflowInN8n(normalizedEmail);
|
||||
|
||||
console.log("Resposta completa do n8n:", workflowResponse);
|
||||
|
||||
if (workflowResponse && workflowResponse.id) {
|
||||
// Atualizar o objeto com o workflow_id
|
||||
await atualizarWorkflowId(groupToUse.id, workflowResponse.id);
|
||||
groupToUse.workflow_id = workflowResponse.id;
|
||||
console.log('Workflow criado com sucesso no n8n:', workflowResponse.id);
|
||||
} else {
|
||||
console.log('Resposta do n8n não contém ID de workflow válido:', workflowResponse);
|
||||
}
|
||||
}
|
||||
} catch (n8nError) {
|
||||
console.error('Erro ao criar workflow no n8n:', n8nError);
|
||||
@ -60,7 +90,7 @@ export async function cadastrarGrupoWhatsApp(): Promise<WhatsAppGroup | null> {
|
||||
}
|
||||
|
||||
// Sempre retorna o grupo, mesmo se a criação do workflow falhar
|
||||
return newGroup;
|
||||
return groupToUse;
|
||||
} catch (error) {
|
||||
console.error('Erro ao cadastrar grupo do WhatsApp:', error);
|
||||
throw error; // Propaga o erro para ser tratado no componente
|
||||
@ -76,16 +106,15 @@ async function createWorkflowInN8n(email: string): Promise<{ id: string } | null
|
||||
const workflowName = `Workflow Home Finance - ${email}`;
|
||||
console.log(`Nome do workflow: ${workflowName}`);
|
||||
|
||||
// Verificação de CORS
|
||||
console.log("Iniciando requisição para n8n...");
|
||||
|
||||
// Testar primeiro com uma requisição OPTIONS para verificar CORS
|
||||
console.log("Enviando requisição OPTIONS para verificar CORS...");
|
||||
|
||||
try {
|
||||
const optionsResponse = await fetch('https://n8n.innova1001.com.br/api/v1/workflows', {
|
||||
method: 'OPTIONS',
|
||||
headers: {
|
||||
'Access-Control-Request-Method': 'POST',
|
||||
'Access-Control-Request-Headers': 'Content-Type, X-N8N-API-KEY',
|
||||
'Access-Control-Request-Headers': 'Content-Type, X-N8N-API-KEY, Origin',
|
||||
'Origin': window.location.origin
|
||||
}
|
||||
});
|
||||
@ -93,7 +122,8 @@ async function createWorkflowInN8n(email: string): Promise<{ id: string } | null
|
||||
console.log("Resposta OPTIONS:", {
|
||||
status: optionsResponse.status,
|
||||
ok: optionsResponse.ok,
|
||||
headers: Array.from(optionsResponse.headers.entries())
|
||||
headers: Array.from(optionsResponse.headers.entries()),
|
||||
statusText: optionsResponse.statusText
|
||||
});
|
||||
} catch (corsError) {
|
||||
console.error("Erro no teste de CORS:", corsError);
|
||||
@ -114,8 +144,7 @@ async function createWorkflowInN8n(email: string): Promise<{ id: string } | null
|
||||
nodes: [],
|
||||
connections: {},
|
||||
settings: {}
|
||||
}),
|
||||
mode: 'cors'
|
||||
})
|
||||
});
|
||||
|
||||
// Log detalhado do status da resposta
|
||||
|
||||
Loading…
Reference in New Issue
Block a user