ワークフローの全体像と流れ

このワークフローは、大きく3つの主要なステップで構成されています。
- リード情報の獲得とデータの選別 (
Step1):On form submissionノードから、ユーザーが入力した事業タイプや地域、結果件数といった情報を受け取ります。Switchノードで言語を判別し、Edit FieldsノードでApify(Google Places Crawler)が処理しやすいようにデータを整形します。HTTP Request1ノードで、ApifyのAPIを呼び出してGoogle Mapsからビジネス情報を取得します。Codeノードで取得したデータに品質スコアリングを行い、ウェブサイトの有無やレビュー数、デジタル決済対応などの項目ごとに点数をつけ、その後のAI分析の優先度を決定しています。そして、そのデータをGoogleスプレッドシートに記録しています。
- AIによる提案メールの自動作成 (
Step2):Loop Over Itemsノードで、取得した各リードデータに対して個別の処理を開始します。Create Proposal Agent(OpenAIノード) が、リードのウェブサイトや評価などの情報に基づき、AIソリューションの提案を含んだパーソナライズされたメールの件名と本文をJSON形式で生成します。このノードでは、会社の所在地に応じて日本語または英語でメールを作成する指示(System Prompt)が設定されています。- 生成されたメールの内容は
Append row in sheet1ノードで別のGoogleスプレッドシートに記録され、営業担当者が確認できるようにしています。
- AIによる提案資料の自動作成 (
Step3):Slide Transformer(OpenAIノード) が、前のステップで生成されたメール本文から、提案資料のスライドに必要なキーポイント(現状分析、AIソリューション、将来の成功)を抽出します。Search files and foldersノードで、事前に用意しておいたGoogleスライドのテンプレートファイル「AI template」を検索します。Copy fileノードで、そのテンプレートをコピーし、新しい提案資料を作成します。Replace text in a presentationノードで、AIが抽出したキーポイントを、スライドテンプレート内のプレースホルダー({{Current State Analysis}}など)に自動で差し込み、最終的な提案資料を完成させています。
このワークフローでのつまずきポイント
この複雑なワークフローを構築するにあたり、いくつかの重要な「つまずきポイント」があったと推測されます。
1. Googleドライブの認証とノード設定
最初に提示された画像に見られる「Unable to sign without access token」というエラーが、まさに最初の大きな壁だったでしょう。これは、Googleドライブへのアクセスに必要な認証情報(Credential)が正しく設定されていないことを示します。
- 解決策: n8nのCredential設定画面で、Google DriveアカウントをOAuth2.0で正しく認証し、必要なスコープ(
https://www.googleapis.com/auth/driveなど)を付与することで、このエラーは解消されます。
2. ファイルの検索とコピーの連携
Googleドライブのファイル操作は、ファイルIDを正確に連携させる必要があります。
- つまずきポイント:
Search files and foldersノードはファイル情報(IDを含む)をリストで出力しますが、Copy fileノードに渡すには、そのリストの中から正確なIDを指定しなければなりません。 - 解決策:
Search files and foldersノードの出力から、式(Expression)を使ってファイルIDを動的に取得し、Copy fileノードの「File ID」フィールドに={{ $json.id }}のように設定します。添付のJSONでは、Copy fileノードに"value": "={{ $json.id }}"と設定されており、この連携が正しく行われたことがわかります。
3. AI(OpenAI)へのプロンプト設計
AIに意図した通りの出力(特にJSON形式)を生成させるには、プロンプトの設計が非常に重要です。
- つまずきポイント:
Create Proposal AgentやSlide Transformerノードでは、AIに特定のJSON形式で出力させるための詳細な指示がシステムプロンプトに含まれています。しかし、AIは時々余計な文章やコードブロック(json)を付けてしまうことがあります。 - 解決策:
- システムプロンプトで「Return ONLY valid JSON」や「no additional text」のように厳格な出力形式を指示すること。
- JSONのキーや形式を具体的に指定すること。
- 添付のJSONを見ると、
Create Proposal Agentノードのプロンプトに「CRITICAL LANGUAGE RULE – READ FIRST:」や「CRITICAL: Return ONLY valid JSON…」といった非常に強い指示が盛り込まれており、これが意図通りの出力を得るために特に工夫された点だと推測されます。
4. 複数ステップにわたるデータの受け渡し
ワークフロー内のノード間でデータを正確に受け渡すことも、複雑なフローでは課題となります。
- つまずきポイント:
Create Proposal Agentノードの出力(メール本文)を、次のSlide Transformerノードが正しく受け取って解析する必要があります。 - 解決策:
Slide Transformerノードの入力(Content)で、{{ $json['mail body'] }}のように前のノードで設定された変数名を正確に参照することで、データの受け渡しを実現しています。このフローでは、Append row in sheet1ノードが中間データをシートに書き出し、そのデータからSlide Transformerがデータを取得する、という流れでデータ連携が実現されています。
