航空券価格の自動比較

上級

これはMiscellaneous分野の自動化ワークフローで、19個のノードを含みます。主にIf, Ssh, Code, Webhook, EmailSendなどのノードを使用。 複数の予約プラットフォームでの航班価格を比較し、メールレポートを生成する

前提条件
  • HTTP Webhookエンドポイント(n8nが自動生成)

カテゴリー

ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "IuvYgHrzvtEck50d",
  "meta": {
    "instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
    "templateCredsSetupCompleted": true
  },
  "name": "Automate flight Price Comparison",
  "tags": [],
  "nodes": [
    {
      "id": "d4a5235a-57c0-42f6-9841-8f45d04dfe1c",
      "name": "Webhook - フライトリクエスト受信",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1088,
        432
      ],
      "webhookId": "flight-price-webhook",
      "parameters": {
        "path": "flight-price-compare",
        "options": {
          "allowedOrigins": "*"
        },
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "81bb3dac-0cd3-4826-8436-573bc393f2c4",
      "name": "フライトリクエスト解析・検証",
      "type": "n8n-nodes-base.code",
      "position": [
        -864,
        432
      ],
      "parameters": {
        "jsCode": "// Enhanced Flight Request Parser with NLP\nconst body = $input.first().json.body || {};\nconst query = body.message || body.query || '';\n\n// Extract user details\nconst userEmail = body.email || body.user_email || '';\nconst userName = body.name || body.user_name || 'Traveler';\nconst notifyPriceDrop = body.notify_price_drop || false;\n\n// Greeting handler\nconst greetings = ['hi', 'hello', 'hey', 'start', 'help'];\nif (greetings.some(g => query.toLowerCase().includes(g)) && query.split(' ').length < 5) {\n  return [{\n    json: {\n      status: 'greeting',\n      response: `Hi ${userName}! ✈️ I'm your Flight Price Comparison Assistant.\\n\\nTell me:\\n✅ From city/airport\\n✅ To city/airport\\n✅ Departure date\\n✅ Trip type (one-way/round-trip)\\n\\nExample: \"Flight from New York to London on 25th March, one-way\"`,\n      userEmail,\n      userName\n    }\n  }];\n}\n\n// Airport/City codes mapping\nconst airportCodes = {\n  'new york': 'JFK', 'nyc': 'JFK', 'london': 'LHR', 'paris': 'CDG',\n  'dubai': 'DXB', 'singapore': 'SIN', 'tokyo': 'NRT', 'mumbai': 'BOM',\n  'delhi': 'DEL', 'bangalore': 'BLR', 'los angeles': 'LAX', 'chicago': 'ORD',\n  'san francisco': 'SFO', 'boston': 'BOS', 'miami': 'MIA', 'sydney': 'SYD',\n  'melbourne': 'MEL', 'hong kong': 'HKG', 'bangkok': 'BKK', 'amsterdam': 'AMS',\n  'frankfurt': 'FRA', 'toronto': 'YYZ', 'vancouver': 'YVR', 'seattle': 'SEA'\n};\n\nfunction getAirportCode(text) {\n  const lower = text.toLowerCase().trim();\n  if (/^[A-Z]{3}$/i.test(text)) return text.toUpperCase();\n  return airportCodes[lower] || text.toUpperCase();\n}\n\n// Parse dates\nfunction parseDate(text) {\n  const monthMap = {\n    jan: 0, january: 0, feb: 1, february: 1, mar: 2, march: 2,\n    apr: 3, april: 3, may: 4, jun: 5, june: 5,\n    jul: 6, july: 6, aug: 7, august: 7, sep: 8, september: 8,\n    oct: 9, october: 9, nov: 10, november: 10, dec: 11, december: 11\n  };\n\n  const dateRegex = /(\\d{1,2})(st|nd|rd|th)?\\s+(jan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|september|oct|october|nov|november|dec|december)|\\d{4}-\\d{2}-\\d{2}/gi;\n  const matches = [...text.matchAll(dateRegex)];\n  const dates = [];\n  const currentYear = new Date().getFullYear();\n  \n  matches.forEach(match => {\n    if (match[0].includes('-')) {\n      dates.push(new Date(match[0]));\n    } else {\n      const day = parseInt(match[1]);\n      const monthStr = match[3].toLowerCase();\n      const month = monthMap[monthStr];\n      if (day && month !== undefined) {\n        dates.push(new Date(currentYear, month, day));\n      }\n    }\n  });\n  \n  return dates.sort((a, b) => a - b);\n}\n\n// Extract origin and destination\nlet origin = '';\nlet destination = '';\n\nconst routePattern = /(?:from|leaving)?\\s*([a-z\\s]{3,25})\\s+to\\s+([a-z\\s]{3,25})/i;\nconst routeMatch = query.match(routePattern);\n\nif (routeMatch) {\n  origin = routeMatch[1].trim();\n  destination = routeMatch[2].trim();\n} else {\n  origin = body.from || body.origin || body.departure_airport || '';\n  destination = body.to || body.destination || body.arrival_airport || '';\n}\n\nconst originCode = getAirportCode(origin);\nconst destinationCode = getAirportCode(destination);\n\nconst dates = parseDate(query + ' ' + (body.departure_date || ''));\nlet departureDate = dates[0] || null;\nlet returnDate = dates[1] || null;\n\nlet tripType = 'one-way';\nif (query.match(/round[\\s-]?trip|return/i) || returnDate) {\n  tripType = 'round-trip';\n}\nif (body.trip_type) {\n  tripType = body.trip_type.toLowerCase();\n}\n\nconst passengers = body.passengers || 1;\nconst cabinClass = body.class || body.cabin_class || 'economy';\n\nconst errors = [];\nif (!originCode || originCode.length < 3) errors.push('departure city/airport');\nif (!destinationCode || destinationCode.length < 3) errors.push('arrival city/airport');\nif (!departureDate) errors.push('departure date');\nif (tripType === 'round-trip' && !returnDate) errors.push('return date');\n\nif (errors.length > 0) {\n  return [{\n    json: {\n      status: 'missing_info',\n      response: `I need more information: ${errors.join(', ')}.\\n\\nExample: \"Flight from Mumbai to Dubai on 15th March, round-trip returning 20th March\"`,\n      userEmail,\n      userName\n    }\n  }];\n}\n\nconst formatDate = (date) => {\n  if (!date) return null;\n  const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n  return `${date.getDate()} ${months[date.getMonth()]} ${date.getFullYear()}`;\n};\n\nconst formatDateISO = (date) => {\n  if (!date) return null;\n  return date.toISOString().split('T')[0];\n};\n\nreturn [{\n  json: {\n    status: 'ready',\n    origin: originCode,\n    destination: destinationCode,\n    originCity: origin,\n    destinationCity: destination,\n    departureDate: formatDate(departureDate),\n    returnDate: returnDate ? formatDate(returnDate) : null,\n    departureDateISO: formatDateISO(departureDate),\n    returnDateISO: formatDateISO(returnDate),\n    tripType,\n    passengers,\n    cabinClass,\n    userEmail,\n    userName,\n    notifyPriceDrop,\n    originalQuery: query\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "3f5bb362-ca6a-4c1d-a959-9f194fcc7e99",
      "name": "リクエスト有効性確認",
      "type": "n8n-nodes-base.if",
      "position": [
        -640,
        432
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.status}}",
              "value2": "ready"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "07df7d09-a38d-4540-b8f8-0e81405e086b",
      "name": "Kayakスクレイピング",
      "type": "n8n-nodes-base.ssh",
      "onError": "continueErrorOutput",
      "position": [
        -416,
        48
      ],
      "parameters": {
        "cwd": "/home/oneclick-server2/",
        "command": "=python3 /home/oneclick-server2/flight_scraper.py {{ $json.origin }} {{ $json.destination }} {{ $json.departureDateISO }} {{ $json.returnDateISO || '' }} {{ $json.tripType }} {{ $json.passengers }} {{ $json.cabinClass }} kayak",
        "authentication": "privateKey"
      },
      "credentials": {
        "sshPrivateKey": {
          "id": "ilPh8oO4GfSlc0Qy",
          "name": "SSH Password account - test "
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2acab75d-4d75-49d7-8c37-dc36740e7636",
      "name": "Skyscannerスクレイピング",
      "type": "n8n-nodes-base.ssh",
      "onError": "continueErrorOutput",
      "position": [
        -416,
        240
      ],
      "parameters": {
        "cwd": "/home/oneclick-server2/",
        "command": "=python3 /home/oneclick-server2/flight_scraper.py {{ $json.origin }} {{ $json.destination }} {{ $json.departureDateISO }} {{ $json.returnDateISO || '' }} {{ $json.tripType }} {{ $json.passengers }} {{ $json.cabinClass }} skyscanner",
        "authentication": "privateKey"
      },
      "credentials": {
        "sshPrivateKey": {
          "id": "ilPh8oO4GfSlc0Qy",
          "name": "SSH Password account - test "
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b74690a3-61b9-41df-967b-bf395fb6aade",
      "name": "Expediaスクレイピング",
      "type": "n8n-nodes-base.ssh",
      "onError": "continueErrorOutput",
      "position": [
        -416,
        432
      ],
      "parameters": {
        "cwd": "/home/oneclick-server2/",
        "command": "=python3 /home/oneclick-server2/flight_scraper.py {{ $json.origin }} {{ $json.destination }} {{ $json.departureDateISO }} {{ $json.returnDateISO || '' }} {{ $json.tripType }} {{ $json.passengers }} {{ $json.cabinClass }} expedia",
        "authentication": "privateKey"
      },
      "credentials": {
        "sshPrivateKey": {
          "id": "ilPh8oO4GfSlc0Qy",
          "name": "SSH Password account - test "
        }
      },
      "typeVersion": 1
    },
    {
      "id": "76e69f7a-9683-47ce-bdf0-b673c504a4b2",
      "name": "Google Flightsスクレイピング",
      "type": "n8n-nodes-base.ssh",
      "onError": "continueErrorOutput",
      "position": [
        -416,
        816
      ],
      "parameters": {
        "cwd": "/home/oneclick-server2/",
        "command": "=python3 /home/oneclick-server2/flight_scraper.py {{ $json.origin }} {{ $json.destination }} {{ $json.departureDateISO }} {{ $json.returnDateISO || '' }} {{ $json.tripType }} {{ $json.passengers }} {{ $json.cabinClass }} googleflights",
        "authentication": "privateKey"
      },
      "credentials": {
        "sshPrivateKey": {
          "id": "ilPh8oO4GfSlc0Qy",
          "name": "SSH Password account - test "
        }
      },
      "typeVersion": 1
    },
    {
      "id": "020178b1-0de8-4cbc-812d-bec95ad92d8f",
      "name": "価格集計・分析",
      "type": "n8n-nodes-base.code",
      "position": [
        -64,
        336
      ],
      "parameters": {
        "jsCode": "// Aggregate flight prices from all platforms\nconst items = $input.all();\nconst searchData = items[0].json;\n\nconst flights = [];\nconst errors = [];\n\nconst platforms = ['Kayak', 'Skyscanner', 'Expedia', 'Google Flights'];\n\nitems.slice(1).forEach((item, index) => {\n  const platform = platforms[index];\n  const output = item.json.stdout || '';\n  \n  if (item.json.stderr || !output) {\n    errors.push(`${platform}: Unable to fetch`);\n    return;\n  }\n  \n  const lines = output.trim().split('\\n');\n  \n  lines.forEach(line => {\n    if (line.includes('|')) {\n      const parts = line.split('|');\n      if (parts.length >= 6) {\n        const price = parseFloat(parts[1].replace(/[^0-9.]/g, ''));\n        \n        if (price && price > 0) {\n          flights.push({\n            platform,\n            airline: parts[0].trim(),\n            price,\n            currency: parts[1].match(/[A-Z₹$€£]/)?.[0] || '$',\n            duration: parts[2].trim(),\n            stops: parts[3].trim(),\n            departureTime: parts[4].trim(),\n            arrivalTime: parts[5].trim(),\n            bookingUrl: parts[6]?.trim() || '#',\n            cabinClass: searchData.cabinClass\n          });\n        }\n      }\n    }\n  });\n});\n\nif (flights.length === 0) {\n  return [{\n    json: {\n      status: 'no_results',\n      message: 'No flights found for your search criteria.',\n      errors,\n      ...searchData\n    }\n  }];\n}\n\nflights.sort((a, b) => a.price - b.price);\n\nconst bestDeal = flights[0];\nconst avgPrice = flights.reduce((sum, f) => sum + f.price, 0) / flights.length;\nconst maxPrice = flights[flights.length - 1].price;\nconst savings = maxPrice - bestDeal.price;\n\nconst directFlights = flights.filter(f => f.stops === '0' || f.stops.toLowerCase().includes('non'));\nconst bestDirectFlight = directFlights.length > 0 ? directFlights[0] : null;\n\nreturn [{\n  json: {\n    status: 'success',\n    ...searchData,\n    results: flights,\n    bestDeal,\n    bestDirectFlight,\n    avgPrice: Math.round(avgPrice),\n    maxPrice: Math.round(maxPrice),\n    savings: Math.round(savings),\n    totalResults: flights.length,\n    directFlightsCount: directFlights.length,\n    errors,\n    searchTimestamp: new Date().toISOString()\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "b195bb98-d48b-442d-8ceb-7809a2f65d15",
      "name": "メールレポートフォーマット",
      "type": "n8n-nodes-base.code",
      "position": [
        256,
        336
      ],
      "parameters": {
        "jsCode": "// Format email report\nconst data = $input.first().json;\n\nif (data.status === 'no_results') {\n  return [{\n    json: {\n      subject: `❌ No Flights - ${data.origin} to ${data.destination}`,\n      text: `No flights found for ${data.origin} to ${data.destination} on ${data.departureDate}`,\n      ...data\n    }\n  }];\n}\n\nconst { origin, destination, departureDate, returnDate, tripType, passengers, results, bestDeal, avgPrice, savings } = data;\n\nconst topResults = results.slice(0, 10);\nconst resultsText = topResults.map((f, i) => \n  `${i + 1}. ${f.airline} - ${f.currency}${f.price} (${f.stops === '0' ? 'Non-stop' : f.stops + ' stop(s)'}) - ${f.platform}`\n).join('\\n');\n\nconst textReport = `\nFLIGHT PRICE COMPARISON\n${'='.repeat(50)}\n\nRoute: ${origin} → ${destination}\nDeparture: ${departureDate}\n${returnDate ? `Return: ${returnDate}\\n` : ''}Trip Type: ${tripType}\nPassengers: ${passengers}\n\n🏆 BEST DEAL\n${'-'.repeat(50)}\n${bestDeal.airline}\nPrice: ${bestDeal.currency}${bestDeal.price}\nDuration: ${bestDeal.duration}\nStops: ${bestDeal.stops === '0' ? 'Non-stop' : bestDeal.stops + ' stop(s)'}\nPlatform: ${bestDeal.platform}\n${savings > 0 ? `\\n💰 Save ${bestDeal.currency}${savings} vs highest price!` : ''}\n\n📊 ALL RESULTS (Top 10)\n${'-'.repeat(50)}\n${resultsText}\n\nAverage Price: ${bestDeal.currency}${avgPrice}\nTotal Results: ${results.length}\n\nPrices subject to availability.\nHappy travels! ✈️\n`;\n\nreturn [{\n  json: {\n    subject: `✈️ ${origin} → ${destination} - Best: ${bestDeal.currency}${bestDeal.price}`,\n    text: textReport,\n    ...data\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "994f5fa6-2e45-42f7-af12-f98026250c04",
      "name": "メールレポート送信",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        480,
        336
      ],
      "webhookId": "7e60915f-7994-42f1-b850-dcb254a4d83c",
      "parameters": {
        "text": "={{$json.text}}",
        "options": {},
        "subject": "={{$json.subject}}",
        "toEmail": "={{$json.userEmail}}",
        "fromEmail": "flights@pricecomparison.com",
        "emailFormat": "text"
      },
      "credentials": {
        "smtp": {
          "id": "G1kyF8cSWTZ4vouN",
          "name": "SMTP -test"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "8b3fbdb5-879f-4a02-8927-8632f944bd53",
      "name": "Webhook レスポンス(成功)",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        784,
        336
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ {\n  \"success\": true,\n  \"message\": \"Flight comparison sent to \" + $json.userEmail,\n  \"route\": $json.origin + \" → \" + $json.destination,\n  \"bestPrice\": $json.bestDeal.price,\n  \"airline\": $json.bestDeal.airline,\n  \"totalResults\": $json.totalResults\n} }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "d1d130de-f7f2-42ed-9f2b-591446329e6c",
      "name": "Webhook レスポンス(エラー)",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        -416,
        624
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ {\n  \"success\": false,\n  \"message\": $json.response || \"Request failed\",\n  \"status\": $json.status\n} }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "35dd7ec1-cb14-4b34-9138-0d8e8af2380a",
      "name": "付箋",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1184,
        -624
      ],
      "parameters": {
        "color": 4,
        "width": 484,
        "height": 476,
        "content": "## 🎯 Workflow Purpose\n\n**Smart Flight Price Comparison**\n\nAutomatically compares flight prices across multiple booking platforms and sends detailed reports via email.\n\n### Key Features:\n✅ Natural language input\n✅ Multi-platform scraping\n✅ Best deal identification  \n✅ Email reports\n✅ Real-time responses\n\n### Platforms Compared:\n- Kayak\n- Skyscanner\n- Expedia\n- Google Flights"
      },
      "typeVersion": 1
    },
    {
      "id": "c312076a-7442-41fe-ac65-692581acde7d",
      "name": "付箋1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1408,
        96
      ],
      "parameters": {
        "color": 5,
        "width": 452,
        "height": 516,
        "content": "## 📥 INPUT STAGE\n\n**Webhook receives:**\n- Flight search query\n- User email\n- Alert preferences\n\n**Example:**\n```json\n{\n  \"message\": \"NYC to London March 25\",\n  \"email\": \"user@test.com\"\n}\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "f8aa3a61-314d-4b4e-83bb-477f50a7562a",
      "name": "付箋2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        48
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 612,
        "content": "## 🧠 PARSE STAGE\n\n**Extracts:**\n- Airport codes\n- Dates (ISO format)\n- Trip type\n- Passengers\n\n**Validates:**\n- Required fields\n- Date formats\n- Airport codes"
      },
      "typeVersion": 1
    },
    {
      "id": "32ea52fc-41ef-4f5c-bf12-c0b13b9a2866",
      "name": "付箋3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -508,
        -280
      ],
      "parameters": {
        "color": 5,
        "width": 280,
        "height": 1224,
        "content": "## 🔍 SCRAPE STAGE\n\n**Parallel scraping:**\n- All platforms simultaneously\n- Continue on failures\n- 30s timeout per scraper\n\n**Output format:**\nAIRLINE|PRICE|DURATION|STOPS|TIME|TIME|URL"
      },
      "typeVersion": 1
    },
    {
      "id": "d503d1f7-06ca-4d75-96fc-b0a6d3fccb1a",
      "name": "付箋4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -112,
        -32
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 660,
        "content": "## 📊 ANALYZE STAGE\n\n**Processes:**\n- Parse all results\n- Find best deals\n- Calculate stats\n- Sort by price\n\n**Outputs:**\n- Best overall\n- Best direct\n- Avg price\n- Savings"
      },
      "typeVersion": 1
    },
    {
      "id": "b194c549-bdad-4f31-9ea3-5990caea9b84",
      "name": "付箋5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 388,
        "height": 628,
        "content": "## 📧 REPORT STAGE\n\n**Email contains:**\n- Flight route & dates\n- Best deal highlight\n- Top 10 results\n- Price statistics\n- Booking links\n\n**Format:**\nPlain text (easy to read)"
      },
      "typeVersion": 1
    },
    {
      "id": "0e963069-8538-431f-977b-9832b8905af4",
      "name": "付箋6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 612,
        "content": "## ✅ RESPONSE STAGE\n\n**Success:**\n- Best price found\n- Airline name\n- Total results\n- Email sent confirmation\n\n**Error:**\n- Helpful message\n- What's missing\n- Example format"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8562102b-7099-407b-ae1f-69da37f8da99",
  "connections": {
    "07df7d09-a38d-4540-b8f8-0e81405e086b": {
      "main": [
        [
          {
            "node": "020178b1-0de8-4cbc-812d-bec95ad92d8f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b74690a3-61b9-41df-967b-bf395fb6aade": {
      "main": [
        [
          {
            "node": "020178b1-0de8-4cbc-812d-bec95ad92d8f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2acab75d-4d75-49d7-8c37-dc36740e7636": {
      "main": [
        [
          {
            "node": "020178b1-0de8-4cbc-812d-bec95ad92d8f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "994f5fa6-2e45-42f7-af12-f98026250c04": {
      "main": [
        [
          {
            "node": "8b3fbdb5-879f-4a02-8927-8632f944bd53",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b195bb98-d48b-442d-8ceb-7809a2f65d15": {
      "main": [
        [
          {
            "node": "994f5fa6-2e45-42f7-af12-f98026250c04",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "76e69f7a-9683-47ce-bdf0-b673c504a4b2": {
      "main": [
        [
          {
            "node": "020178b1-0de8-4cbc-812d-bec95ad92d8f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3f5bb362-ca6a-4c1d-a959-9f194fcc7e99": {
      "main": [
        [
          {
            "node": "07df7d09-a38d-4540-b8f8-0e81405e086b",
            "type": "main",
            "index": 0
          },
          {
            "node": "2acab75d-4d75-49d7-8c37-dc36740e7636",
            "type": "main",
            "index": 0
          },
          {
            "node": "b74690a3-61b9-41df-967b-bf395fb6aade",
            "type": "main",
            "index": 0
          },
          {
            "node": "76e69f7a-9683-47ce-bdf0-b673c504a4b2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "d1d130de-f7f2-42ed-9f2b-591446329e6c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "020178b1-0de8-4cbc-812d-bec95ad92d8f": {
      "main": [
        [
          {
            "node": "b195bb98-d48b-442d-8ceb-7809a2f65d15",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "81bb3dac-0cd3-4826-8436-573bc393f2c4": {
      "main": [
        [
          {
            "node": "3f5bb362-ca6a-4c1d-a959-9f194fcc7e99",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d4a5235a-57c0-42f6-9841-8f45d04dfe1c": {
      "main": [
        [
          {
            "node": "81bb3dac-0cd3-4826-8436-573bc393f2c4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

上級 - その他

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
上級
ノード数19
カテゴリー1
ノードタイプ7
難易度説明

上級者向け、16ノード以上の複雑なワークフロー

作成者
Oneclick AI Squad

Oneclick AI Squad

@oneclick-ai

The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34