宿泊予約の人数・プラン・到着時刻・要望に合わせて、到着前日に送る案内メールを予約ごとに下書きし、確認が要る予約を拾う
翌日に到着する宿泊予約について、人数・プラン・到着時刻・要望に合わせた案内メールを予約ごとに下書きします。夕食の時刻に間に合わない到着や、館で対応を決めていない要望を拾い、送る前に予約係が確かめる一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- 宿泊/飲食
- 対象部門
- カスタマーサポート
- 対象業務
- 内容確認・チェック/書類作成
- 主な課題
- 人手が足りない/書類作成に時間がかかる/確認ミスが多い
- AIで行う処理
- 生成
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 予約係が、翌日到着の予約の一覧をCSVで出力し、スプレッドシートに貼る
- 1件ずつ、人数、プラン、到着時刻、要望の欄を読む
- 館の定型文をメールの画面に貼り、人数やプランに合わせて直す
- 到着時刻と夕食の開始時刻を見比べ、間に合わなければ夕食の時刻を相談する一文を足す
- 要望の欄に書かれていることに、返事の一文を書く
- 宛先を確かめて送り、一覧に「送付済み」の印を付ける
- 人予約係が、毎朝、翌日到着の予約の一覧を「翌日到着」のシートに貼る(今までと同じ)
- 自動決まった時刻にスクリプトが動き、予約ごとにプランと館の案内の正本を引く
- 自動スクリプトが、到着時刻とプランの夕食の最終の開始時刻を比べるなど、規則の確認を行う
- 自動AIが要望の欄を読み、館で決めている要望かそれ以外かに分ける
- 自動AIが予約に合わせた言葉のつなぎを書き、スクリプトが正本の値を差し込んで文面にする
- 自動文面に正本に無い数字や、約束の言葉が無いかをスクリプトが確かめる
- 自動確認が要らない予約は Gmail の下書きにし、確認が要る予約は一覧に理由を書く
- 人予約係が、確認が要る予約を先に扱い、厨房や担当者に確かめてから文面を直す
- 人予約係が、下書きを流し読みして送り、送付済みの印を付ける
各工程の詳しい説明を読む
- 予約係が、翌日到着の予約の一覧をCSVで出力し、スプレッドシートに貼る
- 1件ずつ、人数、プラン、到着時刻、要望の欄を読む
- 館の定型文をメールの画面に貼り、人数やプランに合わせて直す
- 到着時刻と夕食の開始時刻を見比べ、間に合わなければ夕食の時刻を相談する一文を足す
- 要望の欄に書かれていることに、返事の一文を書く
- 宛先を確かめて送り、一覧に「送付済み」の印を付ける
(a)直す場所が予約ごとに違う。 3番目は、定型文のどこを直すかを予約の内容から決める作業です。直し忘れると、子どものいない予約に子ども用の浴衣の案内が残ったまま届きます。
(b)到着時刻と夕食の時刻の食い違いを見落とす。 4番目は、プランごとに違う夕食の最終の開始時刻を覚えていないとできません。19時が最終のプランに20時着の予約があっても、急いでいると気づかずに送ります。 当日になって厨房が慌てることになります。
(c)要望への返事が担当者ごとに違う。 「えびが苦手」に、ある担当者は「承りました」と書き、別の担当者は「確認してご連絡します」と書きます。前者は、厨房が確認する前に対応を約束したことになります。
(d)1日50件を午後の空いた時間で書いている。 チェックインの受付が始まる前に書き終えたいのですが、予約の変更や問い合わせの電話で手が止まり、夕方まで残ることがあります。
- 【人】 予約係が、毎朝、翌日到着の予約の一覧を「翌日到着」のシートに貼る(今までと同じ)
- 【自動】 決まった時刻にスクリプトが動き、予約ごとにプランと館の案内の正本を引く
- 【自動】 スクリプトが、到着時刻とプランの夕食の最終の開始時刻を比べるなど、規則の確認を行う
- 【自動】 AIが要望の欄を読み、館で決めている要望かそれ以外かに分ける
- 【自動】 AIが予約に合わせた言葉のつなぎを書き、スクリプトが正本の値を差し込んで文面にする
- 【自動】 文面に正本に無い数字や、約束の言葉が無いかをスクリプトが確かめる
- 【自動】 確認が要らない予約は Gmail の下書きにし、確認が要る予約は一覧に理由を書く
- 【人】 予約係が、確認が要る予約を先に扱い、厨房や担当者に確かめてから文面を直す
- 【人】 予約係が、下書きを流し読みして送り、送付済みの印を付ける
8番目が、この設計の分かれ目です。 予約係が時間をかけて読むのは、夕食の時刻に間に合わない到着、館で決めていない要望、文面の点検に引っかかったものだけです。全件を同じように読む形にすると、100.0時間はあまり減りません。
3番目と6番目を規則にしているのは、宿泊客に届く数字を間違えないためです。 夕食の時刻に間に合うかは、時刻を比べれば決まります。AIに「間に合いそうか」を判断させると、19時と19時30分を取り違えることがあります。
02今回想定するシステム構成
予約管理のシステム ── CSV で出力(毎朝) ▼ 予約係が貼る 「翌日到着」のシート ▼【トリガー】毎日 11時台 Google Apps Script ├──▶ 館の案内の正本(プランごとの夕食の時刻・駐車場・送迎)を引く ├──▶ 規則の確認(到着時刻と夕食の時刻、人数とプランの条件、宛先の有無) ▼ Claude API ── 構造化出力 │ ① 要望の仕分け(館で決めている/確認が要る) │ ② 予約に合わせた言葉のつなぎ(正本の値は差し込み記号で書く) ▼ Google Apps Script ── 正本の値の差し込み・文面の点検 ├──▶ Gmail の下書き(確認が要らない予約) └──▶ 確認の一覧(確認が要る予約と理由) ▼ 【人】予約係が確認し、下書きを送る
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Python、Power Automate、Make |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 台帳 | Google スプレッドシート(翌日到着・館の案内の正本・要望の対応一覧・確認の一覧) | Microsoft Lists |
| メール | Gmail(予約課の共有アカウント) | Outlook |
新しく足すのは、スクリプトと Claude API の利用だけです。 予約の一覧の貼り付けは今の手順のまま、メールは今の予約課のアカウントから送ります。最初の準備作業は、館の案内の正本をシートにすることです。 定型文に埋め込まれていたチェックインの時刻、プランごとの夕食の開始時刻と場所、駐車場、送迎を、1行1項目の表にします。
AIの出力の形は、Claude API の構造化出力で固定します。 output_config.format に json_schema の形でスキーマを渡すと、応答がそのスキーマに沿った JSON になります。スキーマには enum、required、additionalProperties: false が使えます。要望の仕分けの値を enum で決めた種類に絞り、文面の部品を決まった項目で受け取ります。
下書きは GmailApp の createDraft で作ります。 宛先・件名・本文に加えて、htmlBody、name(送信者の表示名)、replyTo、cc、bcc を指定できます。送信はしません。 送るのは予約係です。
03どうやって実装するのか
処理の起点を決める
毎日決まった時刻に、時間主導型のトリガーで動かします。 時間主導型のトリガーは毎分から月1回まで設定でき、時刻は1時間の幅で決まります。 11時に設定すると11時から12時のあいだに動きます。予約係が朝の一覧を貼り終えた後で、午後のチェックインの受付より前に下書きがそろう時刻にします。
一覧の貼り付けが遅れた日に備えて、シートに「貼り付け済み」の印の欄を置きます。 スクリプトはこの印が無ければ何もせず、30分後にもう一度見るトリガーを置きます。 古い一覧のまま動くと、前日の予約に二度目の案内を作ることになるからです。
インストール型のトリガーは、作った人のアカウントで動きます。 下書きもそのアカウントに作られるので、予約課の共有アカウントでトリガーを作ります。 個人のアカウントで作ると、下書きがその人のメールの中にでき、他の予約係から見えません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 予約 | 予約番号、宿泊客の名前、メールアドレス、館、プラン、大人と子どもの人数、到着予定時刻、要望の欄、予約の経路 | 「翌日到着」のシート |
| 館の案内の正本 | 館ごとのチェックインの時刻、プランごとの夕食の開始時刻・最終の開始時刻・場所、駐車場、送迎の有無と集合場所 | 「正本」のシート |
| 要望の対応一覧 | 館で対応を決めている要望の種類と、返事の文面 | 「要望」のシート |
| 定型の部品 | あいさつ、持ち物、館までの道、問い合わせ先 | 「部品」のシート |
質を決めるのは、要望の対応一覧です。 「到着が遅れる」「子ども用の浴衣」「駐車場が2台」「ベビーベッド」のように、館として返事を決めている要望を種類ごとに並べ、返事の文面も決めておきます。 一覧に無い要望は、すべて確認が要るものとして扱います。一覧を増やすほど、確認が要る予約は減ります。
正本の値は、AIへ渡しますが、文面には書かせません。 プランの夕食が「18時から19時30分のあいだに開始」であることはAIに知らせ、文面の中では {{dinner_last_start}} のような差し込み記号で書かせます。 実際の時刻はスクリプトが正本から差し込みます。
データの取得方法を決める
予約は「翌日到着」のシートから読み、館とプランの値は「正本」のシートを引きます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 予約の行 | 「翌日到着」のシートの、貼り付け済みの印がある日の行 | 下書きを作る対象 |
| プランの夕食の時刻と場所 | 「正本」のシートを館とプランで引く | 規則の確認と差し込み |
| 館の駐車場・送迎 | 「正本」のシートを館で引く | 差し込み |
| 要望の種類と返事の文面 | 「要望」のシート | AIの仕分けの選択肢と、返事の文面 |
| 定型の部品 | 「部品」のシート | 文面の前後に付ける |
プランの名前は、予約管理のシステムの表記と正本の表記をそろえます。 予約サイトごとにプランの名前が少しずつ違うことがあるので、「正本」のシートにシステムのプランのコードの列を持たせ、コードで引きます。 名前で引くと、引けないプランが出ます。
API のキーと、館の問い合わせ先の電話番号はスクリプトのプロパティに置きます。 スクリプトのプロパティは、そのスクリプトのすべての利用者に共有される、アプリ全体の設定値の置き場所です。シートに書くと、一覧を見る人すべてに見えます。
AIへ渡す前に整形する
- 貼り付けの確認 … 「翌日到着」のシートの日付が翌日であることを確かめます。違えば何もしません
- 重複の確認 … 同じ予約番号の下書きがすでにある場合は作りません。一覧に下書きの作成日時の列を持たせて確かめます
- 宛先の確認 … メールアドレスが空、または予約サイトの中継のアドレスと分かるものは、下書きを作らず「電話で案内」として一覧に回します
- 規則の確認 … 到着予定時刻がプランの夕食の最終の開始時刻より後なら「夕食の時刻の相談」の印を付けます。到着予定時刻が空なら「到着時刻の確認」の印を付けます
- 人数とプランの条件 … 大人のみのプランに子どもの人数が入っていれば「プランの条件」の印を付けます
- 要望の欄の個人情報の確認 … 要望の欄に電話番号やカード番号のような文字列があれば、伏せてからAIへ渡します
4番目をAIに渡さない理由は、第5章に書いたとおりです。 時刻の比較はスクリプトで行い、AIには比べた結果だけを「夕食の時刻の相談が要る」として渡します。 AIはその結果を受けて、相談を持ちかける言葉を書きます。
3番目の中継のアドレスの見分け方は、予約の経路の列で決めます。 予約サイトによって、宿泊客の本当のアドレスが渡されるもの、中継のアドレスが渡されるもの、アドレスが渡されないものがあり、どれに当たるかは予約サイトとの契約と設定によります。 経路ごとに「メールで送ってよいか」を「正本」のシートに持たせ、スクリプトはその列だけを見ます。アドレスの形からAIに推測させることはしません。
AIに処理させる
させるのは、要望の仕分けと、予約に合わせた言葉のつなぎを書くことの2つです。
| させること | 書き方 | 判断できないときの扱い |
|---|---|---|
| 要望を種類に分ける | 「要望」のシートの種類から選ぶ。無ければ needs_check | 迷ったら needs_check |
| 要望の確認が要る理由 | アレルギー、記念日、送迎の時刻の変更など、短い理由 | 書けなければ「内容の確認」 |
| 冒頭の一言 | 人数とプランに合わせたあいさつの続き | 定型の部品のままでよい |
| 夕食の時刻の相談の一文 | 規則で印が付いた予約だけ。時刻は差し込み記号で書く | 印が無ければ書かない |
| 要望への返事 | 館で決めている要望だけ。返事の文面を予約に合わせて整える | needs_check には書かない |
1行目の「迷ったら needs_check」が、この構成でいちばん大事な決めごとです。 館で決めている要望を確認に回しても、予約係が1件余分に見るだけです。確認が要る要望を決めている要望に分けると、厨房が知らないアレルギーに「承りました」と返すことになります。 誤りの重さが違うので、迷ったときの寄せ先を決めます。
5行目で、needs_check の要望には返事を書かせません。 返事を書かせると、どれだけ指示を書いても「対応いたします」「ご用意いたします」に近い言葉が出てきます。確認が要る要望のある予約は、下書きそのものを作らず、予約係が確認してから書く形にします。
| させないこと | 理由 |
|---|---|
| 時刻・金額・場所を書く | 正本の値をスクリプトが差し込む。AIに書かせると取り違える |
| 確認が要る要望に約束の言葉を書く | 厨房や担当者が確認する前に対応を約束することになる |
| 夕食の時刻に間に合うかを判断する | 時刻の比較はスクリプトの規則で行う |
| 宿泊客の名前の読みや敬称を変える | 予約の表記のまま使う |
| 送る | 送るのは予約係 |
指示内容を固定する
あなたは旅館の予約課で、到着前日の案内メールの文面を用意する係です。
下の予約の内容と館の案内だけを使い、書かれていないことを補わないでください。
【予約】人数:大人{adults}名・子ども{children}名/プラン:{plan_name}
【規則の確認の結果】{rule_flags}(例:夕食の時刻の相談が要る)
【要望の欄】{request_text}
【館で返事を決めている要望の種類と、返事の文面】{request_catalog}
【差し込み記号の一覧】{{checkin_time}} {{dinner_start}} {{dinner_last_start}}
{{dinner_place}} {{parking}} {{pickup_place}} {{front_phone}}
【すること】
1. 要望の欄に書かれた要望を1つずつ分け、上の種類から1つを選んでください。
種類に無いもの、迷うものは needs_check にし、理由を短く書いてください。
2. greeting に、人数とプランに合わせたあいさつの続きを2文以内で書いてください。
3. 規則の確認の結果に「夕食の時刻の相談」があるときだけ、dinner_note に
夕食の開始時刻を相談する一文を書いてください。
4. 種類が決まった要望には、request_replies に返事の文面を予約に合わせて整えて書いてください。
【厳守事項】
- 時刻、金額、場所、電話番号は、文面に数字や地名で書かないでください。
必ず差し込み記号を使ってください。
- needs_check の要望には、返事を書かないでください。
「承りました」「ご用意します」「対応いたします」など、対応を約束する言葉を使わないでください。
- アレルギー、体調、記念日、送迎の時刻の変更に関わる要望は、種類の一覧にあっても needs_check にしてください。
- 宿泊客の名前は書かないでください。宛名はスクリプトが付けます。
- 予約に書かれていない設備やサービスを案内しないでください。
「アレルギー…は、種類の一覧にあっても needs_check」は、一覧の誤登録への備えです。 予約係が気を利かせて「えび抜き」を一覧に足してしまうことがあります。命に関わる要望は、一覧の状態にかかわらず人が確かめる側に置きます。
「数字や地名で書かない」まで書くのは、差し込み記号の指示だけでは足りないからです。 記号を使えと言っても、AIは自然な文にしようとして「18時ごろ」と書き足してきます。 次の出力形式のところで、それを検査します。
出力形式を固定する
次の形のJSONで受け取ります。
{
"reservation_no": "",
"requests": [
{ "text": "", "category": "late_arrival | kids_yukata | needs_check",
"check_reason": "" }
],
"greeting": "",
"dinner_note": "",
"request_replies": [""]
}
category の値は、「要望」のシートの種類のコードと needs_check です。スクリプトがその日の「要望」のシートからスキーマの enum を組み立てて渡します。
1つ目の理由は、文面を部品で受け取れることです。 あいさつ、夕食の時刻の相談、要望への返事を別々の項目で受け取り、定型の部品と正本の値をスクリプトが並べて1通にします。 AIが1通を丸ごと書くと、どこが正本の値でどこがAIの文かが分からなくなります。
2つ目は、文面を機械で点検できることです。 スクリプトは組み立ての前に次の点検を行います。
| 点検 | 引っかかったときの扱い |
|---|---|
greeting・dinner_note・request_replies に数字が含まれる | 確認の一覧へ(「正本に無い数字」) |
| 差し込み記号が一覧に無い名前になっている | 確認の一覧へ |
「承りました」「ご用意」「対応いたします」などの言葉が needs_check のある予約に含まれる | 確認の一覧へ |
requests に needs_check が1つでもある | 下書きを作らず、確認の一覧へ |
| 上のいずれにも当たらない | 正本の値を差し込み、Gmail の下書きにする |
3つ目は、止まった応答を見分けられることです。 安全上の理由で拒否されたときは stop_reason が refusal になり、出力の上限で切れたときは max_tokens になります。どちらも出力がスキーマに沿わないことがあるので、下書きを作らずに確認の一覧へ回します。 enum の値は大文字と小文字だけが違う形で返ることがあるとされているので、比べるときは大文字と小文字を区別しません。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 「翌日到着」「正本」「要望」「部品」のシート | スプレッドシートの読み取り | 予約と、館の案内の値 |
| Claude API | UrlFetchApp.fetch | 要望の仕分けと文面の部品 |
| Gmail(予約課の共有アカウント) | GmailApp.createDraft | 確認が要らない予約の下書き |
| 確認の一覧 | スプレッドシートへの書き込み | 確認が要る予約と理由 |
API の呼び出しでは、muteHttpExceptions を true にします。 既定では失敗の応答で例外が投げられ、その日の残りの予約が処理されずに止まります。true にすると失敗の応答も返るので、その予約だけを「作成失敗」として一覧に書き、次の予約に進めます。
1回の実行は6分までです。 1日50件の予約を1件ずつAIに渡すと、6分に近づくことがあります。処理した予約番号を一覧に書きながら進め、6分に近づいたら区切って、続きを別のトリガーで動かします。 Google Workspace のアカウントでは、URL Fetch が1日100,000回、メールの読み書きが1日50,000回とされています。
予約管理のシステムには書き込みません。 「送付済み」の印は、スプレッドシートの一覧に付けます。
人が確認する
予約係は、確認の一覧から先に扱います。
needs_checkの要望がある予約 … 厨房や担当者に確かめ、返事を書いてから送ります。アレルギーは厨房の確認が済むまで返事を書きません- 夕食の時刻の相談の印がある予約 … 下書きはできていますが、送る前に厨房が遅い時刻に対応できるかを確かめます
- 「電話で案内」の予約 … メールアドレスが無い予約に電話します
- 点検に引っかかった予約 … 正本に無い数字や、約束の言葉が入った文面を直します
- 下書きを流し読みして送る … 確認の一覧に無い予約の下書きを開き、宛名と人数を見て送ります
5番目も省かないでください。 確認の一覧に無い下書きも、送るのは予約係です。 自動で送る形にすると、予約の一覧の貼り付けの誤り(別の日の一覧を貼った、館を取り違えた)が、そのまま宿泊客に届きます。
目標は、1,500件をならして1件1.2分です。 確認の一覧に回るのは2割前後という想定です。それより多い月は、要望の対応一覧が足りていないか、正本のプランのコードが予約管理のシステムと合っていません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 一覧が貼られていない、日付が違う | 何もしない。30分後にもう一度見る |
| 正本にプランのコードが無い | その予約を「正本に無いプラン」として確認の一覧へ |
| メールアドレスが無い、中継のアドレス | 下書きを作らず「電話で案内」 |
| 到着予定時刻が空 | 「到着時刻の確認」の印を付け、文面に到着時刻を尋ねる一文を入れる |
| 大人のみのプランに子どもの人数 | 「プランの条件」として確認の一覧へ |
| Claude API が応答しない、失敗する | その予約を「作成失敗」とし、次に進む |
| 拒否・上限で切れた | 下書きを作らず確認の一覧へ |
| 前日の夕方に予約が変更された | 変更された予約の下書きを消し、予約係が直接書く |
| 同じ予約の下書きが二つできる | 下書きの作成日時の列で重複を止める |
8行目は、この構成では拾えません。 下書きを作った後に予約が変わると、下書きは古い内容のまま残ります。 予約の変更を受けた予約係が、その予約の下書きを消すことを手順にします。
記録を残す
- 下書きを作った予約の番号と作成日時、そのとき使った正本のシートの版
- AIが返したJSONの全文と、点検の結果
- 確認の一覧に回った理由と、予約係が行ったこと
- 送付済みの日時と、送った予約係
- 要望の種類ごとの
needs_checkの件数
1つ目で「正本の版」を残すのは、夕食の時刻や駐車場が季節で変わるためです。 正本を書き換えた日の前後で、どちらの値の文面が送られたかが分からないと、宿泊客から「案内と違った」と言われたときに確かめられません。
最後の行は、要望の対応一覧を育てる材料になります。 同じ種類の要望が毎月 needs_check に回っているなら、館として返事を決めて一覧に足せます。
確認の一覧は、送った後も消さずに残します。 当日のチェックインで「夕食を遅らせる相談をした」「アレルギーは厨房が確認した」といった経緯をフロントが見られるように、予約番号で引ける形にしておきます。 館の中の申し送りそのものは、別の仕組みの仕事です。
04実装レベルの3段階
最小構成では件数がさばけません。 1日50件には使えません。確かめるための段階です。 半自動化で、1件4分が1.2分になります。 文面の作成と規則の確認が自動になり、予約係は確認の一覧を扱い、下書きを流し読みして送るだけです。本記事の想定はこの段階です。 本格構成は、半自動化を2か月回してから考えます。 予約管理のシステムからの自動の取り込みは、システムごとに取り出し方が違うので、この部分は利用環境に応じた個別確認が必要です。 外国語の文面は、要望の対応一覧を外国語でもそろえてから足します。
05工数削減シミュレーション
導入後 1,500件 × 1.2分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 夕食付きのプランや送迎、駐車場の案内など、到着前に伝えることが予約ごとに違う旅館・リゾートホテル。到着前日の案内メールを予約係が定型文から1件ずつ直して送っていて、月に千件を超える場合。予約の一覧を毎日スプレッドシートに取り出せ、メールを Google Workspace の共有のアカウントから送っている場合。到着時刻と夕食の時刻の食い違いや、要望の見落としが前日に見つかっている場合。
- 素泊まり中心のビジネスホテルで、前日の案内が全員同じ文面で足りる場合。予約の一覧を取り出せず、予約管理のシステムの画面の中でしか見られない場合。予約サイト経由の予約が大半で、宿泊客のメールアドレスに直接送れない場合。アレルギーなど要望への対応の可否を、AIの文面で宿泊客に約束したい場合。
07最小構成で試す方法
- 先週到着した予約から30件を選ぶ(うち数件は、到着が遅かった予約と、アレルギーの要望があった予約を入れる)
- その30件に、実際に送った案内メールを並べる
- 1館分の正本(チェックインの時刻、プランごとの夕食の時刻、駐車場)を表にする
- 手元のAIサービスの画面に、第7章の指示と正本と予約を1件ずつ貼り、文面の部品を作らせる
- 出てきた部品を、実際に送ったメールと比べる
30件は必ずやってください。 スクリプトを書く前に、「時刻を差し込み記号で書かせることができるか」と「アレルギーに約束の言葉を書かないか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 送ったメールとほぼ同じ内容の部品が出た | シートとトリガーの連携に進む |
| 時刻を数字で書いてきた | 指示の書き方と点検で直る。構成は有効 |
needs_check の要望に「承りました」と書いた | 指示を直し、点検の言葉の一覧を作ってから連携に進む |
3行目は、30件のうち1件でも見過ごさないでください。 半自動化では点検で止まりますが、止まる仕組みが無い最小構成のまま使い続けると、そのまま宿泊客に届きます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 時刻を数字で書いてくる | 差し込み記号を必須にし、数字が入れば確認の一覧へ |
| アレルギーに「承りました」と書く | 一覧にあっても needs_check。 約束の言葉を点検する |
| 夕食の時刻の食い違いをAIに判断させる | 時刻の比較はスクリプトで行う |
| 前日の一覧のまま動く | 「貼り付け済み」の印と日付を確かめる |
| 予約サイトのプラン名で正本が引けない | プランのコードで引く |
| 下書きが個人のアカウントにできる | トリガーを予約課の共有アカウントで作る |
| 1件の失敗でその日の残りが止まる | muteHttpExceptions を true にし、その予約だけ「作成失敗」にする |
| 6分で処理が途中で止まる | 処理した予約番号を書きながら進み、続きを別の実行で動かす |
| 予約の変更で古い下書きが残る | 変更を受けた予約係が下書きを消す手順にする |
| 下書きを自動で送る運用にしてしまう | 送るのは予約係。 貼り付けの誤りがそのまま届く |
| 確認の一覧が減らない | 毎月 needs_check の多い要望を、館で返事を決めて一覧に足す |
上の3行が、この構成の失敗のほとんどです。 どれも、宿泊客に届く事実をAIに決めさせてしまうという同じ問題です。時刻は正本から、時刻の比較は規則で、約束は人が確かめてから。この3つを設計で決めておくかどうかで、下書きを信じて送れるかが決まります。
10行目は、運用が落ち着いた頃に出てきます。 下書きがほとんど直されなくなると、流し読みも要らないのではないかという声が出ます。 送るのは人と最初に決めておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 宿泊客の名前、メールアドレス、人数、子どもの有無、到着予定時刻、そして要望の欄に書かれることのあるアレルギーや体調、記念日などの個人的な事情です。
- 宿泊客の名前とメールアドレスをAIへ渡さない … 文面の部品に名前は要りません。宛名と宛先はスクリプトが付けます
- 要望の欄の連絡先を伏せる … 要望の欄に電話番号やカード番号が書かれていることがあります。前処理で伏せてからAIへ渡します
- アレルギーと体調の要望は人が返す … AIの文面で対応を約束しません。厨房の確認が済むまで、返事を書かないことを手順にします
- 自動で送らない … 出すのは下書きまでです。別の日の一覧や別の館の予約を取り違えたとき、送る前に人が気づける最後の機会です
- 確認の一覧と下書きを見られる人を限る … 予約課の共有アカウントとシートの閲覧は、予約課とフロントに限ります
- API の利用条件を確かめる … 宿泊客の要望の欄を外部のAIサービスへ送ることについて、データの扱いと保存の期間を、契約の形態ごとに Anthropic の案内で確かめてから使い始めます。宿泊客への説明の要否は、自社の個人情報の担当者と決めてください
誤りが起きた場合のリスクは、誤った時刻や場所を案内することと、確かめていない要望への対応を約束することの2つです。 前者は差し込みと数字の点検で、後者は needs_check と約束の言葉の点検で防ぎます。どちらも、送る前に予約係が見る工程を外さないことが最後の守りです。
10まず何から始めるか
1週目:館の案内の正本をシートにする
1館分の定型文から、チェックインの時刻、プランごとの夕食の開始時刻と最終の開始時刻と場所、駐車場、送迎の値を書き出し、プランのコードと一緒に1行1項目の表にします。
2週目:30件で試す
先週到着した30件を、手元のAIサービスで文面の部品にします。時刻を数字で書いていないか、アレルギーに約束の言葉を書いていないかを最優先で見ます。
3週目:要望の対応一覧を決める
館の責任者と厨房で、館として返事を決めてよい要望と、その返事の文面を決めます。 アレルギー・体調・記念日・送迎の時刻の変更は一覧に入れないことも、ここで確かめます。
4週目:1館分の下書きを作る
時間主導型のトリガーで、1館分の予約の下書きと確認の一覧を作るところまで作ります。この時点では、予約係が全件を今までどおりに読み、下書きとの違いを数えます。
2か月目: 3館に広げ、確認の一覧に無い予約は流し読みで送る運用に切り替えます。3か月目以降: needs_check の多い要望を一覧に足し、1件4分が何分になったかを実測します。確認の一覧に回る予約が2割前後で落ち着き、点検に引っかかる下書きが月に数件になった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型のトリガーが毎分から月1回まで設定でき、時刻が1時間の幅で決まること。インストール型のトリガーが作った人のアカウントで動くこと。失敗時に失敗をまとめたメールが届くこと | Google for Developers: Installable Triggers | 2026-10-06 |
createDraft で下書きを作れ、htmlBody・name・replyTo・cc・bcc・attachments を指定できること。https://mail.google.com/ のスコープが要ること | Google for Developers: Class GmailApp | 2026-10-06 |
| 1回の実行が6分まで、Google Workspace のアカウントで URL Fetch が1日100,000回、メールの読み書きが1日50,000回であること。上限が予告なく変わりうること | Google for Developers: Quotas for Google Services | 2026-10-06 |
fetch(url, params) の method・contentType・headers・payload。muteHttpExceptions を true にすると失敗の応答でも例外を投げずに応答を返すこと | Google for Developers: Class UrlFetchApp | 2026-10-06 |
| スクリプトのプロパティがすべての利用者に共有されるアプリ全体の設定値の置き場所であること。値が文字列で保存されること | Google for Developers: Properties Service | 2026-10-06 |
output_config.format に json_schema の形でスキーマを渡すと JSON で応答すること。enum・required・additionalProperties: false が使えること。拒否のとき stop_reason が refusal、上限で切れたとき max_tokens になり、出力がスキーマに沿わないことがあること。enum の値が大文字と小文字だけ違う形で返ることがあり、区別せずに比べるべきこと | Claude Docs: Structured outputs | 2026-10-06 |
要望の対応一覧と、アレルギーなどの要望への返し方は、自社の館の責任者と厨房で決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。予約管理のシステムからの取り出し方と、予約サイト経由の予約への連絡の可否は、利用しているシステムと予約サイトの案内を確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0477)についてのご相談はこちらから。
