SaaS 企業が販売代理店から届く案件登録の申請を Make で受け、既存の登録・商談との重複と登録の条件を判定して、承認の判断材料をそろえる
販売代理店から届く案件登録の申請を Make で受け、既存の登録・商談と同じ顧客ではないか、登録の条件を満たしているかをAIが条件ごとに根拠付きで判定します。パートナー担当は、そろった材料を見て承認か差し戻しかを決めます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Make/n8n/Power Automate/Zapier
- 対象業界
- IT・SaaS/商社/製造
- 対象部門
- 営業
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 判断に時間がかかる/属人化している/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 申請フォームの送信が、パートナー営業部の共有メールに届く
- 担当者が申請を開き、書くべき欄が埋まっているかを見る
- CRM で顧客の会社名を検索し、有効な契約と進行中の商談が無いかを見る
- 案件登録台帳を会社名で検索し、他の代理店の有効な登録が無いかを見る
- 社名の書き方を変えて(略称・英語表記・旧社名・グループ会社)検索し直す
- 商談の状況の欄を読み、顧客と実際に会っているか、時期と規模が具体的かを見る
- 規約の条件表と照らし、承認・差し戻し・保留を決め、台帳に書いて代理店へ返事をする
- 【代理店】 申請フォームから案件登録を申請する
- 自動フォームの送信で Make のシナリオが動き、受付番号を返す
- 自動必須の欄と、数値・日付の形を確かめる(条件 D・E・F は表の式で判定)
- 自動顧客と商談の一覧と案件登録台帳から、同じ顧客らしい行を候補として引く
- 自動Claude API が、候補の行ごとに同じ顧客かを判定し、条件 A・B・C を根拠付きで判定する
- 自動条件ごとの結果を表の決まりで並べ、「承認の候補/重複の疑い/条件外/情報不足」に振り分ける
- 自動案件登録台帳に結果と根拠を書き、情報不足のものは代理店への確認の文を下書きする
- 人パートナー担当が、振り分けと根拠を見て承認・差し戻し・保留を決める
- 人返事を確かめて代理店へ送り、台帳の状態を確定する
各工程の詳しい説明を読む
- 申請フォームの送信が、パートナー営業部の共有メールに届く
- 担当者が申請を開き、書くべき欄が埋まっているかを見る
- CRM で顧客の会社名を検索し、有効な契約と進行中の商談が無いかを見る
- 案件登録台帳を会社名で検索し、他の代理店の有効な登録が無いかを見る
- 社名の書き方を変えて(略称・英語表記・旧社名・グループ会社)検索し直す
- 商談の状況の欄を読み、顧客と実際に会っているか、時期と規模が具体的かを見る
- 規約の条件表と照らし、承認・差し戻し・保留を決め、台帳に書いて代理店へ返事をする
(a)社名の書き方が違うと、重複が見つからない。 代理店は顧客の名刺のとおりに書くので、「株式会社」の有無、略称、英語表記、部署名の入れ方がばらばらです。CRM の検索は書いたとおりの文字でしか当たりません。 5番目の検索し直しをどこまでやるかは担当者次第で、急いでいる日は1回で済ませます。見落とした重複は、半年後に2社の代理店が同じ顧客の前で鉢合わせて見つかります。
(b)グループ会社と部署の扱いが決まっていない。 「〇〇ホールディングスの情報システム部」と「〇〇製造の工場」は同じ顧客か、別の顧客か。規約には「同一法人」とだけ書いてあり、担当者ごとに線が違います。 同じ申請が、受けた担当者によって承認にも差し戻しにもなります。
(c)商談の状況の読み方が人による。 「先方の課長と面談済み。前向き」で会ったと見るか、「来月訪問予定」で足りると見るか。条件 C を満たすかどうかが、文の読み方で揺れます。 揺れは代理店から見ると「あの担当者なら通る」という形で伝わり、申請を出す相手を選ぶようになります。
(d)確認のあいだ、代理店が待つ。 月末と四半期末に申請が集まると返事が数日遅れ、その間に別の代理店が同じ顧客を申請してくると、どちらが先かの争いになります。
- 【代理店】 申請フォームから案件登録を申請する
- 【自動】 フォームの送信で Make のシナリオが動き、受付番号を返す
- 【自動】 必須の欄と、数値・日付の形を確かめる(条件 D・E・F は表の式で判定)
- 【自動】 顧客と商談の一覧と案件登録台帳から、同じ顧客らしい行を候補として引く
- 【自動】 Claude API が、候補の行ごとに同じ顧客かを判定し、条件 A・B・C を根拠付きで判定する
- 【自動】 条件ごとの結果を表の決まりで並べ、「承認の候補/重複の疑い/条件外/情報不足」に振り分ける
- 【自動】 案件登録台帳に結果と根拠を書き、情報不足のものは代理店への確認の文を下書きする
- 【人】 パートナー担当が、振り分けと根拠を見て承認・差し戻し・保留を決める
- 【人】 返事を確かめて代理店へ送り、台帳の状態を確定する
8番目が、この設計の分かれ目です。AIの結果で自動で承認しません。 承認の候補でも、担当者が根拠の行を一目見てから承認します。承認は代理店に権利を与える行為で、取り消すと代理店との関係が傷むからです。
6番目を表の決まりで行うのも意図してのことです。 AIが返すのは条件ごとの事実の判定で、それをどう並べて振り分けるかは規約の側に置きます。 規約が変わっても、直すのは決まりの表だけです。
02今回想定するシステム構成
代理店(申請フォーム) │ ▼【トリガー】フォームの送信(Webhook) Make(シナリオ) ├──▶ Webhook response … 受付番号を返す ├──▶ 欄の確認、条件 D・E・F の判定(条件表を引く) ├──▶ Google スプレッドシート … 顧客と商談の一覧・案件登録台帳から候補の行を引く ▼ Claude API(Messages API、構造化出力) │ 候補ごとに同じ顧客か/条件 A・B・C の判定と根拠 ▼ Make ── 決まりの表で振り分け(承認の候補/重複の疑い/条件外/情報不足) ▼ 案件登録台帳に結果・根拠・確認の文の下書きを書く ▼ 【パートナー担当が承認・差し戻し・保留を決める】 ▼ 代理店へ返事
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | Make(シナリオ。Webhooks、Google Sheets、HTTP、ルーター) | n8n、Zapier、Power Automate |
| 生成AI | Claude API(Messages API、構造化出力) | OpenAI API、Gemini API |
| 保管 | Google スプレッドシート(案件登録台帳・顧客と商談の一覧・条件表) | Airtable |
| CRM | 既存の CRM(顧客と商談の一覧を毎晩書き出す) | CRM の Make アプリで直接検索 |
CRM には書き込みません。 毎晩、有効な契約のある顧客と進行中の商談を一覧に書き出し、シナリオはその一覧を読みます。利用中の CRM の Make アプリで直接検索する形も考えられますが、どの検索ができるかは CRM ごとに違うので、まず一覧で組みます。
受け口は Make の Webhooks です。 カスタムの Webhook は外部のアプリやサービスからの HTTPS の要求を受けるURLを作り、既定では要求を受けた時点でシナリオが動きます。届いたデータは Webhook ごとのキューにいったん入り、処理されると消されます。
AIの呼び出しは HTTP アプリの Make a request で Messages API を呼びます。 構造化出力(output_config.format に JSON スキーマ)で、決めた形の JSON を受け取るためです。
03どうやって実装するのか
処理の起点を決める
代理店が申請フォームを送信したことを起点にします。 フォームの送信先を Make のカスタムの Webhook のURLにし、1件ずつシナリオを動かします。1日1回のまとめ処理にはしません。 案件登録は先に届け出たほうが優先される制度なので、受け付けた時刻そのものが判定の材料になります。
シナリオの設定で「Process data in order」を有効にします。 即時の Webhook は既定では並行して動き、前の実行が終わるのを待ちません。同じ顧客の申請が2社からほぼ同時に届くと、両方とも「重複なし」で通ってしまいます。 順番に処理させれば、後から来た申請の検索には先の申請の行が台帳に入っています。
受付番号は Webhook response のモジュールで返します。 ただし、途中に置くと後のモジュールのエラーでシナリオが止まらなくなるとされているので、エラーの通知は別に設けます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 申請 | 代理店名、申請者、顧客の会社名・部署・担当者、想定のライセンス数、製品・プラン、導入の予定時期、商談の状況(自由記述)、競合 | 申請フォーム(Webhook) |
| 顧客と商談の一覧 | 顧客の会社名・別名・ドメイン、親会社、契約の有無、進行中の商談と担当の営業 | CRM から毎晩書き出した一覧 |
| 案件登録台帳 | 過去の申請、顧客の会社名、部署、代理店、状態(有効/期限切れ/差し戻し)、有効期限 | Google スプレッドシート |
| 条件表 | 条件 A〜F の中身、ライセンス数の下限、時期の上限、代理店の区分ごとの扱える製品 | Google スプレッドシート |
| 代理店の一覧 | 代理店のID、区分、担当のパートナー営業 | Google スプレッドシート |
質を決めるのは、顧客と商談の一覧の「別名」の列です。 略称、英語表記、旧社名を、営業が気づいたときに足していく列です。候補に入らなかった行は、AIが見比べようがありません。 ドメインの列も持たせ、担当者のメールアドレスがあればドメインで引きます。
データの取得方法を決める
| 取るもの | どこから | どうやって |
|---|---|---|
| 申請の項目 | 申請フォーム | Custom webhook(項目を JSON で受ける) |
| 候補の顧客 | 顧客と商談の一覧 | Search Rows (advanced)(会社名の核になる語・別名・ドメインで引く) |
| 候補の登録 | 案件登録台帳 | Search Rows (advanced)(同じく。状態が有効のもの) |
| 条件表・代理店の区分 | 条件表・代理店の一覧 | Search Rows(代理店のIDで引く) |
| AIの判定 | Claude API | HTTP の Make a request(POST、JSON の本文) |
候補を引く前に、会社名から核になる語を取り出します。 「株式会社」「(株)」「ホールディングス」「HD」などの法人格とよくある語を落とし、残った語で検索します。Search Rows (advanced) は Google Charts Query Language で検索でき、contains を使えば部分一致で引けます。ただし、この検索は結果に行の番号を返しません。 後で台帳の行を書き換えたいときは、受付番号の列で引き直します。
候補は広めに引きます。 核の語・別名・ドメインのどれかに当たった行を、最大20行までAIに渡します。狭く引くと見落としが残り、広く引いた分の見比べはAIが受け持ちます。 20行を超えたら、核の語が短すぎる(「日本」「東京」など)可能性が高いので、AIに渡さず担当者へ回します。
AIの呼び出しは Make a request で、本文の入力は「Data structure」にします。 JSON の予約文字が自動でエスケープされるからです。「JSON string」だと、自由記述に引用符や改行が入ったときに呼び出しが壊れます。 「Return error if HTTP request fails」を有効にし、4xx・5xx でシナリオを止めて通知します。
AIへ渡す前に整形する
- 必須の欄の確認 … 顧客の会社名・製品・ライセンス数・予定時期が空なら、AIを呼ばずに「情報不足」にします
- 数値と日付の形をそろえる … 「20〜30ID」は小さいほうの20、「来年春」は日付にせず空のまま「時期の記載があいまい」の印を付けます
- 条件 D・E・F の判定 … ライセンス数の下限、予定時期の上限、代理店の区分で扱える製品を、条件表で判定します
- 会社名の核になる語の取り出し … 法人格とよくある語を落とします。落とした結果が2文字以下なら、元の会社名のまま検索します
- 候補の行を引く … 顧客と商談の一覧と案件登録台帳から、核の語・別名・ドメインのどれかに当たる行を引きます
- 期限切れの登録を分ける … 案件登録台帳の行のうち、有効期限が過ぎたものに印を付けます(重複の対象から外すかは決まりの表で決めます)
- AIに渡す範囲を絞る … 顧客の担当者の名前とメールアドレスは渡しません。会っているかの判定に要るのは「担当者の名前が書かれているか」だけなので、名前は「記載あり」に置き換えます
2番目で「来年春」を日付にしないのは、条件 E の判定が狂うからです。 「来年春」を4月1日に直すと、それだけで180日以内かどうかが決まってしまいます。あいまいな時期は、あいまいなまま担当者に見せます。
AIに処理させる
させるのは2つです。候補の行ごとに申請の顧客と同じ顧客かを判定すること、条件 A・B・C を判定することです。 どちらも、根拠にした申請の文と台帳の行を書き出させます。
| 見るもの | 判定の仕方 | 判断できないときの扱い |
|---|---|---|
| 候補の行が同じ顧客か | 会社名・別名・ドメイン・親会社・所在地の書き方から、same/group/different | 材料が足りなければ unclear |
| A. 新規の顧客 | 同じ顧客と判定した行に、有効な契約があるか | 契約の有無の列が空なら unknown |
| B. 重複が無い | 同じ顧客と判定した行に、他の代理店の有効な登録・直販の進行中の商談があるか | unclear の候補が残れば unknown |
| C. 顧客と会っている | 商談の状況の文に、顧客の担当者の記載と打合せをした日があるか | 予定だけなら not_met、日付があいまいなら unknown |
group を same と分けているのが、第3章の(b)への答えです。 同じグループだが別の法人と読めるものは group にし、重複とするかは規約の取り決めとして決まりの表の側で扱います。
| させないこと | 理由 |
|---|---|
| 承認・差し戻しの結論 | 代理店に権利を与えるかどうかは担当者が決める |
| どちらの代理店が先かの裁定 | 受付の時刻は台帳にある。争いの裁きは人の仕事 |
| 数値・日付の条件の判定 | 表の式で決まる。AIに比べさせると線が揺れる |
| 候補に無い顧客の推測 | 「この会社は〇〇の子会社のはず」と知識で補わせない |
| 代理店の評価・格付け | 申請1件の判定に、代理店の良し悪しを混ぜない |
4行目がいちばん起きやすい失敗です。 生成AIは会社の名前から親会社や業界を知っていることがあり、何も言わなければ「〇〇製造は〇〇ホールディングスの子会社なので group」と書きます。その知識が古ければ、存在しない重複で代理店を差し戻すことになります。 判断の材料は渡した行だけに限ります。
指示内容を固定する
あなたはソフトウェア会社のパートナー営業部で、販売代理店から届いた
案件登録の申請を確認する立場です。渡した申請と候補の行だけを見て判定してください。
会社についてあなたが知っていることを、判定の材料にしないでください。
【1. 候補の行ごとの判定】
申請の顧客と、候補の行の顧客が同じかを、次の4つから選んでください。
- same ....... 同じ法人と読める(略称・英語表記・旧社名・部署の違いを含む)
- group ...... 親会社・子会社・関連会社など、同じグループの別の法人と読める
- different .. 別の顧客と読める
- unclear .... 材料が足りず決められない
グループかどうかは、候補の行の「親会社」の列に書かれている場合だけ group にしてください。
列に書かれていないのに、知識で親会社を補わないでください。
【2. 条件の判定】
各条件について met/not_met/unknown を選び、根拠を書いてください。
A. 新規の顧客 … same と判定した行に「契約あり」が1つでもあれば not_met
B. 重複が無い … same と判定した行に、他の代理店の有効な登録、
または直販の進行中の商談が1つでもあれば not_met。
unclear の行が残っていれば unknown
C. 顧客と会っている … 商談の状況の文に、顧客の担当者の記載と、
すでに行った打合せの日付の両方があれば met。
「予定」「これから」のように、まだ会っていなければ not_met。
日付が「先日」「先月」のようにあいまいなら unknown
group と判定した行は、A と B の判定に使わないでください。
group の行は group_rows に並べるだけにしてください。
【厳守事項】
- 承認するか、差し戻すかは書かないでください。
- どちらの代理店が先かは判断しないでください。
- ライセンス数・金額・時期の条件は判定しないでください(別の仕組みで判定します)。
- evidence には、根拠にした申請の文、または候補の行の会社名と列の値を
そのまま写してください。言い換えないでください。
- 迷ったときに met や different を選ばないでください。unknown・unclear を選んでください。
- 申請が案件登録ではない内容(問い合わせ・苦情など)なら、
判定をせず request_type にその種類を書いてください。
【申請】{application}
【候補の行(顧客と商談の一覧)】{customer_rows}
【候補の行(案件登録台帳)】{registration_rows}
【申請した代理店のID】{partner_id}
「知識で親会社を補わない」を2か所に書いているのは、1か所では効かないことがあるからです。 最初の段落は判定の材料全体について、2つ目は group の判定についてです。group は知識で補いやすく、補ったときの害がいちばん大きいので、その場所でもう一度禁じます。
「迷ったときに different を選ばない」も同じ考えです。 different の候補は担当者が見ないので、見落としがそのまま承認に進みます。
出力形式を固定する
Messages API の output_config.format に JSON スキーマを渡し、次の形で受け取ります。
{
"request_type": "deal_registration",
"candidate_judgements": [
{ "source": "customer_list | registration_ledger",
"row_key": "",
"match": "same | group | different | unclear",
"reason": "",
"evidence": "" }
],
"group_rows": [""],
"conditions": [
{ "id": "A | B | C",
"result": "met | not_met | unknown",
"evidence": "" }
],
"missing_info": [""]
}
1つ目の理由は、候補の行ごとの判定を残せることです。 row_key で行を指させれば、担当者は CRM を検索し直さず、その行だけを開けば済みます。
2つ目は、振り分けを表の決まりで行えることです。 Make のルーターで、conditions と表の式で出した D・E・F の結果を次のように並べます。
| 振り分け | 条件 |
|---|---|
| 承認の候補 | A〜F がすべて met |
| 重複の疑い | B が not_met(あわせて group_rows があれば併記) |
| 条件外 | A・D・E・F のどれかが not_met |
| 情報不足 | C が not_met または unknown、もしくは必須の欄が空 |
| 担当者が判断 | 上のどれにも当たらない、または unknown が2つ以上 |
group_rows がある申請は、どの振り分けでも担当者の画面に「同じグループの登録あり」と出します。 規約がグループを重複とするなら、表に1行足すだけです。
スキーマで気をつけることがあります。 Claude の構造化出力は、数値の minimum・maximum、文字列の minLength・maxLength に対応しておらず、使うと400のエラーになります。配列の minItems は 0 と 1 しか使えず、オブジェクトの additionalProperties は false にする必要があります。また、文字列の enum の大文字・小文字は保証されないので、ルーターの条件は大文字と小文字を区別せずに比べます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 申請フォーム | Make の Custom webhook | 申請を JSON で受ける |
| 申請フォーム | Webhook response | 受付番号を返す |
| 顧客と商談の一覧 | Google Sheets の Search Rows (advanced) | 候補の顧客を引く(読むだけ) |
| 案件登録台帳 | Google Sheets の Search Rows (advanced)、Add a Row、Update a Row | 候補の登録を引き、結果を書く |
| Claude API | HTTP の Make a request | 同じ顧客かと条件 A・B・C の判定 |
| 代理店への返事 | メール(担当者が送る) | 振り分けと確認の文の下書き |
台帳への書き込みは2回に分けます。 受け付けた直後に、受付番号・受付の時刻・代理店・顧客の会社名だけの仮の行を Add a Row で足し、判定が終わったら Update a Row で結果を書きます。先に仮の行を入れておくと、次に来た申請の検索に「判定中の申請」として当たります。 「Process data in order」とあわせて、同時に届いた申請の取りこぼしを防ぎます。
代理店への返事は自動では送らず、下書きを台帳の列に書きます。
人が確認する
パートナー担当は、すべての申請を開きます。ただし、見る場所が変わります。 これまで6分かけていた検索は無くなり、AIが指した行と根拠を確かめるだけになります。
- 重複の疑いを先に見る …
row_keyの行を開き、本当に同じ顧客かを確かめます。先に登録した代理店がいる場合は、受付の時刻を台帳で見比べます - 担当者が判断のものを見る … unknown が多い申請は、たいてい商談の状況の欄が短いものです。代理店に聞くかを決めます
- 情報不足のものの確認の文を直して送る … 下書きは「打合せの日付と先方のご担当者の部署をお知らせください」のような形です
- 承認の候補を承認する … 根拠の欄を一読し、group_rows が無いことを見て承認します
- 判定を覆したら記録する … どの候補の match を、どれに変えたかを残します
どちらの申請を有効にするかは、規約の「先着」の決まりと経緯で担当者が決めます。 目標は1件4分です。 承認の候補は1〜2分で済み、重複の疑いと担当者が判断のものに時間を使います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 候補の行が20行を超える | 核の語が短すぎる。AIに渡さず担当者が検索 |
| 候補の行が0行 | 重複なしとして A・B は met。ただし別名の列が空の顧客は見落としうるので、承認の画面に「候補0件」と出す |
| 申請が案件登録ではない | request_type を見て、問い合わせの窓口へ回す |
| 同じ代理店が同じ顧客を二重に申請 | 台帳の自分の申請に当たる。重複の疑いにせず、申請し直しとして古い行に印 |
| Claude API がエラー・応答なし | 台帳の仮の行を「判定待ち」のまま残し、通知する |
応答が refusal で止まる | スキーマに合わない出力が返りうる。判定を使わず担当者へ |
応答が max_tokens で途切れる | 不完全な出力になる。上限を上げて呼び直す |
| Webhook のキューが満杯 | 上限を超えたデータは受け付けられない。代理店のフォームにエラーを返す |
| Webhook の要求が多すぎる | 10秒あたり300件を超えると429。月末の集中でも通常は届かない |
1行目と2行目は、別名の列が整っていないことの表れです。 件数を毎月数え、別名の列を足すきっかけにします。
記録を残す
- 申請の全項目と、受付の時刻・受付番号
- 引いた候補の行の一覧(そのときの顧客と商談の一覧・案件登録台帳の内容)
- AIの判定の JSON の全文と、呼び出しに使ったプロンプトの版
- 表の式で出した D・E・F の結果と、そのときの条件表の版
- 振り分けの結果、担当者の決定、覆した判定の記録
- 代理店へ送った返事の日時と本文
2つ目で「そのときの一覧の内容」を残すのは、後で争いになったときのためです。 半年後に「なぜあのとき重複と言わなかったのか」と問われたら、当時の候補の行と判定を見せられることが答えになります。Make の実行の記録は3日(Enterprise は30日)しか残らないので、台帳の側に残します。 条件表の版も、線を変えたときの説明のために残します。
04実装レベルの3段階
最小構成では件数がさばけません。 候補の行を手で引く手間が残るからです。判定が当時の担当者の判断とどれくらい合うかを確かめる段階です。 半自動化で、1件15分が7分程度になります。 検索と判定が自動になり、担当者は台帳の結果を読みます。ただし、条件 D・E・F の確認と返事の作成が手で残ります。本格構成で4分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の台帳を1か月見ると、候補が多すぎる会社名と unknown になりやすい書き方が分かり、直してから振り分けを入れたほうが、担当者が判断に回る件数が減ります。
05工数削減シミュレーション
導入後 240件 × 4分 ÷ 60 = 16 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 販売代理店(リセラー・SIer・地域の販売店)を通じて自社の SaaS を売っており、代理店が見つけた商談を先に届け出る「案件登録」の制度を持っている企業。月に百件を超える申請が届き、重複の確認を担当者が CRM の検索で行っている場合。同じ顧客を複数の代理店や直販の営業が追いかけ、どちらの案件かでもめたことがある場合。登録の条件が文書になっているのに、担当者によって承認の線が違う場合。
- 代理店が数社だけで、申請が月に十数件の場合(担当者が覚えていられる)。案件登録の制度そのものが無く、代理店ごとに担当地域や業種で顧客を割り当てている場合。CRM がパートナー管理の機能を持ち、重複の確認と承認の流れがすでに CRM の中で回っている場合。なお、どの代理店の案件と認めるか、もめたときにどう裁くかは自社の判断で、この構成は代替しません。
07最小構成で試す方法
- 過去3か月の申請から30件を選ぶ(うち数件は、後で重複と分かったもの、差し戻したものを入れる)
- その30件について、当時の検索の結果と、承認・差し戻しの理由を台帳から書き出す
- 30件それぞれについて、顧客と商談の一覧と台帳から会社名の核の語で候補の行を手で引き、表にする
- 手元のAIサービスの画面に、申請・候補の行・第7章のプロンプトを貼り、判定させる
- 出てきた判定を、当時の結論と突き合わせる
後で重複と分かった申請を必ず入れてください。 この構成がいちばん役に立つのは、人が見落としたものを拾うところだからです。
| 出てきた内容 | 判断 |
|---|---|
| 後で分かった重複を same として指した | シナリオを組む段階に進む |
| 候補の行に重複の相手が入っていなかった | 検索の側の問題。別名の列と核の語の取り出しを見直す |
| 知識で親会社を補って group にした | 指示の書き方で直る。構成は有効 |
| 条件 C の判定が担当者とずれる | 規約の文言があいまい。「会っている」の線を先に決める |
2行目が出たら、AIを調整しても直りません。 候補として渡さなかった行は、AIが見比べようがないからです。30件の試しで、別名の列にどんな書き方を足せばよいかが分かります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 同時に届いた2件が両方とも重複なしになる | 「Process data in order」を有効にし、受付直後に仮の行を台帳へ入れる |
| 重複の相手が候補に入らない | 別名・ドメインの列を整え、核の語で部分一致で引く |
| 候補が多すぎてAIに渡せない | 20行を超えたら担当者へ。核の語の取り出しを見直す |
| AIが知識で親会社を補う | プロンプトの2か所で禁じ、group は親会社の列があるときだけにする |
| 「予定」を会ったと読む | 条件 C の文言を「すでに行った打合せの日付」と明記する |
| 数値の条件がAIの判定で揺れる | D・E・F は表の式で判定し、AIに渡さない |
| 自由記述の引用符で呼び出しが壊れる | 本文は「Data structure」で組む。「JSON string」は自分でエスケープが要る |
| enum の大文字・小文字が違ってルーターが外れる | 大文字と小文字を区別せずに比べる |
| Make の実行の記録が消えて経緯を追えない | 記録は3日(Enterprise は30日)。台帳に判定と候補を残す |
| 承認を自動にしてしまう | 承認は担当者が行う。 承認の候補でも根拠を一読する |
上の2行が、この構成の失敗のほとんどです。 どちらも「重複なし」と出て承認され、後で鉢合わせて見つかる形の失敗です。AIの精度より、候補の引き方と処理の順番のほうが効きます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 代理店の名前と担当者、顧客の会社名・部署、顧客の担当者の名前、想定の規模と時期、商談の状況、競合の名前、自社の顧客と商談の一覧です。顧客と商談の一覧は、自社の営業の手の内そのものです。
- AIに渡す範囲を絞る … 顧客の担当者の名前とメールアドレスは「記載あり」に置き換えて渡します。候補の行も、会社名・別名・ドメイン・親会社・契約の有無・登録の状態だけにし、金額や担当の営業の名前は渡しません
- 代理店に他の代理店の情報を返さない … 重複の疑いで差し戻すときに、どの代理店が先に登録しているかを書かないでください。下書きは「他の登録と重なる可能性があるため確認します」までにします
- 承認を自動にしない … 承認は代理店に権利を与える行為です。誤った承認を取り消すことは、誤った差し戻しよりはるかに重くつきます
- 規約の線を決めるのは自社 … グループ会社を重複とするか、会っていない申請を受けるか、先着をどう決めるかは規約と担当者の判断で、この構成は代替しません
- データの扱いを確かめる … Claude の構造化出力では、JSON スキーマそのものが最後に使ってから最大24時間キャッシュされるとされています。スキーマには顧客名や代理店名を書かず、項目の形だけを書きます
- フォームの URL を代理店の外に出さない … Webhook の URL を知っていれば誰でも申請を送れます。代理店のIDと、フォームの側で発行するトークンを本文に入れ、シナリオの最初で一覧と照らして、知らない送り手の申請を捨てます
誤りが起きた場合のリスクは、重複を見落として二重に承認することと、重複でないものを差し戻すことの2つです。 前者は候補の引き方の漏れと同時の申請から、後者はAIが知識で関係を補うことから起きます。どちらも設計の段階で塞げます。
10まず何から始めるか
1週目:顧客と商談の一覧に別名とドメインの列を足す
CRM から有効な契約のある顧客と進行中の商談を書き出し、別名(略称・英語表記・旧社名)とドメインの列を足します。全件を一度に埋める必要はありません。過去に重複でもめた顧客と、申請の多い業種の上位から埋めます。
2週目:30件で試す
第8章の手順で30件を判定させ、後で重複と分かった申請をAIが same として指すかを最優先で見ます。
3週目:規約の条件を2つに分ける
条件を「表で判定するもの」と「文を読むもの」に分け、グループ会社の扱いと「会っている」の線をパートナー営業部で決めます。 ここが決まらないうちに組むと、判定は出るのに承認の線がそろいません。
4週目:Webhook から台帳への記録までをつなぐ
Make で申請を受け、候補を引き、Claude API を呼んで、判定を台帳に書くところまで作ります。この時点では振り分けを出さず、判定と候補の一覧だけを担当者が見ます。
2か月目: 条件 D・E・F の表の式と、表の決まりによる振り分けを足し、「Process data in order」と仮の行の書き込みを入れます。担当者が覆した判定を毎週数えます。3か月目以降: 確認の文の下書きと受付番号の返信を足し、1件15分が何分になったかを実測します。候補0件と20行超えの件数が月に数件まで減り、別名の列が営業の手で足されていくようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
カスタムの Webhook が外部からの HTTPS の要求を受けるURLを作り、既定では要求を受けた時点でシナリオが動くこと。Webhook ごとのキューがあり、処理されると消されること。キューの上限(月1万クレジットごとに667件、最大1万件)と満杯時の拒否。10秒あたり300件を超えると429。即時の Webhook は既定で並行して動き、「Process data in order」で順番に処理できること。Webhook response を途中に置くと後のエラーでシナリオが止まらないこと。5日(120時間)つながっていない Webhook は止まり 410 Gone を返すこと。記録の保持が3日(Enterprise は30日) | Make Help Center: Webhooks | 2026-10-28 |
| HTTP アプリの Make a request で、メソッド・ヘッダー・本文の種類を指定できること。本文の入力方法に Data structure(予約文字を自動でエスケープ)と JSON string(自分でエスケープ)があること。Parse response。タイムアウトが1〜300秒。「Return error if HTTP request fails」で4xx・5xx のときにシナリオを止められること。URL は HTTPS のみ | Make Apps: HTTP | 2026-10-28 |
| Google Sheets の Search Rows(フィルターに AND/OR が使える)、Search Rows (advanced)(Google Charts Query Language で検索でき、行の番号を返さない)、Add a Row、Update a Row のモジュールがあること | Make Apps: Google Sheets modules | 2026-10-28 |
構造化出力を output_config.format に type: "json_schema" で指定し、beta ヘッダーが不要なこと(旧 output_format は非推奨)。数値の minimum・maximum、文字列の minLength・maxLength に非対応で400になること。minItems は0と1のみ、additionalProperties は false が必要なこと。enum の大文字・小文字が保証されないこと。refusal と max_tokens のときにスキーマに合わない・不完全な出力がありうること。JSON スキーマが最後の利用から最大24時間キャッシュされること | Claude API Docs: Structured outputs | 2026-10-28 |
登録の条件(A〜F)と、グループ会社・先着の扱いは、本記事の例です。 実際の条件は各社の代理店向けの規約に合わせて置き換えてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2198)についてのご相談はこちらから。
