「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を送る設定ができます。
設定の流れはこうです。
- Wix管理画面 → Automations → New Automation
- トリガー:「Form Submitted」を選択
- アクション:「Send a webhook」を選択
- 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から解説した記事もあわせて読んでみてください。環境構築で詰まったときに参考になります。
0人が役に立ったと評価


コメント