[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é**: Mauvais chemin d'accès aux données ($json.data au lieu de $json.data.items[0])

**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":"REwp6JdhNjvbGQ1J","meta":{"instanceId":"0728bbcb360bfc31668af41e0b3086e417a4d7ae6718b1f1eb6ce6f25309b188"},"name":"My workflow","tags":[],"nodes":[{"id":"106c2b40-43f5-432d-9fdd-446e7309abc7","name":"Check SSL","type":"n8n-nodes-base.httpRequest","position":[2300,580],"parameters":{"url":"=https://ssl-checker.io/api/v1/check/{{ $json[\"property_domains\"].replace(/^https?:\\/\\//, \"\").replace(/\\/$/, \"\") }}","options":{}},"typeVersion":4.2},{"id":"92e421ce-6f88-44d4-9018-8b39e9fad396","name":"Expiry Alert","type":"n8n-nodes-base.if","position":[2660,580],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"ee6e2ce8-569a-4f1f-91b5-2c55f605a16b","operator":{"type":"number","operation":"lte"},"leftValue":"={{ $json.result.days_left }}","rightValue":7},{"id":"d82f8203-0908-4a48-9eb7-48e11555c1c2","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"","rightValue":""}]}},"typeVersion":2.2},{"id":"bafe935b-b283-428f-934a-49d03de5d38f","name":"Daily Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[1620,960],"parameters":{"rule":{"interval":[{"triggerAtHour":10}]}},"typeVersion":1.2},{"id":"e5ef4591-f45c-4712-97b4-0d7a520c238d","name":"SSH - Analyze system","type":"n8n-nodes-base.ssh","position":[2380,1340],"parameters":{"command":"=node /opt/sysadmin-toolkit/scripts/ssl/ssl-health-assessment.js {{ $json.property_domains }} --json","authentication":"privateKey"},"typeVersion":1,"alwaysOutputData":true},{"id":"240f78ee-96ab-4f53-bb9c-c40e0f8d0961","name":"Discord","type":"n8n-nodes-base.discord","position":[2980,1340],"webhookId":"6e1014b5-d89d-4939-a1f3-b74c280ae73b","parameters":{"content":"={{ $json.discord.title }}\n\n{{ $json.discord.fullDescription }}","guildId":{"__rl":true,"mode":"list","value":"1254730427805990942","cachedResultUrl":"https://discord.com/channels/1254730427805990942","cachedResultName":"b0ld8"},"options":{},"resource":"message","channelId":{"__rl":true,"mode":"list","value":"1254730427805990945","cachedResultUrl":"https://discord.com/channels/1254730427805990942/1254730427805990945","cachedResultName":"general"}},"typeVersion":2},{"id":"edc63e4c-8a87-4fbb-ba61-195b3e587965","name":"Discord1","type":"n8n-nodes-base.discord","position":[3000,560],"webhookId":"6e1014b5-d89d-4939-a1f3-b74c280ae73b","parameters":{"content":"=SSL Expiry - {{ $json.result.days_left }} days Left - {{ $json.result.host }}","guildId":{"__rl":true,"mode":"list","value":"1254730427805990942","cachedResultUrl":"https://discord.com/channels/1254730427805990942","cachedResultName":"b0ld8"},"options":{},"resource":"message","channelId":{"__rl":true,"mode":"list","value":"1254730427805990945","cachedResultUrl":"https://discord.com/channels/1254730427805990942/1254730427805990945","cachedResultName":"general"}},"typeVersion":2},{"id":"c58aad29-de35-46e1-b43a-dfcfac0cffc2","name":"Fetch domains to check SSL","type":"n8n-nodes-base.notion","position":[1920,960],"parameters":{"options":{},"resource":"databasePage","operation":"getAll","returnAll":true,"databaseId":{"__rl":true,"mode":"list","value":"22612359-20f8-80f4-897f-eae0ad313057","cachedResultUrl":"https://www.notion.so/2261235920f880f4897feae0ad313057","cachedResultName":"n8n flow - SSL Certificate Expiry Monitoring"},"filterType":"manual"},"typeVersion":2.2},{"id":"b544b226-ceb6-439d-b350-4e77b39e2fde","name":"Code - Format output","type":"n8n-nodes-base.code","position":[2620,1340],"parameters":{"jsCode":"// n8n Code Node - Parse SSL Scanner Output\n// This code processes the SSH node output and formats it for Discord notifications\n\nconst results = [];\n\nfor (const item of $input.all()) {\n  try {\n    // Extract the stdout from SSH response\n    const sshOutput = item.json;\n    \n    // Check if SSH command was successful\n    if (sshOutput.code !== 0) {\n      results.push({\n        json: {\n          hostname: 'unknown',\n          status: 'error',\n          error: sshOutput.stderr || 'SSH command failed',\n          alert: true,\n          alertLevel: 'critical'\n        }\n      });\n      continue;\n    }\n    \n    // Parse the JSON output from stdout\n    let sslData;\n    try {\n      sslData = JSON.parse(sshOutput.stdout);\n    } catch (parseError) {\n      results.push({\n        json: {\n          hostname: 'unknown',\n          status: 'error',\n          error: 'Failed to parse SSL scanner output',\n          alert: true,\n          alertLevel: 'critical'\n        }\n      });\n      continue;\n    }\n    \n    // Extract key information for Discord notification\n    const parsedResult = {\n      // Basic info\n      hostname: sslData.hostname,\n      port: sslData.port || 443,\n      scanTime: sslData.scanTime,\n      scanDuration: sslData.scanDuration,\n      \n      // Overall status\n      overallGrade: sslData.overallGrade,\n      connectionStatus: sslData.connectionStatus || 'unknown',\n      success: sslData.success || false,\n      \n      // Certificate info\n      certificate: {\n        subject: sslData.certificate?.subject || 'unknown',\n        issuer: sslData.certificate?.issuer || 'unknown',\n        validUntil: sslData.certificate?.validUntil,\n        daysUntilExpiry: sslData.certificate?.daysUntilExpiry,\n        isValid: sslData.certificate?.isValid || false,\n        issues: sslData.certificate?.issues || [],\n        hostnameMatch: sslData.certificate?.hostnameMatch || false\n      },\n      \n      // Protocol support\n      protocols: {\n        tls13: sslData.protocols?.tls13 || false,\n        tls12: sslData.protocols?.tls12 || false,\n        tls11: sslData.protocols?.tls11 || false,\n        tls10: sslData.protocols?.tls10 || false,\n        ssl3: sslData.protocols?.ssl3 || false\n      },\n      \n      // Security info\n      vulnerabilities: {\n        hasVulnerabilities: sslData.vulnerabilities?.hasVulnerabilities || false,\n        poodle: sslData.vulnerabilities?.poodle || false,\n        freak: sslData.vulnerabilities?.freak || false,\n        details: sslData.vulnerabilities || {}\n      },\n      \n      // Grades breakdown\n      grades: sslData.grades || {},\n      \n      // Recommendations\n      recommendations: sslData.recommendations || [],\n      \n      // Error handling\n      error: sslData.error,\n      \n      // Alert logic\n      alert: false,\n      alertLevel: 'info',\n      alertReasons: []\n    };\n    \n    // Determine if this needs an alert\n    const alertReasons = [];\n    let alertLevel = 'info';\n    \n    // Critical alerts\n    if (sslData.error) {\n      alertReasons.push(`Scan failed: ${sslData.error}`);\n      alertLevel = 'critical';\n    }\n    \n    if (!parsedResult.certificate.isValid) {\n      alertReasons.push('Certificate is invalid');\n      alertLevel = 'critical';\n    }\n    \n    if (parsedResult.certificate.daysUntilExpiry <= 0) {\n      alertReasons.push('Certificate has expired');\n      alertLevel = 'critical';\n    }\n    \n    // High priority alerts\n    if (parsedResult.certificate.daysUntilExpiry <= 7 && parsedResult.certificate.daysUntilExpiry > 0) {\n      alertReasons.push(`Certificate expires in ${parsedResult.certificate.daysUntilExpiry} days`);\n      if (alertLevel === 'info') alertLevel = 'high';\n    }\n    \n    if (parsedResult.vulnerabilities.hasVulnerabilities) {\n      alertReasons.push('Security vulnerabilities detected');\n      if (alertLevel === 'info') alertLevel = 'high';\n    }\n    \n    if (!parsedResult.certificate.hostnameMatch) {\n      alertReasons.push('Hostname mismatch detected');\n      if (alertLevel === 'info') alertLevel = 'high';\n    }\n    \n    // Medium priority alerts\n    if (parsedResult.certificate.daysUntilExpiry <= 30 && parsedResult.certificate.daysUntilExpiry > 7) {\n      alertReasons.push(`Certificate expires in ${parsedResult.certificate.daysUntilExpiry} days`);\n      if (alertLevel === 'info') alertLevel = 'medium';\n    }\n    \n    if (['C', 'D', 'F'].includes(parsedResult.overallGrade)) {\n      alertReasons.push(`Poor SSL grade: ${parsedResult.overallGrade}`);\n      if (alertLevel === 'info') alertLevel = 'medium';\n    }\n    \n    if (parsedResult.protocols.ssl3 || parsedResult.protocols.tls10) {\n      alertReasons.push('Deprecated protocols enabled');\n      if (alertLevel === 'info') alertLevel = 'medium';\n    }\n    \n    // Low priority alerts\n    if (parsedResult.recommendations && parsedResult.recommendations.length > 0) {\n      alertReasons.push(`${parsedResult.recommendations.length} recommendations available`);\n      if (alertLevel === 'info') alertLevel = 'low';\n    }\n    \n    // Set alert status\n    parsedResult.alert = alertReasons.length > 0;\n    parsedResult.alertLevel = alertLevel;\n    parsedResult.alertReasons = alertReasons;\n    \n    // Add Discord formatting helpers\n    parsedResult.discord = {\n      color: getDiscordColor(alertLevel, parsedResult.overallGrade),\n      title: `SSL Health Check: ${parsedResult.hostname}`,\n      description: getDiscordDescription(parsedResult),\n      fields: getDiscordFields(parsedResult),\n      timestamp: new Date().toISOString(),\n      \n      // Pre-formatted content for easy Discord input\n      content: alertLevel === 'critical' ? '@here 🚨 SSL Health Monitor Alert' : '🔐 SSL Health Monitor Alert',\n      \n      // Simple descriptions without complex logic\n      simpleDescription: parsedResult.alert \n        ? `⚠ SSL issues detected for ${parsedResult.hostname}`\n        : `✅ SSL looks healthy for ${parsedResult.hostname}`,\n        \n      // Detailed info as simple strings\n      certificateInfo: `Grade: ${parsedResult.overallGrade} | Expires in ${parsedResult.certificate.daysUntilExpiry} days`,\n      \n      // Alert details as simple string\n      alertSummary: parsedResult.alert \n        ? `Issues: ${parsedResult.alertReasons.join(', ')}`\n        : `Certificate expires ${parsedResult.certificate.validUntil}`,\n        \n      // Complete formatted description\n      fullDescription: getFullDiscordDescription(parsedResult)\n    };\n    \n    results.push({ json: parsedResult });\n    \n  } catch (error) {\n    // Handle any unexpected errors\n    results.push({\n      json: {\n        hostname: 'unknown',\n        status: 'error',\n        error: `Processing error: ${error.message}`,\n        alert: true,\n        alertLevel: 'critical'\n      }\n    });\n  }\n}\n\n// Helper functions for Discord formatting\nfunction getDiscordColor(alertLevel, grade) {\n  // Color mapping for Discord embeds\n  const colors = {\n    critical: 15158332, // Red\n    high: 15105570,     // Orange\n    medium: 15844367,   // Yellow\n    low: 5763719,       // Blue\n    info: 5763719       // Blue\n  };\n  \n  // Grade-based colors for non-alerts\n  const gradeColors = {\n    'A+': 5763719,  // Green\n    'A': 3066993,   // Green\n    'B': 15844367,  // Yellow\n    'C': 15105570,  // Orange\n    'D': 15158332,  // Red\n    'F': 10038562   // Dark Red\n  };\n  \n  if (alertLevel !== 'info') {\n    return colors[alertLevel] || colors.info;\n  }\n  \n  return gradeColors[grade] || colors.info;\n}\n\nfunction getFullDiscordDescription(result) {\n  if (result.error) {\n    return `❌ SSL scan failed: ${result.error}`;\n  }\n  \n  if (result.alert) {\n    let description = `⚠ SSL issues detected for ${result.hostname}\\n`;\n    description += `Grade: ${result.overallGrade} | Expires in ${result.certificate.daysUntilExpiry} days\\n\\n`;\n    description += `Issues found:\\n`;\n    result.alertReasons.forEach(reason => {\n      description += `• ${reason}\\n`;\n    });\n    return description.trim();\n  }\n  \n  return `✅ SSL configuration looks good for ${result.hostname}\\nGrade: ${result.overallGrade} | Certificate expires in ${result.certificate.daysUntilExpiry} days`;\n}\n\nfunction getDiscordDescription(result) {\n  if (result.error) {\n    return `❌ SSL scan failed: ${result.error}`;\n  }\n  \n  if (result.alert) {\n    // Create simple alert description\n    let description = \"⚠ SSL issues detected:\\n\";\n    result.alertReasons.forEach(reason => {\n      description += `• ${reason}\\n`;\n    });\n    return description.trim();\n  }\n  \n  return `✅ SSL configuration looks good\\nGrade: ${result.overallGrade} | Expires in ${result.certificate.daysUntilExpiry} days`;\n}\n\nfunction getDiscordFields(result) {\n  const fields = [];\n  \n  // Certificate info\n  fields.push({\n    name: \"📜 Certificate\",\n    value: [\n      `**Subject:** ${result.certificate.subject}`,\n      `**Issuer:** ${result.certificate.issuer}`,\n      `**Expires:** ${new Date(result.certificate.validUntil).toLocaleDateString()}`,\n      `**Days Left:** ${result.certificate.daysUntilExpiry}`\n    ].join('\\n'),\n    inline: true\n  });\n  \n  // Security info\n  fields.push({\n    name: \"🔐 Security\",\n    value: [\n      `**Overall Grade:** ${result.overallGrade}`,\n      `**TLS 1.2:** ${result.protocols.tls12 ? '✅' : '❌'}`,\n      `**TLS 1.3:** ${result.protocols.tls13 ? '✅' : '❌'}`,\n      `**Vulnerabilities:** ${result.vulnerabilities.hasVulnerabilities ? '⚠ Found' : '✅ None'}`\n    ].join('\\n'),\n    inline: true\n  });\n  \n  // Add recommendations if any\n  if (result.recommendations.length > 0) {\n    fields.push({\n      name: \"💡 Recommendations\",\n      value: result.recommendations.slice(0, 3).map(rec => `• ${rec.message || rec}`).join('\\n') + \n             (result.recommendations.length > 3 ? `\\n... and ${result.recommendations.length - 3} more` : ''),\n      inline: false\n    });\n  }\n  \n  return fields;\n}\n\nreturn results;"},"typeVersion":2}],"active":false,"settings":{"executionOrder":"v1"},"connections":{"Check SSL":{"main":[[{"node":"Expiry Alert","type":"main","index":0}]]},"Expiry Alert":{"main":[[{"node":"Discord1","type":"main","index":0}]]},"Daily Trigger":{"main":[[{"node":"Fetch domains to check SSL","type":"main","index":0}]]},"Code - Format output":{"main":[[{"node":"Discord","type":"main","index":0}]]},"SSH - Analyze system":{"main":[[{"node":"Code - Format output","type":"main","index":0}]]},"Fetch domains to check SSL":{"main":[[{"node":"SSH - Analyze system","type":"main","index":0},{"node":"Check SSL","type":"main","index":0}]]}}}

Les données dans la notification sont 'undefined'


[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.

[User]
Mon workflow a un problème.

Workflow:
```json
{"id":"H7porcmXYj7StO23","meta":{"instanceId":"35409808e3cc9dd8ecfa6f7b93ae931f074920a2f681e667da8974c0ecf81c52","templateId":"2537","templateCredsSetupCompleted":true},"name":"Generate Instagram Content from Top Trends with AI Image Generation","tags":[],"nodes":[{"id":"8c49be2b-6320-4eb0-8303-6448ced34636","name":"If media status is finished","type":"n8n-nodes-base.if","position":[1420,260],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"0304efee-33b2-499e-bad1-9238c1fc2999","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status_code }}","rightValue":"FINISHED"}]}},"typeVersion":2.2},{"id":"f0cc0be5-6d35-4334-a124-139fa8676d07","name":"If media status is finished1","type":"n8n-nodes-base.if","position":[2000,260],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"0304efee-33b2-499e-bad1-9238c1fc2999","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status_code }}","rightValue":"PUBLISHED"}]}},"typeVersion":2.2},{"id":"c8d8d8cd-8501-4d1b-ac28-8cb3fa74d9d7","name":"Telegram","type":"n8n-nodes-base.telegram","position":[1580,440],"parameters":{"text":"Video upload edilmeden önce bir problem oldu","chatId":"={{ $('Telegram Params').item.json.telegram_chat_id }}","additionalFields":{}},"typeVersion":1.2},{"id":"ae91a5e0-4f70-4a1c-afa5-41f5449facab","name":"Telegram1","type":"n8n-nodes-base.telegram","position":[2160,100],"parameters":{"text":"Instagram Content is shared","chatId":"={{ $('Telegram Params').item.json.telegram_chat_id }}","additionalFields":{}},"typeVersion":1.2},{"id":"b8b38440-14a7-43f6-ac49-6ca9502ff54d","name":"Telegram2","type":"n8n-nodes-base.telegram","position":[2160,440],"parameters":{"text":"There was a ...
```

**Symptôme**: Les données dans la notification sont 'undefined'
**Attendu**: Valeurs correctes affichées
**Réel**: 'undefined' partout

[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é**: Mauvais chemin d'accès aux données ($json.data au lieu de $json.data.items[0])

**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":"H7porcmXYj7StO23","meta":{"instanceId":"35409808e3cc9dd8ecfa6f7b93ae931f074920a2f681e667da8974c0ecf81c52","templateId":"2537","templateCredsSetupCompleted":true},"name":"Generate Instagram Content from Top Trends with AI Image Generation","tags":[],"nodes":[{"id":"8c49be2b-6320-4eb0-8303-6448ced34636","name":"If media status is finished","type":"n8n-nodes-base.if","position":[1420,260],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"0304efee-33b2-499e-bad1-9238c1fc2999","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status_code }}","rightValue":"FINISHED"}]}},"typeVersion":2.2},{"id":"f0cc0be5-6d35-4334-a124-139fa8676d07","name":"If media status is finished1","type":"n8n-nodes-base.if","position":[2000,260],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"0304efee-33b2-499e-bad1-9238c1fc2999","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status_code }}","rightValue":"PUBLISHED"}]}},"typeVersion":2.2},{"id":"c8d8d8cd-8501-4d1b-ac28-8cb3fa74d9d7","name":"Telegram","type":"n8n-nodes-base.telegram","position":[1580,440],"parameters":{"text":"Video upload edilmeden önce bir problem oldu","chatId":"={{ $('Telegram Params').item.json.telegram_chat_id }}","additionalFields":{}},"typeVersion":1.2},{"id":"ae91a5e0-4f70-4a1c-afa5-41f5449facab","name":"Telegram1","type":"n8n-nodes-base.telegram","position":[2160,100],"parameters":{"text":"Instagram Content is shared","chatId":"={{ $('Telegram Params').item.json.telegram_chat_id }}","additionalFields":{}},"typeVersion":1.2},{"id":"b8b38440-14a7-43f6-ac49-6ca9502ff54d","name":"Telegram2","type":"n8n-nodes-base.telegram","position":[2160,440],"parameters":{"text":"There was a problem when execution a upload content to instagram","chatId":"={{ $('Telegram Params').item.json.telegram_chat_id }}","additionalFields":{}},"typeVersion":1.2},{"id":"82e0e5d0-bf50-4b2e-8693-2612dffe53e2","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[-1000,220],"parameters":{"options":{}},"typeVersion":3},{"id":"fb72beb1-1a6a-4148-9ee4-cdc564c4dc5c","name":"Schedule Trigger1","type":"n8n-nodes-base.scheduleTrigger","position":[-3080,300],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"5 13,19 * * *"}]}},"typeVersion":1.2},{"id":"470f3406-19d2-420c-8f33-7031237d882c","name":"Telegram Params","type":"n8n-nodes-base.set","position":[-2320,300],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d18cdca7-d301-4c70-a4d0-8d6e7ecfc2d1","name":"telegram_chat_id","type":"string","value":""}]}},"typeVersion":3.4},{"id":"12971505-7061-4d32-8921-d2e731eae9db","name":"Instagram params","type":"n8n-nodes-base.set","position":[-2560,300],"parameters":{"options":{},"assignments":{"assignments":[{"id":"1e380c14-e908-4eeb-90e0-957a422829d0","name":"instagram_business_account_id","type":"string","value":""}]}},"typeVersion":3.4},{"id":"2bc617b8-835c-48ba-8de6-341a6c87b853","name":"Rapid Api params","type":"n8n-nodes-base.set","notes":"test","position":[-2080,300],"parameters":{"options":{},"assignments":{"assignments":[{"id":"48a33ec7-2b4f-496a-ad77-e4d5f1907ee4","name":"x-rapid-api-key","type":"string","value":""}]}},"notesInFlow":false,"typeVersion":3.4},{"id":"23bad41e-40ac-4488-8b2f-0d54d22a927a","name":"filter the image content","type":"n8n-nodes-base.code","position":[-1480,380],"parameters":{"jsCode":"const filteredData = $input.first().json.data.items.filter(item=> !item.is_video)\nreturn filteredData.map((item)=>{\n  return {\n    id: item.id,\n    prompt: item.caption.text,\n    content_code: item.code,\n    thumbnail_url: item.thumbnail_url,\n    tag: $input.first().json.data.additional_data.name\n  }\n})                                                                    \n\n"},"typeVersion":2},{"id":"a65690cd-4d30-4541-b80d-aae872326a77","name":"get  top trends on instagram #blender3d","type":"n8n-nodes-base.httpRequest","position":[-1720,180],"parameters":{"url":"https://instagram-scraper-api2.p.rapidapi.com/v1/hashtag","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"hashtag","value":"blender3d"},{"name":"feed_type","value":"top"}]},"headerParameters":{"parameters":[{"name":"x-rapidapi-host","value":"instagram-scraper-api2.p.rapidapi.com"},{"name":"x-rapidapi-key","value":"={{ $json['x-rapid-api-key'] }}"}]}},"typeVersion":4.2},{"id":"8707c475-7e28-4d80-92b8-ba24033c4632","name":"get top trends on instagram #isometric","type":"n8n-nodes-base.httpRequest","position":[-1720,380],"parameters":{"url":"https://instagram-scraper-api2.p.rapidapi.com/v1/hashtag","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"hashtag","value":"isometric"},{"name":"feed_type","value":"top"}]},"headerParameters":{"parameters":[{"name":"x-rapidapi-host","value":"instagram-scraper-api2.p.rapidapi.com"},{"name":"x-rapidapi-key","value":"={{ $json['x-rapid-api-key'] }}"}]}},"typeVersion":4.2},{"id":"1c1bfd8f-b086-4147-ba08-578877f2a315","name":"merge the array content","type":"n8n-nodes-base.merge","position":[-1280,280],"parameters":{},"typeVersion":3},{"id":"6beb79ef-8205-4882-9bb0-6a2e1a33f1d4","name":"Check Data on Database Is Exist","type":"n8n-nodes-base.postgres","onError":"continueErrorOutput","position":[-760,220],"parameters":{"table":{"__rl":true,"mode":"list","value":"top_trends","cachedResultName":"top_trends"},"where":{"values":[{"value":"={{$json.content_code}}","column":"code"}]},"schema":{"__rl":true,"mode":"list","value":"public","cachedResultName":"public"},"options":{},"operation":"select"},"typeVersion":2.5,"alwaysOutputData":true},{"id":"5b0c05a8-3eb7-4ad8-88e8-ceef81fe7a61","name":"If Data is Exist","type":"n8n-nodes-base.if","position":[-540,240],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"9dc20983-ae4d-40db-b969-7d43fa8b0c3e","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ !$json.isEmpty() }}","rightValue":"we"},{"id":"0e1b9264-be56-4d0c-a83e-d9ca0b05b265","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"","rightValue":""}]},"looseTypeValidation":true},"executeOnce":false,"typeVersion":2.2,"alwaysOutputData":false},{"id":"9b510f11-9a44-4d54-b162-3ffb55d66677","name":"send error message to telegram","type":"n8n-nodes-base.telegram","position":[-1000,440],"parameters":{"text":"There was a problem execution a postgresql content","chatId":"={{ $('Telegram Params').item.json.telegram_chat_id}}","additionalFields":{}},"typeVersion":1.2},{"id":"48bc61de-d416-4673-9e9b-8331ea841891","name":"insert data on db","type":"n8n-nodes-base.postgres","position":[-260,240],"parameters":{"table":{"__rl":true,"mode":"list","value":"top_trends","cachedResultName":"top_trends"},"schema":{"__rl":true,"mode":"list","value":"public"},"columns":{"value":{"tag":"={{$('Loop Over Items').item.json.tag}}","code":"={{$('Loop Over Items').item.json.content_code}}","prompt":"={{$('Loop Over Items').item.json.prompt}}","isposted":false,"thumbnail_url":"={{$('Loop Over Items').item.json.thumbnail_url}}"},"schema":[{"id":"id","type":"number","display":true,"removed":true,"required":false,"displayName":"id","defaultMatch":true,"canBeUsedToMatch":true},{"id":"prompt","type":"string","display":true,"required":true,"displayName":"prompt","defaultMatch":false,"canBeUsedToMatch":true},{"id":"isposted","type":"boolean","display":true,"required":false,"displayName":"isposted","defaultMatch":false,"canBeUsedToMatch":true},{"id":"createdat","type":"dateTime","display":true,"removed":true,"required":false,"displayName":"createdat","defaultMatch":false,"canBeUsedToMatch":true},{"id":"updatedat","type":"dateTime","display":true,"removed":true,"required":false,"displayName":"updatedat","defaultMatch":false,"canBeUsedToMatch":true},{"id":"deletedat","type":"dateTime","display":true,"removed":true,"required":false,"displayName":"deletedat","defaultMatch":false,"canBeUsedToMatch":true},{"id":"code","type":"string","display":true,"required":false,"displayName":"code","defaultMatch":false,"canBeUsedToMatch":true},{"id":"tag","type":"string","display":true,"required":false,"displayName":"tag","defaultMatch":false,"canBeUsedToMatch":true},{"id":"thumbnail_url","type":"string","display":true,"required":false,"displayName":"thumbnail_url","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"typeVersion":2.5},{"id":"15e7d69d-a10f-48a1-b240-046e9950d077","name":"Analyze Image and give the content","type":"@n8n/n8n-nodes-langchain.openAi","position":[80,240],"parameters":{"text":"Create a clear and concise description of the object in the image, focusing on its physical and general features. Avoid detailed environmental aspects like background, lighting, or colors. Describe the shape, texture, size, and any unique characteristics of the object. Mention any notable features that make the object stand out, such as its surface details, materials, and design. The description should be focused on the object itself, not its surroundings.\n\nFor example, describe the following image:\n","modelId":{"__rl":true,"mode":"list","value":"gpt-4o-mini","cachedResultName":"GPT-4O-MINI"},"options":{},"resource":"image","imageUrls":"={{ $('Loop Over Items').item.json.thumbnail_url }}","operation":"analyze"},"typeVersion":1.8},{"id":"93e253b1-da7d-4193-b899-a38e6fd9f4e4","name":"Analyze Content And Generate Instagram Caption","type":"@n8n/n8n-nodes-langchain.openAi","position":[280,240],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"gpt-4o-mini","cachedResultName":"GPT-4O-MINI"},"options":{},"messages":{"values":[{"content":"=\nSummarize the following content description into a short, engaging Instagram caption under 150 words. The caption should focus on the content of the image, not the app. Keep it appealing to social media users, and highlight the visual details of the image. Include hashtags relevant to 3D modeling and design, such as #Blender3D, #3DArt, #DigitalArt, #3DModeling, and #ArtCommunity. Ensure the tone is friendly and inviting.\n\n\nContent description to summarize:\n{{ $json.content }}\n\nMake sure to craft the caption around the content's features, such as the color contrast, reflective surface, and artistic nature of the image.\n\n"}]}},"typeVersion":1.8},{"id":"2259f6df-dca9-4a7e-babb-e63375f7207f","name":"Prepare data on Instagram","type":"n8n-nodes-base.facebookGraphApi","position":[980,260],"parameters":{"edge":"media","node":"={{ $('Instagram params').item.json.instagram_business_account_id }}","options":{"queryParameters":{"parameter":[{"name":"image_url","value":"={{ $json.output[0] }}"},{"name":"caption","value":"={{ $('Analyze Content And Generate Instagram Caption').item.json.message.content }}"}]}},"graphApiVersion":"v20.0","httpRequestMethod":"POST"},"typeVersion":1},{"id":"bcbb6058-1966-4bb5-915a-1e65b9131117","name":"Check Status Of Media Before Uploaded","type":"n8n-nodes-base.facebookGraphApi","position":[1200,260],"parameters":{"node":"={{ $json.id }}","options":{"fields":{"field":[{"name":"id"},{"name":"status"},{"name":"status_code"}]}},"graphApiVersion":"v20.0"},"typeVersion":1},{"id":"518d87ff-7808-4c06-b137-4e97d8f2ca28","name":"Publish Media on Instagram","type":"n8n-nodes-base.facebookGraphApi","position":[1600,100],"parameters":{"edge":"media_publish","node":"={{ $('Instagram params').item.json.instagram_business_account_id }}","options":{"queryParameters":{"parameter":[{"name":"creation_id","value":"={{ $json.id }}"}]}},"graphApiVersion":"v20.0","httpRequestMethod":"POST"},"typeVersion":1},{"id":"a033d12b-524f-40e8-9208-5300bbc823d3","name":"Check status of post ","type":"n8n-nodes-base.facebookGraphApi","position":[1800,260],"parameters":{"node":"={{ $('Check Status Of Media Before Uploaded').item.json.id }}","options":{"fields":{"field":[{"name":"id"},{"name":"status"},{"name":"status_code"}]}},"graphApiVersion":"v20.0"},"typeVersion":1},{"id":"02416fbb-4250-4278-af23-1f9189787123","name":"filter the image content-2","type":"n8n-nodes-base.code","position":[-1480,180],"parameters":{"jsCode":"const filteredData = $input.first().json.data.items.filter(item=> !item.is_video)\nreturn filteredData.map((item)=>{\n  return {\n    id: item.id,\n    prompt: item.caption.text,\n    content_code: item.code,\n    thumbnail_url: item.thumbnail_url,\n    tag: $input.first().json.data.additional_data.name\n  }\n})                                                                    \n\n"},"typeVersion":2},{"id":"c8b933af-356e-49ae-92d3-42eaf4ee3e9f","name":"Replicate params","type":"n8n-nodes-base.set","position":[-2780,300],"parameters":{"options":{},"assignments":{"assignments":[{"id":"1e380c14-e908-4eeb-90e0-957a422829d0","name":"replicate_token","type":"string","value":""}]}},"typeVersion":3.4},{"id":"2c73cc9c-d436-459b-9b3c-bd870810b9b4","name":"Generate image on flux","type":"n8n-nodes-base.httpRequest","position":[680,260],"parameters":{"url":"https://api.replicate.com/v1/models/black-forest-labs/flux-schnell/predictions","method":"POST","options":{},"jsonBody":"={\n  \"input\": {\n    \"prompt\": \"A highly detailed 3D isometric model of {{$('Analyze Image and give the content').item.json.content   .replace(/\\\\n/g, ' ') \n.replace(/\\\\t/g, ' ') \n.replace(/\\s+/g, ' ')\n.trim(); }} rendered in a stylized miniature toy aesthetic. Materials: Matte plastic/painted metal/weathered stone texture with no self-shadowing. Lighting: - Completely shadowless rendering - Ultra bright and perfectly even illumination from all angles - Pure ambient lighting without directional shadows - Flat, consistent lighting across all surfaces - No ambient occlusion. Style specifications: - Clean, defined edges and surfaces - Slightly exaggerated proportions - Miniature/toy-like scale - Subtle wear and texturing - Rich color palette with muted tones - Isometric 3/4 view angle - Crisp details and micro-elements. Technical details: - 4K resolution - PBR materials without shadows - No depth of field - High-quality anti-aliasing - Perfect uniform lighting. Environment: Pure white background with zero shadows or gradients. Post-processing: High key lighting, maximum brightness, shadow removal.\",\n    \"output_format\": \"jpg\",\n    \"output_quality\": 100,\n    \"go_fast\":false\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"=json","bodyParameters":{"parameters":[{}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $('Replicate params').item.json.replicate_token}}"},{"name":"Prefer","value":"wait"}]}},"typeVersion":4.2}],"active":false,"settings":{"timezone":"Europe/Istanbul","callerPolicy":"workflowsFromSameOwner","executionOrder":"v1"},"connections":{"Telegram":{"main":[[]]},"Loop Over Items":{"main":[[],[{"node":"Check Data on Database Is Exist","type":"main","index":0}]]},"Telegram Params":{"main":[[{"node":"Rapid Api params","type":"main","index":0}]]},"If Data is Exist":{"main":[[{"node":"Loop Over Items","type":"main","index":0}],[{"node":"insert data on db","type":"main","index":0}]]},"Instagram params":{"main":[[{"node":"Telegram Params","type":"main","index":0}]]},"Rapid Api params":{"main":[[{"node":"get top trends on instagram #isometric","type":"main","index":0},{"node":"get  top trends on instagram #blender3d","type":"main","index":0}]]},"Replicate params":{"main":[[{"node":"Instagram params","type":"main","index":0}]]},"Schedule Trigger1":{"main":[[{"node":"Replicate params","type":"main","index":0}]]},"insert data on db":{"main":[[{"node":"Analyze Image and give the content","type":"main","index":0}]]},"Check status of post ":{"main":[[{"node":"If media status is finished1","type":"main","index":0}]]},"Generate image on flux":{"main":[[{"node":"Prepare data on Instagram","type":"main","index":0}]]},"merge the array content":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"filter the image content":{"main":[[{"node":"merge the array content","type":"main","index":1}]]},"Prepare data on Instagram":{"main":[[{"node":"Check Status Of Media Before Uploaded","type":"main","index":0}]]},"Publish Media on Instagram":{"main":[[{"node":"Check status of post ","type":"main","index":0}]]},"filter the image content-2":{"main":[[{"node":"merge the array content","type":"main","index":0}]]},"If media status is finished":{"main":[[{"node":"Publish Media on Instagram","type":"main","index":0}],[{"node":"Telegram","type":"main","index":0}]]},"If media status is finished1":{"main":[[{"node":"Telegram1","type":"main","index":0}],[{"node":"Telegram2","type":"main","index":0}]]},"Check Data on Database Is Exist":{"main":[[{"node":"If Data is Exist","type":"main","index":0}],[{"node":"send error message to telegram","type":"main","index":0}]]},"Analyze Image and give the content":{"main":[[{"node":"Analyze Content And Generate Instagram Caption","type":"main","index":0}]]},"Check Status Of Media Before Uploaded":{"main":[[{"node":"If media status is finished","type":"main","index":0}]]},"get top trends on instagram #isometric":{"main":[[{"node":"filter the image content","type":"main","index":0}]]},"get  top trends on instagram #blender3d":{"main":[[{"node":"filter the image content-2","type":"main","index":0}]]},"Analyze Content And Generate Instagram Caption":{"main":[[{"node":"Generate image on flux","type":"main","index":0}]]}}}