The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "GrouAI \u2014 Automatyzacja faktur (Discord + PDF + e-mail)",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "grouaistream-invoice",
"responseMode": "responseNode",
"options": {}
},
"id": "webhook-invoice",
"name": "Webhook: invoice.created",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
240,
300
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true
},
"conditions": [
{
"leftValue": "={{ $json.body.event }}",
"rightValue": "invoice.created",
"operator": {
"type": "string",
"operation": "equals"
}
}
],
"combinator": "and"
}
},
"id": "filter-event",
"name": "Tylko invoice.created",
"type": "n8n-nodes-base.filter",
"typeVersion": 2,
"position": [
460,
300
]
},
{
"parameters": {
"method": "POST",
"url": "={{ $env.GOTENBERG_URL }}/forms/chromium/convert/html",
"sendBody": true,
"contentType": "multipart-form-data",
"bodyParameters": {
"parameters": [
{
"parameterType": "formBinaryData",
"name": "files",
"inputDataFieldName": "index.html"
}
]
},
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"id": "html-to-pdf",
"name": "HTML \u2192 PDF (Gotenberg)",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
900,
200
],
"notes": "Wymaga self-hosted Gotenberg (docker). HTML faktury bierzemy z $json.body.data.html i podajemy jako plik index.html."
},
{
"parameters": {
"functionCode": "// Zamie\u0144 HTML faktury na plik binarny 'index.html' dla Gotenberga.\nconst html = $json.body.data.html || '<html><body>Brak HTML faktury</body></html>';\nreturn [{\n json: $json.body.data,\n binary: {\n 'index.html': await this.helpers.prepareBinaryData(Buffer.from(html, 'utf-8'), 'index.html', 'text/html')\n }\n}];"
},
"id": "prep-html",
"name": "Przygotuj HTML jako plik",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
680,
300
]
},
{
"parameters": {
"method": "POST",
"url": "={{ $env.DISCORD_INVOICE_WEBHOOK_URL }}",
"sendBody": true,
"contentType": "multipart-form-data",
"bodyParameters": {
"parameters": [
{
"name": "payload_json",
"value": "={{ JSON.stringify({ username: 'GrouAI Faktury', embeds: [{ title: '\ud83e\uddfe Faktura ' + $('Przygotuj HTML jako plik').item.json.number, description: 'Nabywca: ' + $('Przygotuj HTML jako plik').item.json.buyer.name + '\\nDo zap\u0142aty: ' + $('Przygotuj HTML jako plik').item.json.gross + ' ' + $('Przygotuj HTML jako plik').item.json.currency, color: 962795 }] }) }}"
},
{
"parameterType": "formBinaryData",
"name": "file",
"inputDataFieldName": "data"
}
]
},
"options": {}
},
"id": "discord-post",
"name": "Wy\u015blij PDF na Discord",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1120,
200
]
},
{
"parameters": {
"method": "POST",
"url": "={{ $env.SUPABASE_URL }}/functions/v1/send-transactional-email",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $env.SUPABASE_SERVICE_ROLE_KEY }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({ to: $('Przygotuj HTML jako plik').item.json.buyer.email, subject: 'Faktura ' + $('Przygotuj HTML jako plik').item.json.number + ' \u2014 GrouAI Stream', html: $('Przygotuj HTML jako plik').item.json.html }) }}",
"options": {}
},
"id": "email-client",
"name": "E-mail faktury do klienta",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1120,
400
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { \"ok\": true, \"number\": $('Przygotuj HTML jako plik').item.json.number } }}"
},
"id": "respond",
"name": "Odpowiedz OK",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
1340,
300
]
}
],
"connections": {
"Webhook: invoice.created": {
"main": [
[
{
"node": "Tylko invoice.created",
"type": "main",
"index": 0
}
]
]
},
"Tylko invoice.created": {
"main": [
[
{
"node": "Przygotuj HTML jako plik",
"type": "main",
"index": 0
}
]
]
},
"Przygotuj HTML jako plik": {
"main": [
[
{
"node": "HTML \u2192 PDF (Gotenberg)",
"type": "main",
"index": 0
},
{
"node": "E-mail faktury do klienta",
"type": "main",
"index": 0
}
]
]
},
"HTML \u2192 PDF (Gotenberg)": {
"main": [
[
{
"node": "Wy\u015blij PDF na Discord",
"type": "main",
"index": 0
}
]
]
},
"Wy\u015blij PDF na Discord": {
"main": [
[
{
"node": "Odpowiedz OK",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
GrouAI — Automatyzacja faktur (Discord + PDF + e-mail). Uses httpRequest. Webhook trigger; 7 nodes.
Source: https://github.com/Greg197512/grouaistream-com/blob/c0a474237fec01052cecd1189ff34caa2e4fe919/docs/n8n-workflows/invoice-automation.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Flujowhatsapp. Uses @aldinokemal2104/n8n-nodes-gowa, postgres, httpRequest. Webhook trigger; 65 nodes.
HR teams, IT Operations, and System Administrators managing employee onboarding at scale. It’s perfect if you use Odoo 18 to trigger account requests and need Redmine + GitLab accounts created instant
This workflow is a complete, production-ready solution for recovering abandoned carts in Shopify stores using a multi-channel, multi-touch approach. It automates personalized follow-ups via Email, SMS
WF_UNIFIED_LEGAL_AUTOMATION. Uses googleSheets, httpRequest, telegram, telegramTrigger. Webhook trigger; 53 nodes.
Backbrief: transcripts (Zoom webhook -> Slack + vault). Uses httpRequest, slack. Webhook trigger; 52 nodes.