【低コスト改善】AIで効率化!GmailとChatGPTを活用した返信メール自動作成の方法

AI

毎日届く大量のメール対応に追われていませんか?メール返信の遅れは顧客満足度の低下や機会損失につながる可能性があります。

本記事では、プログラミングの専門知識がなくても導入できるGmailとChatGPTを組み合わせた返信メールを自動作成する具体的な方法をご紹介します。

メール対応の効率化がもたらすメリットとは

顧客対応のスピードと精度が向上することで得られる効果

メール対応の効率化は、単なる作業時間の短縮だけでなく、リピート率や顧客満足度に直結する重要な要素です。

顧客対応の質とスピードを向上させることは、単なるコスト削減ではなく、売上向上に直結する投資と捉えるべきです。特に人的リソースが限られた中小企業こそ、AIを活用した効率化が競争力を高める鍵となります。

GmailとChatGPTを活用したメール対応の自動化の仕組み

手順1)Gmailのラベル機能を使ったメール分類

メールの種類ごとにラベルを作成する

  1. Gmailの設定から「フィルタとブロック中のアドレス」を選択
  2. 「新しいフィルタを作成」をクリック
  3. 「次の単語を含む」に「製品A」や「納期」などのキーワードを入力
  4. 「フィルタを作成」をクリック
  5. 「ラベルを付ける」を選択し、対応するラベルを指定

手順2)Google Apps Scriptを使って自動でスプレッドシートへ転記

まずは、Google Apps Script(GAS)で、Gmailの情報を自動的にスプレッドシートへ転記するGASを作成します。

GAS実装例

function fetchEmails() {
    var labelName = "問い合わせ";  // Gmailのラベル名
    var threads = GmailApp.search(`label:${labelName} newer_than:1d`);  
    var messages = threads.map(thread => thread.getMessages()).flat();
    
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("問い合わせ");
    var data = sheet.getDataRange().getValues();  // 既存データを取得
    var existingIds = data.map(row => row[0]);  // 既存のスレッドID一覧
    
    messages.forEach(message => {
        var threadId = message.getThread().getId();  // スレッドIDを取得
        if (existingIds.includes(threadId)) return;  // 既に取得済みならスキップ
        
        var subject = message.getSubject();
        var body = message.getPlainBody();
        var sender = message.getFrom();
        var date = message.getDate();
        
        // スプレッドシートに転記
        sheet.appendRow([threadId, sender, subject, body, date]);
    });
}

スクリプトの説明:

  1. 指定したラベル(例:「製品情報」「納期問い合わせ」)が付いた1日以内のメールを検索
  2. スプレッドシートから既存データを取得し、重複登録を防止
  3. 新規メールの情報(送信者、件名、本文、日時)をスプレッドシートに記録

手順3)ChatGPT APIを使った返信文の生成方法

続いて、Google Apps Scriptから直接ChatGPT APIを呼び出すコードを実装します。

GAS実装例

