Descreva o problema/erro/pergunta
Oi!!
Atualmente temos uma integração com QB que está funcionando bem, com o formato antigo. A partir de agosto, eles estarão forçando uma mudança para seu novo schema…
Estamos enfrentando um problema com o novo formato de payload do CloudEvents (schema v2.0) — o nó Webhook retorna um corpo vazio ({}), tanto com Raw Body ativado quanto desativado 
Resumo rápido da configuração:
- Nó Webhook (v2.1) recebendo requisições POST do QuickBooks
- Com Raw Body = false: corpo está presente mas nulo (
{})
- Com Raw Body = true: corpo completamente ausente no resultado
Os headers chegam normalmente, então a requisição está definitivamente atingindo o nó — parece apenas que n8n não está analisando o tipo de conteúdo do corpo corretamente.
Alguém mais lidou com o novo formato de payload de webhook do QuickBooks? Alguma solução alternativa para obter o corpo analisado corretamente?
Issue no GitHub relacionada para referência: Quickbooks API returning null body · Issue #28750 · n8n-io/n8n · GitHub
Qual é a mensagem de erro (se houver)? N/A
Por favor, compartilhe seu workflow
{
“nodes”: [
{
“parameters”: {
“httpMethod”: “POST”,
“path”: “qb-invoice-created”,
“options”: {
“binaryPropertyName”: “data”,
“rawBody”: true
}
},
“type”: “n8n-nodes-base.webhook”,
“typeVersion”: 2.1,
“position”: [
-384,
96
],
“id”: “e4f54943-e131-42a2-99f5-43ec3e7cc314”,
“name”: “Webhook”,
“webhookId”: “9b2ef218-1f57-46b0-99ba-1d1929ccb5f4”
}
],
“connections”: {
“Webhook”: {
“main”: [
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “b45ee928b826ee03de7f50699776b5bbce13dfef5ed3d12709796e32a0102f85”
}
}
Compartilhe o resultado retornado pelo último nó
{}
Informações sobre sua configuração n8n
- Versão n8n: 1.123.54
- Executando n8n via (Docker, npm, n8n cloud, aplicativo desktop): n8n cloud
1 curtida
Bem-vindo @Mathias_Viscardi!
A causa raiz é que o nó webhook do n8n não reconhece application/cloudevents+json como um tipo de conteúdo que deve fazer auto-parse, então o body chega como null. Com Raw Body = true, o payload deve chegar na saída binária. Tente adicionar um nó Code logo após o webhook e extraia assim:
const raw = $input.item.binary?.data
? Buffer.from($input.item.binary.data, 'base64').toString('utf8')
: $input.item.json.rawBody;
return [{ json: JSON.parse(raw) }];
Se binary.data também estiver vazio, verifique $input.item.json - algumas versões do n8n armazenam a string bruta sob uma chave rawBody mesmo quando a UI mostra null. Esta é uma lacuna conhecida rastreada na issue do GitHub que você vinculou, então vale a pena adicionar um comentário lá também antes de agosto.
Bem-vindo @Mathias_Viscardi!
Este é o problema do tipo de conteúdo CloudEvents. O schema v2 do QuickBooks envia requisições com application/cloudevents+json como header Content-Type, que o nó Webhook do n8n não analisa como JSON padrão - ele pula o corpo inteiro ou retorna null para ele.
Com Raw Body = true (que você já tem configurado), os bytes brutos chegam em $binary.data como uma string codificada em base64. Adicione um nó Code logo após o Webhook e analise manualmente:
const rawData = $input.first().binary.data;
const decoded = Buffer.from(rawData.data, 'base64').toString('utf8');
return [{ json: JSON.parse(decoded) }];
Isso fornece o payload completo do CloudEvents como um objeto JSON normal. Você pode então acessar os dados do evento QuickBooks via $json.data (ou qualquer chave que QB use no novo schema).
1 curtida
Oi @nguyenthieutoan !
Muito obrigado pela sua sugestão
Tive que mudar um pouco para
const rawData = $input.first().binary.data;const decoded = Buffer.from(rawData.data, 'base64').toString('utf8');const parsed = JSON.parse(decoded);return [{ parsed }];
mas com isso parece estar funcionando agora!!
Obrigado novamente!!
1 curtida
Fico feliz que funcionou! O caminho .binary.data é o correto para o payload do webhook do Intuit, já que o n8n armazena os dados binários brutos lá. Boa sacada na sua ajuste.