n8nでPDF自動抽出とリード振り分けを実現する実践手順

n8nでPDF自動抽出とリード振り分けを実現する実践手順 アイキャッチ画像 AI自動化

「Squareの請求書PDFを毎回手作業でコピペしてる…」「Wixに届く問い合わせを一件ずつ担当者に転送してる…」そんな繰り返し作業、n8nとLLMを組み合わせれば全部自動化できます。

この記事では、SquareのPDF請求書からデータを自動抽出して、WixのリードをAIで振り分けるワークフローの具体的な手順を解説します。

結論、n8nとOpenAI(またはOllama)があれば、コードを書かずに実現できます。

初めての方は基本編から、すでにn8nを使っている方は応用編からどうぞ。記事の流れは「概要→準備→PDF処理→リード振り分け→応用→トラブル対処」の順番です。

n8nとLLMで何ができるのか?

n8nは、さまざまなサービスをつなぐワークフロー自動化ツールです。視覚的にノードをつなぐだけで自動化を作れます。プログラミングは不要です。

LLM(大規模言語モデル)はAIの一種で、テキストの理解・生成が得意な技術です。ChatGPTのベースになっているものと同じ仕組みです。

この2つを組み合わせると、次のことが実現できます。

  • PDFの自動読み取り:請求書PDFをアップロードされたら、自動でデータを取り出してスプレッドシートに記録
  • リードの自動振り分け:Wixから届いた問い合わせをAIが内容を判断して担当者にSlack通知
  • データの構造化:バラバラな形式のテキストをJSON形式に整形して他のツールに連携

要するに「人がやっていた判断+転記作業」をAIが代わりにやってくれる仕組みです。

自動化に必要なツールと環境の準備

作業を始める前に、必要なものを確認しましょう。

ツール 用途 費用
n8n ワークフロー自動化の中心 セルフホストなら無料
OpenAI API(またはOllama) PDFの解析・判断 OpenAIは従量課金、Ollamaは無料
Squareアカウント 請求書の取得元 基本無料
Wixアカウント リードの受信元 基本無料
サーバー(VPSまたはMac) n8nの動作環境 VPSなら月1,000円〜

n8nのインストール方法

n8nのセルフホストにはDockerが一番かんたんです。Dockerが入ったサーバーがあれば、次のコマンド一行で起動できます。

docker run -it --rm --name n8n -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

サーバーはVPSが手軽です。XServer VPSなら月額1,569円〜から使えて、Dockerも公式でサポートされています。n8nを常時稼働させるのに必要なスペックは最小プランで十分です。

ローカルのMacで試したい方は、MacBook AirやMac miniでも同じように動かせます。

OpenAI APIキーの取得

OpenAIのサイトでアカウントを作り、APIキーを発行します。費用はgpt-4o-miniなら1,000トークンあたり約0.015円と格安です。

コストをゼロにしたい方は、ローカルで動くOllamaも選択肢です。Gemma3やLlama3などのモデルを完全無料で使えます。

【基本編】SquareのPDF請求書をn8nで自動読み取りする

ここからが本題です。SquareのPDF請求書を自動でデータ化するワークフローを組みます。

ステップ1:トリガーを設定する

まず、ワークフローのスタート地点(トリガー)を決めます。よく使う方法は2つです。

  • スケジュール実行:毎日決まった時間にSquareのAPIから新しい請求書を取得する
  • Webhook:ファイルがアップロードされたタイミングで処理を開始する

手軽に始めるなら「Schedule Trigger」ノードがおすすめです。n8nの画面で「Schedule」と検索して追加し、実行頻度を設定するだけです。

ステップ2:PDFファイルをSquare APIから取得する

「HTTP Request」ノードを使って、SquareのAPIから請求書PDFを取得します。

SquareにはInvoices APIがあり、GET /v2/invoicesでリスト取得、各請求書のPDF URLから実ファイルを取得できます。

ノードの設定はこうです。

  • Method:GET
  • URL:https://connect.squareup.com/v2/invoices
  • Headers:Authorization: Bearer [SquareのAPIキー]

Square DeveloperのダッシュボードでAPIキーを発行しておきましょう。サンドボックスキーで動作確認してから本番キーに切り替えるのが安全です。

ステップ3:PDFのテキストを抽出する

取得したPDFのテキストを読み取ります。n8nには「Extract from File」ノードがあり、PDFのテキスト抽出に対応しています。

このノードに取得したPDFバイナリを渡すと、テキスト形式で内容が出てきます。

注意点が1つあります。スキャンしたPDF(画像PDF)はテキスト抽出ができません。その場合はOCRサービス(Google Cloud Vision等)を経由させる必要があります。テキストベースのPDFとスキャンPDFを判別するロジックも入れておくと安心です。

ステップ4:LLMでデータを構造化する

抽出したテキストをLLMに渡して、構造化されたデータに変換します。「OpenAI」ノードを追加して、次のようなプロンプトを設定します。

以下の請求書テキストから、JSON形式で情報を抽出してください。

抽出する項目:
- invoice_number(請求書番号)
- date(発行日)
- amount(合計金額)
- customer_name(顧客名)
- items(品目リスト)

必ずJSONのみを返してください。説明文は不要です。

請求書テキスト:
{{ $json.text }}

LLMが返したJSONを「Code」ノードでパースして、次のノードに渡せば完成です。

ステップ5:データをスプレッドシートに記録する

「Google Sheets」ノードで、抽出したデータをスプレッドシートに追記します。これで毎回のコピペ作業がゼロになります。

💡 実際にやってみた

Mac mini M4 Pro(Amazon)にDockerでn8nを立ち上げ、PDFからのデータ抽出ワークフローを組んでみました。最初はOpenAI APIを使っていましたが、コストが気になって途中からOllamaのGemma3 12Bモデルに切り替えました。Mac mini M4 Proなら12Bモデルはサクサク動いて、処理速度も実用的なレベルです。