function generateReply(emailBody, emailType) {
    var apiKey = "YOUR_OPENAI_API_KEY";  // OpenAI APIキー
    var url = "https://api.openai.com/v1/chat/completions";
    
    // メールタイプに応じたプロンプトを準備
    var systemPrompt = "あなたは丁寧で親切なカスタマーサポートアシスタントです。";
    var userPrompt = "";
    
    // メールタイプに応じて異なる指示を設定
    switch(emailType) {
        case "製品情報":
            userPrompt = `以下のメールに、製品Aの情報を含めて返信してください。
            
            【受信メール】  
            ${emailBody}  
            
            【製品情報】  
            - 商品A: 12,800円(税込)
            - 在庫数: 20個
            - 納期: 注文から3営業日以内に発送
            - 特徴: 高耐久性、省エネ設計、5年保証付き
            
            【返信の条件】
            - 丁寧な言葉遣いで、親しみやすい表現を使う
            - 商品の利点を簡潔に伝える
            - 現在実施中の10%オフキャンペーン(今月末まで)も案内する
            - 質問に明確に回答する
            - 必要に応じて追加質問を促す
            
            【署名】  
            山田太郎  
            株式会社〇〇 営業部  
            電話:03-xxxx-xxxx`;
            break;
            
        case "納期問い合わせ":
            userPrompt = `以下の納期に関する問い合わせメールに返信してください。
            
            【受信メール】  
            ${emailBody}  
            
            【納期情報】  
            - 通常商品: 注文から3営業日以内に発送
            - 特注品: 注文から10営業日以内に発送
            - 大量注文(10個以上): 事前にご相談ください
            
            【返信の条件】
            - 具体的な発送予定日を明記する
            - 丁寧かつ明確な表現を使う
            - お客様の注文内容に基づいた個別対応を心がける
            - 必要に応じて代替案も提示する
            
            【署名】  
            山田太郎  
            株式会社〇〇 営業部  
            電話:03-xxxx-xxxx`;
            break;
            
        default:
            userPrompt = `以下のメールに返信してください。
            
            【受信メール】  
            ${emailBody}  
            
            【返信の条件】  
            - 丁寧で親切な対応を心がける
            - 明確かつ簡潔に情報を伝える
            - 必要に応じて追加質問を促す
            
            【署名】  
            山田太郎  
            株式会社〇〇 営業部  
            電話:03-xxxx-xxxx`;
    }
    
    var payload = {
        model: "gpt-4",
        messages: [
            { role: "system", content: systemPrompt },
            { role: "user", content: userPrompt }
        ],
        temperature: 0.7
    };
    
    var options = {
        method: "post",
        contentType: "application/json",
        headers: { "Authorization": "Bearer " + apiKey },
        payload: JSON.stringify(payload),
        muteHttpExceptions: true
    };
    
    try {
        var response = UrlFetchApp.fetch(url, options);
        var json = JSON.parse(response.getContentText());
        return json.choices[0].message.content;
    } catch (e) {
        Logger.log("Error calling ChatGPT API: " + e.toString());
        return "APIエラーが発生しました。手動で対応してください。";
    }
}

スクリプトの説明:

  1. ラベルなどに応じて異なる指示をChatGPTに与える
  2. 製品情報や納期情報などの必要データをプロンプトに含める
  3. 返信の条件(トーン、含めるべき情報など)を細かく指定
  4. エラーハンドリングを追加し、API障害時にも対応可能に

手順4)Gmail下書きとして返信文を作成する方法

続いて、Gmail下書き作成のためのGASを作成します。下書きとして作成する事で、最後に人の目で返信文をチェックしてメールを送信する事が出来ます。

GAS実装例

function createDraft(email, replyText) {
    try {
        var recipient = email.getFrom();
        var subject = "Re: " + email.getSubject();
        var thread = email.getThread();
        
        // HTMLメールとして整形(読みやすさ向上)
        var htmlBody = replyText.replace(/\n/g, "<br>");
        
        // 下書きを作成
        var draft = GmailApp.createDraft(
            recipient,
            subject,
            replyText,  // プレーンテキスト版
            {
                htmlBody: htmlBody,  // HTML版
                inReplyTo: email.getId(),  // 元メールへの返信であることを明示
                threadId: thread.getId()  // 同じスレッドに含める
            }
        );
        
        return draft.getId();
    } catch (e) {
        Logger.log("Error creating draft: " + e.toString());
        return null;
    }
}

手順5)手順1~4のコードを自動実行

最後に、手順2~4のコードを一括して実行する処理を実装します。

GAS実装例

