ハイヤー会社が予約の表から、予約の確認と前日の配車の案内のメールを Apps Script と Claude で下書きし、変更と配車の確定を漏れなく伝える
ハイヤーの予約の表から、受付の直後に送る予約の確認と、配車が決まった後に送る前日の案内のメールを、Apps Script と Claude が予約ごとに下書きします。受付の係は下書きを読んで直し、Gmail から送ります。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Zapier
- 対象業界
- その他/宿泊/物流
- 対象部門
- カスタマーサポート
- 対象業務
- 書類作成
- 主な課題
- 人手が足りない/書類作成に時間がかかる/確認ミスが多い
- AIで行う処理
- 生成
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 受付の係が電話・メール・フォームで受けた予約を、予約の表に入れる
- 同じ用途の過去の確認のメールを Gmail で探し、写して、日付・時刻・場所・人数を書き換えて送る
- 前日の15時に、配車の係が配車の表に乗務員と車両を入れる
- 受付の係が配車の表と予約の表を見比べ、翌日の予約ごとに前日の案内を書く。乗務員の名前、車種・色・ナンバー、迎えの場所での待ち方を書き足す
- 予約に変更があったときは、受付の係が予約の表を直し、変更の連絡をするかどうかをその場で決める
- 送ったことを予約の表の備考に手で書く
- 人受付の係が予約を予約の表に入れ、状態を「受付済み」にする
- 自動15分ごとに Apps Script が予約の表を読み、「受付済み」で確認のメールをまだ作っていない予約を拾う
- 自動予約ごとに、用途・宛先の種類・言語・利用日の事実を束ね、時刻・場所・名前を記号に置き換えて Claude API に渡す
- 自動Claude が、記号を残した件名と本文を JSON で返す。Apps Script が記号を値に置き換え、検査して Gmail の下書きを作り、そのときの予約の内容を写しとして残す
- 人配車の係が前日の15時に配車の表へ乗務員と車両を入れ、「配車確定」の印を付ける
- 自動前日の16時に Apps Script が翌日の予約を読み、配車が確定した予約について前日の案内の下書きを作る。写しと今の予約を比べ、変わった点があれば冒頭に入れる
- 自動確認の一覧に、予約・案内の種類・変わった点・検査の結果を1行ずつ書く
- 人受付の係が確認の一覧の「要確認」から片付け、下書きを読んで直し、送る
各工程の詳しい説明を読む
- 受付の係が電話・メール・フォームで受けた予約を、予約の表に入れる
- 同じ用途の過去の確認のメールを Gmail で探し、写して、日付・時刻・場所・人数を書き換えて送る
- 前日の15時に、配車の係が配車の表に乗務員と車両を入れる
- 受付の係が配車の表と予約の表を見比べ、翌日の予約ごとに前日の案内を書く。乗務員の名前、車種・色・ナンバー、迎えの場所での待ち方を書き足す
- 予約に変更があったときは、受付の係が予約の表を直し、変更の連絡をするかどうかをその場で決める
- 送ったことを予約の表の備考に手で書く
(a)前回のメールを写すので、古い値が残る。 2番目と4番目で前回のメールを写すと、本文のどこかに前の予約の時刻や行き先が残ります。 件名は直したのに本文の2段落目の時刻が前のまま、という書き違いは、急いでいる夕方ほど起きます。
(b)配車と予約を見比べる手間が重い。 4番目は、配車の表の乗務員と車両を、予約の表の行と1件ずつ照らす作業です。同じ時刻に同じ法人の予約が2件あると、乗務員を入れ違えます。 お迎えの場所で、お客様が案内と違う乗務員の名前を聞いて戸惑うことになります。
(c)変更が案内に入らない。 5番目の変更は、電話を受けた係がその場で予約の表を直します。確認のメールを送り直すかどうかは、その係の判断です。 前日の案内を書く係は、どこが変わったかを知らないまま、今の予約の値で書きます。お客様の手元には古い確認のメールと新しい前日の案内が残り、どちらが正しいのか分からなくなります。
(d)用途ごとの書き方が人に付いている。 葬儀の送迎の案内で「重ね重ね」「再び」のような言葉を避ける、空港の送迎で便の遅れのときの待ち方を書く、ホテルの担当者には宿泊のお客様の名前を添える。こうした書き分けを知っているのは、勤めの長い係です。 新しく入った係の文面は、その係が直しています。
- 【人】 受付の係が予約を予約の表に入れ、状態を「受付済み」にする
- 【自動】 15分ごとに Apps Script が予約の表を読み、「受付済み」で確認のメールをまだ作っていない予約を拾う
- 【自動】 予約ごとに、用途・宛先の種類・言語・利用日の事実を束ね、時刻・場所・名前を記号に置き換えて Claude API に渡す
- 【自動】 Claude が、記号を残した件名と本文を JSON で返す。Apps Script が記号を値に置き換え、検査して Gmail の下書きを作り、そのときの予約の内容を写しとして残す
- 【人】 配車の係が前日の15時に配車の表へ乗務員と車両を入れ、「配車確定」の印を付ける
- 【自動】 前日の16時に Apps Script が翌日の予約を読み、配車が確定した予約について前日の案内の下書きを作る。写しと今の予約を比べ、変わった点があれば冒頭に入れる
- 【自動】 確認の一覧に、予約・案内の種類・変わった点・検査の結果を1行ずつ書く
- 【人】 受付の係が確認の一覧の「要確認」から片付け、下書きを読んで直し、送る
6番目の比べる処理が、この設計の土台です。 変更の伝え漏れは、変更を受けた係と案内を書く係が違うことから起きます。比べるのを人の記憶ではなく写しに任せれば、誰が変更を受けても前日の案内に出てきます。
8番目は全件です。 送り先を間違えれば、法人の役員の予定や、葬儀の日時と場所を別のお客様に知らせることになります。送る前に人が読むことは省きません。 ただし読むのは、時刻と乗務員と車両が予約と配車の表のとおりに入った下書きです。
02今回想定するシステム構成
予約の表(利用日・迎えの時刻と場所・行き先・人数・用途・宛先・言語・状態) + 配車の表(乗務員・車両・配車確定の印) + 用途ごとの決まりの表 + 案内の写しの表(Google スプレッドシート) │ ▼【トリガー】15分ごと(予約の確認)/前日の16時(前日の案内) Google Apps Script ├──▶ 案内を作る予約を拾う ├──▶ 写しと今の予約を比べ、変わった点を出す ├──▶ 時刻・場所・名前・ナンバーを記号に置き換える ▼ Claude API ── 記号入りの件名と本文を JSON で返す ▼ Google Apps Script ── 記号を値に置き換え、時刻と記号の残りを検査 ├──▶ Gmail の下書き(予約ごと) └──▶ 確認の一覧・案内の写し(スプレッドシート) ▼ 【人】要確認を片付け、下書きを読んで直し、送る
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Make、Zapier |
| 生成AI | Claude API(Messages API、構造化出力) | OpenAI API、Gemini API |
| 保管 | Google スプレッドシート(予約の表、配車の表、用途ごとの決まり、案内の写し、確認の一覧) | - |
| メール | Gmail(予約センターの共用のアカウント。下書きを作るだけで、送るのは受付の係) | - |
新しく足すのは、Apps Script と、用途ごとの決まり・案内の写し・確認の一覧の3つのシートです。 予約の表と配車の表はこれまでどおり係が入れます。この構成はメールを送りません。 Gmail の下書きを作るところで止まります。
Apps Script を実行環境にしているのは、予約の表もメールも Google の中にあるからです。 時間主導型のトリガーは毎分から月1回までの間隔で動かせ、分ごとの間隔は1・5・10・15・30分から選べます。 予約の確認は15分ごと、前日の案内は毎日1回と、2つのトリガーを分けて置きます。
生成AIに渡すのは、記号に置き換えた予約の事実だけです。 お客様の名前、乗る人の名前、電話番号、迎えの住所、乗務員の名前はAIに渡しません。AIに要るのは、用途・宛先の種類・言語・案内の種類・変わった点の種類だけです。
03どうやって実装するのか
処理の起点を決める
2つの時間主導型のトリガーを置きます。 1つは予約の確認のためのもので、everyMinutes(15) で15分ごとに動かします。もう1つは前日の案内のためのもので、everyDays(1) と atHour(16) で毎日1回動かします。公式の説明では、atHour() の例は「5時〜6時の間に動く」と書かれ、nearMinute() を指定しないと分はランダムに決まります。 前日の案内は16時台のどこかで動く前提にし、配車の確定を15時半までに終える決まりにします。
予約の表への入力そのものをきっかけにはしません。 公式は、スクリプトの実行や API のリクエストではトリガーが動かないとしています。Web のフォームから別の仕組みで行が足される予約は、編集のトリガーでは拾えないことがあります。 15分ごとに状態の列を見に行く作りにすれば、入り方が電話でもフォームでも同じに扱えます。
トリガーは、予約センターの共用のアカウントで作ります。 インストール型のトリガーは作った人のアカウントで動くとされています。係個人のアカウントで作ると、下書きがその係の Gmail に入り、休みや退職で止まります。 失敗すると所有者に「Summary of failures for Apps Script」という件名のメールが届くので、共用のアカウントの受信箱を誰が見るかを決めておきます。
15分ごとのトリガーは、動く回数が多くなります。 トリガーの合計の実行時間は個人のアカウントで1日90分、Workspace で1日6時間とされています。窓口の8時から19時の外は表を読まずに終えます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 予約の表 | 予約番号、利用日、迎えの時刻、迎えの場所、行き先、経由地、人数、荷物、用途、便名(空港の場合)、宛先の種類、言語、状態 | スプレッドシート |
| 宛先の情報 | 予約をした人の名前・会社名・メールアドレス、乗る人の名前(敬称の付け方) | スプレッドシート |
| 配車の表 | 予約番号、乗務員の名前、車種、車体の色、ナンバーの下4桁、配車確定の印 | スプレッドシート |
| 用途ごとの決まり | 用途(役員送迎/空港送迎/冠婚葬祭/観光貸切/ホテル手配)ごとに、案内に必ず入れる事項と避ける言葉 | スプレッドシート(新しく作る) |
| 案内の写し | 予約番号、案内の種類、作った日時、そのときの予約の内容の写し、送った日時 | スプレッドシート(新しく作る) |
質を決めるのは、用途ごとの決まりと案内の写しです。 用途ごとの決まりが無ければ、空港の送迎で便の遅れのときの待ち方を書くか、葬儀の送迎でどの言葉を避けるかを、AIが毎回自分で決めることになります。案内の写しが無ければ、変わった点を出せません。
用途ごとの決まりには、会社の取り決めを入れます。 たとえば空港の送迎なら「到着の便が遅れたときは、便の到着に合わせてお待ちします」「到着口を出たところで、お名前を書いた札を持ってお待ちします」のような、会社として約束していることだけを書きます。約束していない待ち時間や料金の扱いを、AIが書き足さないようにするためです。
データの取得方法を決める
すべて同じスプレッドシートの中にあるので、Apps Script のスプレッドシートのサービスで読むだけです。 配車システムや外の予約サイトから直接取ってくるものはありません。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 状態が「受付済み」で確認が未作成の予約 | 予約の表 | 予約の確認を作る対象 |
| 翌日の予約で配車確定の印がある行 | 予約の表と配車の表(予約番号でつなぐ) | 前日の案内を作る対象 |
| 用途ごとの必須事項と避ける言葉 | 用途ごとの決まり | AIに渡す事実の束 |
| 確認を作ったときの予約の内容 | 案内の写し | 変わった点を出す |
変わった点は、次の項目だけを比べます。
| 比べる項目 | 変わったときに冒頭に入れる文の種類 |
|---|---|
| 利用日・迎えの時刻 | 時刻の変更 |
| 迎えの場所・行き先・経由地 | 場所の変更 |
| 人数・荷物 | 人数・荷物の変更 |
| 便名 | 便の変更 |
| 宛先のメールアドレス | 宛先の変更(下書きを作らず「要確認」) |
宛先が変わった予約は下書きを作りません。 秘書の交代やホテルの担当の替わりで宛先が変わることはありますが、入力の誤りで別の法人のアドレスが入っていることもあります。 宛先の変更は、受付の係が電話で確かめてから案内を作り直します。
AIへ渡す前に整形する
- 状態で絞る … 「取消」「仮予約」の行は外します。取消の予約は、取消の連絡の下書きを別に作るか、係が電話で伝えます
- 重複を外す … 案内の写しに、同じ予約番号・同じ案内の種類の行があれば外します。変わった点があるときだけ、前日の案内を作り直します
- 時刻を整える … 迎えの時刻を
H時mm分、利用日をM月d日(曜日)の形にします。曜日は Apps Script が日付から計算して付けます - 変わった点を出す … 案内の写しと今の予約を、上の表の項目で比べ、変わった項目の名前と、前の値・今の値を並べます
- 記号に置き換える … 宛先の名前を
{{宛名}}、乗る人を{{ご利用者}}、時刻を{{迎え時刻}}、場所を{{迎え場所}}、乗務員を{{乗務員名}}、車両を{{車両}}に、変わった点の前の値と今の値を{{変更前_1}}{{変更後_1}}のような番号付きの記号にします - 言語を決める … 予約の表の言語の列が英語なら、英語の文面を求めます。名前と場所は記号のままなので、訳す必要がありません
3番目で曜日を Apps Script が付けるのは、AIが曜日を書き足すと1日ずれることがあるためです。
5番目の記号に番号を付けるのは、変わった点が2つ以上あるためです。 時刻と迎えの場所が同時に変わった予約で、どちらの前の値をどちらに書くかをAIに選ばせません。
AIに処理させる
させるのは、記号の入った予約の事実から、案内のメールの件名と本文を作ることだけです。
| させること | 中身 |
|---|---|
| 件名を作る | 案内の種類と利用日の記号が分かる件名。例「ご予約の確認({{利用日}})」 |
| 宛先の種類に合わせて書き出す | 本人/秘書・総務/ホテルの担当/葬儀社の担当で敬語の向きを変える |
| 予約の事項を並べる | 利用日・迎えの時刻・場所・行き先・人数を記号で箇条にする |
| 用途ごとの必須事項を入れる | 用途ごとの決まりにある文を、必要な箇所に入れる |
| 変わった点を冒頭に書く | 変わった項目ごとに「変更前→変更後」の記号を並べる |
| 気になる点を挙げる | 事実の束で食い違って見える点(例:空港の送迎なのに便名が空) |
AIに書かせないことのほうが大事です。
| させないこと | 理由 |
|---|---|
| 時刻・日付・曜日を数字で書く | 計算と値は Apps Script。数字の時刻が本文にあれば検査で止める |
| 運賃や待ち時間の料金を書く | 運賃の見積は予約の担当が別に出す |
| 用途ごとの決まりに無い約束を足す | 「遅れても無料でお待ちします」のような約束は会社が決めること |
| 乗務員の人柄や経歴を書く | 事実の束に無いことを足さない |
| 道路の混み具合や所要時間の見込みを書く | 当日の道路の事情は分からない |
3行目がいちばん起きやすい失敗です。 AIは親切に「交通事情により遅れる場合もご安心ください」「お荷物はトランクにお積みします」と書き足します。一般には当たり前に見えても、会社として約束していないことが文面に入ると、それがお客様との約束になります。 書いてよいのは、用途ごとの決まりにある文だけです。
指示内容を固定する
あなたはハイヤー会社の予約センターの係として、お客様に送る案内のメールの下書きを書きます。
渡す「事実の束」だけを使って書いてください。
【書き方】
- 宛名は {{宛名}} と書き、宛先の種類(recipient_type)に合わせて敬語の向きを決めてください。
self …… ご本人宛て。「お迎えにあがります」
secretary …… 秘書・総務の方宛て。「{{ご利用者}}のお迎えにあがります」
hotel …… ホテルのご担当者宛て。宿泊のお客様のお名前は {{ご利用者}} と書く
funeral …… 葬儀社のご担当者宛て
- 日付・曜日・時刻は、事実の束の記号({{利用日}} {{迎え時刻}} など)をそのまま置いてください。
数字で日付や時刻を書かないでください。曜日も書かないでください。
- 迎えの場所・行き先・乗務員・車両も記号のまま置いてください。名前を推測しないでください。
- notice_type が confirm のときは予約の確認、day_before のときは前日の案内を書きます。
day_before のときだけ、{{乗務員名}} と {{車両}} を入れてください。
- changes が空でないときは、本文の最初に「ご予約の内容から変わった点」を置き、
変わった項目ごとに {{変更前_n}} → {{変更後_n}} の形で、番号の順に1行ずつ書いてください。
- rules にある文は、意味を変えずに本文に入れてください。avoid_words にある言葉は使わないでください。
- language が en のときは英語で書いてください。記号はそのまま残してください。
【書かないこと】
- 運賃・料金・待ち時間の料金
- rules に無い約束(遅れたときの扱い、荷物の扱い、無料のサービスなど)
- 道路の混み具合、所要時間の見込み
- 乗務員の人柄・経歴・年齢
【notes】
事実の束の中で食い違って見えるもの、文面を書くのに足りないものがあれば、
notes に短く書いてください。無ければ空の配列にしてください。
【事実の束】{facts_json}
「数字で時刻を書かない」を明記しないと、AIは記号を値に見立てて「午前8時30分」と書き直すことがあります。 書き直された時刻は、予約の表と合っているかどうか誰にも分かりません。記号のまま返させ、値は後から機械が入れます。
出力形式を固定する
Claude API の構造化出力で、次の形の JSON を受け取ります。 スキーマは output_config.format に type: "json_schema" で渡します。
{
"subject": "【前日のご案内】{{利用日}} {{迎え時刻}} お迎えのハイヤーについて",
"body": "{{宛名}}\n\nいつもご利用いただきありがとうございます。\n\nご予約の内容から変わった点\n1. お迎えの時刻:{{変更前_1}} → {{変更後_1}}\n\n明日のお迎えは次のとおりです。\n・ご利用日:{{利用日}}\n・お迎えの時刻:{{迎え時刻}}\n・お迎えの場所:{{迎え場所}}\n・乗務員:{{乗務員名}}\n・車両:{{車両}}\n…",
"placeholders_used": ["{{宛名}}", "{{利用日}}", "{{迎え時刻}}", "{{迎え場所}}", "{{乗務員名}}", "{{車両}}", "{{変更前_1}}", "{{変更後_1}}"],
"notes": []
}
構造化出力を使う理由は2つです。 1つは、件名と本文と使った記号を別の項目で受け取れることです。本文を正規表現で切り分けるより確実です。もう1つは、placeholders_used と事実の束の記号を突き合わせられることです。前日の案内で {{乗務員名}} が抜けていれば、検査で止まります。
スキーマに文字数の上限は書きません。 公式の説明では、文字列の長さの制約(minLength・maxLength)や数値の範囲の制約は非対応で、使うと400のエラーになります。 配列の要素の数の制約も minItems の0と1しか使えません。本文の長さは Apps Script の検査で見ます。スキーマを初めて使うときは組み立ての分だけ時間がかかり、組み立てた結果は最後に使ってから24時間保持されます。
Apps Script の検査は次のとおりです。
| 検査 | 引っかかったとき |
|---|---|
| 事実の束の記号が本文にすべてあるか | 抜けた記号を確認の一覧に出し、「要確認」 |
| 事実の束に無い記号が本文にあるか | 「要確認」(入れ違いの恐れ) |
| 置き換えた後の本文に、事実の束に無い時刻・日付が出ていないか | 赤の「要確認」 |
| 変わった点の番号と記号の番号が合っているか | 「要確認」 |
avoid_words の言葉が本文にあるか | 「要確認」 |
notes が空でない | notes を確認の一覧に写し、「要確認」 |
3行目が、AIが時刻を書いてしまったときの網です。 記号を置き換えた後の本文から、時・分 の並び、: 区切りの時刻、月・日 の並びを拾い、事実の束にある値と一つずつ照らします。 束に無い時刻が1つでもあれば下書きは作りますが、確認の一覧で赤くします。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 予約の表・配車の表 | スプレッドシートのサービスで読む | 案内を作る予約と、配車の値 |
| Claude API | UrlFetchApp で Messages API を呼ぶ | 件名と本文の JSON |
| Gmail | GmailApp.createDraft() | 予約ごとの下書き |
| 確認の一覧・案内の写し | スプレッドシートのサービスで書く | 検査の結果と、作ったときの予約の内容 |
下書きは GmailApp.createDraft(recipient, subject, body, options) で作ります。 オプションには cc・bcc・replyTo・name などがあり、name に会社名と「予約センター」を入れて送り主の表示をそろえます。 法人の予約で、秘書と本人の両方に送ってほしいと言われている場合は、cc に入れる宛先を予約の表の列で持ちます。Gmail の権限(https://mail.google.com/)が要るので、初回の承認は共用のアカウントで行います。
呼び出しの回数は月に1,000回前後です。 予約の確認と前日の案内で1件2回、変わった点による作り直しを足しても、URL の取得の上限(個人のアカウントで1日20,000回、Workspace で1日100,000回)には届きません。 気をつけるのは1回の実行が6分までという上限で、前日の案内で翌日の予約が多い日は、処理した予約に印を付け、残りは次の実行で続けます。
人が確認する
- 確認の一覧の「配車未確定」と「宛先の変更」から見る … どちらも下書きを作っていません。配車の係に確定を頼むか、お客様に電話で宛先を確かめます
- 赤の「要確認」を見る … 事実の束に無い時刻が本文にある下書きです。AIが時刻を書き足したか、値の入れ違いです
- 変わった点のある下書きを見る … 変更前と変更後が、電話で受けた変更の内容と合っているか。変更を受けた係に一言聞けるなら聞きます
- 前日の案内の乗務員と車両を配車の表と見比べる … 置き換えた値が配車の表の行と同じか
- 送る … 係が Gmail から送り、案内の写しの表に送った日時を入れます
4番目を省かないでください。 検査は記号と時刻の形を見ていますが、配車の表の予約番号そのものを入れ違えていれば、正しく置き換えた違う乗務員の名前が届きます。 同じ時刻に同じ法人の予約が2件ある日は、とくに見ます。
目標は、480件をならして1件3分です。 予約の確認は1分ほどで読んで送れ、前日の案内は乗務員と車両を見比べて2分ほどです。時間を使うのは、変わった点のある予約と、配車未確定の予約です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 15時半を過ぎても配車確定の印が無い | 前日の案内を作らず「配車未確定」。配車の係に知らせる |
| 宛先のメールアドレスが変わった | 下書きを作らず「宛先の変更」。電話で確かめる |
| 宛先のメールアドレスが無い | 下書きを作らず「電話で案内」と出す |
| 当日の予約(前日の案内の時刻を過ぎて入った) | 前日の案内を作らず、受付の係が電話で乗務員と車両を伝える |
| 空港の送迎で便名が空 | 下書きは作り、「要確認」。notes にも出る |
| Claude API がエラーを返す | 1回だけやり直し、だめなら確認の一覧に「生成失敗」。その予約に印を付けない(次の回で拾う) |
| 本文に記号の抜け・余り | 下書きは作り、「要確認」 |
| 予約が取消になった | 案内を作らない。送った確認のメールがあれば、取消の連絡を係が送る |
| 1回の実行が6分を超えそう | 処理した予約に印を付けて終わり、続きは次の実行で |
4行目の当日の予約は、メールにしません。 前日の16時を過ぎて入った予約は、お迎えまで数時間しかないことが多く、メールを読む前に車が着くことがあります。 乗務員と車両は電話で伝え、予約の表に「電話で案内済み」と残します。
記録を残す
- 実行の日時、読んだ予約の数、作った下書きの数、作らなかった予約とその理由
- 予約ごとの事実の束(記号に置き換えた後のもの)と、Claude が返した JSON
- 検査の結果(記号の抜け・余り、時刻の食い違い、避ける言葉、
notes) - 案内を作ったときの予約の内容の写し(次の案内で比べるため)
- 係が下書きを直したかどうかと、直した箇所の種類(言い回し、用途ごとの文、時刻、乗務員)
- 送った日時と、お客様からの問い合わせの有無
5つ目が、指示文と用途ごとの決まりを直す材料になります。 係が葬儀の送迎の案内で毎回同じ言い回しを直しているなら、それは避ける言葉の一覧に足す合図です。 乗務員の名前を直しているなら、配車の表の入れ方に誤りがあります。
04実装レベルの3段階
本記事の想定は半自動化です。 案内を送るのは係で、予約の表を直すのも係です。案内の対象の洗い出しと、配車の値の写しと、変わった点の比べ合わせが自動になれば、夕方の4時間の作業の大半は消えます。 半自動化で、1件10分が3分になります。 差が大きいのは、配車の表と予約の表を照らして前日の案内を書く作業が、案内の作業の半分を占めていたからです。 本格構成は、返信の読み取りが入るので一段難しくなります。 「迎えを30分早めたい」という返信では、配車の都合がつくかを配車の係が判断する必要があります。半自動化を半年回してから考えれば十分です。
05工数削減シミュレーション
導入後 480件 × 3分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 役員の送迎、空港の送迎、冠婚葬祭、観光の貸切などの予約を月に数百件受け、予約の表を Google スプレッドシートで持ち、お客様や秘書・ホテルの担当者へ Gmail で確認と前日の案内を送っているハイヤー・タクシーの会社。予約の確認と前日の案内を受付の係が1通ずつ前回のメールから写して作っていて、迎えの時刻や乗務員の名前の書き違い、変更の伝え漏れが起きたことがある場合。
- 予約の大半が配車のアプリ経由で、確認と案内がアプリの通知で済んでいる会社。予約が月に数十件で、受付の係が電話で確認すれば足りる場合。予約の表が配車システムの中にだけあり、スプレッドシートに書き出せない場合。なお、運賃の見積、予約を受けるかどうか、どの乗務員と車両を出すかの判断は、この構成の対象外です。
07最小構成で試す方法
- 先月の予約から、用途ごとに4件ずつ、合わせて20件を選ぶ(変更のあった予約を数件入れる)
- それぞれについて、用途・宛先の種類・案内の種類・変わった点を手で書き出す(名前・時刻・場所は記号にする)
- 手元の Claude の画面に、第7章のプロンプトと、記号に置き換えた事実を1件ずつ貼る
- 返ってきた文面に数字の時刻が混ざっていないか、用途ごとの決まりに無い約束が足されていないかを見る
- 係がこれまで送った同じ用途の案内と並べ、勤めの長い係に「直さずに送れるか」を聞く
20件で十分です。 確かめたいのは、「記号のまま返してくれるか」と「約束を書き足さないか」の2つです。
| 出てきた内容 | 判断 |
|---|---|
| 記号のまま返り、係が少し直せば送れる | Apps Script で予約の表から事実の束を作る段階に進む |
| 時刻を数字に書き直す | 指示の書き方で直る。「数字で時刻を書かない」を前に出す |
| 遅れや荷物の扱いを書き足す | 用途ごとの決まりが足りない。会社として約束している文を先に決める |
3行目はよく出ます。 失敗ではなく、これまで係が案内に何を約束として書き、何を書かずにいたかが言葉になるということです。用途ごとの決まりの表は、そのまま予約センターの案内の手引きとして残ります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIが時刻を数字で書き直す | 記号のまま返させ、置き換えた後の本文の時刻を事実の束と照らす |
| AIが会社の約束していないことを書き足す | 用途ごとの決まりにある文だけを使わせ、書かないことを具体的に並べる |
| 変更が前日の案内に入らない | 確認のメールを作ったときの予約の内容を写しとして残し、前日に比べる |
| 配車が決まる前に前日の案内ができる | 配車確定の印がある予約だけを対象にする |
| 同じ時刻の2件で乗務員が入れ違う | 予約番号で配車の表とつなぐ。名前や時刻でつながない |
| 取消の予約に案内が届く | 前処理で外し、送る前に状態の列をもう一度見る |
| 宛先の誤りで別の法人に届く | 宛先が変わった予約は下書きを作らず、電話で確かめる |
| 曜日が1日ずれる | 曜日は Apps Script が日付から計算する |
| 当日の予約にメールが届く | 前日の案内の時刻を過ぎた予約は電話で伝える |
| 係個人のアカウントでトリガーを作る | 共用のアカウントで作る |
上の3行が、この構成の失敗のほとんどです。 どれも「お客様との約束の中身をどこで決めるか」から起きます。時刻と配車の値は表と Apps Script だけで決め、約束の文は用途ごとの決まりだけで決め、AIは並べて整えるだけにしておけば、残りは運用の注意で足ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: お客様と乗る人の名前、法人の名前、メールアドレスと電話番号、迎えの住所と行き先、利用の日時、用途(葬儀・病院・空港など)、乗務員の名前と車両のナンバーです。法人の役員がいつどこへ行くかは、その法人にとって外に出したくない予定です。
- AIにお客様を特定できる情報を渡さない … 名前・住所・電話番号・行き先の名前は記号にして渡し、値は下書きを作るときに Apps Script が差し込みます
- 送るのは人 … 宛先を間違えれば、他のお客様の予定と行き先を知らせることになります。下書きを読んで宛先を確かめてから送ります
- 乗務員の個人の連絡先を書かない … 当日の連絡先は予約センターの番号にします。乗務員の携帯の番号を案内に入れると、乗務員の個人の情報がお客様の手元に残ります
- 約束の文を会社が決める … 遅れたときの扱いや料金に関わる文は、用途ごとの決まりの表だけで決め、AIに作らせません
- 鍵とアカウントを共用で持つ … API の鍵はスクリプトのプロパティに置き、トリガーは予約センターの共用のアカウントで作ります
- 利用規約を確かめる … 生成AIの製品を替えるときは、その製品の利用規約とデータの扱いを先に確かめてください
誤りが起きた場合のリスクは、違う時刻・場所・乗務員の案内が届くことと、案内が別のお客様に届くことの2つです。 前者は値を記号にすることと配車の表を予約番号でつなぐことで防ぎ、後者は宛先の変更を止めることと、人が読んで送ることで防ぎます。
10まず何から始めるか
1週目:用途ごとの決まりを作る
勤めの長い係と一緒に、用途ごとに案内に必ず入れる文と、避ける言葉を表にします。空港の送迎の待ち方、葬儀の送迎の言葉づかい、ホテルの担当者への書き方を、これまでの案内から拾います。会社として約束していない文は入れません。
2週目:20件で試す
第8章のとおり、用途ごとに4件ずつ、記号に置き換えた事実を手元の Claude の画面に貼ります。数字の時刻を書かないか、約束を足さないかを最優先で見ます。
3週目:予約の表と配車の表を整える
予約の表に、宛先の種類・言語・状態の列を足し、配車の表に配車確定の印の列を足します。配車の表を予約番号で引けるようにし、予約番号の無い行を無くします。
4週目:Apps Script で下書きまでをつなぐ
予約の確認の15分ごとのトリガーと、前日の案内の16時のトリガーを置き、Claude を呼び、Gmail の下書きと確認の一覧を作るところまで作ります。最初の月は勤めの長い係が全件の下書きを読み、直した箇所を記録します。
2か月目以降: 案内の写しによる変わった点の比べ合わせを入れ、要確認の割合と直した箇所の種類を毎月見ます。係が下書きを読んで送るだけで夕方の案内が終わり、「この予約、時刻が変わったのを伝えたか」と誰かに聞かなくてよくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| インストール型のトリガーは作成した人のアカウントで実行されること。スクリプトの実行や API のリクエストではトリガーが動かないこと。時間主導型のトリガーが毎分から月1回まで動かせること。失敗すると「Summary of failures for Apps Script」のメールが届くこと | Google for Developers: Installable triggers | 2026-10-29 |
everyMinutes() に指定できるのが1・5・10・15・30であること。atHour() の例が「5時〜6時の間に動く」と書かれていること。nearMinute() を指定しないと分がランダムになること。everyDays() で日ごとに動かせること | Google for Developers: ClockTriggerBuilder | 2026-10-29 |
| 1回の実行が6分まで、URL の取得が個人のアカウントで1日20,000回・Workspace で1日100,000回、トリガーの合計の実行時間が個人のアカウントで1日90分・Workspace で1日6時間であること。メールの宛先の数に1日の上限があること | Google for Developers: Quotas for Google Services | 2026-10-29 |
GmailApp.createDraft(recipient, subject, body, options) で下書きを作れ、cc・bcc・name・replyTo などのオプションがあること。https://mail.google.com/ の権限が要ること | Google for Developers: Class GmailApp | 2026-10-29 |
構造化出力を output_config.format に type: "json_schema" で指定すること。数値の範囲と文字列の長さの制約は非対応で400になり、minItems は0と1のみであること。スキーマを初めて使うときに組み立ての時間がかかり、組み立てた結果が最後の利用から24時間保持されること | Claude API Docs: Structured outputs | 2026-10-29 |
運賃、待ち時間の扱い、遅れたときの対応は、会社の運賃と社内の取り決めに合わせて決めてください。 本記事は公開されている仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2298)についてのご相談はこちらから。
