[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Génère un workflow n8n: AI Blog Generator for Shopify Product listings: Using GPT-4o and Google Sheets

[Assistant]
<thinking>
**Analyse du besoin**: 🧠 AI Blog Generator for Shopify Products using GPT-4o

The AI Blog Generator is an advanced automation workflow powered by n8n, integrating GPT-4o and Google Sheets to generate SEO-rich blog articles ...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 14 nodes utilisant ai, google, http.
Structure: logique conditionnelle, traitement par lots, intégration IA.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"meta":{"instanceId":"d73282515b90623d4a8783919a2d772c706425d649e1512792f37ac51e07e4a8","templateCredsSetupCompleted":true},"nodes":[{"id":"096ccd11-0ae4-4e3d-aeac-d180c09512ae","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[300,180],"parameters":{},"typeVersion":1},{"id":"c95491ab-6e4e-4671-bfaf-b8a362d2ec01","name":"Shopify","type":"n8n-nodes-base.shopify","position":[580,180],"parameters":{"resource":"product","operation":"getAll","returnAll":true,"authentication":"accessToken","additionalFields":{}},"typeVersion":1},{"id":"1620e19b-cd01-4798-858c-8f2fb3d58087","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[840,180],"parameters":{"options":{},"fieldToSplitOut":"images"},"typeVersion":1},{"id":"944ab8ba-6e41-4e04-b442-9468ff341ba0","name":"OpenAI","type":"@n8n/n8n-nodes-langchain.openAi","position":[1060,180],"parameters":{"text":"=You are an expert OCR and nutrition facts extractor. You carefully extract only the exact nutritional data present in the image without fabricating or guessing. You can recognize nutritional facts tables, and you know how to distinguish between actual nutrition data and promotional or partial text. You return null if no clear nutrition facts table or readable nutritional information is present.\n\n\nYou will analyze an image containing a product's nutritional information. Extract all nutritional data exactly as shown in the image, including nutrient names, amounts, units, and daily values if present.\n\n- If the image clearly contains a nutritional facts table or full nutritional data, output it in clean JSON format, where each nutrient is a key and the value contains the amount, unit, and daily value if available.\n- If the image shows only partial, blurry, or promotional text like \"20% protein\" or any incomplete nutritional data, do NOT fabricate any values; instead, return null.\n- If there is no clear nutritional facts table or nutritional data visible in the image, return null.\n- Do not guess or invent any numbers.\n- Only include information that is confidently present and readable in the image.\n\nExample output when nutrition facts are present:\n\n{\n  \"Calories\": \"190\",\n  \"Total Fat\": {\n    \"amount\": \"8g\",\n    \"daily_value\": \"10%\"\n  },\n  \"Cholesterol\": {\n    \"amount\": \"0mg\",\n    \"daily_value\": \"0%\"\n  },\n  ...\n}\n\nExample output when no valid nutritional facts table or data is visible:\n\nnull\n","modelId":{"__rl":true,"mode":"list","value":"chatgpt-4o-latest","cachedResultName":"CHATGPT-4O-LATEST"},"options":{"detail":"auto","maxTokens":900},"resource":"image","imageUrls":"={{ $json.src }}","operation":"analyze"},"typeVersion":1.8},{"id":"390bd7e4-b7bc-4575-9fe4-36a81445c7d3","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[1480,580],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"typeVersion":1.2},{"id":"de84b88d-e96e-4c3c-a9f9-71cfc413022e","name":"If","type":"n8n-nodes-base.if","position":[1240,180],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6aa4dfe1-d907-47e8-b97e-3a77bb30c1d0","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.content }}","rightValue":"null"}]}},"typeVersion":2.2},{"id":"9ef20e21-7ad8-409f-a13e-e1088ec4e4a3","name":"No Operation, do nothing","type":"n8n-nodes-base.noOp","position":[1240,440],"parameters":{},"typeVersion":1},{"id":"0cfadf47-06c7-4b00-b660-87241cc4bf4c","name":"Create Blog id","type":"n8n-nodes-base.httpRequestTool","position":[2500,620],"parameters":{"url":"=https://smartworkflow.myshopify.com/admin/api/2024-01/blogs.json","method":"POST","options":{},"jsonBody":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('JSON', ``, 'json') }}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"shopifyAccessTokenApi"},"typeVersion":4.2},{"id":"059199d7-0f80-40fc-9f45-ee4ef8d6475b","name":"Create Articles","type":"n8n-nodes-base.httpRequestTool","position":[2060,620],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","method":"POST","options":{},"jsonBody":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('JSON', ``, 'json') }}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"shopifyAccessTokenApi"},"typeVersion":4.2},{"id":"60d74f7d-cc66-4af6-bb8d-686c3eb320cb","name":"Read Sheet","type":"n8n-nodes-base.googleSheetsTool","position":[1880,600],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8/edit#gid=0","cachedResultName":"blog_details"},"documentId":{"__rl":true,"mode":"list","value":"1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8/edit?usp=drivesdk","cachedResultName":"Blog update sheet"}},"typeVersion":4.5},{"id":"75976a59-7017-4e2c-ab12-d2e3448b6566","name":"Update Sheet","type":"n8n-nodes-base.googleSheetsTool","position":[2280,600],"parameters":{"columns":{"value":{"Error":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Error', ``, 'string') }}","Retry":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Retry', ``, 'string') }}","Blog url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Blog_url', ``, 'string') }}","Blog Html":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Blog_Html', ``, 'string') }}","Timestamp":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Timestamp', ``, 'string') }}","Product Id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Product_Id', ``, 'string') }}","Blog title ":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Blog_title_', ``, 'string') }}","Proudct name":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Proudct_name', ``, 'string') }}"},"schema":[{"id":"Timestamp","type":"string","display":true,"required":false,"displayName":"Timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Product Id","type":"string","display":true,"removed":false,"required":false,"displayName":"Product Id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Proudct name","type":"string","display":true,"required":false,"displayName":"Proudct name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Blog title ","type":"string","display":true,"required":false,"displayName":"Blog title ","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Blog url","type":"string","display":true,"required":false,"displayName":"Blog url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Blog Html","type":"string","display":true,"required":false,"displayName":"Blog Html","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Retry","type":"string","display":true,"required":false,"displayName":"Retry","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Error","type":"string","display":true,"removed":false,"required":false,"displayName":"Error","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["Product Id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8/edit#gid=0","cachedResultName":"blog_details"},"documentId":{"__rl":true,"mode":"list","value":"1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8/edit?usp=drivesdk","cachedResultName":"Blog update sheet"}},"typeVersion":4.5},{"id":"49448095-a73a-4fdb-9354-f3e442f100b4","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[1700,580],"parameters":{"sessionKey":"={{ $('Main Product info').item.json.id }}","sessionIdType":"customKey","contextWindowLength":20},"typeVersion":1.3},{"id":"486be3b5-dc25-4c5a-bde7-daaeff56308e","name":"Main Product info","type":"n8n-nodes-base.set","position":[1540,160],"parameters":{"options":{},"assignments":{"assignments":[{"id":"93cb8cc0-cdcd-44da-8187-9df85b770293","name":"title","type":"string","value":"={{ $('Shopify').item.json.title }}"},{"id":"95990abc-b64d-4cb4-8d4e-88145395a3fc","name":"id","type":"number","value":"={{ $('Shopify').item.json.id }}"},{"id":"d833cfa1-9abf-4a9d-86ed-a713acbc1974","name":"body_html","type":"string","value":"={{ $('Shopify').item.json.body_html }}"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"6d708bbb-9c9c-419a-883b-d7e48e89e82a","name":"AI Blog Poster","type":"@n8n/n8n-nodes-langchain.agent","position":[1760,160],"parameters":{"text":"=Product id : {{ $json.id }}\nProduct title : {{ $json.title }}    \n\nProduct Description html : {{ $json.body_html }}\n\nProduct Nutrition Facts : {{ $json.content }}\n\n","options":{"systemMessage":"=You are an AI agent responsible for automating blog creation for Shopify products using Google Sheets as a tracking system.\n\n## Step-by-step Workflow:\n\n### 1. Read Google Sheet\nBefore doing anything, call the Read Sheet tool to check if a blog has already been created for the Product ID. The sheet contains columns:\n\n- Timestamp\n- Product Id\n- Product name\n- Blog title\n- Blog url\n- Blog Html\n- Retry\n- Error\n\nCall this tool first and look up the row with the same Product Id.\n\n### 2. Check Conditions:\n- If the Product Id exists and Retry = No, skip this item.\n- If Retry = Yes, retry blog creation from Step 3.\n- If the Product Id is not found, proceed to Step 3 to generate and post a new blog.\n\n---\n\n### 3. Generate Blog Content\nBased on the following provided in the user message:\n- Product ID\n- Product Title\n- Product Description HTML\n- Product Nutrition Facts \n\nGenerate:\n- SEO-Friendly Blog Title\n- Meta Description\n- Formatted Blog Content in clean, structured HTML:\n  - Introduction summary\n  - H2/H3 subheadings\n  - Bullet points (key benefits, nutrients)\n  - Nutrient callouts or tables (if available)\n  - Closing paragraph or CTA\n  - Add internal keywords (tags)\n\n---\n\n### 4. Create Blog (HTTP Tool Call)\nCall the Shopify API to create a blog:\n\njson\n{\n  \"tool_call\": {\n    \"tool\": \"http\",\n    \"name\": \"Create Blog\",\n    \"method\": \"POST\",\n    \"url\": \"https://smartworkflow.myshopify.com/admin/api/2024-01/blogs.json\",\n    \"body\": {\n      \"blog\": {\n        \"title\": \"[SEO Blog Title]\"\n      }\n    }\n  }\n}\nOnce the blog.id is returned, post the article to:\n\n\nhttps://smartworkflow.myshopify.com/admin/api/2024-01/blogs/{{blog.id}}/articles.json\njson\nCopy\nEdit\n{\n  \"tool_call\": {\n    \"tool\": \"http\",\n    \"name\": \"Create Article\",\n    \"method\": \"POST\",\n    \"url\": \"https://smartworkflow.myshopify.com/admin/api/2024-01/blogs/{{blog.id}}/articles.json\",\n    \"body\": {\n      \"article\": {\n        \"title\": \"[Same Blog Title]\",\n        \"body_html\": \"[Generated HTML content]\",\n        \"tags\": \"nutrition, wellness, product, shopify\",\n        \"published\": false\n      }\n    }\n  }\n}\n6. Update Google Sheet\nIf Blog is Posted Successfully\nCall Update Sheet tool and set:\n\n\n{\n  \"Timestamp\":{{ $now }} ,\n  \"Product Id\": \"{{ $json.id }}\",\n  \"Product name\": \"{{ $json.title }}\",\n  \"Blog title\": \"[SEO Blog Title]\",\n  \"Blog url\": \"[Generated URL from blog.id and article.id]\",\n  \"Blog Html\": \"[Generated HTML]\",\n  \"Retry\": \"No\",\n  \"Error\": \"\"\n}\nIf Blog or Article Fails\nLog the error in Error column and set Retry = Yes.\n\n\n{\n  \"Product Id\": \"{{ $json.id }}\",\n  \"Retry\": \"Yes\",\n  \"Error\": \"[Detailed error message]\"\n}\n\nNotes:\nAlways call Read Sheet first before blog generation.\n\nRetry logic is based strictly on the Retry column.\n\nAll tool call responses should be handled using proper try-catch/error-check patterns.\n\nEnsure HTML is clean and includes correct spacing, paragraphs, H2s, bullet lists, and optionally nutrient tables.\n"},"promptType":"define"},"typeVersion":1.9}],"connections":{"If":{"main":[[{"node":"Main Product info","type":"main","index":0}],[{"node":"No Operation, do nothing","type":"main","index":0}]]},"OpenAI":{"main":[[{"node":"If","type":"main","index":0}]]},"Shopify":{"main":[[{"node":"Split Out","type":"main","index":0}]]},"Split Out":{"main":[[{"node":"OpenAI","type":"main","index":0}]]},"Read Sheet":{"ai_tool":[[{"node":"AI Blog Poster","type":"ai_tool","index":0}]]},"Update Sheet":{"ai_tool":[[{"node":"AI Blog Poster","type":"ai_tool","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Blog Poster","type":"ai_memory","index":0}]]},"Create Blog id":{"ai_tool":[[{"node":"AI Blog Poster","type":"ai_tool","index":0}]]},"Create Articles":{"ai_tool":[[{"node":"AI Blog Poster","type":"ai_tool","index":0}]]},"Main Product info":{"main":[[{"node":"AI Blog Poster","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Blog Poster","type":"ai_languageModel","index":0}]]},"When clicking ‘Test workflow’":{"main":[[{"node":"Shopify","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n pédagogue. Explique les workflows de manière claire.
Structure: résumé en une phrase, schéma du flux, détail de chaque node, points d'attention.
Utilise des emojis et du markdown pour la lisibilité.

[User]
Explique ce workflow:
```json
{"meta":{"instanceId":"2f9460831fcdb0e9a4494f0630367cfe2968282072e2d27c6ee6ab0a4c165a36","templateCredsSetupCompleted":true},"nodes":[{"id":"140f236c-8946-4ca8-b18f-0af99107b15c","name":"Assign parameters","type":"n8n-nodes-base.set","position":[300,80],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b836ba12-262a-4fed-a31d-9e2f6514137a","name":"startUrls","type":"array","value":"=[\n    {\n      \"url\": \"https://www.upwork.com/nx/search/jobs/?nbs=1&q=python\",\n      \"method\": \"GET\"\n    },\n{\n            \"url\": \"https://www.upwork.com/nx/search/jobs/?nbs=1&q=java\",\n            \"method\": \"GET\"\n        }\n  ]"},{"id":"5f7ba5cc-a8fc-4f67-9feb-6243d08462f9","name":"proxyCountryCode","type":"string","value":"FR"}]}},"typeVersion":3.4},{"id":"d1863b34-d35f-477c-bb94-8a77ff08b51d","name":"Query For Upwork Job Posts","type":"n8n-nodes-base.httpRequest","position":[520,80],"parameters":{"url":"=https://api.apify.com/v2/acts/arlusm~upwork-scraper-with-fresh-job-posts/run-sync-get-dataset-items","method":"POST","options":{},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"startUrls","value":"={{ $json.startUrls }}"},{"name":"proxyCountryCode","value":"={{ $json.proxyCountryCode }}"}]},"genericAuthType":"httpQueryAuth"},"typeVersion":4.2},{"id":"a923af43-f417-470c-af97-2a50dc0c0d79","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-100,80],"parameters":{"rule":{"interval":[{"field":"minutes","minutesInterval":10}]}},"typeVersion":1.2},{"id":"26322972-4ecd-4f8e-a1fc-81607a911c22","name":"If Working Hours","type":"n8n-nodes-base.if","position":[80,80],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"795a6d51-0ea0-4493-bc1e-a1807a2cbd77","operator":{"type":"number","operation":"gt"},"leftValue":"={{ $json.Hour }}","rightValue":2},{"id":"f9ba101d-226d-4d6a-aab8-62229762a046","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $json.Hour }}","rightValue":15}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"d68cb363-df1f-4601-b194-c1dc044b0c6a","name":"Find Existing Entries","type":"n8n-nodes-base.mongoDb","position":[720,-40],"parameters":{"query":"={\n  \"title\": \"{{ $json.title }}\",\n  \"budget\": \"{{ $json.budget }}\"\n}\n","options":{},"collection":"n8n"},"typeVersion":1.1,"alwaysOutputData":false},{"id":"82a6a26a-9fd5-4ce5-986f-e0aeb0c43fcc","name":"Output New Entries","type":"n8n-nodes-base.merge","position":[940,80],"parameters":{"mode":"combine","options":{},"joinMode":"keepNonMatches","fieldsToMatchString":"title, budget"},"typeVersion":3},{"id":"361603e9-d173-42e2-a170-de08725ffd24","name":"Add New Entries To MongoDB","type":"n8n-nodes-base.mongoDb","position":[1160,-40],"parameters":{"fields":"title,link,paymentType,budget,projectLength,shortBio,skills,publishedDate,normalizedDate,searchUrl","options":{},...
```

[Assistant]
## 📋 Résumé
Overview

This automated workflow fetches Upwork job postings using Apify, removes duplicate job listings via MongoDB, and sends new job opportunities to Slack.

Key Features:
Automated job retrieval

## 🔄 Flux de données
```
Assign parameters → Query For Upwork Job Posts → Schedule Trigger → If Working Hours → Find Existing Entries → Output New Entries → Add New Entries To MongoDB → Send message in #general
```

## 📦 Détail des nodes

### 1. Assign parameters
- **Type**: set
- **Fonction**: Configuration du node
### 2. Query For Upwork Job Posts
- **Type**: httpRequest
- **Fonction**: Configuration du node
### 3. Schedule Trigger
- **Type**: scheduleTrigger
- **Fonction**: Configuration du node
### 4. If Working Hours
- **Type**: if
- **Fonction**: Configuration du node
### 5. Find Existing Entries
- **Type**: mongoDb
- **Fonction**: Configuration du node
### 6. Output New Entries
- **Type**: merge
- **Fonction**: Configuration du node

## ⚠ Points d'attention
- Vérifier que les credentials sont correctement configurés
- Tester avec un petit volume de données d'abord
- Services utilisés: slack, http


[System]
Tu es un expert n8n. Diagnostique les problèmes d'exécution.
Utilise <thinking> pour tracer le flux de données étape par étape.
Identifie où et pourquoi les données ne correspondent pas aux attentes.
Propose des solutions concrètes.

[Assistant]
<thinking>
**Symptôme**: Le workflow ne produit pas le résultat attendu.

**Trace du flux**:
1. Vérification des données en entrée
2. Suivi de la transformation à chaque node
3. Comparaison avec l'output attendu

**Hypothèses**:
- Mauvaise expression d'accès aux données
- Node mal configuré
- Données manquantes en entrée
</thinking>

## 🔍 Diagnostic

**Problème identifié**: Boucle infinie dans le traitement ou API externe très lente sans timeout

**Analyse du flux**:
1. Vérification des données à chaque étape
2. Le problème se situe dans le traitement des données

**Solutions**:

### Option 1: Corriger l'expression
Vérifier que le chemin d'accès aux données correspond à la structure réelle.

### Option 2: Ajouter du logging
Insérer un node Set ou Code pour inspecter les données à chaque étape.

**Workflow avec corrections suggérées:**
{"id":"puzC1akjHG3456ue","meta":{"instanceId":"28a947b92b197fc2524eaba16e57560338657b2b0b5796300b2f1cedc1d0d355","templateCredsSetupCompleted":true},"name":"Trump-o-meter Template","tags":[],"nodes":[{"id":"238f0e0a-71ca-4434-b481-da683df58312","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[-440,-380],"parameters":{},"typeVersion":1},{"id":"e8c37340-3fb4-4f4c-841e-7eade92e3c75","name":"Filter","type":"n8n-nodes-base.filter","position":[660,-380],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"409837cd-d016-4473-9c6d-84f8c7483fb0","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $json.post_text }}","rightValue":"None"},{"id":"08272483-deba-4d06-a66c-c50cfabb710f","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.stock_market_impact.magnitude }}","rightValue":"None"}]}},"typeVersion":2.2},{"id":"aa96b4a4-b93c-4e01-82f7-672d853b41f0","name":"Slack","type":"n8n-nodes-base.slack","position":[880,-380],"webhookId":"d2351a3b-b7a9-44d6-ba2a-8b0444773945","parameters":{"text":"={{ $json.post_text }}\n\nPotential impact on the stock market: {{ $json.stock_market_impact.magnitude }}, {{ $json.stock_market_impact.direction }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08E83RDJN9","cachedResultName":"n8n-debug"},"otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.3},{"id":"2752a716-65ad-45cc-a373-fa001713b172","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[440,-380],"parameters":{"options":{},"fieldToSplitOut":"output.posts"},"typeVersion":1},{"id":"84cd624a-39f0-4318-8277-5b708814057b","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-440,-180],"parameters":{"rule":{"interval":[{"field":"weeks"}]}},"typeVersion":1.2},{"id":"39dd927f-d163-4d55-896b-73051714c9d0","name":"Extract and Analyze Posts","type":"n8n-nodes-base.airtop","position":[220,-280],"parameters":{"prompt":"This is Truth Social. \nExtract up to 6 posts from @realDonaldTrump. \nFor each post, extract the name of the author, the image URL, the text and the URL.\n\nAlso try to estimate the potential impact of each post on the public stock market in the US:\nDirection - positive, negative, or neutral\nMagnitude - None, Small, Medium or Large","resource":"extraction","additionalFields":{"outputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"posts\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"author_name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the author of the post.\"\n          },\n          \"image_url\": {\n            \"type\": \"string\",\n            \"description\": \"The URL of the image associated with the post.\"\n          },\n          \"post_text\": {\n            \"type\": \"string\",\n            \"description\": \"The text content of the post.\"\n          },\n          \"post_url\": {\n            \"type\": \"string\",\n            \"description\": \"The URL of the post.\"\n          },\n          \"stock_market_impact\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"direction\": {\n                \"type\": \"string\",\n                \"description\": \"The estimated direction of the post's impact on the US stock market.\"\n              },\n              \"magnitude\": {\n                \"type\": \"string\",\n                \"description\": \"The estimated magnitude of the post's impact on the US stock market.\"\n              }\n            },\n            \"required\": [\n              \"direction\",\n              \"magnitude\"\n            ],\n            \"additionalProperties\": false\n          }\n        },\n        \"required\": [\n          \"author_name\",\n          \"image_url\",\n          \"post_text\",\n          \"post_url\",\n          \"stock_market_impact\"\n        ],\n        \"additionalProperties\": false\n      }\n    }\n  },\n  \"required\": [\n    \"posts\"\n  ],\n  \"additionalProperties\": false,\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n}","parseJsonOutput":true}},"typeVersion":1},{"id":"3da92d0a-c837-4625-8b56-669dd79b88ba","name":"Create Airtop Session","type":"n8n-nodes-base.airtop","position":[-220,-280],"parameters":{"proxy":"integrated","profileName":"ENTER AIRTOP PROFILE NAME","proxyConfig":{"sticky":true,"country":"US"},"additionalFields":{}},"typeVersion":1},{"id":"03bca384-9f71-449f-9662-415b7582bfa8","name":"Create Airtop Browser","type":"n8n-nodes-base.airtop","position":[0,-280],"parameters":{"url":"https://truthsocial.com/@realDonaldTrump","resource":"window","additionalFields":{"waitUntil":"load"}},"typeVersion":1},{"id":"44dcc003-1804-45df-bf62-d819b58026d3","name":"Terminate Airtop Session","type":"n8n-nodes-base.airtop","position":[440,-180],"parameters":{"operation":"terminate","sessionId":"={{ $('Create Airtop Session').item.json.sessionId }}"},"typeVersion":1}],"active":false,"settings":{"executionOrder":"v1"},"connections":{"Slack":{"main":[[]]},"Filter":{"main":[[{"node":"Slack","type":"main","index":0}]]},"Split Out":{"main":[[{"node":"Filter","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Create Airtop Session","type":"main","index":0}]]},"Create Airtop Browser":{"main":[[{"node":"Extract and Analyze Posts","type":"main","index":0}]]},"Create Airtop Session":{"main":[[{"node":"Create Airtop Browser","type":"main","index":0}]]},"Extract and Analyze Posts":{"main":[[{"node":"Split Out","type":"main","index":0},{"node":"Terminate Airtop Session","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Create Airtop Session","type":"main","index":0}]]}}}

