【Dify×GAS】狙った業種に自動営業!Googleマップから提携メールを量産するAIの作り方

IT未経験の49歳(Yasu)が自作した、GoogleマップとDify(AI)を連携させて営業メールを全自動で量産するシステムを解説したブログ第101話のアイキャッチ画像。笑顔の男性がノートパソコンに向かい、横浜(みなとみらい)の夜景をバックに、カフェやベーカリーなど実在する店舗のピン(Googleマップ)から、自動生成されたメール(封筒アイコン)が次々と飛び出していくイメージ図。 Uncategorized

こんにちは!「中年からのAI再スタート」管理人のYasuです。49歳、IT未経験で横浜の清掃業を営む私が、現場の課題をAIで解決していく過程をお届けします。

前回はクレーム対応を自動化する「ワンタップ承認AI」のアプリを作りましたね。

私たち個人事業主にとって、一番胃が痛くなる仕事……それは「新規開拓の営業」ですよね。飛び込み営業なんて体力的にもメンタル的にもキツいし、かといってチラシ配りも限界がある。現場仕事でヘトヘトになった後、夜にウイスキーを飲みながら「誰か代わりに営業してくれないかな…」と何度思ったことか。

でも皆さん、この魔法の仕組みを作れば、もう営業で悩む必要はありません。 「美容室 横浜」「パン屋 横浜」など、狙ったターゲットのキーワードを変えるだけで、AIが勝手にGoogleマップでお店を探し、相手が喜ぶWin-Winの提携案を考え、Gmailの下書きにズラッと数十件の営業メールを自動で作り上げてくれるんです!

私が1文字もキーボードを叩かずに、AIが私の分身として働いてくれる。今回は、この「超・全自動営業マンAI」の作り方を、中学生でも分かるレベルで完全公開します!


結論

今回作ったのは、「Google Maps API(お店のデータ)× Dify(考える頭脳)× GAS(全体を動かす司令塔)」を連携させた、完全自動のB2B営業システムです。

仕組みはとてもシンプルかつ強力です。

  1. GASが、Googleマップの裏口(API)から指定したキーワード(例:横浜の美容室)のリストを自動で抜き出す。
  2. そのデータをDifyにパスする。Difyは「うちの清掃のお客さんに、そちらの割引券を配らせてください!」という熱い提案文を、相手のお店の雰囲気に合わせて作成する。
  3. 出来上がった文章を、GASが再び受け取り、Gmailの「下書き」に最大20件まで一気に自動保存する。

プログラム内の「検索キーワード」と「件数」の数字を書き換えるだけで、どんな業種にもアタックできる最強の武器になります!


手順

それでは、具体的な作り方を3つのステップで解説します。

STEP 1:Google Maps APIキー(裏口の鍵)を取得する

ここが一番の難関、「ITの壁」です。Googleマップに眠る膨大な店舗データをプログラムから引き出すために、「Google Cloud Console」というプロ向けの管理画面に潜入します。

  1. Google Cloud Consoleにログインし、新しい「プロジェクト(作業用の箱)」を作ります。
  2. 検索窓で**「Places API」**(名前にNewがついていない無印のもの)を探し、「有効にする」ボタンを押します。(※ここで本人確認のためクレジットカードの登録が必要ですが、毎月約3万円の無料枠があるので安心してください!)
  3. メニューの「APIとサービス」→「認証情報」へ進み、「APIキーを作成」をクリック。
  4. AIza...から始まる長〜い暗号(パスワード)が表示されるので、コピーして厳重に保管します。
Google Cloud Platform(GCP)の「鍵と認証情報」管理画面。Google Maps Platformの「Places API」を利用するためのAPIキー(API キー 2)や、OAuth 2.0 クライアントIDの設定一覧が表示されている。第102話で解説する、Googleマップから店舗情報を自動取得してAI営業メールを作成するシステムに不可欠な、API連携のための認証設定プロセス。

STEP 2:Difyで「営業部長エージェント」を作る

次に、私たちのホームグラウンドであるDifyで、提案文を考えるAIを作ります。

  1. 新しいワークフローを作成し、開始ノードに変数 shop_name(テキスト)と shop_info(段落)を作ります。
  2. LLMノードを繋ぎ、以下のプロンプト(指示書)を入れます。
