冷凍・冷蔵ケースの温度の記録を n8n で15分ごとに見回り、逸脱の続き方と過去の対処から、商品の扱いと保守の連絡の要否を店長に知らせる
冷凍・冷蔵ケースの温度の記録を15分ごとに見回り、管理温度を外れた状態がどう続いているかを見分けます。そのケースの過去の対処の記録と並べ、商品の扱いを確かめる必要と保守会社へ連絡する必要があるかを店長に知らせます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Make/n8n/Power Automate
- 対象業界
- 小売/物流/飲食
- 対象部門
- 品質管理
- 対象業務
- 内容確認・チェック/分類・仕分け
- 主な課題
- 判断に時間がかかる/属人化している/期限・対応漏れが起きる
- AIで行う処理
- 判定
- 主な効果
- 判断支援/対応スピード向上/属人化解消
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- ノーコード連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 温度監視サービスから、上限を超えたケースのアラームのメールが店長と副店長に届く
- 店長が手を止めてメールを開き、ケースの名前と温度を確かめる
- 温度監視サービスの画面でそのケースのグラフを開き、いつから上がっているかを見る
- ケースに貼ってある霜取りの時刻表を思い出すか、売場へ見に行く
- 売場で扉の閉まり、冷気の吹き出し口のふさがり、商品の積みすぎを見る
- 戻りそうになければ、手書きの記録簿でそのケースの前の不具合を探す
- 商品を別のケースかバックヤードへ移すか、そのまま様子を見るかを決める
- 保守会社に連絡するかを決め、連絡するなら電話をかける
- 記録簿に時刻と温度と対処を書く
- 自動n8n が15分ごとに動き、温度監視サービスから全店・全ケースの直近3時間の記録を取り出す
- 自動ケース台帳(管理温度の上限、霜取りの時刻表、冷凍か冷蔵か)と記録を突き合わせる
- 自動ケースごとに、上限を外れている時間の長さ、上がり方の傾き、霜取りの時間帯か、同じ店の他のケースも上がっているか、記録が途切れていないかを計算する
- 自動社内の基準で「店長に知らせる段階」を数字で決める。霜取りの時間帯の中で戻っているものは知らせない
- 自動知らせる段階のケースについて、AIがそのケースの過去の対処の記録と並べて、逸脱の型と、商品の確認・保守の連絡の要否を判定する
- 自動AIの判定が規則の段階より軽くなっていないかを検査する
- 自動店長の Teams に、ケース・温度・続き方・型・過去の似た件・確かめることを送り、対処の回答を待つ
- 人店長が売場で確かめ、商品の扱いと保守への連絡を決めて、回答の欄に入力する
- 自動回答を対処の記録に足す。決めた時間内に回答が無ければ副店長と品質管理部に知らせる
各工程の詳しい説明を読む
- 温度監視サービスから、上限を超えたケースのアラームのメールが店長と副店長に届く
- 店長が手を止めてメールを開き、ケースの名前と温度を確かめる
- 温度監視サービスの画面でそのケースのグラフを開き、いつから上がっているかを見る
- ケースに貼ってある霜取りの時刻表を思い出すか、売場へ見に行く
- 売場で扉の閉まり、冷気の吹き出し口のふさがり、商品の積みすぎを見る
- 戻りそうになければ、手書きの記録簿でそのケースの前の不具合を探す
- 商品を別のケースかバックヤードへ移すか、そのまま様子を見るかを決める
- 保守会社に連絡するかを決め、連絡するなら電話をかける
- 記録簿に時刻と温度と対処を書く
(a)アラームが多すぎて、本物が埋もれる。 1番のメールは、霜取りでも故障でも同じ文面で届き、何通も受け取るうちに開かなくなります。
(b)霜取りか故障かの見分けが、店長の経験頼み。 いつもの上がり方を知っているのは、そのケースを長く見てきた人だけです。 霜取りの時刻表とグラフを並べて見る仕組みもありません。
(c)前の不具合が探せない。 6番の記録簿は手書きで、ケースごとに分かれていません。
(d)保守への連絡が遅れる。 様子を見ているあいだに温度が戻らず、保守会社に電話したのは上がり始めてから数時間後、ということが起きます。商品を移すか廃棄するかの判断が、後手に回ります。
- 【自動】 n8n が15分ごとに動き、温度監視サービスから全店・全ケースの直近3時間の記録を取り出す
- 【自動】 ケース台帳(管理温度の上限、霜取りの時刻表、冷凍か冷蔵か)と記録を突き合わせる
- 【自動】 ケースごとに、上限を外れている時間の長さ、上がり方の傾き、霜取りの時間帯か、同じ店の他のケースも上がっているか、記録が途切れていないかを計算する
- 【自動】 社内の基準で「店長に知らせる段階」を数字で決める。霜取りの時間帯の中で戻っているものは知らせない
- 【自動】 知らせる段階のケースについて、AIがそのケースの過去の対処の記録と並べて、逸脱の型と、商品の確認・保守の連絡の要否を判定する
- 【自動】 AIの判定が規則の段階より軽くなっていないかを検査する
- 【自動】 店長の Teams に、ケース・温度・続き方・型・過去の似た件・確かめることを送り、対処の回答を待つ
- 【人】 店長が売場で確かめ、商品の扱いと保守への連絡を決めて、回答の欄に入力する
- 【自動】 回答を対処の記録に足す。決めた時間内に回答が無ければ副店長と品質管理部に知らせる
4番目が、この設計の分かれ目です。 何分外れたら知らせるかは、AIではなく規則で決めます。 通知の数を減らすのも規則の仕事です。
5番目でAIが見るのは、数字ではなく形と過去です。 同じ「60分外れている」でも、霜取りの戻り遅れか冷えの落ち方かで、店長が売場でまず見る場所が違います。 8番目は省けません。 商品の扱いは店長が決めます。
02今回想定するシステム構成
【トリガー】15分ごと(Schedule Trigger、時間帯は Asia/Tokyo) ▼ n8n ├─ HTTP Request ── 温度監視サービスの API(全ケースの直近3時間の記録) ├─ Data Table ── ケース台帳(上限、霜取りの時刻表、店、種類) ├─ Code ── 外れている時間、傾き、霜取りの時間帯、同じ店の他のケース、途切れ ├─ Code ── 社内の基準で知らせる段階を決める(notify_level) ├─ Data Table ── そのケースの過去の対処の記録(直近10件) ▼ Basic LLM Chain + Anthropic Chat Model + Structured Output Parser │ 逸脱の型、商品の確認・保守の連絡の要否、似た過去の件 ▼ Code ── 規則の段階より軽くなっていないかの検査 ▼ Microsoft Teams ── 店長へ(Chat Message:Send and Wait for Response、Custom Form) ▼ Data Table ── 対処の記録に回答を足す / 回答が無ければ副店長と品質管理部へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | n8n | Make、Power Automate |
| 生成AI | Claude(n8n の Anthropic Chat Model ノード) | OpenAI API、Gemini API |
| 温度の記録 | 既存の温度監視のクラウドサービス(API で記録を取り出せるもの) | センサーから n8n の Webhook へ送る形 |
| 台帳 | n8n の Data Table(ケース台帳、逸脱の記録、対処の記録) | Google スプレッドシート、PostgreSQL |
| 通知 | Microsoft Teams(n8n の Microsoft Teams ノード) | Slack、Gmail |
新しく足すのは n8n と、生成AIの利用だけです。 温度センサーと温度監視サービスは今のまま使い、アラームのメールも止めません。
温度監視サービスからの取り出し方は、サービスごとに違います。 API の形と認証はサービスの仕様で決まるので、この部分は個別の実装が要ります。 n8n の HTTP Request ノードは汎用の認証(Basic・ヘッダー・OAuth2 など)に対応し、複数ページの結果は Pagination で取れるとされています。
台帳は n8n の Data Table に置きます。 公式ページでは、外部のデータベース無しにワークフローの間でデータを持てる表で、既定ではインスタンス全体で200MiBまでです。10分ごとの温度の生の値は入れません。 生の値は温度監視サービスに残っています。
03どうやって実装するのか
処理の起点を決める
Schedule Trigger で、15分ごとに動かします。 公式ページでは、Schedule Trigger は分・時間・日などの間隔か cron の式で動き、ワークフローに時間帯が設定されていればそれに、無ければインスタンスの時間帯に従うとされています。自前で置いたインスタンスの既定は America/New York です。霜取りの時刻表は店の時刻で書かれているので、ワークフローの時間帯を Asia/Tokyo にします。 そうしないと、霜取りの時間帯の判定がすべてずれます。
間隔を15分にしているのは、センサーの記録が10分ごとだからです。 5分ごとに見回っても新しい値が無い回が増えるだけで、30分ごとにすると、知らせるのが最大で30分遅れます。 1回の見回りで直近3時間を取り直すので、前の回で取れなかった値も次の回で拾えます。
ワークフローは保存して公開(publish)しておく必要があります。 また、取りこぼした実行の既定は「動かさない」です。n8n が止まっていたあいだの回は動かないので、毎回直近3時間を取り直す設計で埋めます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 温度の記録 | ケースごとの10分ごとの温度、記録の時刻、センサーの状態(電池・通信) | 温度監視サービスの API |
| ケース台帳 | ケースID、店、種類(冷凍・冷蔵・ウォークイン)、管理温度の上限、霜取りの時刻表と1回の長さ、設置の年、保守会社 | Data Table |
| 店の営業の情報 | 開店・閉店の時刻、品出しが多い時間帯 | Data Table(ケース台帳に店ごとの列) |
| 逸脱の記録 | いま続いている逸脱(ケース、始まった時刻、最初に知らせた時刻、店長の回答) | Data Table |
| 対処の記録 | そのケースの過去の逸脱の型、原因、店長の対処、保守会社の所見 | Data Table |
| 社内の基準 | 種類ごとに、何分外れたら店長に知らせるか、何分で商品を確かめるか | 衛生管理計画から写した表 |
質を決めるのは、霜取りの時刻表と、社内の基準の表です。 厚生労働省のページでは、令和3年6月1日から、原則として、すべての食品等事業者がHACCPに沿った衛生管理に取り組むとされています。その衛生管理計画の温度の値を、種類ごとの数字の表に写すのが最初の準備作業です。
対処の記録は、最初は空です。 記録簿から直近半年で保守会社を呼んだ件だけを入れれば足ります。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 直近3時間の温度の記録 | HTTP Request で温度監視サービスの API | 続き方の計算 |
| ケース台帳と社内の基準 | Data Table ノードで取得 | 上限と霜取りの時間帯 |
| いま続いている逸脱 | Data Table ノードで取得 | 同じ逸脱を二度知らせない |
| 過去の対処の記録 | Data Table ノードで、ケースIDで絞って取得 | AIに渡す過去の件 |
Data Table の値は、Code ノードから直接は読めません。 公式ページでは、Code ノードは組み込みの方法や変数で Data Table の値に直接アクセスできないとされています。先に Data Table ノードで取り出し、その結果を Code ノードへ渡す順にします。
温度の記録は、全店・全ケースを1回で取ります。 件数に上限があれば Pagination で続きを取り、利用回数に上限があれば Batching で呼び出しの間を空けます。
応答の状態を必ず見ます。 既定では2xx以外は失敗になり、「Never Error」を有効にすると状態に関係なく成功として扱われます。状態を見ないと、温度監視サービスが止まっていても「逸脱なし」と読みます。 Include Response Headers and Status を有効にし、2xx以外は「記録が取れない」として品質管理部に知らせます。
AIへ渡す前に整形する
- 途切れの検出 … 直近30分に記録が無いケースは、温度の判定をせずに
staleの印を付けます - 上限との比較 … 記録ごとに、ケースの管理温度の上限を超えているかを見ます
- 続いている長さ … 直近の連続して超えている記録の数から、外れている分数を出します
- 霜取りの時間帯 … 時刻表の開始から「1回の長さ+戻りの猶予」のあいだにあるかを見ます
- 傾き … 直近60分の温度の上がり方(10分あたり何度)を出します
- 同じ店の他のケース … 同じ店で同じ時刻に上限を超えているケースの数を数えます
- 段階の決定 … 社内の基準の表で、
none/watch/notify/urgentを決めます
1番目を最初に置くのは、記録が無いことと温度が正常なことを分けるためです。 電池が切れて止まった記録の最後の値が正常なら、そのまま「正常」と読んでしまいます。
7番目の段階は、規則だけで決めます。 霜取りの時間帯の外に上限を2回続けて超えたら watch、決めた分数を超えたら notify、さらに長く続くか同じ店の3台以上が同時なら urgent、のように衛生管理計画の値で表を作ります。 分数は各社で決めるもので、本記事では置きません。AIに渡すのは notify と urgent だけです。
6番目は、AIに頼らず数えます。 同じ店の複数のケースが同時に上がっているなら、冷凍機・電源・空調の側を疑う材料になります。
AIに処理させる
Basic LLM Chain に、逸脱の型と、店長が確かめる必要と保守へ連絡する必要の判定をさせます。 公式ページでは、Basic LLM Chain はモデルに渡すプロンプトを決めるノードで、「Require Specific Output Format」を有効にすると、Structured Output Parser などの出力パーサーをつなぐとされています。
| させること | 中身 |
|---|---|
| 逸脱の型 | defrost_recovery_delay(霜取りの戻り遅れ)・door_or_loading(扉・品出し・積みすぎ)・cooling_decline(冷えが少しずつ落ちている)・multi_case(同じ店の複数ケース)・sensor_suspect(センサーの値が不自然)・unclear のどれか |
| 商品の確認の要否 | check_now(いま確かめる)・check_soon(次の見回りまでに確かめる)のどちらか |
| 保守の連絡の要否 | call_now・after_check(売場で見てから決める)・not_needed_yet のどれか |
| 似た過去の件 | 対処の記録のうち、型と時間帯が似ているもののID(無ければ空) |
| 売場で見ること | 型に合わせて、店長がまず見る場所を3つまで |
| 根拠 | 判定に使った数字(外れている分数、傾き、他のケースの数)をそのまま写す |
| させないこと | 理由 |
|---|---|
| 段階を下げる | urgent を notify にしない。段階は規則で決めたもの |
| 商品を販売してよいかの判断 | 決めるのは店長。衛生管理計画の手順に従う |
| 廃棄の指示 | 商品の扱いは店長が売場で確かめてから決める |
| 冷凍機の故障の診断 | 診断は保守会社の仕事。「〜の故障です」と書かない |
| 温度の値の補完 | 途切れた記録を前後の値で埋めない |
| 過去の件の作り話 | 対処の記録に無い原因を「前にもあった」と書かない |
いちばん起きやすいのは4行目です。 過去の記録に「コンプレッサーの不調」と1件あると、AIは「コンプレッサーの故障の可能性が高い」と書きます。 伝わると保守会社の見立てを狭めます。書いてよいのは、前回の所見の写しだけです。
指示内容を固定する
Basic LLM Chain のシステムメッセージに、次のように書きます。
あなたは食品スーパーの品質管理部の担当として、冷凍・冷蔵ケースの温度の逸脱を
店長に知らせる文を作ります。商品の扱いを決めるのは店長です。
【入力】
- ケースの情報(店、ケース名、種類、管理温度の上限、霜取りの時刻表)
- 直近3時間の温度の記録(10分ごと)
- 規則で計算した値:外れている分数、直近60分の傾き、霜取りの時間帯か、
同じ店で同時に上限を超えているケースの数
- 規則で決めた段階(notify / urgent)
- このケースの過去の対処の記録(直近10件。無ければ空)
【逸脱の型の選び方】
- defrost_recovery_delay:霜取りの時刻表の直後から上がり、傾きが小さくなっている
- door_or_loading:品出しの時間帯に急に上がり、急に下がる動きをくり返している
- cooling_decline:霜取りと関係なく、数時間かけて少しずつ上がっている
- multi_case:同じ店で同時に上限を超えているケースが3台以上
- sensor_suspect:10分で数度以上跳ねて戻るなど、ケースの温度として不自然
- unclear:上のどれとも言えない
迷ったときは unclear を選び、無理に型を決めないでください。
【厳守事項】
- 規則で決めた段階は変えないでください。urgent のときは、
product_check を check_now、maintenance_call を call_now か after_check にしてください。
- 商品を販売してよいか、廃棄するかは書かないでください。
- 「故障です」「〜が原因です」と断定しないでください。
過去の対処の記録にある原因は「前回(日付)の保守会社の所見は〜」と記録のまま写してください。
- 過去の対処の記録に無い件を、似た件として挙げないでください。
- 温度の値を補ったり、記録の無い時刻の値を推定したりしないでください。
- evidence には、入力の数字をそのまま写してください。
- 店長への文は3文まで。何が、いつから、どう続いているかを先に書いてください。
「迷ったら unclear」を明記しないと、型を必ず1つに決めます。 型を誤ると、店長が売場で見る場所を誤ります。 unclear のときは「売場で見ること」を一般の順(扉、吹き出し口、積みすぎ、表示の温度)にします。
「段階は変えない」は、ワークフローでも検査します。 過去の記録に「様子見で戻った」が続くと、urgent の件にも check_soon を付けることがあるからです。
出力形式を固定する
Structured Output Parser で、次の形に決めます。 公式ページでは、スキーマは JSON の例から作るか JSON Schema で定義でき、JSON の例から作るとすべての項目が必須として扱われるとされています。また、$ref を使った参照には対応していないとされているので、スキーマは1つの塊で書きます。
{
"case_id": "S12-F07",
"store": "12号店",
"notify_level": "notify | urgent",
"pattern": "defrost_recovery_delay | door_or_loading | cooling_decline | multi_case | sensor_suspect | unclear",
"product_check": "check_now | check_soon",
"maintenance_call": "call_now | after_check | not_needed_yet",
"similar_past_ids": ["R-2026-0811-03"],
"look_at": ["吹き出し口の霜・氷", "霜取りの表示灯", "ケースの表示の温度"],
"evidence": {
"minutes_out": 70,
"slope_per_10min": 0.4,
"in_defrost_window": false,
"same_store_cases_out": 1
},
"message": ""
}
1つ目の理由は、規則の段階とAIの判定を並べて検査できることです。 後段の Code ノードで、notify_level が urgent なのに product_check が check_soon なら、check_now に上書きして記録します。AIの判定が軽くても、店長に届く前に直ります。
2つ目は、similar_past_ids で過去の件を確かめられることです。 Code ノードで、そのIDが対処の記録に本当にあるかを照らします。無いIDが書かれていたら、その欄を空にして「似た件なし」とします。 作り話の過去の件が店長に届くのを止めます。
3つ目は、Teams の通知と記録を同じ形で作れることです。 通知には、ケースといまの温度、続き方の数字、型、過去の似た件(日付・原因の記録・保守会社の所見)、売場で見ること、回答の欄を並べます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 温度監視サービス | HTTP Request(読み取りだけ) | 直近3時間の記録 |
| Data Table | Data Table ノード | ケース台帳、逸脱の記録、対処の記録の読み書き |
| Claude | Anthropic Chat Model ノード | 逸脱の型と要否の判定 |
| Microsoft Teams | Microsoft Teams ノード(Chat Message の Send and Wait for Response) | 店長への通知と回答の受け取り |
| 品質管理部 | Microsoft Teams ノード(Channel Message の Create) | 回答が無い件、記録が取れない件 |
店長への通知は、Teams の Send and Wait for Response で送ります。 公式ページでは、Microsoft Teams ノードの Chat Message には Send and Wait for Response の操作があり、メッセージを送って人の確認や入力までワークフローを止めるとされています。回答の形は Approval・Free Text・Custom Form の3つで、Custom Form では Form トリガーのフォームと同じ要素で欄を作れます。 店長の回答は、商品の扱い(移した/そのまま/販売を止めた)、保守への連絡(した/しない)、気づいたこと(自由記入)の3つの欄にします。
回答の待ち時間に上限を付けます。 Limit Wait Time で、決めた時間か時刻が来たら自動で再開するとされています。urgent は20分、notify は60分を上限にし、回答が無ければ副店長と品質管理部のチャネルに送ります。
温度監視サービスには書き込みません。 設備の霜取りの時刻を変えたら、ケース台帳も同じ日に直します。
人が確認する
店長が見るのは、notify と urgent の件だけです。 watch は逸脱の記録に残るだけで、通知しません。ここで通知が多すぎれば、規則の分数の値を見直します。 AIの判定を緩めて減らすことはしません。
- 型と「売場で見ること」を読んで売場へ行く … 霜取りの戻り遅れなら吹き出し口の霜、扉なら閉まりとすき間、という順に見ます
- 商品の扱いを決める … 衛生管理計画の手順に従い、移す・販売を止める・そのままを決めます。決めるのは店長です
- 保守への連絡を決める …
call_nowでも、売場で原因が明らかに扉なら連絡しないことがあります。その判断を回答の欄に書きます - 回答を入力する … 回答が対処の記録に入り、次の判定の材料になります
4番目を省かないでください。 対処の記録が増えなければ、AIは過去の件を引けないままです。 品質管理部は週に1回、全店の逸脱の記録を見て、何度も cooling_decline になるケースを保守の点検の候補にします。
例外に対処する
| 起きること | 対応 |
|---|---|
| 温度監視サービスが応答しない | 2xx以外は「記録が取れない」として品質管理部に知らせる。逸脱なしとは扱わない |
| ケースの記録が途切れている | stale。温度の判定をせず、センサーの点検として店に知らせる |
| 霜取りの時刻表が無いケース | 霜取りの時間帯の判定をせず、段階を1つ上げて扱う |
| 同じ店の多数のケースが同時に上がる | multi_case。ケースごとに送らず、店ごとに1通にまとめて店長と品質管理部へ |
| AIの出力がスキーマに合わない | 規則の段階と数字だけで通知する。AIの欄は空にする |
| AIが規則より軽い判定を返す | 規則の段階で上書きし、上書きしたことを記録する |
| 存在しない過去の件のIDが書かれる | その欄を空にして「似た件なし」と通知する |
| 店長が時間内に回答しない | 副店長と品質管理部へ同じ内容を送る |
| Data Table の容量が上限に近づく | 古い逸脱の記録を書き出して消す。上限に達すると記録の追加が失敗する |
上から2行目が、最初の数か月でいちばん多い例外です。 途切れを温度の正常と混ぜないことが、この構成の土台です。
最後の行は見落としやすいものです。 容量が80%に近づくと警告が出ます。対処の記録が書けなくなると、店長の回答が消えます。
記録を残す
- 実行ごとに、取り出した記録の件数と、途切れたケースの一覧
- 逸脱の記録(ケース、始まった時刻、段階、AIの判定、通知した時刻)
- AIの判定を規則で上書きした記録 … どの欄を、何から何に変えたか
- 店長の回答(商品の扱い、保守への連絡、気づいたこと)と、回答の時刻
- 保守会社の所見(品質管理部があとから足す)
- 回答が無く副店長と品質管理部へ送った記録
3つ目は、AIの判定の質を測る材料になります。 上書きが多い型は、選び方の指示を直します。
04実装レベルの3段階
最小構成は、確かめるための段階です。 半自動化で、店長はまだ通知を受けません。 品質管理部が一覧を1か月見て、分数と霜取りの時刻表が合っているかを確かめます。本格構成で店長の Teams に届き、この段階が本記事の想定です。 段階を飛ばさないでください。 一覧を見ないまま店長に送ると、時刻表のずれで通知が多すぎ、最初の1週間で読まれなくなります。
05工数削減シミュレーション
導入後 240件 × 12分 ÷ 60 = 48 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 冷凍・冷蔵ケースに温度センサーを付け、記録をクラウドの温度監視サービスに集めている食品スーパー・食品の小売チェーン。温度監視サービスのアラームのメールが多すぎて、霜取りや品出しによる一時的な上昇と、本当に冷えなくなっているケースの区別が店長の経験に頼っている場合。保守会社への連絡が遅れて商品を移す・廃棄する判断が後手に回ったことがある場合。温度監視サービスから記録を API で取り出せる場合。
- 店舗が1〜2店で、温度の記録を店長が目で見れば足りる場合。温度センサーが無く、手書きの温度記録で管理している場合(読み取りの仕組みが別に要る)。温度監視サービスから記録を取り出す方法が無い場合。なお、商品を販売してよいか、廃棄するかの判断と、冷凍機の故障の診断はこの構成では代替できません。
07最小構成で試す方法
- 1店を選び、先月の温度の記録(10分ごと)を温度監視サービスからCSVで書き出す
- 先月、店長が売場へ確かめに行った件を記録簿から10件拾う(うち数件は、保守会社を呼んだ件を入れる)
- ケースごとの霜取りの時刻表と、衛生管理計画の上限を表にする
- 10件それぞれについて、前後3時間の記録と霜取りの時刻表を手元のAIサービスに貼り、「この逸脱は霜取りの戻り遅れ、扉、冷えの落ち方、同じ店の複数ケース、センサーの不自然な値、のどれに近いか。分からなければ分からないと答えて。故障の断定はしないで」と指示する
- 出てきた型を、店長が売場で見た原因と突き合わせる
10件は必ずやってください。 n8n を組む前に、「記録の形から型が見分けられるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 店長が見た原因と型がおおむね合う | n8n で見回りを組む段階に進む |
| 「故障です」と断定する | 指示の書き方で直る。構成は有効 |
| どの件も unclear になる | 霜取りの時刻表が足りない。 台帳の整備が先 |
3行目は珍しくありません。 貼ってある時刻表が実際の運転とずれていることがあり、台帳を設備に合わせる必要が分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 霜取りの時刻が夜中にずれて判定される | ワークフローの時間帯を Asia/Tokyo にする。 自前のインスタンスの既定は America/New York |
| センサーの途切れを正常と読む | 途切れの検出を最初に置き、stale を別の通知にする |
| 温度監視サービスが止まっても「逸脱なし」になる | Never Error を有効にするなら、状態を返す設定を有効にして2xx以外を拾う |
| 通知が多すぎて店長が読まなくなる | 規則の分数を見直す。AIの判定を緩めて減らさない |
| AIが故障の原因を断定する | 「記録のまま写す」を指示に書き、過去の所見だけを引かせる |
| 存在しない過去の件を挙げる | Code ノードで対処の記録と照らし、無いIDは消す |
| Code ノードで Data Table が読めない | Code ノードからは直接読めない。 Data Table ノードで取り出してから渡す |
| Data Table が容量の上限に達する | 既定は全体で200MiB。生の温度を入れず、古い記録は書き出して消す |
| 同じ逸脱を15分ごとに何度も知らせる | 逸脱の記録で、続いている件は段階が上がったときだけ再通知する |
| n8n が止まっていた時間の回が抜ける | 既定では取りこぼした回は動かない。直近3時間を取り直す設計で埋める |
上の3行が、この構成の失敗のほとんどです。 どれも「温度が正しく読めているか」の問題で、AIの問題ではありません。
4行目も早く効いてきます。 通知の数は規則の分数で調整し、AIは型の見分けに専念させます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 店ごとのケースの温度の記録、ケース台帳、店長の対処の記録、店長と副店長の Teams のアカウントです。顧客の個人情報は扱いません。
- AIに渡す範囲を、判定に必要な件と項目までに限る … 全店・全ケースの記録をAIに渡しません。
notifyとurgentの件の、そのケースの直近3時間と過去の対処の記録だけを渡します - 商品の扱いをAIに決めさせない … 販売してよいか、廃棄するかは店長が衛生管理計画に従って決めます。通知の文に「販売可」「廃棄」と書かせません
- 故障の診断をAIにさせない … 原因を断定した通知は、保守会社の見立てを狭めます。書かせるのは過去の所見の写しまでです
- 温度監視サービスの API の認証情報を n8n の資格情報に置く … ワークフローの中に直接書きません。読み取りだけの権限の鍵を使います
- 記録の扱いを決めておく … どれを正式な衛生管理の記録とし、どれだけ残すかを品質管理部が決めます
- 通知を止める判断は品質管理部が持つ … 店ごとに止めず、規則の分数を全店で見直します
誤りが起きた場合のリスクは、冷えが落ちているケースを見逃すことと、通知が多すぎて読まれなくなることの2つです。 前者は途切れを正常と混ぜると、後者は霜取りの時刻表が設備と合わないと起きます。
10まず何から始めるか
1週目:社内の基準を数字の表にする
衛生管理計画を開き、冷凍・冷蔵・ウォークインの種類ごとに、管理温度の上限と、何分外れたら店長に知らせるか、何分で商品を確かめるかを表にします。文章で書かれている部分は、品質管理部で数字に決めます。
2週目:1店で10件を試す
1店の先月の記録を書き出し、店長が確かめに行った10件を手元のAIサービスに貼って、型を見分けさせます。店長が見た原因と合うか、故障を断定していないかを最優先で見ます。
3週目:ケース台帳を作る
試した店の約40台について、霜取りの時刻表と1回の長さ、上限、種類を Data Table に入れます。保守会社の点検の記録があれば、時刻表はそこから写します。
4週目:見回りと段階の決定までをつなぐ
n8n で15分ごとに記録を取り出し、段階を品質管理部の一覧に書くところまで作ります。この時点では店長に送らず、AIも使いません。
2か月目: 型の判定を足して、一覧で1か月見ます。3か月目以降: 試した店の店長の Teams へ通知し、回答を対処の記録に戻します。AIが「前回の所見」を引けるようになった時点で、他の店へ広げます。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 分・時間・日などの間隔と cron の式で動くこと。ワークフローの時間帯が無ければインスタンスの時間帯に従い、自前の既定が America/New York であること。保存と公開が必要なこと。取りこぼした実行の既定が「動かさない」であること | n8n Docs: Schedule Trigger | 2026-10-15 |
| メソッドと汎用の認証の種類。Pagination、Batching(1回の件数と間隔)、Timeout。既定で2xx以外が失敗になり、Never Error で状態に関係なく成功になること。状態と見出しを返す設定 | n8n Docs: HTTP Request | 2026-10-15 |
| Data Table がプロジェクトの中の表形式の保存先であること。既定で全体200MiBまでで、80%で警告、上限で追加・更新を伴う実行が失敗すること。Code ノードから直接値を読めないこと | n8n Docs: Data tables | 2026-10-15 |
| Basic LLM Chain がプロンプトを決めるノードで、Require Specific Output Format を有効にすると出力パーサーをつなぐこと。システムメッセージを置けること | n8n Docs: Basic LLM Chain | 2026-10-15 |
スキーマを JSON の例から作るか JSON Schema で定義すること。例から作るとすべての項目が必須になること。$ref に対応しないこと | n8n Docs: Structured Output Parser | 2026-10-15 |
| Anthropic Chat Model ノードの設定(最大トークン数、温度など)と資格情報 | n8n Docs: Anthropic Chat Model | 2026-10-15 |
| Chat Message に Send and Wait for Response があり、回答の形が Approval・Free Text・Custom Form であること。Limit Wait Time で時間か時刻で再開すること。Channel Message の Create | n8n Docs: Microsoft Teams node | 2026-10-15 |
| 令和3年6月1日から、原則としてすべての食品等事業者がHACCPに沿った衛生管理に取り組むこと。業種別の手引書があること | 厚生労働省: HACCP(ハサップ) | 2026-10-15 |
管理温度の値と、何分外れたら商品を確かめるかは、自社の衛生管理計画で決めてください。 本記事は値を置いていません。温度監視サービスの API の仕様は、利用しているサービスの資料で確かめてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1654)についてのご相談はこちらから。
