Azure GPT-4.1と人工検証を使用してGmail内の請求書を自動処理

上級

これはInvoice Processing, AI Summarization分野の自動化ワークフローで、17個のノードを含みます。主にIf, Gmail, Merge, GmailTrigger, StopAndErrorなどのノードを使用。 Azure GPT-4.1 と人間検証で Gmail への invoice 処理のオートメーション

前提条件
  • Googleアカウント + Gmail API認証情報
  • OpenAI API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "zZWPMtZ0TNebe1fI",
  "meta": {
    "instanceId": "9d85a8cf5ffde86dc8ca46087fd639ee7966eec2fa01c3b00004cfc2bd9c91b0"
  },
  "name": "Automate Invoice Processing from Gmail with Azure GPT-4.1 and Human Verification",
  "tags": [],
  "nodes": [
    {
      "id": "a6fd1034-16ac-48ce-a20e-5d00f9709d76",
      "name": "Gmail トリガー",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        40,
        220
      ],
      "parameters": {
        "simple": false,
        "filters": {
          "sender": "youremail@gmail.com"
        },
        "options": {
          "downloadAttachments": true
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "T2T44GgzbxyaFB0y",
          "name": "Gmail account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b4829627-2c3e-477c-8ff0-9754f0010826",
      "name": "IF: AI が「はい」と判断",
      "type": "n8n-nodes-base.if",
      "position": [
        1020,
        260
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.output[0].insights[0].body }}",
              "value2": "Yes",
              "operation": "contains"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "14933a59-1cd2-4572-aa92-8968ffa03b8a",
      "name": "PDF をローカルに保存",
      "type": "n8n-nodes-base.writeBinaryFile",
      "position": [
        1640,
        220
      ],
      "parameters": {
        "options": {},
        "fileName": "=C:/Test/Invoices/invoice_{{ $now.toFormat('yyyyLLdd_HHmmss') }}.pdf",
        "dataPropertyName": "attachment_0"
      },
      "typeVersion": 1
    },
    {
      "id": "0a17eed9-be81-4576-b218-ad12b3ffac28",
      "name": "結合",
      "type": "n8n-nodes-base.merge",
      "position": [
        1480,
        220
      ],
      "parameters": {
        "mode": "chooseBranch"
      },
      "retryOnFail": false,
      "typeVersion": 3.2
    },
    {
      "id": "e577ce73-0505-45f0-80cb-aa6d241f1add",
      "name": "情報抽出",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "onError": "continueErrorOutput",
      "position": [
        660,
        280
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "options": {
          "systemPromptTemplate": "You are an expert reviewing invoices. Analyze the texts and say if it is an invoice. Just answer 'Yes' or 'No'"
        },
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n     \"properties\": {\n       \"topic\": { \"type\": \"string\" },\n       \"insights\": {\n         \"type\": \"array\",\n         \"items\": {\n           \"type\": \"object\",\n           \"properties\": {\n             \"title\": { \"type\": \"string\" },\n             \"body\": { \"type\": \"string\" }\n           }\n         }\n       }\n     }\n  }\n}"
      },
      "typeVersion": 1.2,
      "alwaysOutputData": true
    },
    {
      "id": "861f5008-bd46-4091-b040-b7b2fe1e6f45",
      "name": "これは PDF ですか?",
      "type": "n8n-nodes-base.if",
      "position": [
        260,
        220
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.subject }}",
              "value2": "Invoice",
              "operation": "contains"
            },
            {
              "value1": "={{ $binary.attachment_0 }}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "e23bf999-1718-4489-a308-e244b22e14ad",
      "name": "メッセージ送信",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1020,
        480
      ],
      "webhookId": "aaafea40-4fcd-4775-82bf-5302914a681b",
      "parameters": {
        "sendTo": "receiver@gmail.com",
        "message": "I had trouble parsing the recent invoice. Can you please confirm that it is an invoice?",
        "options": {
          "appendAttribution": false
        },
        "subject": "Approval Required!",
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double"
          }
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "T2T44GgzbxyaFB0y",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "bc2a8732-2e5f-421b-8df1-37a6ec2f7a2e",
      "name": "請求書保存メッセージ",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1800,
        220
      ],
      "webhookId": "aaafea40-4fcd-4775-82bf-5302914a681b",
      "parameters": {
        "sendTo": "receiver@gmail.com",
        "message": "=Hi there,\nInvoice '{{ $json.subject }}' from \"{{ $json.from.value[0].name }}\" has been saved successfully in your Local Folder!\n\n",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Invoice Downloaded"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "T2T44GgzbxyaFB0y",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c9155103-6c04-438a-8e90-edb63b9ffd1a",
      "name": "付箋",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        120
      ],
      "parameters": {
        "color": 7,
        "width": 200,
        "height": 300,
        "content": "Triggers Gmail when new email from specific email account is received.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a7a4385d-f00e-493c-9757-fbd660a64354",
      "name": "付箋1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        120
      ],
      "parameters": {
        "color": 7,
        "width": 180,
        "height": 300,
        "content": "Checks if there is any pdf attachments in email, and Invoice is included in subject\n"
      },
      "typeVersion": 1
    },
    {
      "id": "da0c4d5e-9c24-4f3d-a17a-ca92d3299729",
      "name": "付箋2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        420,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 180,
        "height": 600,
        "content": "If both are true, it extracts the information from the pdf.\n\nIf not, it gives an error saying that there is no invoice file included."
      },
      "typeVersion": 1
    },
    {
      "id": "2196f52f-9e5b-4acd-b173-86ff7e986b71",
      "name": "付箋3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        620,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 780,
        "height": 660,
        "content": "This checks the extracted information from the pdf and analyze if it is invoice.\n\nBased on the information, if it is invoice, it gives output of \"Yes\", otherwise \"No\".\n\nIf \"Yes\", it merges response to another node.\nIf \"No\", it sends an email to person and says that the file does not seem like an invoice and double check the file for review. When human responds that it is an invoice, it corrects its answer as \"Yes\".\n\nIf there is an error parsing the extracted texts, it sends an email to user to check the file and asks for approval."
      },
      "typeVersion": 1
    },
    {
      "id": "ba5b7574-a2e1-401e-aab0-c7ca6b7856d8",
      "name": "Azure OpenAI チャットモデル",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        660,
        440
      ],
      "parameters": {
        "model": "gpt-4.1",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "id": "QvYBe8DtpxGloSPZ",
          "name": "Azure Open AI account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "42973f72-4ce9-4fff-90e5-9a09cc68f39b",
      "name": "人的検証",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1200,
        340
      ],
      "webhookId": "69f41f8b-bad8-4fe6-83db-b46e64f10e7f",
      "parameters": {
        "sendTo": "receiveremail@gmail.com",
        "message": "The latest invoice does not seem to be legit. Please verify it manually.",
        "options": {
          "appendAttribution": false
        },
        "subject": "Manual Verification Required"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "T2T44GgzbxyaFB0y",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "f1d15106-d677-4484-8602-7091c87be5c7",
      "name": "付箋4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1420,
        120
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 300,
        "content": "After verifying that the file is an invoice, it saves the file in the local directory. When the workflow is completed, it sends a success email to user."
      },
      "typeVersion": 1
    },
    {
      "id": "f589f451-3faf-4930-ab12-4796f219d066",
      "name": "付箋5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "width": 400,
        "height": 100,
        "content": "## Use this to automatically save invoice received in an email"
      },
      "typeVersion": 1
    },
    {
      "id": "3b021445-e52e-4191-a454-654ba26e1bba",
      "name": "エラーハンドラー",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        460,
        440
      ],
      "parameters": {
        "errorMessage": "There is no pdf file!"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "a74dc17a-a9fe-448e-a457-4b267ce63830",
  "connections": {
    "0a17eed9-be81-4576-b218-ad12b3ffac28": {
      "main": [
        [
          {
            "node": "14933a59-1cd2-4572-aa92-8968ffa03b8a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "861f5008-bd46-4091-b040-b7b2fe1e6f45": {
      "main": [
        [
          {
            "node": "0a17eed9-be81-4576-b218-ad12b3ffac28",
            "type": "main",
            "index": 0
          },
          {
            "node": "e577ce73-0505-45f0-80cb-aa6d241f1add",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "3b021445-e52e-4191-a454-654ba26e1bba",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a6fd1034-16ac-48ce-a20e-5d00f9709d76": {
      "main": [
        [
          {
            "node": "861f5008-bd46-4091-b040-b7b2fe1e6f45",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b4829627-2c3e-477c-8ff0-9754f0010826": {
      "main": [
        [
          {
            "node": "0a17eed9-be81-4576-b218-ad12b3ffac28",
            "type": "main",
            "index": 1
          }
        ],
        [
          {
            "node": "42973f72-4ce9-4fff-90e5-9a09cc68f39b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "14933a59-1cd2-4572-aa92-8968ffa03b8a": {
      "main": [
        [
          {
            "node": "bc2a8732-2e5f-421b-8df1-37a6ec2f7a2e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e577ce73-0505-45f0-80cb-aa6d241f1add": {
      "main": [
        [
          {
            "node": "b4829627-2c3e-477c-8ff0-9754f0010826",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "e23bf999-1718-4489-a308-e244b22e14ad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ba5b7574-a2e1-401e-aab0-c7ca6b7856d8": {
      "ai_languageModel": [
        [
          {
            "node": "e577ce73-0505-45f0-80cb-aa6d241f1add",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

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

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

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

上級 - 請求書処理, AI要約

有料ですか?

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

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

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

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34