JotformおよびGeminiを使用したフリーランス案件の自動受け取り
中級
これは自動化ワークフローで、9個のノードを含みます。主にIf, Gmail, GoogleSheets, GoogleDocsTool, JotFormTriggerなどのノードを使用。 JotformとGeminiを使用したフリーランスプロジェクトの受注明自動化とカスタムプレゼンターション
前提条件
- •Googleアカウント + Gmail API認証情報
- •Google Sheets API認証情報
- •Google Gemini API Key
使用ノード (9)
カテゴリー
-
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"meta": {
"instanceId": "93f396852104089b8670e7494b0f3668b420464668ae4a8c1d6b4b5799f8e3ef",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "4bce3ca7-ca59-429f-b557-fb5a04c07e4c",
"name": "JotFormトリガー",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
-528,
-128
],
"webhookId": "c1255bf1-40f1-457c-bc9f-4d9fe3775436",
"parameters": {
"form": "252853173448059"
},
"credentials": {
"jotFormApi": {
"id": "I2Xm5wbkEW1qEJC5",
"name": "JotForm account"
}
},
"typeVersion": 1
},
{
"id": "664711e2-b28f-4d94-9820-62941cabb465",
"name": "AIエージェント",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-208,
-128
],
"parameters": {
"text": "=You are an **AI Freelance Proposal Generator**, an advanced automation agent for a digital freelance agency.\n\nYour primary goal is to analyze a new **freelance project inquiry** from a form submission, create a **custom proposal**, and generate a structured JSON response containing the proposal and a personalized email.\n\nYou have access to one essential tool:\n\n**Tool Name:** My Freelance Document\n\n**Description:** When called, this tool retrieves the latest content of our Google Doc, which includes all freelance services, deliverables, pricing structures, and standard project ranges in INR. You must treat this as the single source of truth for proposal generation and pricing alignment.\n\n---\n\n### Workflow\n\n**Fetch Internal Data:**\nFirst, call the My Freelance Document tool to load our service catalog and pricing guide.\n\n**Analyze Client Request:**\nRead and interpret the client’s project requirements from the form submission provided below.\n\n**Generate Custom Proposal:**\nCompare the client’s needs, goals, and budget (if provided) against the data from the document. Based on the alignment, generate a concise, structured JSON response that includes the summary, proposal content, and email details.\n\n---\n\n### Crucial Safety Rules\n\n* Your first action **must** be to call the My Freelance Document tool.\n* If this tool fails or the document cannot be accessed, stop immediately and output an error message stating the internal guide is unavailable.\n* Your final output must contain only the **single valid JSON object** defined in the Output Specification.\n* Do **not** include explanations, conversational text, or any formatting outside the JSON block.\n\n---\n\n### Output Specification\n\nThe output must be a valid JSON object. Use `'NAN'` for missing or inapplicable fields instead of empty strings.\n\n```json\n{\n \"project_type\": \"aligned\" | \"partially_aligned\" | \"misaligned\",\n \"confidence\": \"An integer from 0-100\",\n \"summary\": \"A concise summary of the client's project goals.\",\n \"budget\": \"Extracted client budget in INR, or 'NAN' if not provided.\",\n \"proposal_quality\": \"high\" | \"medium\" | \"low\",\n \"next_action\": \"Send proposal\" | \"Needs clarification\" | \"Out of scope\",\n \"email_subject\": \"A compelling proposal email subject, or 'NAN' if out of scope.\",\n \"email_template\": \"An HTML-formatted proposal email string, or 'NAN' if out of scope.\"\n}\n```\n\n---\n\n### Logic for Each Field\n\n**project_type:** Determine if the client’s requested project fits our offerings. “aligned” if it directly matches our services and pricing; “partially_aligned” if it fits but needs budget adjustment; “misaligned” if it’s unrelated or unrealistic.\n\n**confidence:** Confidence level (0–100) in your project_type classification.\n\n**summary:** 1–2 line summary describing the client’s project intent.\n\n**budget:** Extract the budget mentioned in INR. If not present, return `'NAN'`.\n\n**proposal_quality:** Rate proposal alignment based on how clearly the client’s goals and budget fit our documented offerings.\n\n**next_action:** Suggest what the sales or freelance team should do next based on your assessment.\n\n**email_subject:** Write a concise and engaging subject line for the proposal email. If project_type is “misaligned,” return `'NAN'`.\n\n**email_template:**\n\n* If project_type is “aligned” or “partially_aligned”: write a professional HTML proposal email.\n* If the client’s budget matches our pricing, send an enthusiastic proposal and suggest a meeting or next step.\n* If the budget is too low, generate a polite and strategic negotiation email emphasizing value and deliverables.\n* If project_type is “misaligned,” return `'NAN'`.\n\n---\n\n### Client Form Submission Data\n\n**Explain Your Requirement in depth:**\n{{ $json[\"Explain Your Requirement in depth\"] }}\n\n**Name:**\n{{ $json['Your Full Name'].first }} {{ $json['Your Full Name'].last }}\n\n**Email ID:**\n{{ $json['Your Email Address'] }}\n\n**Phone Number:**\n{{ $json['Your Phone Number'].full }}\n\n**Company Name:**\n{{ $json['Your Company Name (Optional)'] }}\n",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "1c788674-22f2-459b-829c-b776cef67635",
"name": "条件分岐",
"type": "n8n-nodes-base.if",
"position": [
368,
-128
],
"parameters": {
"options": {
"ignoreCase": true
},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "f39c3db4-83fa-4be6-9573-c76cba3905a9",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.project_type }}",
"rightValue": "aligned"
},
{
"id": "b914018a-909d-4b13-83e7-1ceaee823c16",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.project_type }}",
"rightValue": "partially_aligned"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "0d24224b-7b75-459f-9239-34d56ee200fb",
"name": "シートに行を追加または更新",
"type": "n8n-nodes-base.googleSheets",
"position": [
144,
-128
],
"parameters": {
"columns": {
"value": {
"Email": "={{ $('JotForm Trigger').item.json['Your Email Address'] }}",
"summary": "={{ $json.output.summary }}",
"Full Name": "={{ $('JotForm Trigger').item.json['Your Full Name'].first }} {{ $('JotForm Trigger').item.json['Your Full Name'].last }}",
"confidence": "={{ $json.output.confidence }}",
"Requirement": "={{ $('JotForm Trigger').item.json['Explain Your Requirement in depth'] }}",
"Phone number": "={{ $('JotForm Trigger').item.json['Your Phone Number'].full }}",
"project_type": "={{ $json.output.project_type }}",
"Email Subject": "={{ $json.output.email_subject }}",
"budget if any": "={{ $json.output.budget }}",
"AI generated Email body": "={{ $json.output.email_template }}"
},
"schema": [
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone number",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Phone number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Requirement",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Requirement",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "project_type",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "project_type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "confidence",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "confidence",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "summary",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "budget if any",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "budget if any",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Subject",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email Subject",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "AI generated Email body",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "AI generated Email body",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1gg-xBRO93bPg41PDqOx_V_OtokWljHAf0IgIWsWgUls/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1gg-xBRO93bPg41PDqOx_V_OtokWljHAf0IgIWsWgUls",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1gg-xBRO93bPg41PDqOx_V_OtokWljHAf0IgIWsWgUls/edit?usp=drivesdk",
"cachedResultName": "Freelance Project Proposal"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "vemTjHgIvPJgj9C5",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "2e31a538-e669-4ef3-9bf7-ba9a34550de9",
"name": "Google Gemini チャットモデル",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-416,
80
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "qsaK3VMNWQDWLweQ",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "6a3bfee5-d41a-412e-aee1-d32b987c960e",
"name": "マイフリーランスドキュメント",
"type": "n8n-nodes-base.googleDocsTool",
"position": [
-128,
96
],
"parameters": {
"operation": "get",
"documentURL": "=",
"authentication": "serviceAccount",
"descriptionType": "manual",
"toolDescription": "This Google document will have what are the freelancing services i am providing and what are my priorities and what's my typical budget for this and all"
},
"credentials": {
"googleApi": {
"id": "mYRmmCMyWcLawmcE",
"name": "Google Service Account account"
}
},
"typeVersion": 2
},
{
"id": "469d2cd8-2c4b-4e91-9b91-1bcb920a5624",
"name": "構造化出力パーサー",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
16,
96
],
"parameters": {
"jsonSchemaExample": "{\n \"project_type\": \"aligned\",\n \"confidence\": 0,\n \"summary\": \"A concise summary of the client's project goals.\",\n \"budget\": \"NAN\",\n \"proposal_quality\": \"medium\",\n \"next_action\": \"Send proposal\",\n \"email_subject\": \"your email subject goes here\",\n \"email_template\": \"your-html-email-template-goes here\"\n}"
},
"typeVersion": 1.3
},
{
"id": "76dce5c2-8f6d-417d-aac5-229d06cf097a",
"name": "メッセージを送信",
"type": "n8n-nodes-base.gmail",
"position": [
672,
-144
],
"webhookId": "0d0c0d05-d8d3-4b9e-a8ed-970c2a9852c7",
"parameters": {
"sendTo": "={{ $json.Email }}",
"message": "={{ $json['AI generated Email body'] }}",
"options": {
"appendAttribution": false
},
"subject": "={{ $json['Email Subject'] }}"
},
"credentials": {
"gmailOAuth2": {
"id": "wreuF4NMkPPxXkKm",
"name": "Abhiram.bvb"
}
},
"typeVersion": 2.1
},
{
"id": "300c2c00-cdc4-44eb-b0fc-ffb899b28362",
"name": "付箋ノート",
"type": "n8n-nodes-base.stickyNote",
"position": [
-672,
-352
],
"parameters": {
"width": 1622,
"height": 640,
"content": "## This is how this works:\n* A client submits a project inquiry via a JotForm, triggering the automation.\n* An AI agent analyzes the request, references your services document, and generates a custom proposal and email.\n* The client's details and the generated proposal are logged or updated in a Google Sheet CRM.\n* After a quick validity check, the personalized proposal is automatically sent to the client's inbox via Gmail."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"1c788674-22f2-459b-829c-b776cef67635": {
"main": [
[
{
"node": "76dce5c2-8f6d-417d-aac5-229d06cf097a",
"type": "main",
"index": 0
}
]
]
},
"664711e2-b28f-4d94-9820-62941cabb465": {
"main": [
[
{
"node": "0d24224b-7b75-459f-9239-34d56ee200fb",
"type": "main",
"index": 0
}
]
]
},
"4bce3ca7-ca59-429f-b557-fb5a04c07e4c": {
"main": [
[
{
"node": "664711e2-b28f-4d94-9820-62941cabb465",
"type": "main",
"index": 0
}
]
]
},
"6a3bfee5-d41a-412e-aee1-d32b987c960e": {
"ai_tool": [
[
{
"node": "664711e2-b28f-4d94-9820-62941cabb465",
"type": "ai_tool",
"index": 0
}
]
]
},
"2e31a538-e669-4ef3-9bf7-ba9a34550de9": {
"ai_languageModel": [
[
{
"node": "664711e2-b28f-4d94-9820-62941cabb465",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"469d2cd8-2c4b-4e91-9b91-1bcb920a5624": {
"ai_outputParser": [
[
{
"node": "664711e2-b28f-4d94-9820-62941cabb465",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"0d24224b-7b75-459f-9239-34d56ee200fb": {
"main": [
[
{
"node": "1c788674-22f2-459b-829c-b776cef67635",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
Jotform、Gemini AI、Google Sheets を使用した内部クレーム処理の自動化
Jotform、Gemini AI、Google Sheetsを使って、内部でのクレーム処理を自動化
If
Gmail
Google Sheets
+
If
Gmail
Google Sheets
22 ノードiamvaar
チケット管理
Jotform、GDrive、Gemini を使用した自動後_processor_製品配信とアップセル販売
Jotform・GDrive・Gemini を使用した自動後梱品の交付とアップセル
Gmail
Google Drive
Google Sheets
+
Gmail
Google Drive
Google Sheets
8 ノードiamvaar
Gemini AI を使用した不具合レポートの自動化:Jotform から GitHub へ、そして Telegram への通知送信
Gemini AIを使用したバグレポートの自動化:JotformからGitHubへとTelegram投稿を送信
Code
Telegram
Github Tool
+
Code
Telegram
Github Tool
10 ノードiamvaar
AI、JotForm、WhatsApp、カレンダーに基づく自動化された法律事務所のリード管理とスケジューリング
AI、JotForm、WhatsApp、およびカレンダーによる自動化された法律事務所リード管理とスケジューリング
If
Whats App
Google Sheets
+
If
Whats App
Google Sheets
16 ノードiamvaar
コンテンツ作成
n8nノードの探索(可視化リファレンスライブラリ内)
n8nノードを可視化リファレンスライブラリで探索
If
Ftp
Set
+
If
Ftp
Set
113 ノードI versus AI
その他
Supabase、Google スプレッドシート、Gmail に基づく自動のなユーザー再活性化システム
Supabase、Googleスプレッドシート、Gmailを使用した自動用戶再活性化システム
Set
Code
Gmail
+
Set
Code
Gmail
14 ノードiamvaar
ソーシャルメディア