DifyワークフローのLLMノード(gpt-4o)設定画面。AIに「横浜で地域密着の営業支援を行うプロのアドバイザー」の役割を与え、Googleマップから取得した相手店舗の情報((x) shop_info)をもとに、清掃業者「Yasu」とのコラボ提案メールを自動生成させるための設定。49歳の誠実な清掃店主というトーン指定や、相手を褒めつつWin-Winのメリットを提示する具体的な指示内容が記述されている。

あなたは横浜で地域密着の営業支援を行うプロのアドバイザーです。清掃業者「Yasu」と、地元の店舗様との「Win-Winなコラボ」を提案します。 【相手店舗の情報】:{{#開始.shop_info#}} 【こちらの提案の核】:当店(清掃業)を利用したお客様に、貴店の無料チケットを配布したい。その費用は当店が負担する。 【指示】:相手の店舗情報から「お店のこだわり」を褒めつつ、49歳の誠実な店主(Yasu)の口調で丁寧なメール文面を作成してください。

  1. 終了ノードに繋いで公開し、「APIアクセス」のメニューからDify用のAPIキー(app-...)を取得してメモしておきます。
Difyで構築した「営業メール自動作成アプリ」のテスト実行(Test Run)結果画面。ユーザー入力された店舗情報((x) shop_name, (x) shop_info)に基づき、LLM(gpt-4o)が横浜の自家焙煎コーヒー店へ向けた「コラボレーションのご提案」メールを生成している。清掃業者「Yasu」の店主として、相手の店舗評価の高さを称えつつ、Win-Winの関係を築くための丁寧な営業文面が右側のプレビューに表示されている。

STEP 3:GASで全てを連携し、ターゲットを自由自在に操る

最後に、Googleの無料プログラム機能「GAS」を使って、マップとDifyを合体させます。ブラウザで script.new と入力して開いた画面に、以下のコードを貼り付けます。

今回は**「検索キーワード(業種)」と「抽出する件数」を自由に変更できる進化版のコード**です!

JavaScript

// Googleマップからお店を探して、Difyで提案文を作り、Gmailの下書きに保存するメインの処理です
function createLocalCollaborationProposals() {
  
  // Google Cloudで取得した「AIza...」から始まるAPIキーをここに貼り付けます
  const GOOGLE_MAPS_API_KEY = 'ここにGoogleマップのAPIキーを貼る';
  
  // Difyの「APIアクセス」画面で取得した「app-」から始まるAPIキーをここに貼り付けます
  const DIFY_API_KEY = 'ここにDifyのAPIキーを貼る';
  
  // 【★カスタマイズ部分①】探したいお店のキーワードをここで自由に決めます(例:美容室 横浜、パン屋 横浜 など)
  const keyword = '美容室 横浜';
  
  // 日本語のキーワードを、インターネット通信(URL)で使える記号(%など)に自動変換します
  const searchQuery = encodeURIComponent(keyword);
  
  // 変換したキーワードを使って、Googleマップを検索するURLを作ります
  const url = `https://maps.googleapis.com/maps/api/place/textsearch/json?query=${searchQuery}&key=${GOOGLE_MAPS_API_KEY}&language=ja`;
  
  // 実際にGoogleマップのAPIを叩いて(通信して)、お店のデータを取得します
  const response = UrlFetchApp.fetch(url);
  
  // 取得したデータ(JSON形式)を、プログラムで扱いやすい形に変換します
  const results = JSON.parse(response.getContentText()).results;
  
  // 【★カスタマイズ部分②】取得したお店のリストから、最初の「10件」を切り出します(最大20件まで設定可能)
  const testResults = results.slice(0, 10);
  
  // 絞り込んだお店のリストを、1件ずつ順番に取り出して以下の処理を繰り返します
  testResults.forEach(place => {
    
    // お店の名前を変数(箱)に保存します
    const shopName = place.name;
    
    // お店の住所を変数(箱)に保存します
    const address = place.formatted_address;
    
    // お店の評価(星の数)を変数に保存します(評価がない場合は「評価なし」という文字を入れます)
    const rating = place.rating || "評価なし";
    
    // Difyに送るためのデータ(入力変数)のまとまりを準備します
    const difyPayload = {
      
      // Difyの開始ノードで設定した変数名(shop_name, shop_info)に合わせてデータをセットします
      "inputs": {
        
        // Difyの「shop_name」という変数に、Googleマップから取得した店名を入れます
        "shop_name": shopName,
        
        // Difyの「shop_info」という変数に、店名・住所・評価を合体させた文章を入れます
        "shop_info": `店名:${shopName}\n住所:${address}\nGoogleマップ評価:${rating}`
      },
      
      // DifyがAIの回答を最後まで作り終えてから、こちらに返信をよこす設定(blocking)にします
      "response_mode": "blocking",
      
      // Difyにアクセスするユーザーの名前を適当に設定します(エラー追跡用なので何でもOKです)
      "user": "yasu-agent"
    };
    
    // DifyのAPIを叩くための「通信のルール」を設定します
    const difyOptions = {
      
      // 通信の方式を「POST(こちらからデータを送りつける方式)」に設定します
      "method": "post",
      
      // 通信のヘッダー(宛名書きのようなもの)を設定します
      "headers": {
        
        // DifyのAPIキーを使って「私は正規のユーザー(Yasu)です」と証明します
        "Authorization": "Bearer " + DIFY_API_KEY,
        
        // 今から送るデータが「JSON形式」というルールで書かれていることを伝えます
        "Content-Type": "application/json"
      },
      
      // Difyに送るデータ(先ほど作ったdifyPayload)を、JSON形式の文字列に変換してセットします
      "payload": JSON.stringify(difyPayload)
    };
    
    // 実際にDifyのAPIのURL(/workflows/run)を叩いて、AIに提案文を考えさせます
    const difyResponse = UrlFetchApp.fetch("https://api.dify.ai/v1/workflows/run", difyOptions);
    
    // Difyから返ってきたデータの中から、AIが作った「提案文のテキスト」だけをピンポイントで抜き出します
    const proposalText = JSON.parse(difyResponse.getContentText()).data.outputs.text;
    
    // Gmailの機能を呼び出して、宛先は空のまま、件名と本文(AIの提案文)をセットして「下書き」を作成します
    GmailApp.createDraft("", `${shopName}様へのコラボレーションのご提案(Yasu清掃)`, proposalText);
    
    // 処理の進行状況を、GASの画面下のログ(実行ログ)に表示して確認できるようにします
    console.log(`${shopName}の下書きを作成しました!`);
    
  });
}

あとは2つのAPIキーを貼り付けて「▷ 実行」を押すだけ! ※注意点: 件数を「10」などに増やすと、Difyが一生懸命メールの文章を考えるため、実行が完了するまでに数分かかります。画面に「実行中…」と出ている間は、AIがあなたのために汗をかいている最中ですので、ウイスキーでも飲みながら気長に待ってあげてください。


Google Apps Script(GAS)のエディタ画面と実行ログ。Googleマップから取得した「店舗名」「住所」「評価」などのデータを、DifyのAIへ送信するためにJSON形式で整理するプログラム(sliceメソッドによる件数制限などの安全装置付き)が記述されている。下の実行ログには、横浜市内の実在するカフェに向けた下書きが次々と自動作成され、正常に処理が完了した様子が表示されている。

まとめ

いかがだったでしょうか。Google Cloudの複雑な画面やエラーの壁を越えた時、Gmailの下書きフォルダにびっしりと並んだ「様々な業種への営業メール」を見た瞬間の鳥肌は、言葉では表せません。

私たち40代、50代は、もう20代の頃のような無限の体力はありません。でも、経験と知恵、そして**「AIという無休の相棒」**を手に入れることはできます。これからは足で稼ぐ営業ではなく、プログラミングで「仕組み」を作り、AIに任せられる部分は全部任せてしまいましょう!空いた時間でサウナに行ったり、新しいビジネスを考える方が絶対に楽しいです。

こういう感じの時短できる実用的なアプリがもっとたくさん作れるように

日々勉強ですね。早く誰かに使ってもらえるようなアプリを作りたいです!

「ITなんて無理」と思っている同世代の方々。49歳の清掃員の私でもできたんです。一緒に、中年からの大逆転ストーリーを作っていきましょう!

私のxでもブログについてつぶやいています。遊びに来てくれると嬉しいです!

xはこちらから

次回も是非お楽しみに!

コメント

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