【第92話】写真1枚で「見積書PDF&メール下書き」を全自動作成するAIの作り方【Dify×GAS】

Uncategorized

導入:個人事業主の「サービス残業」をゼロにする魔法

前回は目次を入れるだけ!Kindle電子書籍の全自動執筆&保存AIを作りましたね

今日現場調査に行ったお客様への「見積書作成」と「メール送信」

という地獄の事務作業が待っています。

老眼にムチを打ち、疲労がピークに達した体でパソコンを開き、キーボードを叩く。この時間、本当にしんどいですよね。「この作業、誰か代わりにやってくれないかな…」と何度思ったことか。

その願い、**DifyとGAS(Google Apps Script)を使えば今日から叶います! 今回は、「現場でスマホを使って汚れの写真を1枚撮って送るだけ」**で、帰りの車を運転している間に、完璧なフォーマットの見積書PDFと、お客様へ送るメールの下書きが勝手に出来上がっている……そんな夢のような「完全無人のAI事務員」の作り方を大公開します!

プログラミング未経験の49歳が、真っ赤なエラー画面に何度も心を折られそうになりながら完成させた血と汗の結晶です。専門用語は一切使いません。絶対に迷わないように「クリックする場所」まで全手順を細かく解説するので、同世代の皆さん、一緒に事務作業をゼロにしましょう!


結論:AIの「目」と、Googleの「手」をバケツリレーさせる

今回の自動化システムは、少し複雑に見えますが、実は3つのツールが順番にバケツリレーをしているだけです。

  1. Difyの「AI(脳と目)」: 現場の汚れ写真(カビや油汚れ)を見て、「どこを・いくらで・どんな作業をするか」を瞬時に判断し、データにまとめます。
  2. Difyの「配達員(HTTPリクエスト)」: まとめた見積もりデータを、Googleのシステム(GAS)へ全速力で届けます。
  3. GASの「手(書記)」: データを受け取り、あらかじめ用意したGoogleドキュメントの「ひな形」に文字を書き込んでPDF化し、Gmailに添付して下書きを作ります。

この仕組みを、STEP 1〜3に分けて順番に作っていきます。コピペで終わる魔法のコードも用意したので、安心してついてきてください!


手順:コピペとクリックで完成!AI事務員構築ガイド

STEP 1:GAS側の準備(見積書の「ひな形」と「保存箱」を作る)

まずは、AIが文字を全自動で書き込むための「穴あきテンプレート」を作ります。

① 見積書のテンプレート(ひな形)を作る

  1. ご自身のGoogleドライブを開き、左上の「+ 新規」から**「Google ドキュメント」**を作成します。
  2. ファイル名を「見積書テンプレート」などに変更します。
  3. いつもお客様に出している見積書のフォーマットを書きます。この時、AIに自動で書き換えてほしい部分には、**{ }(波カッコ)**を使って以下のような「目印」を置いておきます。
    • 清掃箇所: {箇所}
    • お見積り金額: {金額}
    • 作業内容: {内容}

② テンプレートの「ID(住所)」をメモする【超重要!】 GASのシステムがこのドキュメントを見つけられるように、住所をメモします。

  1. 今作ったドキュメントの画面一番上にある「URL(アドレスバー)」を見ます。
  2. https://docs.google.com/document/d/1A2B3C4D5E6F7G8H9I0J/edit のようになっています。
  3. この中の、**/d//edit の間に挟まれた、やたらと長い英数字の文字列(例:1A2B3C4D5E6F7G8H9I0J)**だけを慎重にコピーして、メモ帳に「テンプレートID」として貼り付けておきます。
Googleドキュメントで作成した清掃業向けの御見積書テンプレート画面。DifyやGAS(Google Apps Script)から自動入力するために、{箇所}、{金額}、{内容}といった変数(プレースホルダー)を配置し、横浜市のハウスクリーニング業者が自動で見積書を生成・発行するための基本レイアウト。

