{
  "name": "Scan business cards from LINE with Gemini to Sheets, Slack, and Gmail",
  "nodes": [
    {
      "id": "7238e443-39b8-4342-9c6f-3c0233b0bccd",
      "name": "LINE Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        640,
        528
      ]
    },
    {
      "id": "c5a5b582-177b-402c-b96d-8d858f423e8a",
      "name": "Respond to LINE immediately",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        848,
        416
      ]
    },
    {
      "id": "b574f6b5-83c3-40f9-a0de-902d25784a70",
      "name": "Set config values",
      "type": "n8n-nodes-base.set",
      "position": [
        848,
        528
      ]
    },
    {
      "id": "38d99fed-61d0-4274-b264-1c57d472fe72",
      "name": "Is image message?",
      "type": "n8n-nodes-base.if",
      "position": [
        1072,
        528
      ]
    },
    {
      "id": "2272fa5b-ec32-493c-8d49-9afbf73f8ee7",
      "name": "Download image from LINE",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1296,
        448
      ]
    },
    {
      "id": "81cb7687-969f-4da8-8099-2c025671c113",
      "name": "Parse Gemini JSON response",
      "type": "n8n-nodes-base.code",
      "position": [
        1968,
        448
      ]
    },
    {
      "id": "20e0483a-bc1b-4f9e-b260-bd8397a850cf",
      "name": "Save contact to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2192,
        448
      ]
    },
    {
      "id": "d75fa8ba-2339-4caf-ba89-d5df54f91df9",
      "name": "Notify team on Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        2512,
        368
      ]
    },
    {
      "id": "78e019c6-3c1d-4343-8cfa-165c87423140",
      "name": "Has email address?",
      "type": "n8n-nodes-base.if",
      "position": [
        2496,
        528
      ]
    },
    {
      "id": "38a2ca30-ef09-4eca-a163-efa180322e0e",
      "name": "Send thank-you email via Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2768,
        448
      ]
    },
    {
      "id": "c7ef357d-8636-494b-93f4-b4511feef860",
      "name": "Reply success message on LINE",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3024,
        544
      ]
    },
    {
      "id": "aad891ae-c3ef-4cfe-9f98-1e239b073ebe",
      "name": "Reply no-image message on LINE",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1296,
        640
      ]
    },
    {
      "id": "9632d432-c5f6-470a-ba4b-9365459099af",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1536,
        656
      ]
    },
    {
      "id": "20ce84b9-0ffc-4f7d-947e-cfc0d2eebdf8",
      "name": "Extract business card data with Gemini",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1504,
        448
      ]
    },
    {
      "id": "3fd4b151-2e63-45fd-a9c5-0cbe8f794e9a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "width": 608,
        "height": 720,
        "content": "Got a stack of meishi from your last networking event? Just snap a photo and send it to LINE — this workflow handles the rest.\n\n### How it works\n\nThe LINE webhook picks up your image, checks it's actu"
      }
    },
    {
      "id": "681d606b-df05-4849-9d27-279c0d80db0a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        16
      ],
      "parameters": {
        "width": 464,
        "height": 240,
        "content": "## Receive & validate\n\nPicks up the LINE message and checks that an image was actually attached before doing anything else."
      }
    },
    {
      "id": "d225e2c5-8353-44ce-b3fe-363626d3a7bc",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        32
      ],
      "parameters": {
        "width": 544,
        "height": 272,
        "content": "## Extract contact data\n\nDownloads the image from LINE and runs it through Gemini Vision to pull out structured contact fields."
      }
    },
    {
      "id": "91d8d175-d15b-40a5-b37e-c8baa49ba57a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1984,
        48
      ],
      "parameters": {
        "width": 368,
        "height": 240,
        "content": "## Save to Sheets\n\nParses the Gemini response and appends a new contact row to your Google Sheet."
      }
    },
    {
      "id": "46750f77-ceec-4e9e-b731-35217a4b0ae7",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2464,
        96
      ],
      "parameters": {
        "width": 368,
        "height": 192,
        "content": "## Notify & confirm\n\nPings Slack with the contact summary, sends a Gmail thank-you if an email was found, then confirms back to the user on LINE."
      }
    },
    {
      "id": "84634727-9d94-42d0-acb1-45173f012794",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2880,
        176
      ],
      "parameters": {
        "width": 320,
        "height": 192,
        "content": "## 📧 Send Email\nIf an email address was found on the business card, Gmail automatically sends a thank-you email to the new contact."
      }
    },
    {
      "id": "271aaad2-fcb3-4d0e-9d91-3a98f03a714c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2848,
        784
      ],
      "parameters": {
        "width": 320,
        "height": 192,
        "content": "## 🔔 Slack Notification\nPosts the extracted contact details to a Slack channel to keep the whole team in the loop."
      }
    }
  ],
  "connections": {
    "LINE Webhook": {
      "main": [
        [
          {
            "node": "Respond to LINE immediately",
            "type": "main",
            "index": 0
          },
          {
            "node": "Set config values",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is image message?": {
      "main": [
        [
          {
            "node": "Download image from LINE",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Reply no-image message on LINE",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set config values": {
      "main": [
        [
          {
            "node": "Is image message?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has email address?": {
      "main": [
        [
          {
            "node": "Send thank-you email via Gmail",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Reply success message on LINE",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify team on Slack": {
      "main": [
        [
          {
            "node": "Send thank-you email via Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download image from LINE": {
      "main": [
        [
          {
            "node": "Extract business card data with Gemini",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Extract business card data with Gemini",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Parse Gemini JSON response": {
      "main": [
        [
          {
            "node": "Save contact to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save contact to Google Sheets": {
      "main": [
        [
          {
            "node": "Notify team on Slack",
            "type": "main",
            "index": 0
          },
          {
            "node": "Has email address?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send thank-you email via Gmail": {
      "main": [
        [
          {
            "node": "Reply success message on LINE",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract business card data with Gemini": {
      "main": [
        [
          {
            "node": "Parse Gemini JSON response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}