function processNewEmails() {
    var labelName = "問い合わせ";  // 処理対象のラベル
    var processedLabelName = "自動処理済み";  // 処理済みを示すラベル
    
    // ラベルの取得(存在しなければ作成)
    var processedLabel = GmailApp.getUserLabelByName(processedLabelName) || 
                        GmailApp.createLabel(processedLabelName);
    
    // 処理対象のスレッドを取得(未処理のもののみ)
    var threads = GmailApp.search(`label:${labelName} -label:${processedLabelName} newer_than:1d`);
    if (threads.length === 0) return;  // 処理対象がなければ終了
    
    // スプレッドシートの準備
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("納期問い合わせ");
    if (!sheet) {
        sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet("納期問い合わせ");
        sheet.appendRow(["処理日時", "スレッドID", "送信者", "件名", "メール本文", "返信文", "下書きID"]);
    }
    
    // 各スレッドを処理
    threads.forEach(thread => {
        var messages = thread.getMessages();
        var lastMessage = messages[messages.length - 1];  // 最新メッセージ
        
        // メール情報の取得
        var threadId = thread.getId();
        var sender = lastMessage.getFrom();
        var subject = lastMessage.getSubject();
        var body = lastMessage.getPlainBody();
        
        // メールタイプの判定(単純な例)
        var emailType = "一般";
        if (subject.includes("製品") || body.includes("製品")) {
            emailType = "製品情報";
        } else if (subject.includes("納期") || body.includes("納期") || body.includes("いつ届く")) {
            emailType = "納期問い合わせ";
        }
        
        // ChatGPT APIで返信文を生成
        var replyText = generateReply(body, emailType);
        
        // Gmail下書きを作成
        var draftId = createDraft(lastMessage, replyText);
        
        // スプレッドシートに記録
        sheet.appendRow([new Date(), threadId, sender, subject, body, replyText, draftId]);
        
        // 処理済みラベルを付与
        thread.addLabel(processedLabel);
    });
}

処理フロー:

  1. 「問い合わせ」ラベルが付いた未処理のメールを検索
  2. 各メールの内容から適切なメールタイプを判定
  3. ChatGPT APIを使って返信文を生成
  4. Gmail下書きを作成し、人間のレビューを待つ
  5. 処理内容をスプレッドシートに記録し、追跡可能に
  6. 処理済みのスレッドにラベルを付けて重複処理を防止

このprocessNewEmailsスクリプトをトリガー設定(例:1時間ごと)で定期実行することで、返信メールの自動作成システムが完成です。

AIで効率化!自動メール返信の導入方法と注意点

実際に導入する際のステップを整理

いきなり複雑なシステムを導入すると、エラーの特定が難しくなったり、既存の業務フローが混乱する恐れがあるので段階的に導入することをお勧めします。

ステップ1: Gmailラベルとフィルタの設定

  • よくある問い合わせの種類を分析し、5〜10種類のラベルを作成
  • フィルタ機能を使って、件名やキーワードに基づく自動ラベル付けを設定

  • ステップ2: スプレッドシートとGASの基本設定
  • Google Apps Scriptプロジェクトを作成
  • 問い合わせ記録用のスプレッドシートを準備
  • メールをスプレッドシートに転記する基本スクリプトを実装
  • トリガーを設定して定期実行(まずは転記機能のみ)

ステップ3: ChatGPT APIの導入

  • OpenAI APIキーを取得(クレジットカード登録が必要)
  • 最もよくある問い合わせタイプ1つに対するプロンプトを設計
  • テスト用スクリプトで返信品質を確認・調整
  • 問題なければ、残りの問い合わせタイプにも同様に実装

ステップ4: Gmail下書き機能の実装

  • 生成した返信をGmail下書きとして保存する機能を追加
  • 手動確認プロセスを確立(誰がいつ確認するか)
  • テスト期間を設け、返信の質と業務フローを検証

ステップ5: システム改善と拡張

  • 運用データを分析し、精度の低い部分を特定
  • プロンプトの改善や新たなラベルの追加
  • 必要に応じて自動化率を高める(高精度なケースは直接送信など)

段階的に導入する事で、各ステップでの問題を修正できスムーズに導入できると思います。特に重要なのは、開始時点では完璧を目指さず、継続的に改善していく事です。

概算コストは?

ChatGPT API費用の概算コスト

  • OpenAI APIの料金体系:GPT-3.5(約$0.002/1K tokens)、GPT-4(約$0.06/1K tokens)
  • 平均的なメール対応で必要なトークン数:プロンプト200〜300トークン、返信200〜300トークンとすると、月間100件の問い合わせ処理時の概算コストは次の通りです。
    • GPT-3.5使用時:約$0.1〜0.2/月
    • GPT-4使用時:約$3〜6/月
  • 単純な問い合わせはGPT-3.5、複雑なものだけGPT-4を使い分けもありですね!

API費用は取り扱う問い合わせ量に比例するため、メールの自動取得後にChatGPTのWeb版を手動で活用するなど小規模から始めて効果を確認しながら拡大していく方法がお薦めです!