{
  "id": "IwCDobE0PCV4O35E",
  "meta": {
    "instanceId": "2c12b0b552404dc07af67cd5f092afd21d18c808d4fdabdb04cb4b064195b6fb",
    "templateCredsSetupCompleted": true
  },
  "name": "ThaiLetterWtihMistralOCR_ENG",
  "tags": [],
  "nodes": [
    {
      "id": "beb2e565-ce98-4068-9a78-b4a26b85bd80",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3888,
        -32
      ],
      "parameters": {
        "width": 261,
        "height": 608,
        "content": "## LINE Bot Letter OCR Workflow\n\n**Features:**\n- Receive files from LINE and Google Drive\n- OCR using Mistral Document AI\n- Extract invoice information using OpenAI's Information Extractor\n- Automatically log data into Google Sheets\n\n\n**Required Environment Variables:**\n- LINE_CHANNEL_ACCESS_TOKEN\n- GDRIVE_INVOICE_FOLDER_ID  \n- MISTRAL_API_KEY\n- GSHEET_ID\n\n\n**Required Credentials:**\n- googleDriveOAuth2Api\n- googleSheetsOAuth2Api"
      },
      "typeVersion": 1
    },
    {
      "id": "30426fbd-4053-415d-b3b5-fc3dff0b1b82",
      "name": "LINE Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -3568,
        176
      ],
      "webhookId": "bf82240d-06be-4f2a-94b0-85d76943a314",
      "parameters": {
        "path": "webhook-linebot-test",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "9a8dbc27-67e0-44db-aa45-677ada852e1b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3616,
        -32
      ],
      "parameters": {
        "color": 4,
        "width": 200,
        "height": 341,
        "content": "### LINE Webhook\n\n**Receive data from LINE:**\n- Accepts POST request from LINE Messaging API\n- Extracts `messageId` for downloading file\n\n**Path:** `/line-invoice`\n**Method:** `POST`"
      },
      "typeVersion": 1
    },
    {
      "id": "2a996f22-ad7f-4c4e-ae64-7e098e2dccda",
      "name": "Get Line File",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -3296,
        176
      ],
      "parameters": {
        "url": "=https://api-data.line.me/v2/bot/message/{{ $json.body.events[0].message.id }}/content",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        },
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {}
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "credential-id",
          "name": "httpHeaderAuth Credential"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "bead3404-66a3-4d15-98d3-ec1cf2eda7a7",
      "name": "Set Line Data",
      "type": "n8n-nodes-base.set",
      "position": [
        -3072,
        176
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "42960a6d-c039-42f7-9658-22e56159b931",
              "name": "source",
              "type": "string",
              "value": "line"
            },
            {
              "id": "a17844e1-5328-42e6-b67f-d3c6886e1d95",
              "name": " fileName",
              "type": "string",
              "value": "={{ $json.body.events[0].message.fileName }}"
            },
            {
              "id": "983bf680-ee70-4c70-8aa9-811cd5b81a04",
              "name": "fileId",
              "type": "string",
              "value": "={{ $('LINE Webhook').item.json.body.events[0].message.id }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4,
      "alwaysOutputData": false
    },
    {
      "id": "399b0815-e925-46de-bc80-9befdbe48739",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3408,
        -32
      ],
      "parameters": {
        "color": 4,
        "width": 567,
        "height": 341,
        "content": "### Download File from LINE\n\n**Process:**\n1. Check if message type is \"image\"\n2. Use `messageId` to download the file\n3. Set metadata fields: source, fileName, fileId\n4. Store `fileBinary` for OCR\n\n**LINE API:**  \n`https://api-data.line.me/v2/bot/message/{messageId}/content`\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a066a27e-e10c-4bd4-8663-b9614682e991",
      "name": "Google Drive Trigger",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -3344,
        336
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "id",
          "value": "1hRyZcu2RZsRMvLjl2GKNALzxhgRl8ZKI"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f278bb26-dc66-4d55-a2c5-0065775f471b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3616,
        320
      ],
      "parameters": {
        "color": 5,
        "width": 776,
        "height": 257,
        "content": "\n### Google Drive Trigger\n\n**Monitor for new files:**\n- Watch a specific folder in Google Drive\n- Trigger the workflow when a new file is added\n- Supports PDF, JPG, JPEG formats\n\n**Folder ID:** `$env.GDRIVE_INVOICE_FOLDER_ID`  \n**Event:** `fileCreated"
      },
      "typeVersion": 1
    },
    {
      "id": "b85acdcb-66bb-4707-98ca-e91af2a614d2",
      "name": "Download File (Drive)",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -3136,
        336
      ],
      "parameters": {
        "fileId": "={{ $json.id }}",
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "dac53614-da13-4147-992a-f0db91e7bc89",
      "name": "Merge Data Sources",
      "type": "n8n-nodes-base.merge",
      "position": [
        -2768,
        256
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combinationMode": "mergeByPosition"
      },
      "typeVersion": 2.1,
      "alwaysOutputData": true
    },
    {
      "id": "fcecfcb9-deb2-489b-a36e-e71c779f0d29",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2832,
        -32
      ],
      "parameters": {
        "width": 231,
        "height": 609,
        "content": "### Merge Data Sources\n\n**Combine data from both sources:**\n- LINE: source = \"line\", fileName, fileId, fileBinary\n- Drive: source = \"drive\", fileName, fileId, fileBinary\n\n**Output:** Unified data object for downstream processing  \n**Mode:** `combineAll`\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2b36574f-9c6b-46da-8902-9efbc07667b3",
      "name": "Check File Type",
      "type": "n8n-nodes-base.if",
      "position": [
        -2528,
        176
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "condition1",
              "operator": {
                "type": "string",
                "operation": "regex",
                "singleValue": true
              },
              "leftValue": "={{ $binary.data.mimeType }}",
              "rightValue": "^image/(jpg|jpeg|png)$"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f5c236db-a54d-4c15-bf40-e9166a552cfc",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        -32
      ],
      "parameters": {
        "width": 231,
        "height": 341,
        "content": "### File Type Check\n\n**Determine file type:**\n- JPG, JPEG → OCR Image Processing\n- PDF → OCR Document Processing\n\n**Regex Pattern:** `.*\\.(jpg|jpeg|png)$`\n\n**True:** Continue to OCR via Mistral  \n**False:** Fallback to extract info from filename"
      },
      "typeVersion": 1
    },
    {
      "id": "c6948c15-9278-4c2b-9d6e-c832e43b75c8",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2352,
        -32
      ],
      "parameters": {
        "width": 279,
        "height": 341,
        "content": "### Mistral OCR Image\n\n**OCR using AI:**\n\n**Steps:**\n1. Encode image file to Base64\n2. Send to Mistral OCR node\n3. Receive parsed text from the image"
      },
      "typeVersion": 1
    },
    {
      "id": "1bfcad59-b68e-47ee-8796-71ee066cf8fa",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        320
      ],
      "parameters": {
        "width": 519,
        "height": 261,
        "content": "### Mistral OCR Document\n\n**OCR using AI:**\n\n**Steps:**\n1. Encode PDF file to Base64\n2. Send to Mistral OCR node\n3. Receive parsed text from the document"
      },
      "typeVersion": 1
    },
    {
      "id": "1700e1d6-b00a-4872-96b7-5f46f50cce94",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2064,
        -32
      ],
      "parameters": {
        "width": 343,
        "height": 341,
        "content": "### AI Validation Agent\n\n**Extract and validate data using AI:**\n\n**Validation fields:**\n- book_id\n- subject\n- to\n- ..."
      },
      "typeVersion": 1
    },
    {
      "id": "d1974977-c464-4b6f-8ad2-d3000b9ccde6",
      "name": "Write to Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1520,
        160
      ],
      "parameters": {
        "columns": {
          "value": {
            "to": "={{ $json.output.to }}",
            "date": "={{ $json.output.date }}",
            "attach": "={{ $json.output.attach }}",
            "detail": "={{ $json.output.detail }}",
            "book_id": "={{ $json.output.book_id }}",
            "subject": "={{ $json.output.subject }}",
            "signed_by": "={{ $json.output.signed_by }}",
            "download_url": "={{ $json.output.download_url }}",
            "contact_email": "={{ $json.output.contact_email }}",
            "contact_phone": "={{ $json.output.contact_phone }}",
            "signed_by_position": "={{ $json.output.signed_by_position }}"
          },
          "schema": [
            {
              "id": "book_id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "book_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "subject",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "subject",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "to",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "to",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "attach",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "attach",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "detail",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "detail",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "signed_by",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "signed_by",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "signed_by_position",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "signed_by_position",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "contact_phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "contact_phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "contact_email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "contact_email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "download_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "download_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1asLDGXnPA4K55RfLDGRkgQzOpnKezDoVibWgnGaGUJ0/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1asLDGXnPA4K55RfLDGRkgQzOpnKezDoVibWgnGaGUJ0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1asLDGXnPA4K55RfLDGRkgQzOpnKezDoVibWgnGaGUJ0/edit?usp=drivesdk",
          "cachedResultName": "n8n_ThaiLetterWithMistralAI"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "googleSheetsOAuth2Api Credential"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "05d85bdd-c642-4a45-a2c9-ffcda27c4906",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1712,
        -32
      ],
      "parameters": {
        "color": 2,
        "width": 391,
        "height": 341,
        "content": "### Google Sheets Output\n\n**Append structured data to Google Sheets:**\n\n**Columns:**\n- book_id\n- subject\n- to\n...\n\n**Sheet:** `data`  \n**Operation:** `append`\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c51e40ff-0aab-4c99-84e9-dbaa7ecb01bb",
      "name": "Reply to LINE",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1456,
        336
      ],
      "parameters": {
        "url": "https://api.line.me/v2/bot/message/reply",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "neverError": true
            }
          }
        },
        "jsonBody": "={\n  \"replyToken\": \"{{ $('LINE Webhook').item.json.body.events[0].replyToken }}\",\n  \"messages\": [\n    {\n      \"type\": \"text\",\n      \"text\": \"✅ บันทึกใบหนังสือเรียบร้อยแล้ว!\\n\\n📋 ข้อมูล:\\n เลขที่: {{ $json.book_id }}\\n เรื่อง: {{ $json.subject }}\\n เรียน: {{ $json.to }}\\n ลงวันที่: {{ $json.date }}\\n จาก: {{ $json.signed_by_position }}\\n\\n\"\n    }\n  ]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "credential-id",
          "name": "httpHeaderAuth Credential"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "076fdad3-6c0b-4812-bdb5-8b13550da89c",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1712,
        320
      ],
      "parameters": {
        "color": 4,
        "width": 391,
        "height": 133,
        "content": "### LINE Reply\n\n**Send reply message to LINE user:**\n- Confirm invoice has been saved\n- Include extracted details"
      },
      "typeVersion": 1
    },
    {
      "id": "1a14bc7a-a7ca-468c-a053-aed3a3a71cb2",
      "name": "Check Source for Reply",
      "type": "n8n-nodes-base.if",
      "position": [
        -2016,
        448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "condition1",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $('Merge Data Sources').item.json.source }}",
              "rightValue": "line"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "54929d5d-2f74-4e71-a06b-47051baefca1",
      "name": "Information Extractor",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        -2032,
        160
      ],
      "parameters": {
        "text": "={{ $json.pages[0].markdown }}",
        "options": {
          "systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute's value.\nYou must format your output as raw JSON without any backticks or markdown formatting. Do not include ```json or similar wrappers.\n"
        },
        "attributes": {
          "attributes": [
            {
              "name": "book_id",
              "description": "book id เลขที่หนังสือ"
            },
            {
              "name": "date",
              "type": "date",
              "description": "วันที่ date"
            },
            {
              "name": "subject",
              "description": "subject เรื่อง"
            },
            {
              "name": "to",
              "description": "ถึง เรียน to"
            },
            {
              "name": "attach",
              "description": "attach เอกสารแนบ หรือ อ้างถึง"
            },
            {
              "name": "detail",
              "description": "detail รายละเอียด เนื้อความ ในหนังสือ"
            },
            {
              "name": "signed_by",
              "description": "signed_by ลงนาม"
            },
            {
              "name": "contact_phone",
              "description": "contact_phone หมายเลขโทรศัพท์ติดต่อ"
            },
            {
              "name": "contact_email",
              "description": "contact_email อีเมล์สำหรับการติดต่อ"
            },
            {
              "name": "download_url",
              "description": "download_url QR code สำหรับแสกนไฟล์ที่เกี่ยวข้อง"
            },
            {
              "name": "signed_by_position",
              "description": "signed_by_position ตำแหน่งผู้ลงนาม ตำแหน่งผู้สั่งการ"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3d82e9cd-a982-4ad6-8a18-5fecdd3bbfd5",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1808,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "credential-id",
          "name": "openAiApi Credential"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "efe1b305-288b-4ea9-a35b-0cd634e2e011",
      "name": "Set Drive Data",
      "type": "n8n-nodes-base.set",
      "position": [
        -2976,
        336
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "42960a6d-c039-42f7-9658-22e56159b931",
              "name": "source",
              "type": "string",
              "value": "GDrive"
            },
            {
              "id": "a17844e1-5328-42e6-b67f-d3c6886e1d95",
              "name": " fileName",
              "type": "string",
              "value": "=slip_{{\n  $now.format('ddLLyyyyHHmm') }}.{{ $json.fileExtension }}"
            },
            {
              "id": "983bf680-ee70-4c70-8aa9-811cd5b81a04",
              "name": "fileId",
              "type": "string",
              "value": "={{ $json.permissions[1].id }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4,
      "alwaysOutputData": false
    },
    {
      "id": "8067480c-7800-4da7-a195-8e972b01cb5e",
      "name": "Move file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1456,
        480
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Google Drive Trigger').item.json.id }}"
        },
        "driveId": {
          "__rl": true,
          "mode": "id",
          "value": "1QRfuxVMkw2K_yavR3aPMSQPBnuu7xB2m"
        },
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "root",
          "cachedResultName": "/ (Root folder)"
        },
        "operation": "move"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "9ea5b7ae-0a37-4b57-a2ee-259b57cc05ff",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2064,
        320
      ],
      "parameters": {
        "width": 343,
        "height": 261,
        "content": "### File Source Handling\n\n**Differentiate by file origin:**\n- LINE → Reply with summary\n- Google Drive → Move file to archive folder\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d66136d7-8145-449a-958b-5498fa6b5a9a",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1712,
        464
      ],
      "parameters": {
        "color": 5,
        "width": 391,
        "height": 117,
        "content": "### Google Drive Move Folder\n\n**Organize processed files:**\n- Move to archive/storage folder\n"
      },
      "typeVersion": 1
    },
    {
      "id": "beb6d82a-27f7-4960-876a-90de2b5f76dc",
      "name": "Extract text IMG",
      "type": "n8n-nodes-base.mistralAi",
      "position": [
        -2256,
        160
      ],
      "parameters": {
        "options": {},
        "documentType": "image_url",
        "binaryProperty": "=data"
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "credential-id",
          "name": "mistralCloudApi Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "407ee96d-ba16-4afb-ab0f-fdf3cdb95e4a",
      "name": "Extract text PDF",
      "type": "n8n-nodes-base.mistralAi",
      "position": [
        -2256,
        368
      ],
      "parameters": {
        "options": {},
        "binaryProperty": "=data"
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "credential-id",
          "name": "mistralCloudApi Credential"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "2e25c95f-23fe-4e12-9697-9c9c1a8503bf",
  "connections": {
    "LINE Webhook": {
      "main": [
        [
          {
            "node": "Get Line File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Line File": {
      "main": [
        [
          {
            "node": "Set Line Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Line Data": {
      "main": [
        [
          {
            "node": "Merge Data Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Drive Data": {
      "main": [
        [
          {
            "node": "Merge Data Sources",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Check File Type": {
      "main": [
        [
          {
            "node": "Extract text IMG",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract text PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract text IMG": {
      "main": [
        [
          {
            "node": "Information Extractor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract text PDF": {
      "main": [
        [
          {
            "node": "Information Extractor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Information Extractor",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Merge Data Sources": {
      "main": [
        [
          {
            "node": "Check File Type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger": {
      "main": [
        [
          {
            "node": "Download File (Drive)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download File (Drive)": {
      "main": [
        [
          {
            "node": "Set Drive Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Information Extractor": {
      "main": [
        [
          {
            "node": "Write to Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write to Google Sheet": {
      "main": [
        [
          {
            "node": "Check Source for Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Source for Reply": {
      "main": [
        [
          {
            "node": "Reply to LINE",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Move file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}