Le workflow timeout après quelques minutes


[System]
Tu es un expert n8n. Diagnostique et corrige les erreurs dans les workflows.
Utilise <thinking> pour tracer l'origine du problème étape par étape.
Explique clairement la cause et la solution.
Retourne le workflow corrigé.

[Assistant]
<thinking>
**Analyse de l'erreur**: Cannot read property 'nonexistent' of undefined at node 'List Typebots'

**Diagnostic**: Trace du flux de données pour identifier l'origine.

**Cause identifiée**: Problème dans la configuration ou les expressions.

**Solution**: Correction appliquée pour résoudre le problème.
</thinking>

**Problème identifié:** Expression incorrecte dans le node 'List Typebots': ={{ $json.nonexistent.typebot.url }}/api/v1/typebots

**Solution:**
Correction de l'erreur dans le workflow.

**Workflow corrigé:**
{"meta":{"instanceId":"00e9ec826c332aaa2865e65cdec318b633185c63a1cba1b3a2500858724cc85e","templateCredsSetupCompleted":true},"nodes":[{"id":"e770fbf4-8c4f-4aaa-b722-3140ecec28f2","name":"On clicking 'execute'","type":"n8n-nodes-base.manualTrigger","position":[360,640],"parameters":{},"typeVersion":1},{"id":"7dede05f-8c5a-426e-a822-d21b7e50d976","name":"Execute Workflow Trigger","type":"n8n-nodes-base.executeWorkflowTrigger","position":[-140,1620],"parameters":{"inputSource":"passthrough"},"typeVersion":1.1},{"id":"6df6e830-5721-421f-9b46-f99f9164eb4d","name":"List Typebots","type":"n8n-nodes-base.httpRequest","position":[800,740],"parameters":{"url":"={{ $json.typebot.url }}/api/v1/typebots","options":{},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpBearerAuth","queryParameters":{"parameters":[{"name":"workspaceId","value":"={{ $json.typebot.workspace.id }}"}]}},"typeVersion":4.2},{"id":"3d44e0b2-c404-424a-8eba-7ec111738939","name":"typebot","type":"n8n-nodes-base.set","position":[1240,640],"parameters":{"options":{},"assignments":{"assignments":[{"id":"8fbbf5fa-0455-4066-80e0-1b2885343aea","name":"typebot.url","type":"string","value":"={{ $('Globals').item.json.typebot.url }}"},{"id":"5e73d2e7-4b1a-4180-8af2-047e52eb8a0a","name":"repo.owner","type":"string","value":"={{ $('Globals').item.json.repo.owner }}"},{"id":"22445c28-5431-45a5-86ca-0ab2ff26cff5","name":"repo.name","type":"string","value":"={{ $('Globals').item.json.repo.name }}"},{"id":"232d9947-a43f-48a9-b385-da1aa8f5139e","name":"origin","type":"string","value":"typebot"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"4be16d80-43fd-4cc1-b79c-11fec3c76829","name":"Get Typebot","type":"n8n-nodes-base.httpRequest","position":[300,1360],"parameters":{"url":"={{ $('Switch').item.json.typebot.url }}/api/v1/typebots/{{ $json.id }}","options":{},"authentication":"genericCredentialType","genericAuthType":"httpBearerAuth"},"typeVersion":4.2},{"id":"952f2ff9-0421-4239-947d-3d8f0b7925fd","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[1020,640],"parameters":{"options":{},"fieldToSplitOut":"typebots"},"typeVersion":1},{"id":"ef97c1ec-d175-44b7-a462-2c8c2a8221ad","name":"Edit Fields","type":"n8n-nodes-base.set","position":[520,1460],"parameters":{"mode":"raw","options":{},"jsonOutput":"={{ $json.typebot }}"},"typeVersion":3.4},{"id":"e68821d5-11ea-4324-9957-303433a8aad7","name":"Globals","type":"n8n-nodes-base.set","position":[580,740],"parameters":{"options":{},"assignments":{"assignments":[{"id":"45027581-a75b-4375-a0f1-ebfddb0531f7","name":"typebot.url","type":"string","value":"https://typebot.io"},{"id":"5513c8d4-1aba-45f3-ab8c-498fa36f5f59","name":"typebot.workspace.id","type":"string","value":"xxxxxxxxxxxxxxxxxxxxxxxxxxxx"},{"id":"6cf546c5-5737-4dbd-851b-17d68e0a3780","name":"repo.owner","type":"string","value":"john-doe"},{"id":"452efa28-2dc6-4ea3-a7a2-c35d100d0382","name":"repo.name","type":"string","value":"typebot-backup"}]}},"typeVersion":3.4},{"id":"3027c8bd-a477-4f47-a2a9-fd952d9f9698","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[360,840],"parameters":{"rule":{"interval":[{"triggerAtHour":7}]}},"typeVersion":1.2},{"id":"caff32a5-6d82-43c9-998c-3258342d66b3","name":"github","type":"n8n-nodes-base.set","position":[1240,840],"parameters":{"options":{},"assignments":{"assignments":[{"id":"5e73d2e7-4b1a-4180-8af2-047e52eb8a0a","name":"repo.owner","type":"string","value":"={{ $('Globals').item.json.repo.owner }}"},{"id":"22445c28-5431-45a5-86ca-0ab2ff26cff5","name":"repo.name","type":"string","value":"={{ $('Globals').item.json.repo.name }}"},{"id":"232d9947-a43f-48a9-b385-da1aa8f5139e","name":"origin","type":"string","value":"github"},{"id":"456ec816-8c15-498b-bbc5-a96abce95d59","name":"typebots","type":"array","value":"={{ $('List Typebots').item.json.typebots }}"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"4333f695-81d9-4c87-8d68-9a6245dc12d5","name":"List files","type":"n8n-nodes-base.github","position":[1020,840],"webhookId":"244ea8da-851f-4afb-980c-5e5973b6a1af","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Globals').item.json.repo.owner }}"},"resource":"file","operation":"list","repository":{"__rl":true,"mode":"name","value":"={{ $('Globals').item.json.repo.name }}"},"authentication":"oAuth2"},"executeOnce":true,"typeVersion":1.1},{"id":"7eab3efa-c3e0-420a-9fb8-9cd9ff52f90e","name":"Get file data","type":"n8n-nodes-base.github","position":[520,1260],"webhookId":"5cf07ee9-70c6-48bf-b370-534315f2d48e","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Switch').item.json.repo.owner }}"},"filePath":"={{ $('Switch').item.json.id }}.json","resource":"file","operation":"get","repository":{"__rl":true,"mode":"name","value":"={{ $('Switch').item.json.repo.name }}"},"authentication":"oAuth2","asBinaryProperty":false,"additionalParameters":{}},"typeVersion":1,"continueOnFail":true,"alwaysOutputData":true},{"id":"5e01d7b1-c09d-494f-8df1-c241db278084","name":"Create new file","type":"n8n-nodes-base.github","position":[1620,1160],"webhookId":"93cca36a-a5f4-4919-b655-e0fa2cc2ca36","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Switch').item.json.repo.owner }}"},"filePath":"={{$('Switch').first().json.id}}.json","resource":"file","repository":{"__rl":true,"mode":"name","value":"={{ $('Switch').item.json.repo.name }}"},"fileContent":"={{$('isDiffOrNew').item.json[\"typebot_data_stringy\"]}}","commitMessage":"={{$('Switch').first().json.name}} ({{$json.github_status}})","authentication":"oAuth2"},"typeVersion":1},{"id":"4b8b16d4-5363-4f08-b8b5-deac7f4250f3","name":"Edit existing file","type":"n8n-nodes-base.github","position":[1620,1360],"webhookId":"286cabce-a3ec-4202-9d94-d005502d73cc","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Switch').item.json.repo.owner }}"},"filePath":"={{$('Switch').first().json.id}}.json","resource":"file","operation":"edit","repository":{"__rl":true,"mode":"name","value":"={{ $('Switch').item.json.repo.name }}"},"fileContent":"={{$('isDiffOrNew').item.json[\"typebot_data_stringy\"]}}","commitMessage":"={{$('Switch').first().json.name}} ({{$json.github_status}})","authentication":"oAuth2"},"typeVersion":1},{"id":"c2cb20ab-07e5-41a3-8f7d-ed6474977226","name":"Return","type":"n8n-nodes-base.set","position":[1840,1560],"parameters":{"options":{},"assignments":{"assignments":[{"id":"8d513345-6484-431f-afb7-7cf045c90f4f","name":"Done","type":"boolean","value":true}]}},"typeVersion":3.3},{"id":"7ce14355-b3b9-4cd0-a09e-6d91bfe6bfcc","name":"Delete a file","type":"n8n-nodes-base.github","position":[1620,1860],"webhookId":"592f888e-3e41-49ce-b88a-d73f8756eac8","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Switch').item.json.repo.owner }}"},"filePath":"={{$('Switch').first().json.name}}","resource":"file","operation":"delete","repository":{"__rl":true,"mode":"name","value":"={{ $('Switch').item.json.repo.name }}"},"commitMessage":"={{$('Switch').first().json.name}} (deleted)","authentication":"oAuth2"},"typeVersion":1.1},{"id":"c2252937-414f-446c-a2b1-96eef623f57e","name":"If","type":"n8n-nodes-base.if","position":[1400,1780],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"bb927e0c-f27b-4dce-80df-8d7611467045","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.isDeleted }}","rightValue":""}]}},"typeVersion":2.2},{"id":"10146994-a24f-4d9e-955d-f3e76f4abae0","name":"isDeleted","type":"n8n-nodes-base.code","position":[1180,1780],"parameters":{"jsCode":"const flow = $input.first().json.typebots;\n\nconst some = flow.some(x => x.id === $input.first().json.name.split(\".\")[0])\n\nreturn [{json: { isDeleted: !some }}];"},"typeVersion":2},{"id":"d692e133-5184-4753-bbab-751f9903b1cb","name":"isDiffOrNew","type":"n8n-nodes-base.code","position":[960,1360],"parameters":{"jsCode":"const orderJsonKeys = (jsonObj) => {\n  const ordered = {};\n  Object.keys(jsonObj).sort().forEach(key => {\n    ordered[key] = jsonObj[key];\n  });\n  return ordered;\n}\n\n// Check if file returned with content\nif (Object.keys($input.all()[0].json).includes(\"content\")) {\n  // Decode base64 content and parse JSON\n  const origFlow = JSON.parse(Buffer.from($input.all()[0].json.content, 'base64').toString());\n  const typebotFlow = $input.all()[1].json;\n  \n  // Order JSON objects\n  const orderedOriginal = orderJsonKeys(origFlow);\n  const orderedActual = orderJsonKeys(typebotFlow);\n\n  // Determine difference\n  if (JSON.stringify(orderedOriginal) === JSON.stringify(orderedActual)) {\n    $input.all()[0].json.github_status = \"same\";\n  } else {\n    $input.all()[0].json.github_status = \"different\";\n    $input.all()[0].json.typebot_data_stringy = JSON.stringify(orderedActual, null, 2);\n  }\n  $input.all()[0].json.content_decoded = orderedOriginal;\n// No file returned / new workflow\n} else if (Object.keys($input.all()[0].json).includes(\"data\")) {\n  const origFlow = JSON.parse($input.all()[0].json.data);\n  const typebotFlow = $input.all()[1].json;\n  \n  // Order JSON objects\n  const orderedOriginal = orderJsonKeys(origFlow);\n  const orderedActual = orderJsonKeys(typebotFlow);\n\n  // Determine difference\n  if (JSON.stringify(orderedOriginal) === JSON.stringify(orderedActual)) {\n    $input.all()[0].json.github_status = \"same\";\n  } else {\n    $input.all()[0].json.github_status = \"different\";\n    $input.all()[0].json.typebot_data_stringy = JSON.stringify(orderedActual, null, 2);\n  }\n  $input.all()[0].json.content_decoded = orderedOriginal;\n\n} else {\n  // Order JSON object\n  const typebotFlow = $input.all()[1].json;\n  const orderedActual = orderJsonKeys(typebotFlow);\n  \n  // Proper formatting\n  $input.all()[0].json.github_status = \"new\";\n  $input.all()[0].json.typebot_data_stringy = JSON.stringify(orderedActual, null, 2);\n}\n\n// Return items\nreturn $input.all();"},"typeVersion":1},{"id":"bcafd96c-6fd4-44ce-b975-33c7cf2dff84","name":"Check Status","type":"n8n-nodes-base.switch","position":[1180,1360],"parameters":{"rules":{"values":[{"outputKey":"new","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"aea200f9-9f83-4e4e-a965-65fddcbb6a5f","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{$json.github_status}}","rightValue":"new"}]},"renameOutput":true},{"outputKey":"different","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"706ebf35-6f74-43b6-9f98-94cf14107947","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{$json.github_status}}","rightValue":"different"}]},"renameOutput":true},{"outputKey":"same","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"30c8c5a8-269f-424a-93ed-d2cbe52acf7c","operator":{"type":"string","operation":"equals"},"leftValue":"={{$json.github_status}}","rightValue":"same"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2},{"id":"aaf2d938-ec55-4152-9e34-a2e2e6769760","name":"File is different","type":"n8n-nodes-base.noOp","position":[1400,1360],"parameters":{},"typeVersion":1},{"id":"f2759b0f-3ec3-434f-acfe-36c10ebb35bb","name":"File is new","type":"n8n-nodes-base.noOp","position":[1400,1160],"parameters":{},"typeVersion":1},{"id":"785fff83-40c4-4d38-9300-369e68779412","name":"File is same","type":"n8n-nodes-base.noOp","position":[1400,1560],"parameters":{},"typeVersion":1},{"id":"54804b0b-0001-4a41-afb5-12c0c6cf653c","name":"Merge","type":"n8n-nodes-base.merge","position":[740,1360],"parameters":{},"typeVersion":3.2},{"id":"b9cb042f-d767-4c2a-86f8-5d567d23c32a","name":"Switch","type":"n8n-nodes-base.switch","position":[80,1620],"parameters":{"rules":{"values":[{"outputKey":"typebot","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"8f6b31b0-a75c-4299-a530-d15b3ff65c9a","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.origin }}","rightValue":"typebot"}]},"renameOutput":true},{"outputKey":"github","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"09e36861-1120-4343-8d38-4797e9d67eec","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.origin }}","rightValue":"github"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2},{"id":"eb4adeea-418b-4d2d-a8ce-36739c195d7e","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[1460,740],"parameters":{"options":{"reset":"={{ $node[\"Loop Over Items\"].context[\"done\"] }}"}},"typeVersion":3},{"id":"58fb33e4-520e-4a58-b3ea-acdb5ef02208","name":"Execute Workflow","type":"n8n-nodes-base.executeWorkflow","position":[1680,740],"parameters":{"mode":"each","options":{},"workflowId":{"__rl":true,"mode":"id","value":"={{ $workflow.id }}"},"workflowInputs":{"value":{},"schema":[],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":true}},"typeVersion":1.2}],"connections":{"If":{"main":[[{"node":"Delete a file","type":"main","index":0}],[{"node":"Return","type":"main","index":0}]]},"Merge":{"main":[[{"node":"isDiffOrNew","type":"main","index":0}]]},"Switch":{"main":[[{"node":"Get Typebot","type":"main","index":0}],[{"node":"isDeleted","type":"main","index":0}]]},"github":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Globals":{"main":[[{"node":"List Typebots","type":"main","index":0}]]},"typebot":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Split Out":{"main":[[{"node":"typebot","type":"main","index":0}]]},"isDeleted":{"main":[[{"node":"If","type":"main","index":0}]]},"List files":{"main":[[{"node":"github","type":"main","index":0}]]},"Edit Fields":{"main":[[{"node":"Merge","type":"main","index":1}]]},"File is new":{"main":[[{"node":"Create new file","type":"main","index":0}]]},"Get Typebot":{"main":[[{"node":"Get file data","type":"main","index":0},{"node":"Edit Fields","type":"main","index":0}]]},"isDiffOrNew":{"main":[[{"node":"Check Status","type":"main","index":0}]]},"Check Status":{"main":[[{"node":"File is new","type":"main","index":0}],[{"node":"File is different","type":"main","index":0}],[{"node":"File is same","type":"main","index":0}]]},"File is same":{"main":[[{"node":"Return","type":"main","index":0}]]},"Delete a file":{"main":[[{"node":"Return","type":"main","index":0}]]},"Get file data":{"main":[[{"node":"Merge","type":"main","index":0}]]},"List Typebots":{"main":[[{"node":"List files","type":"main","index":0},{"node":"Split Out","type":"main","index":0}]]},"Create new file":{"main":[[{"node":"Return","type":"main","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"Execute Workflow","type":"main","index":0}]]},"Execute Workflow":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Globals","type":"main","index":0}]]},"File is different":{"main":[[{"node":"Edit existing file","type":"main","index":0}]]},"Edit existing file":{"main":[[{"node":"Return","type":"main","index":0}]]},"On clicking 'execute'":{"main":[[{"node":"Globals","type":"main","index":0}]]},"Execute Workflow Trigger":{"main":[[{"node":"Switch","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Crée un workflow n8n pour: This n8n template demonstrates how to use AI to generate custom images from scratch - fully automated, prompt-driven, and ready to deploy at scale. Use cases are many: You can use it for marketing visuals, character art, digital posters, storyboards, or even daily image generation for your personal purposes. How It Works The flow is triggered by a chat message in N8N or via Telegram. The default image size is 1080 x 1920 pixels. To use a different size, update the values in the “Fields - Set Values” node before triggering the workflow. The input is parsed into a clean, structured prompt using a multi-step transformation process. Our AI Agent sends the final prompt to Google Gemini’s image model for generation (you can also integrate with OpenAI or other chat models). The raw image data cre

