ガイド · サービス業の業務
お問い合わせ振り分けのサンプルはテストでどう動くか
実行した受付、重複、リカバリーの5つのケースを、再現できる入力とともに確かめます。ブラウザーのサンプルで証明できることの限界もはっきり示します。
執筆:Fireflax · 読了時間 約8分
確認:Codex — source and implementation review ·
このサンプルは実際に何をしたのか?
2026年10月8日に、架空の Northstar Plumbing のお問い合わせワークフローで、決めておいた5つの流れを確かめました。それぞれの流れを、リポジトリのお問い合わせのルールに対して実行し、さらに別に、ダウンロードできるスターター一式に対しても実行しました。表に記録しているのは、その限られた結果です。お客様の事例でも、本番での信頼性を示す数字でもありません。
テストの範囲
実装ごとに5ケース、合計10回のケース実行です。どちらの実装も5件成功、0件失敗と記録されました。テストはローカルで、Node.js 22.23.2、合成した入力を使い、ネットワークのコネクターなしで実行しました。確かめたのはブラウザーのデモで使っているルールで、実際の受信箱、CRM、メッセージサービスは動かしていません。
入力と期待値は先に決めました。
情報のそろったテストデータは、alex@example.com の Alex Morgan さん、Bristol BS1、1週間ほど水が漏れ続けているキッチンの蛇口についての相談です。情報が足りないテストデータは、sam@example.com の Sam Taylor さんで、地域の記入がなく、メッセージは「Can you help?」だけです。どちらも架空の連絡先です。
重複のケースでは、Alex さんの依頼を、表示名を変え、大文字にし、余分な空白を入れて再送信します。承認の繰り返しのケースでは、すでに承認した返信を置き換えようとします。リカバリーのケースでは、模擬的に失敗させるフラグを明示的に使い、復元を飛ばそうとし、同じ記録を復元してから、あらためて承認します。
| 流れ | 期待値 | 観察した結果 |
|---|---|---|
| 情報のそろった依頼 | Service coordinator 宛ての水道工事のお問い合わせが1件。完了の前に承認が必要。 | 両方の実行で、確認待ち → 完了。記録は1件。確認済みの文章は保持。 |
| 情報の不足 | 地域と作業内容を尋ねる。承認しても、足りない情報が埋まったことにしてはいけない。 | 両方の実行で、確認待ち → 情報待ち。足りない2項目はどちらも保持。 |
| 正規化した重複 | 大文字・小文字や空白だけが違う、同じメールアドレス、地域、メッセージなら、既存の記録を返す。 | 両方の実行で、同じ ID、記録は1件。状態と履歴は変わらず。表示名を変えても一致の判定は変わらなかった。 |
| 承認の繰り返し | 2回目の承認で、完了した返信を置き換えたり、履歴を増やしたりしてはいけない。 | 両方の実行で、完了の状態と承認済みの元の文章は変わらず。 |
| 失敗と復旧 | 止まった記録と下書きを残す。そのまま再承認させない。復元したら、あらためての承認が必要。 | 両方の実行で、停止 → 前回の承認を取り消して確認待ち → 完了。記録は最後まで1件。 |
情報のそろった依頼
期待値: Service coordinator 宛ての水道工事のお問い合わせが1件。完了の前に承認が必要。
観察した結果: 両方の実行で、確認待ち → 完了。記録は1件。確認済みの文章は保持。
情報の不足
期待値: 地域と作業内容を尋ねる。承認しても、足りない情報が埋まったことにしてはいけない。
観察した結果: 両方の実行で、確認待ち → 情報待ち。足りない2項目はどちらも保持。
正規化した重複
期待値: 大文字・小文字や空白だけが違う、同じメールアドレス、地域、メッセージなら、既存の記録を返す。
観察した結果: 両方の実行で、同じ ID、記録は1件。状態と履歴は変わらず。表示名を変えても一致の判定は変わらなかった。
承認の繰り返し
期待値: 2回目の承認で、完了した返信を置き換えたり、履歴を増やしたりしてはいけない。
観察した結果: 両方の実行で、完了の状態と承認済みの元の文章は変わらず。
失敗と復旧
期待値: 止まった記録と下書きを残す。そのまま再承認させない。復元したら、あらためての承認が必要。
観察した結果: 両方の実行で、停止 → 前回の承認を取り消して確認待ち → 完了。記録は最後まで1件。
実行して、ご自身の結果と比べてみましょう。

スターター 1.0.0 をダウンロードして展開し、README に従ってください。含まれているチェックには、期待する状態とアサーションが入っています。node verify.mjs を実行すると、5つのケースすべての入力、期待値、観察した履歴を含む新しいレポートができます。失敗したケースがあると、コマンドは失敗として終了します。
リポジトリのソースでの実行は、今の TypeScript のヘルパーを直接呼び出しました。スターターでの実行は、リポジトリのファイルを読み込まずに、同梱の JavaScript を読み込みました。共通のテスト定義を使っているので比較を再現できますが、この2つの実行は、考えられるすべてのルールが正しいことを別々に証明するものではありません。
パッケージには、別に一時停止の練習もあります。
パッケージのコマンドラインのラッパーは、ローカルファイルへの保存と、一時停止・再開の操作を加えます。11個のコマンドによる練習では、記録を初期化し、失敗を模擬し、一時停止し、止められている復元を試し、再開し、復元し、2回承認し、リセットしました。一時停止中の復元は、意図どおりエラーで終了し、状態は変わりませんでした。再開しても操作が再実行されることはありませんでした。
これは成功した否定のチェックであり、報告していない失敗テストではありません。node cli-check.mjs は一時フォルダーでこの手順を実行し、終わったらそのフォルダーを削除します。これらの CLI の機能は、ブラウザーのデモにはありません。
まだ証明されていないこと
ブラウザーの重複の記憶は、リセット、再読み込み、ワークフローの切り替えで消えます。スターターはローカルファイルに保存しますが、複数人での利用のためのロックや本番用の記録の保存先はありません。メッセージが変われば新しいお問い合わせかもしれません。このキーでは、違う言葉で書かれた2つの依頼が同じ仕事についてのものかどうかは判断できません。
実際に導入するには、依頼と操作の消えない識別子、内容が変わった依頼の扱いの判断、再試行の前の送り先の確認が必要です。これらは追加が必要なものであり、今回のローカルの結果で示した修正ではありません。模擬的な失敗では何も送信しないため、操作は成功したのにその確認が失われた接続のテストにはなっていません。
この5つのケースから、お客様の作業時間の削減、成約率、実際の連携、稼働率、確実に1回だけ届くことは言えません。既存のリポジトリの単体テストでは、別にお問い合わせのヘルパーについて21個のチェックが成功しています。この広いテストは回帰を防ぐのに役立ちますが、21件のお客様での試行でも、21回のブラウザーでの利用でもありません。
出典と確認メモ
Codex とともに作成し、実行した架空のサンプルテスト、ソースコード、Codex による独立したスターターの試行と照らし合わせて確認しました。これらの結果は、実際の連携やお客様の成果を示すものではありません。
- 保存したブラウザー用ヘルパーのテスト
実際にソースを実行したときの入力、期待値、観察した状態。
- お問い合わせのサンプルを試す
架空の情報で、確認と失敗の流れを再現します。