③ PDFの「保存箱(フォルダ)」を作り、IDをメモする

  1. Googleドライブの最初の画面に戻り、「+ 新規」>**「新しいフォルダ」**を作成します。名前は「AI自動見積もり」などにします。
  2. そのフォルダをダブルクリックして開きます。
  3. ドキュメントの時と同じようにURLを見ます。.../folders/9Z8Y7X6W5V のような形です。
  4. /folders/ の後ろにある長い英数字をコピーし、メモ帳に「フォルダID」として貼り付けます。
Googleドライブ上の「自動作成_見積書PDF」フォルダ画面。Dify(AI)が生成した見積もり内容を基に、GAS(Google Apps Script)が自動でPDF化し、このフォルダへ格納・保存する仕組み。自動見積もりボット(現場DX)の構築において、生成されたドキュメントを管理するための設定。

STEP 2:GASのプログラムを設定する(専用ポストの設置)

次に、Difyの配達員がデータを投げ込む「あなた専用の受付ポスト」をGoogleドライブ上に作ります。

① コードの貼り付けとIDの入力

  1. Googleドライブの左上「+ 新規」>「その他」>**「Google Apps Script」**を開きます。
  2. 最初から書かれている function myFunction()... の文字をすべて消して真っ白にします。
  3. 以下のコードをそのままコピーして貼り付けます。

▼ コピペ用:GASコード(全行に解説コメント付き!)

JavaScript

function doPost(e) {
  // 送られてきたデータを、プログラムが読みやすい形式に翻訳します
  const jsonData = JSON.parse(e.postData.contents);
  const targetArea = jsonData.area;
  const targetPrice = jsonData.price;
  const targetDetails = jsonData.details;
  
  // 【最重要】STEP 1でメモ帳に残した2つのIDをここに入れます!
  const templateId = "ここにテンプレートIDを入れる";
  const folderId = "ここにフォルダIDを入れる";
  
  // 指定したフォルダを見つけ出します
  const folder = DriveApp.getFolderById(folderId);
  
  // テンプレートをコピーして、新しい名前で見積書を作成します
  const newDocFile = DriveApp.getFileById(templateId).makeCopy("見積書_" + targetArea, folder);
  const newDoc = DocumentApp.openById(newDocFile.getId());
  const body = newDoc.getBody();
  
  // 本文の中にある目印を、Difyから送られてきた実際のデータに書き換えます
  body.replaceText("{箇所}", targetArea);
  body.replaceText("{金額}", targetPrice);
  body.replaceText("{内容}", targetDetails);
  
  // 書き換えが終わったら、見積書を上書き保存して閉じます
  newDoc.saveAndClose();
  
  // 保存したドキュメントを「PDFファイル」に自動変換します
  const pdfBlob = newDocFile.getAs('application/pdf');
  
  // お客様へ送るメールの本文を作ります(\n は改行という意味です)
  const emailBody = "お客様\n\nお世話になっております。\n先ほど拝見した【" + targetArea + "】の清掃について、お見積書を作成いたしました。\n添付のPDFをご確認くださいませ。\n\nよろしくお願いいたします。";
  
  // Gmailを開き、PDFを添付した状態で「下書き」を自動で作成します
  GmailApp.createDraft("client@example.com", "【お見積り】清掃作業について", emailBody, {
    attachments: [pdfBlob]
  });
  
  // Difyに対して「完了しました!」とお返事を返します
  return ContentService.createTextOutput("Success");
}
  1. 貼り付けたら、コードの中腹にある ここにテンプレートIDを入れる などの日本語を消して、STEP 1でメモした自分のIDに書き換えます。

② プログラムの公開(デプロイ)とURLの発行

  1. 画面上の「💾(保存)」ボタンを押します。
  2. 画面右上の青いボタン**「デプロイ」「新しいデプロイ」**をクリックします。
  3. 左側の「歯車マーク」から**「ウェブアプリ」**を選びます。
  4. 【重要】一番下の「アクセスできるユーザー」を必ず**「全員」**に変更し、「デプロイ」を押します。
  5. ※初回のみセキュリティの警告が出ます。「アクセスを承認」>自分のアカウントを選択>左下の「詳細」>一番下の「安全ではないページへ移動」>「許可」の順にクリックして突破してください。(自作プログラムなので無害です!)
  6. 発行された**「ウェブアプリのURL」**をコピーして、メモ帳に貼っておきます。