[Assistant]
<thinking>
**Analyse du besoin**: This n8n template demonstrates how to use AI to generate custom images from scratch - fully automated, prompt-driven, and ready to deploy at scale.

Use cases are many: You can use it for marketing vi...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 11 nodes utilisant ai, google, http.
Structure: code personnalisé, intégration IA.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"id":"cmncRJ2rlecEwZxU","meta":{"instanceId":"ed6d846a2fce1f660ede2e7da800724cca01dc3d0685524a3c917881b7cfcfe9"},"name":"[Agent Circle's N8N Workflow] Automated AI Image Creator","tags":[],"nodes":[{"id":"d5d1fe1b-f053-4162-adf4-5b52b409942d","name":"Fields - Set Values","type":"n8n-nodes-base.set","position":[240,100],"parameters":{"options":{},"assignments":{"assignments":[{"id":"4e04fec4-441e-45f7-acea-0017a4b5c104","name":"model","type":"string","value":"flux"},{"id":"aa80cd68-1c82-4032-b1d7-e098856eec38","name":"width","type":"string","value":"1080"},{"id":"da6d305f-aece-49bd-ae02-52df59915c60","name":"height","type":"string","value":"1920"}]}},"typeVersion":3.4},{"id":"e108c56f-b7fb-4818-aed5-c55c59b81516","name":"When chat message received","type":"@n8n/n8n-nodes-langchain.chatTrigger","position":[20,200],"webhookId":"5b347b5d-8f35-45b3-a499-de95153088f0","parameters":{"options":{}},"typeVersion":1.1},{"id":"7565ff7c-cfe7-4157-953b-74c1e66d659e","name":"Code - Clean Json","type":"n8n-nodes-base.code","position":[980,100],"parameters":{"jsCode":"function cleanAndExtractJSON(response) {\n    try {\n        const result = {\n            image_prompt: []\n        };\n\n        const lines = response.split('\\n');\n        let currentPrompt = '';\n\n        for (const line of lines) {\n            if (line.includes('\"prompt\":')) {\n                if (currentPrompt) {\n                    result.image_prompt.push(currentPrompt.trim());\n                }\n                currentPrompt = line.split('\"prompt\":')[1].trim();\n            }\n        }\n\n        if (currentPrompt) {\n            result.image_prompt.push(currentPrompt.trim());\n        }\n\n        return { json: result };\n        \n    } catch (error) {\n        return { \n            json: {\n                image_prompt: []\n            }\n        };\n    }\n}\n\nconst response = $input.first().json.output;\nreturn cleanAndExtractJSON(response);"},"executeOnce":false,"typeVersion":2,"alwaysOutputData":true},{"id":"8e33813d-bd34-46b9-91c8-89dac7f28add","name":"Code - Get Prompt","type":"n8n-nodes-base.code","position":[1160,100],"parameters":{"jsCode":"return $input.first().json.image_prompt.map(prompt => ({\n  json: {\n    body: {\n      prompt: prompt,\n  \"image_size\": {\n    \"width\": $('Fields - Set Values').first().json.width,\n    \"height\": $('Fields - Set Values').first().json.height\n  },\n  \"num_inference_steps\": 12,\n  \"guidance_scale\": 3.5,\n  \"num_images\": 1,\n  \"enable_safety_checker\": true,\n}\n    }\n  }\n));"},"typeVersion":2,"alwaysOutputData":true},{"id":"fba88baa-70e8-452c-b44e-d1685df0eb7d","name":"HTTP Request - Create Image","type":"n8n-nodes-base.httpRequest","position":[1600,100],"parameters":{"url":"=https://image.pollinations.ai/prompt/ {{ $('Code - Get Prompt').item.json.body.prompt }}","options":{},"jsonQuery":"={\n  \"width\": {{ $('Fields - Set Values').item.json.width }},\n  \"height\": {{ $('Fields - Set Values').item.json.height }},\n  \"model\": \"{{ $('Fields - Set Values').item.json.model }}\",\n  \"seed\": 42,\n  \"nologo\": true\n}","sendQuery":true,"sendHeaders":true,"specifyQuery":"json","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"},{"name":"Accept","value":"application/json"}]}},"retryOnFail":true,"typeVersion":4.2,"alwaysOutputData":true,"waitBetweenTries":5000},{"id":"25617f21-8d05-4ca2-9c16-5cd97e369bdb","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","disabled":true,"position":[20,0],"webhookId":"ff17baeb-3182-41c4-b60a-e6159b02023b","parameters":{"updates":["message"],"additionalFields":{}},"typeVersion":1.2},{"id":"de666684-e743-40ef-b604-1cff33b107de","name":"Code - Set Filename","type":"n8n-nodes-base.code","position":[1320,100],"parameters":{"jsCode":"for (let i = 0; i < items.length; i++) {\n  items[i].json.fileName = `images_${(i + 1).toString().padStart(3, '0')}.png`;\n}\nreturn items;"},"typeVersion":2},{"id":"e04c2a46-a670-4042-88d1-79207731c864","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[540,300],"parameters":{"options":{"topK":40,"topP":1,"temperature":0.5,"safetySettings":{"values":[{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE"},{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE"}]},"maxOutputTokens":65536},"modelName":"models/gemini-2.0-flash"},"typeVersion":1},{"id":"3a150703-2a7f-4255-9da0-6a15c005290c","name":"AI Agent - Create Image From Prompt","type":"@n8n/n8n-nodes-langchain.agent","position":[540,100],"parameters":{"text":"={{ $('When chat message received').item.json.chatInput }}","options":{"systemMessage":"=You are an AI image‑prompt creation expert. Please create a post using the following JSON format:\nAI Image Generation Prompt Guidelines:\nObjective\nCreate highly realistic, high‐quality images\nEnsure the image content faithfully conveys the spirit of the original text\nIntegrate short text (10–20 characters) naturally into the image\nMaintain consistency and professionalism\n\nStandard Prompt Structure\n[Main Scene] | [Key Elements] | [Text Integration] | [Lighting & Atmosphere] | [Technical Parameters] | [Style Parameters]\n\nComponent Breakdown\n1. Main Scene (Weight ::8)\nDescribe the primary setting in line with the content.\nExamples:\nTech news: “modern tech office setting, minimalist workspace”\nEconomy news: “professional financial district, corporate environment”\nEducation news: “modern classroom, advanced learning environment”\n\n2. Key Elements (Weight ::8)\nList the main visual elements required.\nExamples:\n“large HD display showing text ‘AI Ethics’ in modern typography”\n“professional people in business attire discussing around interactive screen”\n“detailed infographic elements floating in augmented reality style”\n\n3. Text Integration (Weight ::7)\nHow to display text within the image:\ntext elements | elegant typography, clear readable text, integrated naturally into scene ::7\n\n4. Lighting & Atmosphere (Weight ::7)\nlighting | cinematic dramatic lighting, natural ambient light, professional studio setup ::7\nbackground | depth of field blur, clean professional environment ::6\n\n5. Technical Parameters\nparameters | 8k resolution, hyperrealistic, photorealistic quality, octane render, cinematic composition --ar 16:9\nsettings | sharp focus, high detail, professional photography --s 1000 --q 2\nComplete Examples\nExample 1: AI Ethics News\nprofessional tech conference room | large display showing \"AI Ethics Now\" in modern typography, group of diverse executives in discussion ::8 | clean modern workspace, glass walls, tech atmosphere ::7 | cinematic lighting, natural window light ::7 | 8k resolution, hyperrealistic quality, octane render --ar 16:9 --s 1000 --q 2\nExample 2: Financial Market News\nmodern stock exchange environment | giant LED wall showing \"Market Alert\" in bold typography, professional traders in action ::8 | dynamic financial data visualization, sleek modern interior ::7 | dramatic lighting, blue-tinted atmosphere ::7 | 8k resolution, photorealistic quality --ar 16:9 --s 1000 --q 2\n\nAdditional Parameters\n--chaos [0–100]: Adjust randomness\n--stylize [0–1000]: Degree of stylization\n--seed [number]: Ensure consistency across generations\n--niji: Optimized for Asian‐style aesthetics\n--v 5.2: Use the latest model version\n\nImportant Notes\nText in Image\nKeep it short and legible\nUse professional fonts\nIntegrate naturally into the scene\n\nComposition\nFollow the rule of thirds\nEnsure a clear focal point\nBalance text and imagery\n\nColor\nMatch a professional tone\nProvide sufficient contrast for readability\nMaintain visual consistency\n\nTechnical Details\nAlways use high resolution (8k)\nEnsure professional lighting\nOptimize for sharpness and detail\n\nCommon Pitfalls to Avoid\nOverly generic prompts\nMissing text‐integration guidance\nFailing to specify composition rules\nOmitting key technical parameters\n\nThe structure is:\n{\n  prompt_image {prompt : \"\" , ...}\n}"},"promptType":"define","hasOutputParser":true},"typeVersion":1.7},{"id":"a3e5fa40-51c1-41fa-83cb-d6d598f1ff49","name":"Telegram Response","type":"n8n-nodes-base.telegram","disabled":true,"position":[1820,0],"webhookId":"ca4806ac-202c-4709-92f9-6484397c17c4","parameters":{"operation":"sendPhoto","binaryData":true,"additionalFields":{}},"typeVersion":1.2},{"id":"f7059ea5-106b-4b73-8cb3-b0e10e1c0c13","name":"Save Image To Disk","type":"n8n-nodes-base.readWriteFile","disabled":true,"position":[1820,200],"parameters":{"options":{},"fileName":"=/files/{{ $('Code').item.json.fileName }}","operation":"write"},"typeVersion":1}],"active":false,"settings":{"executionOrder":"v1"},"connections":{"Telegram Trigger":{"main":[[{"node":"Fields - Set Values","type":"main","index":0}]]},"Code - Clean Json":{"main":[[{"node":"Code - Get Prompt","type":"main","index":0}]]},"Code - Get Prompt":{"main":[[{"node":"Code - Set Filename","type":"main","index":0}]]},"Code - Set Filename":{"main":[[{"node":"HTTP Request - Create Image","type":"main","index":0}]]},"Fields - Set Values":{"main":[[{"node":"AI Agent - Create Image From Prompt","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"AI Agent - Create Image From Prompt","type":"ai_languageModel","index":0}]]},"When chat message received":{"main":[[{"node":"Fields - Set Values","type":"main","index":0}]]},"HTTP Request - Create Image":{"main":[[{"node":"Save Image To Disk","type":"main","index":0},{"node":"Telegram Response","type":"main","index":0}]]},"AI Agent - Create Image From Prompt":{"main":[[{"node":"Code - Clean Json","type":"main","index":0}]]}}}