Tripport 予約自動転記システム 機能説明

約15分で読めます
Gmail × Claude API × Spreadsheet × Google Calendar

Tripport 予約自動転記システム
機能説明

Viator / GetYourGuide の予約メールを読み取り,Claude API で予約内容を抽出し,受付台帳とカレンダーへ反映する Apps Script の全体像を平易に整理した図解である.

1. 全体像

このスクリプトは,予約メールを入口として,台帳更新とカレンダー連携までを半自動化する. 人間が確認すべきものは承認待ちとして残し,明確な予約は自動で登録する.

Gmail予約メール
Apps Script5分ごと実行
Claude APIJSON抽出
Spreadsheet受付台帳
Calendar予定登録・更新・削除
目的は「全部を無理に自動化すること」ではない. 明確なものは自動処理し,曖昧なものだけ人間の承認に回す設計である.

2. 対象メール

SENDERS に登録された送信元だけを処理する. それ以外のメールは,予約メールに見えても処理対象外になる.

送信元 内部表記 意味
booking@t1.viator.com VIA Viator 経由の予約
do-not-reply@notification.getyourguide.com GYG GetYourGuide 経由の予約
指定送信元
未処理ラベル
直近7日
処理対象
(from:booking@t1.viator.com OR from:do-not-reply@notification.getyourguide.com) -label:processed-by-script newer_than:7d

3. メール分類

classifyEvent_() は件名からメール種別を判定する. ここで処理ルートが分かれる.

new
新規予約.Claude で抽出し,台帳に新しい行を追加する.
cancel
キャンセル通知.予約番号で既存行を探し,無料/有料キャンセルを判定する.
amend
変更通知.明記された項目だけ上書きし,変更内容は備考に残す.
review / other
レビュー通知や不明なメール.予約処理からは除外する.

4. 新規予約の処理

Gmail
本文取得
送信元確認
Apps Script
件名分類
本文整形
重複確認
Claude API
JSON抽出
信頼度判定
Spreadsheet
高信頼度は追記
曖昧なら承認待ち
抽出項目 意味
booking_id予約番号.重複判定やキャンセル・変更の紐付けに使う.
tour_name内部ツアー名.TOUR_NAMES から選ぶ.
travel_date / travel_time実施日と開始時刻.
num_people参加人数.
lead_traveler代表者名.
country参加者の国.
net_rate売上.
confidence / concerns自動処理してよいか,人間確認が必要かを判断する情報.

5. ツアー名とカテゴリ

メール内の外部表記を,内部で使うツアー名に変換する. その後,CATEGORY_BY_TOUR によりカテゴリを決める.

英文ツアー名
例: Asakusa Walking Tour
Claude が判断
内部ツアー名
浅草2h
カテゴリ
Guide
カテゴリ
Guide皇居1.5h,浅草2h,築地2h,秋葉原2h,渋谷1.5h など
JCE書道1h,茶道1h
協業ダルマ1h,サンドブラスト2h
TPCcy皇居3h,es秋葉原2h,es東京タワー2h など
AsappyAS浅草2h,ASスカイツリー2h

6. 台帳の列構造

buildBookingRecord_() は,抽出結果を18列の行データに変換する.

1予約番号
2受付日
3経路
4カテゴリ
5ツアー名
6ガイド手配
7空欄
8実施日
9時刻
10人数
11代表者
12
13売上
14実施状況
15無料Cancel日
16備考
17空欄
18空欄

7. 信頼度と色

high: 自動登録 medium: 承認待ち low: 強い要確認 キャンセル済み
high
台帳に追記し,カレンダーにも自動登録する.
medium
行を黄色にし,備考に 承認待ち と要確認理由を残す.
low
行を赤色にし,ツアー名不明などの強い要確認として残す.

8. 承認と承認学習

人間が承認した結果は,次回以降の Claude プロンプトに反映される. これにより,同じような表記ゆれを次回から高信頼度で処理しやすくなる.

承認待ち
人間が承認
Claude が
補足ルール生成
ScriptProperties
に保存
次回プロンプト
に反映
関数 役割
approveSelectedRows()選択行の承認待ちを承認済みに変更し,色をクリアする.
generateApprovalRule_()承認された内容から,次回用の補足ルールを Claude に生成させる.
saveLearnedRule_()生成されたルールを保存する.
learnedRulesPrompt_()保存済みルールを抽出プロンプトに差し込む.

9. キャンセル処理

キャンセルメール
予約番号抽出
台帳行検索
無料/有料
キャンセル判定
Calendar
予定削除
キャンセルメール受信
受信日時を基準にする.
実施日時を作る
台帳または抽出結果の実施日・時刻から Date を作る.
差分時間を計算
実施日時 − キャンセル受信日時を時間単位で計算する.
しきい値で判定
CANCEL_FREE_THRESHOLD_HOURS 以上なら無料キャンセルとする.

10. 変更処理

変更通知は「変更後の全情報」ではなく「差分」だけを含むことがある. そのため,明記された項目だけを更新し,推測による上書きは避ける.

メール本文の例 処理 理由
Changed to 4 travelers 人数を4に更新 変更後の合計人数が明記されているため.
One traveler has been removed 人数は更新しない 元人数が不明だと合計人数を確定できないため.
Start time changed to 14:00 時刻だけ更新 新しい時刻が明記されているため.
変更メール
extractAmendWithClaude_
部分更新
備考に差分記録

11. 重複防止

台帳の1列目にある予約番号を読み込み,既存予約番号と照合する. すでに存在する予約は再追加しない.

抽出した
予約番号
既存ID一覧
一致?
一致ならスキップ
なければ追記

12. デバッグ・テスト関数

関数 確認できること 書き込み
debugSearch()Gmail検索,シート情報,既存IDを確認する.なし
debugEvents()メール分類が正しいか確認する.なし
dryRunCancelAmend()キャンセル・変更処理の予定内容を確認する.なし
liveTestCancelAmend()実際に1件ずつ処理し,before/after を見る.あり
insertApprovalSamples()承認待ちのサンプル行を追加する.あり
deleteSampleRows()SAMPLE- で始まるサンプル行を削除する.あり

13. まとめ

予約メール
AI抽出
台帳更新
カレンダー連携
承認結果から改善

このコードは,予約業務の単純な転記を減らしつつ,曖昧な判断は人間に残す構造になっている. さらに,人間の承認を学習材料として使うため,運用するほど自動処理できる範囲が広がる.

Tripport 予約自動転記システムの説明用 HTML/CSS プレビュー