問い合わせメールへの返信を毎朝考えるのが地味に負担、という人は多い。文面はだいたい似ているのに、返信するたびにゼロから書いている。この記事では、GmailのメールをChatGPT API(gpt-5.6)に読ませてGoogle Apps Script(GAS)の時間主導トリガーで毎朝9時に返信の下書きを自動生成し、送信ボタンだけは必ず人が押すという仕組みを、非エンジニアでも無料のGASだけで組む手順として紹介する。エンジニアを雇わず、サーバーも借りずに毎日動かし続けられる構成にした。
「下書きまでは任せる・送信は人」と線引きする理由
この仕組みで一番大事なのは、AIに任せる範囲を「下書きの生成」までに限定し、送信の実行だけは絶対に人の手を通すことだ。理由は2つある。
ハルシネーションと個人情報の扱い
生成AIは事実と異なる内容を自信満々に書く「ハルシネーション」を起こすことがあり、価格や納期など顧客に誤った情報を送ってしまうと信用問題になる。加えて、問い合わせ本文には氏名・連絡先・取引内容など個人情報が含まれることが多く、外部APIに送る以上、返信文の中身は人が最終確認してから送るのが安全だ。2026年7月17日に公布された改正個人情報保護法(罰則関連は2027年1月17日施行)でもAI利用時のデータ管理と透明性の責任が強化されており、「AIが作った文面をノーチェックで送る」運用は今の基準では避けたほうがいい。総務省・経済産業省の「AI事業者ガイドライン」も、AIの出力を人が確認する体制を利用者側に求めている。
任せてよい作業とダメな作業
作業 | AIに任せる | 理由 |
|---|---|---|
定型的な問い合わせへの一次回答案づくり | ◯ | 文面のたたき台があるだけで人の作業時間が減る |
金額・納期・契約条件を含む文面の事実確認 | ×(人が確認) | ハルシネーションで誤情報を送るリスク |
クレーム・トラブル対応の初期対応文 | ×(人が最初から書く) | 感情的な配慮と正確性が同時に必要 |
送信ボタンを押す | ×(必ず人) | この仕組み全体の歯止め |
GASの時間主導トリガーで毎朝9時に回す全体構成
仕組みは3つの部品でできている。(1) GmailApp で未読の問い合わせメールを取得する、(2) UrlFetchApp で ChatGPT API(gpt-5.6) に本文を渡して返信下書きを生成する、(3) createDraftReply でGmail上に下書きとして保存する(送信メソッドは一切呼ばない)。これをGASの「時間主導トリガー」で毎朝9時に自動実行する。GASはGoogleアカウントがあれば無料で使え、サーバーを借りる必要がない。
function createDraftReplies() {
const threads = GmailApp.search('is:unread label:inbox -label:ai処理済み', 0, 5);
threads.forEach(thread => {
const message = thread.getMessages().pop();
const body = message.getPlainBody();
const draft = callChatGPT(body);
thread.createDraftReply(draft);
thread.addLabel(GmailApp.getUserLabelByName('ai処理済み'));
});
}
function callChatGPT(inquiryText) {
const apiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
const res = UrlFetchApp.fetch('https://api.openai.com/v1/chat/completions', {
method: 'post',
contentType: 'application/json',
headers: { Authorization: 'Bearer ' + apiKey },
payload: JSON.stringify({
model: 'gpt-5.6',
messages: [
{ role: 'system', content: '丁寧な日本語の返信下書きを作成する。事実が不明な場合は【要確認】と書く。' },
{ role: 'user', content: inquiryText }
]
})
});
return JSON.parse(res.getContentText()).choices[0].message.content;
}ポイントは addLabel(GmailApp.getUserLabelByName('ai処理済み')) で処理済みのメールに印を付けている点だ。これを忘れると、トリガーが翌朝も同じメールを拾って下書きを重複生成してしまう。サーバー側の定期実行でも同じ二重実行の問題は起きやすく、以前書いたsystemd timer移行で二重実行を防ぐ2026年9月と考え方は同じで、「一度処理したら記録を残す」という一手間が事故を防ぐ。
プロンプトで事実の創作を防ぐ書き方
下書き生成のプロンプトで一番効くのは、「わからないことは【要確認】と書かせる」という一文だ。これが無いと、AIは価格や在庫状況など知らない情報を平気で埋めてくる。上のコード例のsystemプロンプトに入れているのはこのためで、下書きに【要確認】が残っていれば、それは人が調べて埋める箇所だとひと目でわかる。似た考え方は経費データの処理でも有効で、経費CSVをChatGPTで仕訳する精度アップ術2026年9月でも「不明な項目は断定させず要確認扱いにする」書き方を紹介している。問い合わせ対応でも、断定させないプロンプト設計が精度より先に効く。
実際に設定する手順とAPIキーの管理
- platform.openai.comでAPIキーを発行する(ChatGPTの月額プランとは別課金なので、Usage limitsで上限額を設定しておく)
- Gmailの受信トレイで「ai処理済み」ラベルを作成しておく
- script.google.comで新規プロジェクトを作成し、上記コードを貼り付ける
- 「プロジェクトの設定」→「スクリプト プロパティ」で
OPENAI_API_KEYを登録する(コードに直接書かない) - 左メニューの「トリガー」→「トリガーを追加」で、実行する関数を
createDraftReplies、イベントのソースを「時間主導型」、時刻を「午前9時〜10時」に設定する - 初回だけ手動実行し、Gmailの承認画面で権限を許可する
これだけで、毎朝9時にGASが自動で起動し、下書きがGmailに溜まっている状態になる。あとは人が下書きを開いて、事実確認と文面調整をしてから送信ボタンを押すだけだ。
関連する選択肢
手元のPCを開いている間しか動かない、という問題を避けるなら、常時起動しているサーバーを借りてそこに置く方法があります。料金はプランによって変わります。
SSDプランが月々698円から使える!さくらのVPS
※ 広告を含みます(A8.net)。リンク経由でお申し込みがあった場合、手数料を受け取ることがあります。
運用を続ける上で見ておくべきモデルの変更
ChatGPTのAPIは2026年10月14日にGPT-5.5の提供が終了し、GPT-5.6 Solへの移行が案内されている。上のコードは最初から gpt-5.6 を指定しているため直接の影響はないが、他のツールでGPT-5.5を指定している場合は同時期に見直しが必要になる。また2026年9月3日発表・9月15日提供開始のGPT-6 Astra(コンテキストウィンドウ920Kトークン)は複雑な調査向けの上位モデルで、定型の問い合わせ下書き程度であればgpt-5.6で十分なコストで回せる。無料のChatGPT Plusを使っている場合は2026年8月25日に5時間ウィンドウ制限が復活している点も、API利用とは別枠であることを覚えておくとよい。
この仕組みの核は、AIに「下書きを作る」という得意な作業だけを渡し、「事実確認」と「送信」という責任が伴う判断は最後まで人に残すという線引きにある。GASの時間主導トリガーなら、費用をかけずに毎朝同じ時刻に動かし続けられるので、まずは1日5件までの少ない件数から試して、下書きの精度とラベル管理が回るかを確認してから件数を増やすとよい。