新人の営業がAIに顧客役をさせて商談のロールプレイを行い、ヒアリングの抜けと提案の順番を振り返りのコメントにする
新人の営業が、AIの演じる架空の顧客を相手に初回商談のロールプレイを行います。終わった会話から、聞き出せなかった事実と提案の順番の誤りを振り返りのコメントにまとめ、先輩が確かめて一言を足します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Zapier
- 対象業界
- IT・SaaS/人材/広告/金融
- 対象部門
- 人事/営業
- 対象業務
- 内容確認・チェック/記録・議事録作成
- 主な課題
- 人手が足りない/属人化している/引き継ぎができていない
- AIで行う処理
- 対話
- 主な効果
- 品質標準化/工数削減/教育コスト削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 研修の担当が、新人と指導役の空いている時間を合わせてロールプレイの枠を取る
- 指導役が、その回に演じる顧客の設定を頭の中で決める(業種、規模、困りごと)
- 指導役が顧客役になり、新人と20分ほど初回商談を行う
- 指導役が、会話を思い出しながら、聞けた項目と聞けなかった項目をメモする
- 指導役が、振り返りのコメントを研修の記録表に書く
- 新人がコメントを読み、次の回に向けて直す点を書き足す
- 人研修の担当が、顧客の設定(ペルソナカード)を10枚ほど作り、隠す事実を書き込む
- 人新人が練習用の画面を開き、その日のカードを選ぶ(カードの中身は見えない)
- 自動AIが顧客役になり、新人と初回商談の会話を行う
- 人新人が「商談を終える」を押す
- 自動別の指示で採点を行い、隠した事実ごとに「聞き出せたか」と、その発言の番号を返す
- 自動発言の番号から、課題を確かめる前に提案していないかを規則で判定する
- 自動振り返りのコメントの下書きを作り、会話の全文とあわせて記録表に書き出す
- 人指導役が記録表を開き、判定と下書きを確かめ、自分の一言を足す
- 人新人がコメントを読み、同じカードか別のカードでもう一度練習する
各工程の詳しい説明を読む
- 研修の担当が、新人と指導役の空いている時間を合わせてロールプレイの枠を取る
- 指導役が、その回に演じる顧客の設定を頭の中で決める(業種、規模、困りごと)
- 指導役が顧客役になり、新人と20分ほど初回商談を行う
- 指導役が、会話を思い出しながら、聞けた項目と聞けなかった項目をメモする
- 指導役が、振り返りのコメントを研修の記録表に書く
- 新人がコメントを読み、次の回に向けて直す点を書き足す
(a)先輩の時間がそのまま回数の上限になる。 1回のロールプレイに先輩が30分かかり、それが月120回あると60.0時間です。新人の練習量を増やしたくても、増やせるのは先輩の時間が空いたときだけです。
(b)顧客の設定が先輩ごとに違う。 2番目で決める顧客の設定は先輩の頭の中にしかなく、ある先輩は予算の話をすぐ出し、別の先輩は聞かれるまで出さない。 同じ新人でも、相手が変わると評価が変わります。
(c)振り返りが記憶に頼っている。 4番目は、20分の会話を思い出して書くので、どの発言で何を聞いたかが残りません。 「決裁者を聞けていない」と書かれても、新人には自分がどこで聞きそびれたのかが分かりません。
(d)提案の早さは本人が気づかない。 困りごとを1つ聞いたところで機能の説明を始める新人は多いのですが、その場では顧客役の先輩が話を合わせてしまい、本人は順番の誤りに気づきません。
- 【人】 研修の担当が、顧客の設定(ペルソナカード)を10枚ほど作り、隠す事実を書き込む
- 【人】 新人が練習用の画面を開き、その日のカードを選ぶ(カードの中身は見えない)
- 【自動】 AIが顧客役になり、新人と初回商談の会話を行う
- 【人】 新人が「商談を終える」を押す
- 【自動】 別の指示で採点を行い、隠した事実ごとに「聞き出せたか」と、その発言の番号を返す
- 【自動】 発言の番号から、課題を確かめる前に提案していないかを規則で判定する
- 【自動】 振り返りのコメントの下書きを作り、会話の全文とあわせて記録表に書き出す
- 【人】 指導役が記録表を開き、判定と下書きを確かめ、自分の一言を足す
- 【人】 新人がコメントを読み、同じカードか別のカードでもう一度練習する
8番目が、この設計の分かれ目です。 指導役は顧客役をしなくなりますが、振り返りから手を離すわけではありません。 AIが出すのは「どの事実が会話に出てこなかったか」までで、それをどう直すかを伝えるのは先輩の仕事として残します。
6番目を規則にしているのは、順番の判定が揺れると新人が混乱するためです。 「課題を1つも確かめないうちに機能の説明を始めた」は、発言の番号を比べれば決まります。AIに印象で書かせると、同じ会話でも回ごとに言い方が変わります。
02今回想定するシステム構成
研修の担当 ── ペルソナカード(スプレッドシート)
│ 業種・規模・性格・隠す事実・事実を話す条件
▼
新人 ── 練習用の画面(Google Apps Script のウェブアプリ)
│ 1発言ごとに送る
▼
OpenAI API ── 顧客役(カードの事実だけで答える)
│ 会話の状態は Conversations API で持つ
▼
「商談を終える」
▼
OpenAI API ── 採点役(別の指示・構造化出力)
│ 事実ごとの判定と、発言の番号
▼
Google Apps Script ── 提案の順番の規則判定
▼
記録表(スプレッドシート) ── 指導役が確かめて一言を足す| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | ChatGPT(OpenAI API の Responses API) | Claude API、Gemini API |
| 連携 | Google Apps Script(練習用の画面と記録表への書き出し) | Make、Zapier |
| 記録表 | Google スプレッドシート | Microsoft 365 のオンラインの表計算 |
最小構成では、画面も連携も要りません。 ChatGPT の画面に顧客役の指示とカードを貼り付けて会話し、終わったら採点の指示を別の会話に貼ります。半自動化で、練習用の画面と記録表への書き出しを Google Apps Script で作ります。 本記事の想定はこの段階です。
会話の状態は、OpenAI API の Conversations API で持たせます。 Responses API には会話の続きを扱う方法が3つあり、自分で過去の発言を並べて送る方法、直前の応答の previous_response_id を渡す方法、conversations.create() で会話のオブジェクトを作り、その ID を渡す方法です。3つ目の会話は、セッションや端末、処理をまたいで使えるとされています。新人が途中で画面を閉じても、続きから再開できます。
保存の扱いも、この選び方に関わります。 Response のオブジェクトは既定で30日保存され、store を false にすると保存しません。会話のオブジェクトとその中の項目は、この30日の期限の対象外とされています。練習の記録はスプレッドシートに残すので、API 側に残す期間は自社で決めて、終わった会話は消す運用にします。
練習用の画面は、Google Apps Script のウェブアプリで作れます。 スクリプトに doGet(e) か doPost(e) を置き、HTML Service の HtmlOutput を返すと、ウェブアプリとして公開できます。実行の権限は「自分として実行」と「アクセスしたユーザーとして実行」から選べます。API のキーを新人に渡さないため、「自分として実行」にし、キーはスクリプトの側に置きます。
03どうやって実装するのか
処理の起点を決める
新人が練習用の画面で「商談を始める」を押したときに始まります。 決まった時刻に動く処理ではありません。新人が空いた時間に何度でも練習できることが、この構成のいちばんの利点です。
会話の途中は、新人が1発言を送るたびに顧客役を1回呼びます。 採点は、「商談を終える」を押したときに1回だけ動かします。会話の途中で採点を動かさないのは、第1章に書いたとおり、顧客役と採点役を混ぜないためです。
押し忘れに備えて、30分たっても終わらない会話は自動で終わらせて採点します。 画面を閉じただけの会話も、記録表の「未採点」の列に残し、翌朝の時間主導型の処理でまとめて採点します。採点されない練習を出さないことで、指導役の見る記録表に抜けを作りません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| ペルソナカード | 業種、従業員数、話し手の役職と性格、隠す事実、事実を話す条件 | 記録表の「カード」シート |
| ヒアリングの項目 | 社内で決めている聞くべき項目と、その項目の意味 | 記録表の「項目」シート |
| 新人の発言 | 1発言ずつの文章と、発言の番号 | 練習用の画面 |
| 会話の全文 | 新人と顧客役の発言の並び | Conversations API の会話 |
| 新人の情報 | 名前、入社月、これまでの練習の回数 | 記録表の「新人」シート |
質を決めるのは、いちばん上の「事実を話す条件」です。 「予算は来年4月から取る予定」という事実に、「予算や費用の取り方を尋ねられたら話す。製品の価格を聞かれただけなら、まだ決まっていないとだけ答える」という条件を付けます。条件が無いと、顧客役は話の流れで事実を先に出してしまい、聞けたかどうかの判定が意味を失います。
隠す事実は1枚に7つまでにします。 現在のやり方、困りごと、困りごとの影響の大きさ、決裁する人、導入の時期、予算、比べている他社。社内のヒアリングの項目と1対1で対応させ、項目の名前をそのまま事実の見出しにします。 対応させておくと、採点の結果を新人ごとに項目別で集計できます。
データの取得方法を決める
カードと項目は、スクリプトがスプレッドシートを読むだけです。新人が画面でカードを選ぶとき、画面に出すのは業種と規模だけにし、隠す事実はスクリプトの側だけで扱います。画面の HTML に事実を書き込むと、新人がブラウザから中身を見られてしまいます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| カードの公開してよい部分 | 「カード」シートの業種・規模の列 | 新人がカードを選ぶ画面 |
| カードの隠す事実と条件 | 「カード」シートの事実の列 | 顧客役と採点役への指示 |
| 会話の全文 | Conversations API の会話の項目 | 採点役に渡す会話の記録 |
| 過去の採点結果 | 記録表の「結果」シート | 同じ新人が毎回落としている項目の把握 |
会話の全文は、採点の前に番号を振った形に並べ直します。 新人の発言に S1、S2、顧客役の発言に C1、C2 と番号を付け、採点役にはこの番号で根拠を答えさせます。 番号があるので、第5章の6番目の順番の判定が機械的にできます。
AIへ渡す前に整形する
- カードの点検 … 隠す事実の見出しが「項目」シートのいずれかと一致しているかを確かめます。一致しないカードは選べない状態にします
- 実在の名前の点検 … カードの社名・人名に、自社の顧客管理にある名前が混ざっていないかを照合します。練習に実在の顧客を使わないためです
- 発言の長さの確認 … 新人の1発言が極端に長いときは、要点を絞るよう画面で促します。台本の貼り付けを防ぎます
- 会話の番号付け … 採点の前に、発言に
SとCの番号を振ります - 短すぎる会話の除外 … 新人の発言が5つ未満で終わった会話は採点せず、「練習として短すぎる」と記録します
2番目を軽く見ないでください。 先輩が顧客役をしていたころは、実際の商談相手を思い浮かべて設定を作ることがよくありました。同じことをカードでやると、顧客の情報を外部のサービスへ送ることになります。 カードは架空の会社で作ると、研修の担当と最初に決めておきます。
AIに処理させる
顧客役にさせるのは、カードの性格で話し、条件を満たした質問にだけ事実を答えることです。 採点役にさせるのは、会話の全文を読み、隠した事実ごとに、会話に出てきたかどうかと、その事実を引き出した新人の発言の番号を返すことです。
| 役 | させること | 判断できないときの扱い |
|---|---|---|
| 顧客役 | カードの性格で受け答えし、条件を満たした質問にだけ事実を答える | カードに無いことを聞かれたら「分からない」「社内で確認する」と答える |
| 採点役 | 事実ごとに elicited(聞き出せた)/partial(一部だけ)/missed(出てこなかった)を付ける | 顧客役が自分から話した事実は volunteered とし、聞き出せた扱いにしない |
| 採点役 | 新人が最初に製品の機能や価格を説明した発言の番号を返す | 説明が無ければ null |
| 採点役 | 事実ごとに、良かった質問か、聞き方の改善案を1文で書く | 根拠の発言番号が無い指摘は書かない |
右端の volunteered が、採点役の仕事でいちばん大事な区別です。 顧客役が条件を外れて事実を話してしまうことは、どれだけ指示を書いても起こりえます。そのときに「聞き出せた」と数えると、新人は聞いていないのに合格になります。 事実を引き出した新人の発言番号が無いものは、すべて volunteered にします。
| させないこと | 理由 |
|---|---|
| 新人の点数や順位を付ける | 研修の記録であり、人事評価の材料にしない |
| 顧客役が会話の途中で助言する | 練習の相手が答えを教えると、聞き出す練習にならない |
| カードに無い事実を作る | 採点の基準が回ごとに変わってしまう |
| 提案の順番の良し悪しを判断する | 順番は第5章の6番目の規則で決める |
| 新人の人柄や話し方の評価 | 振り返りは事実を聞けたかに限り、指導役が補う |
1行目は、最初に研修の担当と決めておきます。 採点の結果を並べると点数のように見えますが、この構成は「どの事実を聞き逃したか」を本人に返すためのもので、比べるためのものではありません。
指示内容を固定する
顧客役への指示です。
あなたは法人向けの勤怠管理の製品について、初めて営業の説明を受ける会社の担当者です。
下のカードに書かれた人物として話してください。あなたは営業の練習の相手役です。
【カード】{card_public}
【隠している事実と、話してよい条件】{card_hidden}
【守ること】
- 隠している事実は、条件を満たす質問をされたときだけ答えてください。
条件を満たさない質問には、その事実に触れずに短く答えてください。
- 自分から困りごとや予算や決裁の話を始めないでください。
- カードに書かれていないことを聞かれたら「分からない」「社内で確認する」と答え、
新しい事実を作らないでください。
- 営業の進め方について助言したり、次に何を聞くべきかを教えたりしないでください。
- 1回の返答は3文以内にしてください。
- 営業担当が製品の説明を始めたら、カードの性格に合わせて聞いてください。
ただし、そこで隠している事実を話してはいけません。
採点役への指示です。
あなたは営業研修の記録係です。下の会話は、新人の営業(S)と、
練習の顧客役(C)の初回商談です。顧客役は事実を隠し持っていました。
【隠していた事実の一覧】{card_hidden}
【会話(発言に番号付き)】{numbered_transcript}
事実ごとに、次の status を1つ選んでください。
- elicited ..... 新人の質問によって、その事実の中身が会話に出た
- partial ...... 事実の一部だけが出た(例:時期は出たが予算の取り方は出ていない)
- volunteered .. 新人が尋ねていないのに、顧客役が自分から話した
- missed ....... 会話に出てこなかった
【厳守事項】
- elicited と partial には、その事実を引き出した新人の発言番号(S の番号)を必ず入れてください。
番号を示せないものは elicited にしないでください。
- 顧客役の発言だけを根拠にしないでください。新人がその前に何を尋ねたかで判断してください。
- 新人が製品の機能や価格の説明を最初に始めた発言番号を first_pitch_turn に入れてください。
無ければ null にしてください。
- 改善の一言は、事実ごとに1文までにし、根拠の発言番号を添えてください。
- 点数、順位、新人の人柄についての意見は書かないでください。
「番号を示せないものは elicited にしない」が、採点役の指示の要です。 何も言わなければ、採点役は「会話の中に予算の話が出てきた」ことを根拠に elicited を付けます。出てきたかどうかではなく、新人が引き出したかどうかを見ることを、番号を求めることで強制します。
顧客役の「1回の返答は3文以内」も効きます。 長く話させると、顧客役は話の流れで事実を漏らします。短く答える相手のほうが、実際の初回商談の担当者にも近くなります。
出力形式を固定する
採点役からは、次の形のJSONで受け取ります。
{
"session_id": "",
"card_id": "",
"facts": [
{ "item": "current_process", "status": "elicited | partial | volunteered | missed",
"evidence_turn": "S4", "comment": "" }
],
"first_pitch_turn": "S6",
"turn_count": { "sales": 0, "customer": 0 },
"summary_comment": ""
}
facts には、カードの隠す事実の数だけ要素を並べます。item は「項目」シートの見出しに対応する current_process / pain / impact / decision_maker / timeline / budget / competitor です。
1つ目の理由は、形を固定できることです。 Responses API では、text: { format: { type: "json_schema", strict: true, schema: ... } } の形でスキーマを渡し、required と additionalProperties: false で項目を固定します。status は enum で4つに絞れます。記録表の列に、そのまま書き出せます。
2つ目は、順番の判定をAIの外に出せることです。 スクリプトが次の規則で判定します。
| 判定 | 条件 |
|---|---|
pitch_before_pain | first_pitch_turn が、pain を引き出した発言番号より前 |
pitch_before_impact | first_pitch_turn が、impact を引き出した発言番号より前 |
no_closing_question | timeline と decision_maker がどちらも missed |
ok | 上のいずれにも当たらない |
規則はスプレッドシートの側に置きます。 「影響の大きさを確かめる前の提案も誤りとするか」は会社ごとに違い、研修の担当が後から変えられるようにしておきます。
3つ目は、拒否と途中切れを検知できることです。 安全上の理由で拒否された場合は refusal が返り、スキーマに沿わない形になります。出力の上限で切れた場合は status が incomplete、incomplete_details.reason が max_output_tokens になります。どちらも記録表に書かず、「要確認」として指導役に回します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 練習用の画面 | Google Apps Script のウェブアプリ | 新人の発言を受け取り、顧客役の返答を返す |
| OpenAI API(顧客役) | Responses API と Conversations API | 会話を続ける |
| OpenAI API(採点役) | Responses API の構造化出力 | 事実ごとの判定を返す |
| 記録表 | スプレッドシートへの書き込み | 会話の全文、判定、順番の規則判定、下書き |
| 指導役への知らせ | 記録表の「未確認」の列 | 指導役が週2回まとめて見る |
API を呼ぶのは、すべてスクリプトの側です。 画面からは発言だけを送り、API のキーとカードの隠す事実は画面に出しません。 スクリプトから外部へ要求を送る回数には1日の上限があり、Google Workspace のアカウントでは URL Fetch が1日100,000回、1回の実行は6分までとされています。月120回の練習で、1回に新人の発言が20ほどなら、上限には届きません。
顧客管理のシステムにはつなぎません。 練習で使うのは架空のカードだけで、実在の顧客の情報を取りにいく経路を作らないことが、この構成の安全の前提です。
人が確認する
指導役は、すべての練習の記録を見ます。 ただし、見る順番を決めておきます。
volunteeredが多い回を先に見る … 顧客役が条件を外れて事実を話している。カードの条件の書き方を直す材料ですmissedの項目と、新人の発言を読み比べる … 本当に聞けていないのか、聞いたのに採点役が拾えていないのかを確かめます- 順番の規則判定を確かめる …
pitch_before_painが出た回は、新人のfirst_pitch_turnの発言を読みます - 一言を足す … 下書きのコメントを直し、次の練習で何を1つ試すかを書きます
- 判定を覆したら記録する … どの事実の status を、どちらに変えたかを残します
2番目を省かないでください。 新人が遠回しに予算を尋ね、顧客役がそれに答えているのに、採点役が missed を付けることがあります。その判定のまま返すと、新人は聞けていたことを聞けなかったと覚えてしまいます。
目標は、1回あたり6分です。 会話の全文を頭から読むのではなく、判定の根拠の発言番号から該当の発言だけを読むことで収めます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 新人が画面を閉じて会話が途中で止まる | 会話の ID は残る。翌朝の処理で採点し、「途中終了」の印を付ける |
| 新人の発言が5つ未満で終わる | 採点せず「練習として短すぎる」と記録する |
| 顧客役が事実を自分から話した | 採点役が volunteered にする。同じカードで3回続いたら、条件の書き方を見直す |
| 顧客役がカードに無い事実を話した | 指導役が記録し、顧客役の指示に禁止の例を足す |
| 採点役が拒否した、途中で切れた | refusal または incomplete を検知し、記録表に「要確認」とだけ書く |
| 新人が実在の社名を出して練習しようとした | 前処理で照合し、画面で「架空の会社で練習してください」と返す |
| APIが応答しない | 画面に「少し待ってから送り直してください」と出す。新人の発言は記録表に先に保存する |
| 同じカードを何度も選ぶ | 5回目からは別のカードを勧める。答えを覚えた練習にしない |
3行目が、運用の初めにいちばん多く出ます。 カードの条件の書き方は、何度か練習を回して直すものです。最初の1か月は、指導役が volunteered の数を毎週数えてください。
記録を残す
- 会話の全文(番号を振った形)と、使ったカードの ID、そのときのカードの内容
- 採点役が返したJSONの全文と、順番の規則判定の結果
- 指導役が足した一言と、判定を覆した記録
- 新人ごとの、項目別の
missedの回数の推移 - カードごとの
volunteeredの回数
1つ目で「そのときのカードの内容」を残すのは、カードを後から直すためです。 条件の書き方を変えると、同じ ID のカードでも聞き出しやすさが変わります。当時のカードが残っていないと、新人の成長とカードの変更の区別がつきません。
API 側に残る記録は、別に決めます。 API へ送ったデータは、明示的に共有を選ばない限りモデルの学習に使われず、不正利用の監視のログは既定で最大30日保持されるとされています。練習の記録の正本はスプレッドシートの側に置き、API 側の会話は採点が済んだら消します。
04実装レベルの3段階
最小構成では、会話の全文を手でコピーする手間が残ります。 月120回には使えません。確かめるための段階です。 半自動化で、指導役の時間は1回6分になります。 顧客役と採点と記録が自動になり、指導役が行うのは判定の確認と一言だけです。本記事の想定はこの段階です。 本格構成は、半自動化の記録が3か月たまってから考えます。 新人ごとにどの項目を落としやすいかが記録表に見えてくると、次に練習するカードを選ぶ規則が作れます。 音声での練習は、実際の商談の口調に近づきますが、文字の練習で聞く項目が身についてからのほうが、振り返りが具体的になります。
05工数削減シミュレーション
導入後 120件 × 6分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 法人向けのSaaS・人材サービス・広告など、初回の商談で顧客の課題と導入の条件を聞き出すことが受注を左右する営業組織。新人や中途の営業を毎月のように受け入れ、先輩が顧客役になってロールプレイを行っているが、先輩の時間が取れず回数が足りない場合。ヒアリングで聞くべき項目が社内で決まっている(または決められる)場合。
- 商品が単純で、初回の商談でヒアリングをほとんど行わない営業。ロールプレイの評価をそのまま人事評価に使いたい場合。実在の顧客の情報を使って練習したい場合。新人の受け入れが年に数名で、先輩が付きっきりで指導できている場合。
07最小構成で試す方法
- 研修の担当が、架空の顧客のカードを1枚作る(隠す事実を7つと、それぞれを話す条件)
- ChatGPT の画面を開き、第7章の顧客役の指示とカードを貼り付ける
- 新人が20分ほど初回商談の会話をする
- 会話の全文をコピーし、別の会話を開いて採点役の指示とカードと一緒に貼る
- 出てきた判定を、その練習を横で見ていた指導役の判定と突き合わせる
これを新人3名で、同じカードを使って行ってください。 同じカードで3名の違いが出るかを見ます。違いが出ないなら、カードの事実が簡単に出すぎています。
| 出てきた内容 | 判断 |
|---|---|
| 指導役の判定と、聞けた・聞けなかったがほぼ一致した | 練習用の画面と記録表への書き出しに進む |
| 顧客役が聞かれる前に事実を話した | 条件の書き方で直る。構成は有効 |
| 新人が引き出した事実を採点役が拾えていない | 発言番号の付け方と、採点の指示を見直す |
2行目が出ることは珍しくありません。 先輩の顧客役でも、話の流れで先に予算を言ってしまうことはありました。カードの条件として文字にしてみると、それまで先輩ごとに違っていた顧客の設定が初めてそろいます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 顧客役が聞かれる前に事実を話す | 事実ごとに話す条件を書く。 1回の返答を3文以内にする |
| 顧客役が新人を導くような受け答えをする | 助言を禁じる。顧客役と採点役を別の指示にする |
会話に出てきただけで elicited になる | 新人の発言番号を必須にする。 示せなければ volunteered |
| 採点が点数のように扱われる | 点数と順位を出さない。人事評価に使わないことを先に決める |
| 画面から隠す事実が見えてしまう | 事実はスクリプトの側だけで扱い、HTML に書き込まない |
| API のキーが新人に渡る | ウェブアプリを「自分として実行」にし、キーはスクリプト側に置く |
| 実在の顧客の名前でカードを作る | 前処理で顧客管理の名前と照合する |
| 同じカードを繰り返して答えを覚える | 回数で別のカードを勧める。カードを毎月数枚足す |
| 順番の判定が回ごとにぶれる | AIに書かせず、発言番号の比較で規則判定にする |
| 指導役が記録を読まなくなる | 見る順番を決め、根拠の発言だけを読めば6分で済む形にする |
| 会話が長くなり利用料が増える | 1回の会話の発言数に上限を置く |
上の3行が、この構成の失敗のほとんどです。 どれも「事実が会話に出たこと」と「新人が事実を引き出したこと」を混ぜることから起きます。発言番号という根拠で区別できているかどうかで、練習として成り立つかが決まります。
4行目は、技術ではなく運用の取り決めです。 一覧に新人の名前と missed の数が並ぶと、比べたくなります。比べると、新人は聞き出す練習ではなく、カードの答えを覚える練習をし始めます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 新人の練習の会話の全文、新人ごとの判定の記録、架空の顧客のカード、指導役のコメントです。
- カードは架空の会社で作る … 実在の顧客の名前・規模・困りごとを使うと、顧客の情報を外部のサービスへ送ることになります。前処理で顧客管理の名前と照合し、混ざったものは使わせません
- 練習の記録を人事評価に使わない … 採点役の判定は、指示と会話の言い回しで揺れます。研修の振り返りに限ると、新人と指導役の両方に最初に伝えます
- 新人の会話を誰が見られるかを決める … 記録表の閲覧は、本人と指導役と研修の担当に限ります。同期の新人どうしで見せ合う運用にするなら、本人の同意を取ります
- API 側の保存期間を自社で決める … Response のオブジェクトは既定で30日保存され、
storeをfalseにすると保存しません。会話のオブジェクトは30日の期限の対象外なので、採点が済んだら消す処理を入れます - API のキーを画面に出さない … ウェブアプリは「自分として実行」にし、キーはスクリプトの側だけで扱います
- 練習の会話に実際の商談の内容を書かない … 新人が「この前の商談のこの顧客で練習したい」と考えることがあります。画面の最初に、実在の顧客の話を書かないことを表示します
誤りが起きた場合のリスクは、聞けていた事実を聞けていなかったと返すことと、聞けていない事実を聞けたと返すことの2つです。 前者は新人の自信を削り、後者は聞き逃したまま実際の顧客の前に出すことになります。どちらも、指導役が根拠の発言を読んで確かめる工程を外さないことで防ぎます。
10まず何から始めるか
1週目:ヒアリングの項目とカードを作る
社内で聞くべきとしている項目を7つにそろえ、項目と1対1で対応する隠す事実を持ったカードを3枚作ります。 事実ごとに「どう聞かれたら話すか」の条件を書きます。架空の会社で作ることを、研修の担当と決めます。
2週目:新人3名で試す
ChatGPT の画面に顧客役の指示とカードを貼り、新人3名が同じカードで練習します。指導役は横で聞き、自分の判定と採点役の判定を突き合わせます。 volunteered が出たら、条件の書き方を直します。
3週目:記録表と規則を決める
記録表の列と、提案の順番の規則を決めます。練習の記録を人事評価に使わないことを、新人と指導役に伝えます。
4週目:練習用の画面を作る
Google Apps Script のウェブアプリで、カードを選ぶ画面、会話の画面、記録表への書き出しを作ります。この時点では、指導役が会話の全文も読み、判定とのずれを数えます。
2か月目: カードを10枚に増やし、指導役が根拠の発言だけを読む運用に切り替えます。3か月目以降: 新人ごとの missed の傾向を見て、カードを足し、1回あたりの指導役の時間を実測します。カードごとの volunteered が月に数件まで減った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
会話の状態を、過去の発言を自分で並べる方法・previous_response_id・Conversations API(conversations.create())の3通りで扱えること。previous_response_id の鎖では過去の入力がすべて入力として課金されること。会話がセッション・端末・処理をまたいで使えること。Response のオブジェクトが既定で30日保存され、store を false にすると保存しないこと。会話のオブジェクトと項目が30日の期限の対象外であること | OpenAI API: Conversation state | 2026-10-06 |
text: { format: { type: "json_schema", strict: true, schema: ... } } でスキーマを渡すこと。required と additionalProperties: false、enum が使えること。拒否のとき refusal が返ること。上限で切れると status が incomplete、理由が max_output_tokens になること | OpenAI API: Structured Outputs | 2026-10-06 |
API へ送ったデータが、明示的に選ばない限り学習に使われないこと。不正利用の監視のログが既定で最大30日保持されること。/v1/conversations の状態が削除するまで保持されること | OpenAI API: Data controls in the OpenAI platform | 2026-10-06 |
ウェブアプリに doGet(e) か doPost(e) が必要で、HTML Service の HtmlOutput か Content Service の TextOutput を返すこと。「自分として実行」と「アクセスしたユーザーとして実行」を選べること | Google for Developers: Web Apps | 2026-10-06 |
| 1回の実行が6分まで、Google Workspace のアカウントで URL Fetch が1日100,000回であること。上限が予告なく変わりうること | Google for Developers: Quotas for Google Services | 2026-10-06 |
ペルソナカードの作り方とヒアリングの項目は、自社の営業の責任者と研修の担当で決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。API の料金とモデルごとの性能は、OpenAI の最新の案内を確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0474)についてのご相談はこちらから。
