8
n8n 中文网amn8n.com

PDF行程提取至Google表格(GPT-4.1-Mini + Gmail通知)

中级

这是一个自动化工作流,包含 9 个节点。主要使用 Gmail, SplitOut, FormTrigger, GoogleSheets, SplitInBatches 等节点。 使用GPT-4.1-Mini将PDF行程提取到Google表格,并通过Gmail发送通知

前置要求
  • Google 账号和 Gmail API 凭证
  • Google Sheets API 凭证
  • OpenAI API Key

分类

-
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "FaoXqBQDK5JryXkW",
  "meta": {
    "instanceId": "b91e510ebae4127f953fd2f5f8d40d58ca1e71c746d4500c12ae86aad04c1502",
    "templateCredsSetupCompleted": true
  },
  "name": "Extract PDF Itineraries to Google Sheets with GPT-4.1-Mini & Gmail Notifications",
  "tags": [],
  "nodes": [
    {
      "id": "51147ae9-3e42-474b-aecf-321b364b8b11",
      "name": "Create Email",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1072,
        960
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Agency Name: {{ $json['Agency Name'] }} \nEmail:{{ $json.Email }}\nAddress: {{ $json.Address }}\nPhone:{{ $json.Phone }}\nDate:{{ $json.Date }}\nTour:{{ $json.tour }}\nDeparture Date: {{ $json['departure date'] }}"
            },
            {
              "role": "system",
              "content": "=# Overview\nYou are an email specialist for a Tour Agency. You will receive tour itinerary information. Your task is to confirm receipt of the itinerary and notify the relevant parties.\n\n## Email\nInform the team that the itinerary has been received and processed. Notify them that it has been updated in the Tour Database and provide them with the access link to view it.\n https://docs.google.com/spreadsheets/d/1lg-GRBTQCvM9WC_Mbhe4YXwgyrRcHm8K2JYDHg4XOww/edit?gid=0#gid=0\n\n## Output\nOutput the following parameters separately:\nSubject\nEmail"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "OGYj7DgYv5GFLFZk",
          "name": "OpenAi account 2"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "ab57e57e-c161-48b3-ab73-caea2ef9c12c",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        544,
        1136
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "OGYj7DgYv5GFLFZk",
          "name": "OpenAi account 2"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6dd88c5f-6724-4872-97fc-0cc152d7446d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1024,
        768
      ],
      "parameters": {
        "width": 784,
        "height": 992,
        "content": "# Extract PDF Itineraries to Google Sheets with GPT-4.1-Mini & Gmail Notifications\n\n## Overview\nAutomates PDF data extraction using OpenAI GPT, saves to Google Sheets, sends email confirmations. Reduces manual entry by 90%.\n\n## How It Works\n1. Receives PDF uploads via form\n2. Splits & loops through files\n3. AI extracts structured data\n4. Appends to Sheets with timestamps\n5. Sends confirmation email\n\n## Prerequisites\n- OpenAI API key ([platform.openai.com](https://platform.openai.com))\n- Google Workspace (Sheets & Gmail)\n- n8n v1.0.0+\n\n## Setup\n1. Add OpenAI API key to n8n credentials\n2. Create Google Sheet with extraction columns, authorize OAuth2\n3. Configure Gmail OAuth2\n4. Import workflow JSON\n5. Edit AI prompt for your fields\n6. Activate & share form URL\n\n## Customization\n- Modify extraction prompts\n- Adjust Sheets mapping\n- Customize email templates\n- Add error handling/validation\n- Extend to Word/Excel files\n\n## Use Cases\nInvoices, expense reports, resumes, contracts, forms, legal docs\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e58f6aab-f60d-4eba-9d3c-4aba55d299e4",
      "name": "Extracted information to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        848,
        960
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $json.output[' Date'] }}",
            "tour": "={{ $json.output.tour }}",
            "Email": "={{ $json.output.Email }}",
            "Phone": "={{ $json.output.Phone }}",
            "Address": "={{ $json.output.Address }}",
            "Agency Name": "={{ $json.output['Agency Name'] }}",
            "departure date": "={{ $json.output['departure date'] }}"
          },
          "schema": [
            {
              "id": "Agency Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Agency Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tour",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "tour",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "departure date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "departure date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Agency Name"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lg-GRBTQCvM9WC_Mbhe4YXwgyrRcHm8K2JYDHg4XOww/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1lg-GRBTQCvM9WC_Mbhe4YXwgyrRcHm8K2JYDHg4XOww",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lg-GRBTQCvM9WC_Mbhe4YXwgyrRcHm8K2JYDHg4XOww/edit?usp=drivesdk",
          "cachedResultName": "tour"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "KBo80D4RMDyyBspg",
          "name": "Google Sheets account 2"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "8f5ff28e-0301-4cd9-bdd2-2d9278c2d0ec",
      "name": "Loop Over Items ensures each document",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        288,
        960
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "e5a12fea-0bde-49db-8b48-b58aa31bbfb2",
      "name": "Form receives multiple PDF files",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -176,
        960
      ],
      "webhookId": "881300df-4407-4830-9c29-1df843946ddc",
      "parameters": {
        "options": {},
        "formTitle": "LOAD MULTIPLE FILES",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "files",
              "requiredField": true,
              "acceptFileTypes": "*.pdf"
            }
          ]
        },
        "formDescription": "Select multiple pdf files to run this example."
      },
      "typeVersion": 2.2
    },
    {
      "id": "453337ca-283e-4e6d-be87-87a435537032",
      "name": "Split Files processes each PDF individually",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        48,
        960
      ],
      "parameters": {
        "options": {
          "includeBinary": true,
          "destinationFieldName": "=files"
        },
        "fieldToSplitOut": "=files"
      },
      "executeOnce": false,
      "typeVersion": 1
    },
    {
      "id": "940b3087-4fc8-439d-98e3-7e14f034becc",
      "name": "email confirmation sent with results",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1424,
        1088
      ],
      "webhookId": "2c4c1f75-af3a-4c51-975c-0d493d317637",
      "parameters": {
        "sendTo": " xxxxxxxx@gmail.com",
        "message": "= {{ $('Create Email').item.json.message.content.Email }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "={{ $json.message.content.Subject }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "zkm2omCjmdLquZGT",
          "name": "Gmail account 2"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "5f12a35a-6019-4b89-83c1-9ceadaa60cad",
      "name": "Analyzes & extract PDF",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        544,
        960
      ],
      "parameters": {
        "text": "={{ $json.files.filename }}",
        "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."
        },
        "attributes": {
          "attributes": [
            {
              "name": "Agency Name",
              "required": true,
              "description": "the name of the client"
            },
            {
              "name": "Email",
              "required": true,
              "description": "the email of the client"
            },
            {
              "name": "Address",
              "required": true,
              "description": "the address of the client"
            },
            {
              "name": "Phone",
              "required": true,
              "description": "the phone number of the client"
            },
            {
              "name": " Date",
              "type": "date",
              "required": true,
              "description": "the date "
            },
            {
              "name": "tour",
              "required": true,
              "description": "holiday package tour"
            },
            {
              "name": "departure date",
              "required": true,
              "description": "departure date"
            }
          ]
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "17da634d-89f9-4c60-8c9b-f8b018c99481",
  "connections": {
    "51147ae9-3e42-474b-aecf-321b364b8b11": {
      "main": [
        [
          {
            "node": "940b3087-4fc8-439d-98e3-7e14f034becc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ab57e57e-c161-48b3-ab73-caea2ef9c12c": {
      "ai_languageModel": [
        [
          {
            "node": "5f12a35a-6019-4b89-83c1-9ceadaa60cad",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "5f12a35a-6019-4b89-83c1-9ceadaa60cad": {
      "main": [
        [
          {
            "node": "e58f6aab-f60d-4eba-9d3c-4aba55d299e4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e5a12fea-0bde-49db-8b48-b58aa31bbfb2": {
      "main": [
        [
          {
            "node": "453337ca-283e-4e6d-be87-87a435537032",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "940b3087-4fc8-439d-98e3-7e14f034becc": {
      "main": [
        [
          {
            "node": "8f5ff28e-0301-4cd9-bdd2-2d9278c2d0ec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8f5ff28e-0301-4cd9-bdd2-2d9278c2d0ec": {
      "main": [
        [],
        [
          {
            "node": "5f12a35a-6019-4b89-83c1-9ceadaa60cad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e58f6aab-f60d-4eba-9d3c-4aba55d299e4": {
      "main": [
        [
          {
            "node": "51147ae9-3e42-474b-aecf-321b364b8b11",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "453337ca-283e-4e6d-be87-87a435537032": {
      "main": [
        [
          {
            "node": "8f5ff28e-0301-4cd9-bdd2-2d9278c2d0ec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量9
分类-
节点类型9
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Cheng Siong Chin

Cheng Siong Chin

@cschin

Prof. Cheng Siong CHIN serves as Chair Professor in Intelligent Systems Modelling and Simulation in Newcastle University, Singapore. His academic credentials include an M.Sc. in Advanced Control and Systems Engineering from The University of Manchester and a Ph.D. in Robotics from Nanyang Technological University.

外部链接
在 n8n.io 查看

分享此工作流

分类

分类: 34