🚨【実体験】初心者が絶対に引っかかる「3つの罠」 私自身、ここで数時間フリーズしました(笑)。皆さんは以下の罠に気をつけてください!

  • 罠①:IDのお尻にゴミ文字が混ざる URLをコピーする時、/edit?tab=t.0 のような不要な文字まで一緒にコピーしてしまうと絶対に動きません!純粋な英数字だけにしてください。
  • 罠②:直したら「新しいデプロイ」を忘れる コードのIDを直したのに動かない!という時は、デプロイ(更新)のやり忘れです。GASは「保存」を押しただけでは反映されません。「デプロイを管理」からペンのマークを押し、必ず「新バージョン」を選んで上書きデプロイしてください。
  • 罠③:ブラウザで直接開いてしまう 発行されたURLをブラウザで開いて「doGetのエラー」が出ても焦らないでください。これは「Difyの配達員(POST)」専用の裏口ポストなので、人間が表から開くとエラーになる正常な仕様です!

Google Apps Script(GAS)を用いた見積書自動作成システムのソースコード。Difyから送られた見積データを解析し、Googleドキュメントのテンプレートを置換してPDF化、さらにGmailでPDFを添付したメール下書きを自動生成する一連の処理の実装例。初心者向けに全行日本語コメントが付与されたコード画面。

STEP 3:DifyでAIの目と脳を設定する(ここが腕の見せどころ!)

いよいよ大詰めです。Difyの画面を開き、「アプリを作成する」>「最初から作成」>**「チャットフロー(またはワークフロー)」**を選んでください。

① 写真を受け取る受付係(開始ブロック)を作る まず、現場で撮った写真をDifyにアップロードするための入り口を用意します。

  1. 一番左の**「開始(START)」**ブロックをクリックします。
  2. 入力フィールドの横にある「+(追加)」ボタンを押します。
  3. フィールドタイプの中から、文字ではなく**「画像(Image)」**(ファイル形式)を選びます。
  4. 設定画面が開くので、**「変数名」**に site_photo と入力します。(※変数名とは、システムが「これは写真が入っている箱だな」と認識するための英語の名前シールです)
  5. その下の**「ラベル名」**に 現場の写真をアップロード と入力し、保存します。(※ラベル名は、私たちがスマホで操作する時に画面に表示される分かりやすい日本語のことです)

② プロの目と脳みそ(LLMブロック)を設定する 次に、受け取った写真を分析して見積もり金額を出すAIを設定します。

  1. 開始ブロックの右側の「+」を押し、**「LLM」**ブロックを追加して繋ぎます。
  2. 画面右上のモデル選択で、必ず**「gpt-4o」などの画像が見える(Vision対応の)モデル**を選んでください。
  3. 【ココ超重要!】 ブロック内にある**「ビジョン(Vision)」という項目の [x] ボタンを押し、開始ブロックで作った site_photo を選んで紐付けます。 ※注意:写真を読ませる場合は、文字を入れるための「コンテキスト」の欄は空欄のまま**にしておいてください!ここに画像を無理やり入れるとAIがパニックになります。
  4. 「SYSTEM(指示書)」の入力欄に、以下のプロンプトをコピペします。

▼ コピペ用:システムプロンプト(JSON指定)

Plaintext

あなたは清掃業のベテラン見積もり担当者です。
ユーザーから送付された現場の写真を見て、汚れの度合いや広さを分析し、以下の3つの情報を算出してください。