かかった時間:ワークフロー初回構築に約2時間。2本目以降は応用で30分ほど

つまずいたポイント:スキャンPDFが数件混在していてテキスト抽出ができなかった。PDFの種類を判別するIF分岐を追加するのに少し手間取った

結果:テキストベースのPDFは抽出精度95%以上。毎週30分かかっていた請求書データの転記作業が完全自動化できた

【基本編】WixのリードをLLMで自動振り分けする

次は、Wixの問い合わせフォームから届いたリードを自動で振り分けるワークフローです。

Wix側のWebhook設定

WixにはAutomationsという機能があります。フォーム送信をトリガーにWebhookを送る設定ができます。

設定の流れはこうです。

  1. Wix管理画面 → Automations → New Automation
  2. トリガー:「Form Submitted」を選択
  3. アクション:「Send a webhook」を選択
  4. URLにn8nのWebhook URLを貼り付ける

n8n側でデータを受信する

n8nで「Webhook」ノードを追加して、Wixからのデータをキャッチします。ノードを追加するとWebhook URLが発行されるので、これをWix側に貼り付けます。

受け取ったデータには、フォームに入力された内容が入っています。名前・メールアドレス・問い合わせ内容などです。

LLMで問い合わせを分類する

問い合わせ内容をLLMに渡して、担当部門を判断させます。プロンプトの例はこうです。

以下の問い合わせ内容を分析して、担当部門を判断してください。

判断基準:
- 「料金」「見積もり」「価格」が含まれる → sales
- 「使い方」「操作」「エラー」「不具合」が含まれる → support
- 「提案」「パートナー」「協業」が含まれる → business
- 上記以外 → general

問い合わせ内容:{{ $json.body.message }}

JSON形式のみで返答してください:
{"category": "sales", "reason": "判断した理由"}

担当者にSlack通知を送る

分類結果に応じて、担当者のSlackチャンネルに通知を送ります。「IF」ノードでカテゴリを分岐させて、それぞれの「Slack」ノードに接続します。

メッセージ内容にリードの情報(名前・メール・問い合わせ内容)を含めると、担当者が即座に対応できます。

【応用編】精度を高めるプロンプト設計とエラー対処

基本編で動くものが作れたら、次は精度と安定性を上げましょう。

JSON出力を確実にする

LLMの返答は毎回形式が変わることがあります。OpenAIノードでは「Response Format」を「JSON Object」に設定することで、返答が必ずJSON形式になります。

Ollamaを使う場合は、プロンプトの末尾に「必ずJSONのみを返してください。コードブロックや説明文は不要です」と明記するのが有効です。

エラー時の再試行を設定する

APIが一時的に失敗することがあります。n8nの「Error Trigger」ノードを使って、失敗したときに再実行する仕組みを作っておきましょう。

Workflow Settingsからエラーワークフローを指定するだけで設定できます。

処理ログをスプレッドシートに残す

何件処理したか、エラーはなかったかを記録しておくと運用が楽になります。Google Sheetsに「処理日時・ファイル名・ステータス・エラー内容」を記録するノードを末尾に追加しておきましょう。

Ollamaで完全ローカル処理にする

コストをゼロにしたい方や、データを外部に出したくない方はOllamaが選択肢です。n8nのOllamaノードにlocalhost:11434のエンドポイントを設定するだけで、OpenAIと同じように使えます。

Gemma3 12Bモデルであれば日本語の処理精度も十分実用的です。ただし27Bモデルはメモリを大量に消費するため、まずは12Bから試してみてください。

よくあるトラブルと解決策

Q:PDFのテキストが空で返ってくる

スキャンされたPDF(画像PDF)はテキスト抽出ができません。「Extract from File」ノードの前に、抽出結果の文字数が10文字以下なら「画像PDF」と判断するIF分岐を入れましょう。画像PDFはOCRルートに流す設計にすると完全対応できます。

Q:LLMがJSONを返してくれない

プロンプトの末尾に「必ずJSONのみを返してください。説明文は不要です」と明記することで改善します。それでも安定しない場合は、「Code」ノードでJSONのパースをtry-catchで囲んで失敗時の処理を入れましょう。

Q:WixのWebhookが届かない

n8nのワークフローを「Active」にしていないケースがほとんどです。ワークフロー右上の「Active」トグルをONにして、n8n自体が外部からアクセスできるURLを使っているか確認してください。ローカルのMacで試している場合は、ngrokなどでトンネルを作る必要があります。

Q:SquareのAPIで認証エラーが出る

SquareのAPIキーには「本番環境」と「サンドボックス」があります。最初はサンドボックスで動作確認して、問題なければ本番キーに切り替えましょう。エンドポイントのURLも環境によって異なります。

まとめと次のステップ

  • n8n + LLMで、PDFデータ抽出とリード振り分けをノーコードで実現できる
  • PDF処理は「HTTP Request → Extract from File → OpenAI → Google Sheets」の4ノード構成が基本
  • リード振り分けは「Webhook → OpenAI → IF → Slack」の流れで組める
  • コスト削減にはOllamaが有効。Gemma3 12Bがバランスよくておすすめ
  • スキャンPDFへの対応とエラー時の再試行設定は、最初から入れておくと運用が楽になる

n8nを動かすVPS環境をこれから用意する方には、ConoHa VPSも選択肢のひとつです。月額1,000円〜から試せて、Dockerをすぐに使い始めることができます。

n8nのDockerインストールを1から解説した記事もあわせて読んでみてください。環境構築で詰まったときに参考になります。

コメント

タイトルとURLをコピーしました