ガソリンスタンドが手書きの洗車・オイル交換・タイヤ点検の受付票を読み取り、お客様ごとの作業の履歴と次回の案内の一覧を作る
店の受付が手書きする洗車・オイル交換・タイヤ点検の受付票を読み取り、お客様と車ごとの作業の履歴に積み上げます。店の決まりに照らして、次回の案内の時期が来たお客様の一覧を毎月作ります。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- その他/小売
- 対象部門
- 営業
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- 入力作業が多い/営業フォローが追いつかない/期限・対応漏れが起きる
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 受付の担当が受付票を書き、作業をし、控えを店の箱に入れる
- 店長か副店長が手の空いた時間に控えを取り出し、日付の順に並べる
- 車両番号と電話番号で、顧客の台帳からお客様の行を探す
- 見つかれば作業の日付と内容を写し、見つからなければ新しい行を作る
- 月末に、台帳を見ながらオイル交換から時間の経ったお客様を探す
- 案内を希望しているお客様に、はがきの宛名を印刷して出す
- 人受付の担当が受付票を書き、作業をし、控えを店の箱に入れる(様式は第7章のとおり少し直す)
- 人閉店の作業のときに、その日の控えを店の複合機でまとめてスキャンし、店ごとの受付の場所に保存する
- 自動毎晩決まった時刻に Python の処理が動き、4店の受付の場所の票を Document AI で読み取る
- 自動車両番号と電話番号の書式を確かめ、顧客の台帳のお客様と車に当てる。決まらない票には印を付ける
- 自動生成AIがオイルの銘柄の書き方を商品の一覧に当て、気づいたことの欄を提案の項目に分ける
- 自動作業の履歴の台帳に行を足す。案内の希望の欄を読めた票だけ、希望を台帳に反映する
- 人店長が毎朝、印の付いた票だけを見て、車を決めるか新しいお客様として登録する
- 自動月に1回、店の決まりに照らして、案内の時期が来たお客様の一覧を作る
- 人本部の担当が一覧を見て、はがきとメールの案内を出す。店長はお客様の来店のときに一覧を見て声をかける
各工程の詳しい説明を読む
- 受付の担当が受付票を書き、作業をし、控えを店の箱に入れる
- 店長か副店長が手の空いた時間に控えを取り出し、日付の順に並べる
- 車両番号と電話番号で、顧客の台帳からお客様の行を探す
- 見つかれば作業の日付と内容を写し、見つからなければ新しい行を作る
- 月末に、台帳を見ながらオイル交換から時間の経ったお客様を探す
- 案内を希望しているお客様に、はがきの宛名を印刷して出す
(a)控えが箱にたまる。 2番は手の空いた時間の仕事です。週末や連休の洗車が混む時期ほど、控えが多く、写す時間が無くなります。 写していない控えのお客様は、台帳の上では来店していないことになります。
(b)同じ車が別のお客様として残る。 3番で、手書きの車両番号を台帳と照らします。「さ」と「き」、「8」と「3」を読み違えると見つからず、4番で新しい行を作ります。 同じ車の履歴が2行に分かれ、片方はオイル交換の後、片方は前、という状態になります。
(c)案内の時期の来たお客様を拾えない。 5番は、台帳の行を1行ずつ見て日付を数える作業です。月末の忙しさのなかでは後回しになり、 店長が覚えているお客様にだけ案内が出ます。
(d)希望の欄を見落とす。 6番で、受付票の希望の欄を台帳に写していないと、案内を断ったお客様にもはがきが届きます。 逆に、メールを希望しているお客様に、はがきが届くこともあります。
(e)測った値が残らない。 タイヤの溝の深さは、控えに書いてあっても台帳に写していないことが多く、次に来たときに「前回より何ミリ減ったか」が分かりません。 お客様に交換を相談するときの根拠が、その場で測った1回分だけになります。
- 【人】 受付の担当が受付票を書き、作業をし、控えを店の箱に入れる(様式は第7章のとおり少し直す)
- 【人】 閉店の作業のときに、その日の控えを店の複合機でまとめてスキャンし、店ごとの受付の場所に保存する
- 【自動】 毎晩決まった時刻に Python の処理が動き、4店の受付の場所の票を Document AI で読み取る
- 【自動】 車両番号と電話番号の書式を確かめ、顧客の台帳のお客様と車に当てる。決まらない票には印を付ける
- 【自動】 生成AIがオイルの銘柄の書き方を商品の一覧に当て、気づいたことの欄を提案の項目に分ける
- 【自動】 作業の履歴の台帳に行を足す。案内の希望の欄を読めた票だけ、希望を台帳に反映する
- 【人】 店長が毎朝、印の付いた票だけを見て、車を決めるか新しいお客様として登録する
- 【自動】 月に1回、店の決まりに照らして、案内の時期が来たお客様の一覧を作る
- 【人】 本部の担当が一覧を見て、はがきとメールの案内を出す。店長はお客様の来店のときに一覧を見て声をかける
7番目が、この設計の分かれ目です。 店長が見るのは全票ではなく、車が1台に決まらない票、新しいお客様らしい票、測った値の疑わしい票だけです。印の無い票は、読み取った値がそのまま履歴に入ります。
8番目の時期は、規則で決めます。 「オイル交換から何か月」「溝の深さが何ミリを下回った」は店の決まりで、生成AIには決めさせません。 決まりを変えたいときは表を1つ直すだけで済みます。
02今回想定するシステム構成
作業の受付票の控え(A5・1作業1枚。手書きの上の欄・作業のチェック・測った値・案内の希望) │ 閉店の作業のときに店の複合機でまとめてスキャン ▼【トリガー】毎晩22時に Python の処理が動く Python(取り込みの処理) ├──▶ 1枚1ページへの分割、向きの確認 ▼ Google Document AI(Form Parser) │ 上の欄のキーと値、作業のチェック、測った値の表、案内の希望のチェック ▼ Python ── 車両番号と電話番号の書式、顧客の台帳への当てはめ ▼ Claude API(構造化出力)── オイルの銘柄を商品の一覧に当てる、気づいたことを提案の項目に分ける ▼ Python ── 作業の履歴の台帳への追記、店長への確認の一覧 ▼ 【店長が印の付いた票だけ確かめる】 ▼ Python ── 月に1回、次回の案内の一覧
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence(レイアウト モデル)、AWS Textract(英文の書類に限る。日本語の受付票には使えない) |
| 生成AI | Claude API(銘柄の当て方と気づいたことの分け方。構造化出力) | OpenAI API、Gemini API |
| 連携 | Python(読み取りの呼び出し、顧客の台帳の参照、履歴への追記) | Google Apps Script |
| 集計 | Python(案内の時期の判定と一覧) | Google Apps Script |
| 保管 | 本部の共有フォルダ(票の画像、作業の履歴の台帳、案内の一覧) | Google ドライブ |
顧客の台帳と商品の一覧は、いま使っているものです。 足すのは2つです。4店の顧客の台帳を1つにまとめ、お客様の行と車の行を分けることと、案内の決まりの表(作業の種類ごとに、何か月後・溝が何ミリを下回ったら、どの文面で案内するか)です。1人のお客様が2台の車を持っていることも、家族で1台を乗っていることもあるので、お客様と車は別の行にします。
土台は Document AI の Form Parser です。 公式の説明では、Form Parser はキーと値のペア、表、チェックボックスを取り出します。公式のプロセッサ一覧では、日本語(ja)は手書きに対応する言語に入っています。受付票の上の欄はキーと値のペア、作業の欄と案内の希望はチェックボックス、空気圧と溝の深さは4本のタイヤの表として読みます。
処理する場所に、日本のリージョンはありません。 Form Parser の対応リージョンは us・eu、シンガポール(asia-southeast1)などです。票にはお客様の名前・電話番号・車両番号が載ります。国外で処理することを、会社の個人情報の扱いの決まりと、お客様に示している利用の目的に照らして整理します。
03どうやって実装するのか
処理の起点を決める
毎晩22時に、Python の処理が動きます。 動かす先は本部のパソコンで、Windows のタスクスケジューラのような決まった時刻に処理を呼ぶ仕組みで足ります。4店の閉店の作業が終わった後に動き、翌朝には店長への確認の一覧ができています。
スキャンは、閉店の作業のときに店の担当が行います。その日の控えをまとめて複合機に入れ、1枚1ページのPDFにして、店ごとの受付の場所に保存します。 ファイル名の先頭に日付と店の名前を付けます。受付票は複写式の控えなので、文字が薄くなりやすく、複合機の濃さの設定を一段濃くしておきます。
処理の終わった票は月ごとのフォルダへ移し、移すのは履歴の台帳に行を足し終えたときだけにします。 受付の場所に残っている票が、そのまま履歴に入っていない作業です。
案内の一覧は、月の初めに別の処理で作ります。 前の月の終わりまでに履歴に入った行が対象です。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 受付票の画像 | 日付、店、受付の担当、お客様の名前、電話番号、車両番号、車種、走行距離。作業のチェック(洗車のコース、オイル交換、エレメント、タイヤの点検、履き替え)。オイルの銘柄と量。4本のタイヤの空気圧と溝の深さ。気づいたこと。案内の希望 | 受付の場所 |
| 読み取り結果 | キーと値のペア、表の行とセル、チェックボックスの状態、文字の位置 | Document AI |
| 顧客の台帳 | お客様の行(名前、電話番号、案内の希望と、その希望を受けた日)、車の行(車両番号、車種、持ち主のお客様) | 本部の表計算ファイル |
| 商品の一覧 | オイルの品番、銘柄、粘度、略し方 | 本部の表 |
| 案内の決まりの表 | 作業の種類ごとの月数・溝の深さのしきい値、案内の文面の種類 | 店長と本部で決める表 |
質を決めるのは、顧客の台帳の電話番号の列です。 車両番号は読み違えやすいので、車両番号と電話番号の下4桁の両方が合ったときだけ、車を決めます。 片方しか合わないときは、候補として店長に回します。
車両番号は、4つの部分に分けて書く様式にします。 地名、分類番号(3桁の数字)、かな1文字、一連番号です。1つの欄に続けて書くと、どこまでが地名でどこからが番号かを読み取りで分けられません。 4つの欄に分ければ、部分ごとに書式を確かめられます。
生成AIに渡すのは、オイルの銘柄の欄と気づいたことの欄の文字だけです。 お客様の名前、電話番号、車両番号は渡しません。
データの取得方法を決める
読み取りは、Python から Document AI の REST の process のメソッドを呼び、PDFを base64 にした内容を送ります。1枚ずつ送り、結果を票ごとに保存します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 日付・店・名前・電話番号・車両番号・車種・走行距離 | pages[].formFields の fieldName と fieldValue | お客様と車を決める |
| 作業のチェック | formFields の fieldValue の valueType | 作業の種類 |
| 4本の空気圧と溝の深さ | pages[].tables[] の bodyRows | 測った値の履歴 |
| 案内の希望 | formFields の fieldValue の valueType | 案内を出すか、どの方法か |
| 文字の位置 | textAnchor | 疑いのある欄の画像の切り出し |
チェック欄は、印の有無を値で受け取ります。 公式の説明では、印の付いたチェックボックスは fieldValue の valueType が filled_checkbox、付いていないものは unfilled_checkbox で返ります。案内の希望で「はがき」と「不要」の両方に印があれば、案内を出さない側に倒し、 店長の確認に回します。
丸で囲む選び方は使いません。 公式の説明では、Form Parser のチェックボックスのモデルはラジオボタンの読み取りに対応していません。 いまの受付票で洗車のコースを丸で囲んでいれば、四角のチェック欄に変えます。 また、公式の説明では、キーの無いチェックボックスが検出されることもあるとされています。欄の横の文字をはっきり印刷し、どの欄の印かが分かるようにします。
溝の深さの表は、セルを結合しない様式にします。 公式の説明では、Form Parser の表の取り出しは行や列をまたぐセルの無い表が対象です。前・後ろ、左・右の4行に、空気圧と溝の深さの2列を置きます。空いたセルは、測っていないものとして扱います。 公式の説明では、Form Parser は値の入っていないキーと値のペアを確実には読めないとされているので、空を「0ミリ」とは扱いません。
AIへ渡す前に整形する
- 1枚1ページへの分割 … まとめてスキャンしたPDFを1枚ずつに分けます。公式のプロセッサ一覧では、Form Parser の同期の処理は1回15ページまでです
- 向きの確認 … 逆さに入った票は、向きを直してから送ります
- 車両番号の書式の確かめ … 分類番号が数字3桁以内、かなが1文字、一連番号が4桁以内かを見ます
- 電話番号の書式の確かめ … 数字の桁の数が電話番号として成り立つかを見ます
- 走行距離の確かめ … 同じ車の前回の値より小さければ印を付けます
- 溝の深さの確かめ … 同じ車の前回の値より大きく増えていれば印を付けます(タイヤを替えた場合を除く)
- 作業の種類の確かめ … 作業の欄にどれも印が無い票は、決めずに確認に回します
5番目と6番目が、読み違いと車の取り違いを拾う確かめです。 走行距離が前回より減っている、溝が前回より深くなっている、どちらも、ふつうは同じ車では起きません。 読み違えたか、別の車の履歴に当てているかのどちらかです。直さずに印を付け、店長に回します。
車両番号を規則で直すことはしません。 「さ」を台帳にある「き」に直すと、本当に別の車だったときに、2台の履歴が1つに混ざります。 混ざった履歴を後から分けるのは、分かれた履歴をつなぐより手間がかかります。
AIに処理させる
お客様と車の当てはめ、測った値の確かめ、案内の時期の判定は、Python の規則で行います。 生成AIには、商品の一覧の略し方で決まらなかったオイルの銘柄を候補に当てる仕事と、気づいたことの欄を提案の項目に分ける仕事だけを渡します。
| 規則で見るもの | 印を付ける条件 |
|---|---|
| 車 | 車両番号と電話番号の下4桁の両方が合う車が1台に決まらない |
| 新しいお客様 | どちらも台帳に無い |
| 走行距離 | 同じ車の前回より小さい |
| 溝の深さ | 履き替えが無いのに前回より大きく増えた |
| 作業の種類 | どの作業にも印が無い |
| 案内の希望 | 2つ以上に印、または欄が読めない |
| 生成AIにさせること | 中身 |
|---|---|
| オイルの銘柄の当て方 | 商品の一覧から候補を最大3つ、根拠にした語とともに返す |
| 決まったかの区別 | 候補が1つで、銘柄と粘度の両方が一覧の語と同じときだけ matched |
| 気づいたことの分け方 | ワイパー、バッテリー、ブレーキの警告、ライト、冷却水、その他に分け、根拠の語を写す |
気づいたことは、提案の材料として分けるだけです。 「バッテリー弱め」と書かれていても、交換が要るかは書かせません。 受付の担当がその場で見た印象を、次の来店で確かめるきっかけとして残します。
| させないこと | 理由 |
|---|---|
| 車とお客様の決めつけ | 似た番号の車が並ぶ。決まらなければ店長へ |
| 測った値の補正 | 疑いの印を付け、次の来店で測り直す |
| 交換が要るかの判断 | 店の担当が車を見て決める |
| 案内の時期の計算 | 案内の決まりの表から Python が出す |
| 案内の文面の作成 | 文面は本部が決めた種類から選ぶ |
4行目が起きやすい失敗です。 生成AIに履歴を渡して「次の案内はいつか」と聞くと、一般に言われる交換の目安をもとに、それらしい時期を答えます。 店の決まりと違う時期で案内が出ると、店長が説明できません。時期は規則で出します。
指示内容を固定する
あなたはガソリンスタンドの受付の補助です。
作業の受付票に書かれた「オイルの銘柄」の欄を、商品の一覧に当ててください。
あわせて、「気づいたこと」の欄の文を、提案の項目に分けてください。
【渡すもの】
- オイルの銘柄の欄の文字と、量の欄の文字
- 商品の一覧:品番、銘柄、粘度、略し方
- 気づいたことの欄の文
【銘柄の当て方】
- 銘柄と粘度(0W-20 など)の両方が、一覧の銘柄か略し方と同じ語で書かれていて、
候補が1つなら status を matched に。
- 粘度が書かれていない、または候補が2つ以上なら status を candidates にし、
候補を最大3つ返す。
- 粘度の違う品番を同じものとして扱わない。
- 候補ごとに、根拠にした語を evidence に写す。
【気づいたことの分け方】
- wiper、battery、brake_warning、light、coolant、other に分ける。
1つの文に複数あれば複数返す。
- 書かれた語を evidence にそのまま写す。
- 交換や修理が必要かどうか、危険かどうかを書かない。
【厳守事項】
- 一覧に無い品番を返さない。書かれていない粘度を補わない。
- 量の数字を書き換えない。読めない文字は「?」のまま残す。
- 次回の交換の時期について何も書かない。
【オイルの銘柄】{oil_text}
【量】{oil_volume}
【商品の一覧】{oil_master}
【気づいたこと】{notes}
「粘度の違う品番を同じものとして扱わない」を明記しないと、銘柄が合えば粘度の違う品番を選びます。 同じ銘柄でも粘度が違えば別の商品で、次の来店のときに前回と同じオイルを入れようとして、違うものを用意することになります。
構造化出力で、答えの形を固定します。 公式の説明では、Claude API の構造化出力は output_config.format に type: "json_schema" でスキーマを渡し、オブジェクトには additionalProperties: false が要ります。status と提案の項目は enum で決まった値に限ります。
出力形式を固定する
{
"oil": {
"status": "candidates",
"candidates": [
{ "code": "OIL-A020", "name": "銘柄A 0W-20", "evidence": "A 0W20" },
{ "code": "OIL-A520", "name": "銘柄A 5W-20", "evidence": "A" }
]
},
"notes": [
{ "kind": "wiper", "evidence": "ワイパーゴム 運転席側 ビビり" },
{ "kind": "battery", "evidence": "バッテリー弱め" }
]
}
Python は、この JSON と規則の結果を合わせて、作業の履歴の台帳に1行を足します。
| 履歴の列 | 入る値 | 出どころ |
|---|---|---|
| 日付・店・受付の担当 | 票の値 | 読み取り |
| お客様・車 | 当てはめた行の番号。決まらなければ空と候補 | Python |
| 作業の種類 | チェックの付いた作業 | 読み取り |
| オイルの品番・量 | 決まった品番。決まらなければ空と候補 | 一覧とプロンプト |
| 走行距離・4本の空気圧と溝 | 票の値 | 読み取り |
| 提案の項目 | 分けた項目と根拠の語 | プロンプト |
| 確認の印 | 印の理由 | Python |
次回の案内の一覧は、履歴と案内の決まりの表から作ります。
【次回のご案内 一覧】 対象月:11月 店:駅前店
お客様 C-01842 車 V-02213(軽 乗用)
理由:オイル交換から6か月(前回 5月12日、銘柄A 0W-20)
希望:はがき → 案内文面:オイル交換のご案内
お客様 C-00377 車 V-00519(普通 乗用)
理由:前輪の溝 前回 3.4mm(決まりの値を下回る)
希望:メール(同意の記録 2026-04-02 受付票)→ 案内文面:タイヤ点検のご案内
除外:希望「不要」 41件/希望の欄が読めない 3件(店長確認待ち)
除外の件数を一覧の末尾に必ず書きます。 案内を出さなかった理由が分かれば、店長が希望の欄の書き方を受付の担当と見直せます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 4店の受付の場所 | 毎晩の処理が読む | 未処理の票を集める |
| Document AI | REST の process | 票を読み取る |
| 顧客の台帳・商品の一覧・案内の決まりの表 | ファイルの読み取り | 当てはめと案内の元 |
| Claude API | REST | 銘柄の当て方と気づいたことの分け方 |
| 作業の履歴の台帳 | ファイルへの追記 | 日々の行 |
| 案内の一覧 | ファイルの作成 | 本部の担当と店長が使う |
案内は仕組みから送りません。 一覧を本部の担当が見て、はがきの宛名の印刷やメールの送信をいまの方法で行います。メールでの案内は、特定電子メールの送信の適正化等に関する法律で、あらかじめ送信に同意した人などに限られます。 法律は、同意を受けた送信者に、同意があったことを証する記録の保存も求めています。受付票の希望の欄の画像と受けた日を、その記録として台帳に残します。
顧客の台帳の新しいお客様の行は、店長が作ります。 仕組みは候補を示すだけで、台帳にお客様を足すかどうかは店長が票を見て決めます。 同じお客様が2行になるのを防ぐためです。
給油のPOSには書き込みません。 給油の会員カードの番号を受付票に書く欄を設ければ、後からPOSの会員とつなぐことはできますが、最初はつなぎません。 つなぐ前に、お客様にどこまでの情報を結び付けると示しているかを確かめます。
人が確認する
店長は、毎朝の確認の一覧だけを見ます。
- 車の決まらない票を先に見る … 候補の車の前回の票の画像と並べ、同じ車かを確かめます。分からなければ、次の来店のときにお客様に確かめます
- 新しいお客様らしい票を見る … 台帳に足すかを決めます
- 測った値の疑わしい票を見る … 切り出した欄の画像を見て、読み違いか書き違いかを確かめます
- 案内の希望の欄が読めない票を見る … 画像で確かめ、分からなければ「出さない」のままにします
4番目は、決まらなければ出さない側に置いたままにします。 希望していたかもしれないお客様に1回案内が届かないことより、断ったお客様に届くことのほうが重いからです。
直したときは、直した人と理由を履歴の行に残します。 票の画像はそのまま残します。
目標は、1,200件をならして1件0.5分です。 印の付く票が1日に数件という想定で、それより多い週は、受付票の書き方を受付の担当と見直します。
例外に対処する
| 起きること | 対応 |
|---|---|
| 複写の控えが薄くて読めない | 読み取りの結果が空なら、店長に元の票を見てもらう |
| 車両番号の欄が空 | 電話番号だけで候補を出し、車は決めずに確認に回す |
| 1台の車を2人が持ち込む | 車の行は1つのまま、持ち込んだお客様を票ごとに残す |
| 車を買い替えた | 新しい車の行を作り、古い車の行には「手放した」の印を付ける |
| 案内の希望が変わった | 新しい票の希望で上書きし、変わった日を残す |
| Document AI が応答しない | 受付の場所に残し、翌晩に再び読む |
5行目は、新しい票が古い希望より強い、という決まりです。 「不要」から「はがき」に変わったときも、変わった日と票の画像を残しておけば、後から聞かれても説明できます。
記録を残す
- 票の画像と、スキャンした日時・店
- Document AI が返した JSON の全文と、使ったプロセッサの版
- 当てはめの結果、生成AIの当て方と分け方、そのとき参照した案内の決まりの表の版
- 店長が直した記録 … どの値を、何から何に、なぜ直したか
- 案内の希望と、その希望が書かれた票の画像と日付
- 月ごとの案内の一覧と、実際に出した案内の日付と方法
5つ目は、メールの案内の同意の記録として残します。 一覧を作るたびに参照し、「いつ、どの票で希望を受けたか」が1行で引けるようにしておきます。
04実装レベルの3段階
半自動化で、1件3分が0.5分になります。この段階が本記事の想定です。 台帳でお客様を探す作業、作業と測った値の写し、案内の宛先を拾う作業が無くなり、店長は印の付いた票を見るだけになります。 本格構成は、同意の記録の運用がそろってからにします。 希望の欄と同意の記録が台帳に安定して残るようになる前に送信の準備まで自動にすると、断ったお客様に案内が届く経路を、仕組みが作ってしまいます。 半自動化の間に、2つの数を毎週数えておきます。 車が決まらずに店長へ回った票の数と、希望の欄が読めなかった票の数です。前者が減らなければ車両番号の欄の書き方を、後者が減らなければ希望の欄の印の付け方を、受付の担当と見直します。 どちらも仕組みではなく受付票の書き方で減ります。
05工数削減シミュレーション
導入後 1,200件 × 0.5分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 給油に加えて洗車・オイル交換・タイヤの点検と交換を受け、作業の受付を紙の複写式の受付票で行っている、数店舗を持つガソリンスタンドの運営会社。受付票が店の箱にたまり、どのお客様にいつ何をしたかを票をめくって探している場合。次回のオイル交換やタイヤの相談の案内を出したいが、時期の来たお客様を拾い出す手が回らない場合。
- 作業の受付をすでにタブレットやPOSの画面で入れ、お客様ごとの履歴が自動で残っている店。給油だけで作業の受付がほとんど無い店。案内をまったく出さない方針の店。なお、タイヤやバッテリーの交換が要るかの判断、作業の安全の確認、値引きや提案の内容の決定は、この構成では代替できません。
07最小構成で試す方法
- 先月の控えから30枚を選ぶ(車両番号の読みにくい票と、案内の希望の欄に書き込みのある票を入れる)
- その30枚について、顧客の台帳に写した行を出しておく
- 票の画像からお客様の名前と電話番号を黒く塗り、手元のAIサービスの画面に1枚ずつ貼り付ける
- 「この受付票の、車両番号(地名・分類番号・かな・一連番号)、作業のチェック、オイルの銘柄と量、4本の空気圧と溝の深さ、案内の希望を表で書き出してください。読めない文字は『?』にし、補わないでください」と指示する
- 出てきた表を、台帳に写した行と1行ずつ突き合わせる
30枚は必ずやってください。 組む前に、「複写の控えの手書きが読めるか」と「チェック欄の印が読み分けられるか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 車両番号と作業が台帳と合った | Form Parser と台帳の連携に進む |
| 読めない文字をそれらしく補った | 指示の書き方で直る。構成は有効 |
| 丸で囲んだ洗車のコースが読めない | 様式が先。 四角のチェック欄にする |
3行目は失敗ではありません。 いまの受付票が、人には読めても読み取りには向かないことが分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 車両番号の地名と番号が分けられない | 4つの欄に分けて書く様式にする |
| 洗車のコースの丸囲みが読めない | ラジオボタンは読めない。 四角の欄にする |
| 複写の控えの文字が薄い | 複合機の濃さを一段濃くする |
| 空いた溝の欄が0ミリになる | 空は測っていないとして扱う |
| 似た番号の別の車に履歴が付く | 車両番号と電話番号の下4桁の両方で決める |
| 車両番号を台帳の番号に寄せて直す | 直さない。 疑いの印を付けて聞く |
| 生成AIが交換の時期を答える | 時期は案内の決まりの表から規則で出す |
| 希望の欄が読めないのに案内を出す | 読めなければ出さない側に置く |
上の4行は、受付票の様式から出る失敗です。 直すのは仕組みより先に、票です。
下の4行は、決めきれないものを決めてしまうことから出る失敗です。 車も時期も希望も、決まらなければ人に回す、または出さないという側に倒しておけば、誤った案内は届きません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: お客様の名前と電話番号、車両番号と車種、走行距離、作業の履歴、案内の希望です。
- 国外のリージョンで処理することを整理する … Form Parser の対応リージョンに日本はありません。会社の個人情報の扱いの決まりと、お客様に示している利用の目的に照らしてから本番の票を回します
- 案内に使うことを、お客様に示す … 受付票の希望の欄の近くに、作業の履歴を次回の案内に使うことを書いておきます
- メールの案内は同意のあるお客様だけにする … 特定電子メールの送信の適正化等に関する法律は、広告や宣伝のメールの送信を、あらかじめ同意した人などに限っています。同意の記録として、希望の欄の画像と日付を残します
- 生成AIに渡す範囲を絞る … オイルの銘柄と気づいたことの欄の文字、商品の一覧だけを渡し、名前・電話番号・車両番号は渡しません
- 交換が要るかを仕組みで決めない … 気づいたことと測った値は、次の来店で確かめるきっかけです。交換を勧めるかは、車を見た店の担当が決めます
5つ目は、案内の文面にも効きます。 「交換が必要です」と書くのではなく、「前回の点検で溝の深さが○ミリでした。点検にお立ち寄りください」と、測った事実だけを書く文面にします。
誤りが起きた場合のリスクは、別のお客様の履歴で案内を出すことと、断ったお客様に案内を出すことの2つです。 前者は車を決めつけると起き、後者は希望の欄を読めないまま使うと起きます。どちらも、決まらないものを人に回し、出さない側に倒すことで防ぎます。
10まず何から始めるか
1週目:様式を直す
受付票の車両番号を4つの欄に分け、洗車のコースと作業の欄を四角のチェック欄にします。案内の希望の欄(はがき/メール/不要)と、案内に使うことの一文を入れます。
2週目:30枚で試す
先月の控えを30枚選び、名前と電話番号を塗ったうえで手元のAIサービスで読み取らせます。読めない文字をそれらしく補っていないかを最優先で見ます。
3週目:台帳をまとめ、案内の決まりを決める
4店の顧客の台帳を1つにし、お客様と車の行を分けます。店長と本部で、作業の種類ごとに何か月後・溝が何ミリで案内するかを決めて表にします。国外で処理することの扱いも、この週に決めます。
4週目:毎晩の処理から履歴までをつなぐ
Python で受付の場所を読み、Form Parser を呼び、お客様と車に当てて履歴の台帳に行を足すところまで作ります。この時点では店長のいまの台帳と並べ、同じ車に同じ作業が入っているかを見ます。
2か月目: 月に1回の案内の一覧を足し、本部の担当が案内を出し始めます。3か月目以降: 1件3分が何分になったかを実測します。案内の一覧から来店したお客様が、店長の記憶に頼っていたころより増えたと分かった時点で、この構成は運用に乗ったと言えます。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Form Parser の言語の表で、日本語(ja)が手書きに対応とされていること。Form Parser の同期の処理が15ページまでであること。対応リージョンが us・eu・asia-southeast1 などで、日本が含まれないこと | Google Cloud: Processor list | 2026-10-28 |
| Form Parser がキーと値のペア・表・チェックボックスを取り出すこと。表の取り出しが行や列をまたぐセルの無い表に限られること。チェックボックスのモデルがラジオボタンに対応しないこと。キーの無いチェックボックスが検出されうること。値の入っていないキーと値のペアを確実には読めないこと | Google Cloud: Form Parser | 2026-10-28 |
フォームの項目が formFields の fieldName と fieldValue で返ること。チェックボックスの状態が valueType に filled_checkbox/unfilled_checkbox で返ること。表が headerRows と bodyRows で表されること。文字の位置が textAnchor で示されること | Google Cloud: Handle the processing response | 2026-10-28 |
Claude API の構造化出力を output_config.format に type: "json_schema" で指定すること。オブジェクトに additionalProperties: false が要ること | Claude Platform Docs: Structured outputs | 2026-10-28 |
| 特定電子メール(営業につき広告又は宣伝を行うための手段として送信する電子メール)の送信が、あらかじめ送信に同意する旨を通知した者などに限られること。同意を受けた者が、同意があったことを証する記録を保存しなければならないこと。送信をしないよう求められたときは送信してはならないこと(第2条・第3条) | e-Gov 法令API: 特定電子メールの送信の適正化等に関する法律 | 2026-10-28 |
案内の文面と同意の取り方は、自社の個人情報の扱いの決まりと、必要に応じて専門家に確かめてください。 本記事は上の公式の情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2163)についてのご相談はこちらから。