【出力の絶対ルール】
・以下のJSONフォーマット(お弁当箱のようなデータ形式)で出力してください。
・挨拶や「```json」などの余計な記号は一切含めず、波括弧 { } で始まるデータのみを出力してください。

{
  "area": "(清掃箇所。例:窓サッシのカビ、エアコンなど)",
  "price": "(見積もり金額。数字のみ。例:8000)",
  "details": "(作業内容の詳細。例:カビ取り専用剤による殺菌洗浄とコーティング)"
}
DifyワークフローのLLMノード(gpt-4o)設定画面。第90話で解説する「現場DX」アプリにおいて、AIに「清掃業のベテラン見積もり担当者」の役割を与え、アップロードされた現場写真((x) site_photo)から、清掃箇所(area)、見積もり金額(price)、作業内容詳細(details)を解析・生成させるためのシステムプロンプト記述内容。

③ データを届ける配達員(HTTPリクエストブロック)を設定する 最後に、AIが出した結論(JSONデータ)を、STEP 2で作ったGASのポストへ全自動で投げ込む設定です。

  1. LLMブロックの右側に**「HTTPリクエスト」**ブロックを追加して繋ぎます。
  2. 左上の「メソッド」を POST (データを送るという意味)にします。
  3. 「API(URL)」の入力欄に、**STEP 2で発行してメモしておいた「ウェブアプリのURL」**を貼り付けます。
  4. 下の方にある「ボディ(Body)」の項目を開き、データ形式を JSON にします。
  5. 入力欄をクリックして {x}ボタンを押し、**一つ前のLLMブロックの出力テキスト(text)**を選んで挿入します。(※画面には {{#LLM.text#}} のように表示されればOKです!)
  6. 【💡 安心ポイント】 ヘッダー(Header)やパラメータ(Parameter)という難しい入力欄は、完全に空欄のままで大丈夫です!

すべて設定できたら、右上の青いボタン**「公開する(更新)」**を押せば、究極のAI事務員の完成です!

DifyワークフローのHTTPリクエストノード。生成されたマニュアルテキストを外部サービス(GASなど)へ送信するための設定画面。ボディにLLMノードからの出力変数((x) text)を指定している例。

まとめ:私たちの仕事の裏に、無敵の相棒を。

さあ、プレビュー画面を開いて、テスト実行してみましょう! ご自身のスマホに入っている「窓サッシのカビ」や「汚れた換気扇」の写真をアップロードして、「実行」ボタンを押してみてください。

AIが数秒間じっくりと写真を見て考えた後、裏側でGASへデータが送られます。 処理が終わったら、ご自身のGmailを開いて「下書き」フォルダを見てください。

Difyで構築した「汚れ判定・自動見積もりAI」のテスト実行結果画面。現場写真から解析された見積もりデータ(箇所・金額・内容)が、HTTPリクエストノードを通じてGoogle Apps Script(GAS)へ正常に送信され、見積書作成プロセスが「Success」ステータスで完了したことを示すワークフローの実行ログ。

なんと!あなたが文字を1文字も打っていないのに、「【お見積り】清掃作業について」というメールが用意され、そこにはプロ仕様のフォーマットで作られた「見積書PDF」がバッチリ添付されているはずです! この「Success」の文字を見た瞬間の鳥肌とガッツポーズ、ぜひ皆さんにも味わってほしいです!

DifyとGASで自動見積もりシステムを作った際、AIの見積もり結果を基にGoogleドキュメントの見積書テンプレートが自動で置換・作成された成果物の画面。清掃箇所、金額、作業内容詳細が入力されている例。

これまでは、現場から疲れて帰ってきてからが「第二の仕事」の始まりでした。 しかし、このシステムを一度作ってしまえば、帰り道の車に乗り込む前にスマホで写真を1枚送るだけ。自宅に着く頃には、あとは「送信ボタン」を押すだけの状態になっています。

Dify(AI)とGoogle Apps Script(GAS)の連携により、Gmail上に自動で作成されたメールの下書き画面。AIが判定した「窓枠」の清掃見積もりPDFが添付され、件名「【お見積り】清掃作業について」や本文、送信先のアドレスがすべて自動入力されている現場DXの実例。

プログラミング未経験の49歳でも、毎度のことですが、何回もエラーと格闘しながら諦めずに手を動かせば、大企業が何万円もかけて導入するような業務自動化システムを自作できるんです。現場仕事は私たちの腕で、面倒な事務仕事は文句ひとつ言わないAIの相棒に任せましょう!

同世代の皆さん、中高年からの「AI再スタート」は、まだまだここから最高に面白くなりますよ!実際に作ってみて分からないことがあれば、ブログのコメント欄でいつでも聞いてくださいね!さて、次は何を作ろうか考えます。

次回も是非お楽しみに!

コメント

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