商談の文字起こしから営業日報を自動作成する方法
オンライン商談の文字起こしを入力に、生成AIへ「顧客課題」「要望」「予算」「決裁者」「競合」「宿題」「次回アクション」の7項目を抽出させ、CRMの対応する入力欄へそのまま入る形の構造化データとして受け取ります。
- 利用ツール
- Azure OpenAI Service/ChatGPT/Claude/Gemini/Make/n8n/Power Automate/Zapier
- 対象業界
- IT・SaaS/商社
- 対象部門
- 営業
- 対象業務
- データ入力・転記/書類作成
- 主な課題
- 入力作業が多い/属人化している/書類作成に時間がかかる
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- ノーコード連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 営業担当が商談を終える(30〜60分)
- 手元のメモと記憶をたどって、何を聞いたかを思い出す
- Salesforceの商談レコードを開き、活動履歴に新規レコードを作る
- 「顧客課題」「要望」「次回アクション」などの入力欄に、思い出した内容を打ち込む
- 案件フェーズと次回接触予定日を更新する
- 上長が週次で一覧を見て、空欄の多い案件を個別に指摘する
- 商談が終わる(Teamsの文字起こしが自動生成される)
- 自動文字起こしと、CRMから引いた案件情報をAIに渡す
- 自動AIが7項目を抽出し、決められた形式のデータで返す
- 自動生成結果を営業担当のTeamsチャネルへ送る
- 人営業担当が内容を確認し、間違いがあれば直して承認する
- 自動承認された内容をSalesforceの対応する項目へ登録する
各工程の詳しい説明を読む
- 営業担当が商談を終える(30〜60分)
- 手元のメモと記憶をたどって、何を聞いたかを思い出す
- Salesforceの商談レコードを開き、活動履歴に新規レコードを作る
- 「顧客課題」「要望」「次回アクション」などの入力欄に、思い出した内容を打ち込む
- 案件フェーズと次回接触予定日を更新する
- 上長が週次で一覧を見て、空欄の多い案件を個別に指摘する
この流れには3つの問題があります。
(a)書くのが商談直後ではない。 次の商談が続くため、実際には夕方にまとめて3件分を書くことになります。3件目の記憶から書き始めるので、1件目の内容が薄くなります。
(b)粒度が担当ごとに違う。 「予算感あり」と書く人と「今期3,000万円の枠内で検討、決裁は部長」と書く人がいます。後から「予算が確定している案件」を検索しようとしても、文字列の書き方が揃っていないため拾えません。
(c)聞いたはずの項目が空欄になる。 決裁者や競合は、商談中には話に出ているのに、日報を書く段階で思い出せず飛ばされます。上長が指摘した時点では、担当者本人も覚えていません。
- 商談が終わる(Teamsの文字起こしが自動生成される)
- 【自動】 文字起こしと、CRMから引いた案件情報をAIに渡す
- 【自動】 AIが7項目を抽出し、決められた形式のデータで返す
- 【自動】 生成結果を営業担当のTeamsチャネルへ送る
- 【人】 営業担当が内容を確認し、間違いがあれば直して承認する
- 【自動】 承認された内容をSalesforceの対応する項目へ登録する
自動化されるのは「思い出す」「文章にする」「転記する」の3つです。残るのは「事実と違う箇所を見つけて直す」だけになります。
この工程では、5の人間による承認を必ず残します。 商談内容は案件の判断根拠になり、誤った内容が登録されると失注分析や予実管理まで狂うためです。完全自動登録にしてよいのは、誤抽出率を数か月分の実データで測ってからです。
02今回想定するシステム構成
Teams会議(文字起こしON) │ ▼ Microsoft Graph API ── 文字起こしを取得 │ ├── Salesforce API ── 案件ID・顧客名・現在フェーズを取得 │ ▼ Power Automate(または Make / Zapier / n8n) │ ▼ LLM API(Claude / GPT / Gemini)── 7項目を抽出、JSON Schemaで形式を固定 │ ▼ Teams チャネルへ通知 ──【人が確認・修正・承認】 │ ▼ Salesforce(または HubSpot / kintone)へ登録
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 会議・文字起こし | Microsoft Teams | Zoom、Google Meet |
| 文字起こしの取得 | Microsoft Graph API | 会議ツールの録画連携、外部文字起こしサービス |
| ワークフロー | Power Automate | Make、Zapier、n8n |
| 生成AI | Claude API | OpenAI API、Gemini API、Azure OpenAI Service |
| 確認の場 | Teams | Slack、メール |
| 登録先 | Salesforce | HubSpot、kintone、Zoho CRM |
特定の製品が必須という構成ではありません。「会議データを取れる」「ワークフローを組める」「LLMを呼べる」「CRMに書き戻せる」の4つが揃えば同じ構成になります。
03どうやって実装するのか
処理の起点を決める
Teams会議の終了、より正確には文字起こしファイルが生成されたことを起点にします。
会議終了と文字起こしの生成には時間差があるため、「会議終了」を直接のトリガーにすると、まだ存在しないデータを取りに行って失敗します。実装では次のどちらかを取ります。
- 会議終了の15分後にワークフローを開始する(遅延を入れる)
- 文字起こしを保存する専用のSharePointフォルダを監視し、Power Automateの「ファイルが作成されたとき」トリガーで開始する
後者のほうが確実です。SharePointコネクタの「ファイルが作成されたとき」は標準のトリガーとして提供されています。
入力データを集める
AIへ渡すのは次の3つです。
| データ | 中身 | 取得元 |
|---|---|---|
| 商談の文字起こし | 発言者名つきのテキスト全文 | Teams(Graph API) |
| 案件情報 | 案件ID、顧客名、現在の商談フェーズ、前回の活動履歴 | Salesforce |
| 抽出項目の定義 | 7項目それぞれの意味と、書き方のルール | プロンプトに固定で埋め込む |
文字起こしだけを渡すと、AIは「株式会社◯◯さん」という発言から顧客名を推測しようとします。CRM側にある確定情報を一緒に渡すことで、推測させる余地を減らします。
データの取得方法を決める
文字起こし: Microsoft Graph の GET /users/{userId}/onlineMeetings/{meetingId}/transcripts で会議の文字起こし一覧を取得し、GET /users/{userId}/onlineMeetings/{meetingId}/transcripts/{transcriptId}/content で本文を取得します(v1.0で提供)。
ここには2つの制約があります。
- カレンダーに予定として存在する会議のみが対象です。その場で立ち上げたアドホック会議の文字起こしはGraphから取れません
- テナント管理者がGraph経由の文字起こしアクセスを止めている場合、403が返ります。この場合、依頼側で解除してもらう以外の回避策はありません
自社環境でこの2点を先に確認してください。取得できない環境では、Teamsの文字起こしを手動でSharePointへ保存する運用に切り替え、フォルダ監視をトリガーにします。
案件情報: Salesforce REST API の sObject エンドポイントで、会議の参加者メールアドレスまたは会議件名に含まれる案件番号から該当レコードを引きます。会議と案件を確実に紐づけるには、会議の件名に案件番号を入れる運用ルールを先に作るのが早道です。ここを自動判定に頼ると、同名顧客の別案件を取り違えます。
AIへ渡す前に整形する
そのまま渡すと精度が落ちるため、3つの処理を入れます。
- 不要部分の除去 … 冒頭の挨拶、接続確認(「聞こえますか」)、雑談を削る。単純に先頭2分・末尾1分を落とすだけでも効きます
- 長い商談の分割 … 60分の商談は文字起こしで2万字を超えます。入力上限に収まる場合でも、長すぎると後半の情報が抜けやすくなります。20分ごとに分けて抽出し、最後に統合する構成にします
- 固有名詞の補正 … 自社の製品名、競合名、業界用語の誤変換を、置換辞書で直します。「デボノ」が「デ・ボーノ」になるといった誤りは、辞書を用意すれば潰せます
AIに処理させる
「要約して」ではなく、抽出する項目を指定します。
| 項目 | 抽出する内容 |
|---|---|
| 顧客課題 | 顧客が現状の問題として述べたこと |
| 要望 | 顧客が実現したいと述べたこと |
| 予算 | 金額、予算枠の有無、時期 |
| 決裁者 | 決裁権を持つ人物の役職・氏名 |
| 競合 | 比較検討していると述べた他社 |
| 宿題 | 自社が持ち帰った依頼事項 |
| 次回アクション | 次に何を、いつまでに、誰がやるか |
指示内容を固定する
あなたは法人営業の商談記録を整理する担当者です。
以下の商談の文字起こしから、指定された7項目を抽出してください。
【厳守事項】
- 文字起こしに明記されていない内容は推測しないでください。
該当する発言がない項目は "不明" と記入してください。
- 金額、日付、社名、役職は、発言にあった通りに記載してください。
言い換えや概算への変換をしないでください。
- 顧客の発言と自社担当者の発言を区別してください。
「顧客課題」「要望」「予算」には、顧客側の発言のみを反映してください。
- 推測が混ざった箇所には、末尾に「(要確認)」を付けてください。
【案件情報】
案件ID: {opportunity_id}
顧客名: {account_name}
現在フェーズ: {stage}
【文字起こし】
{transcript}
「明記がなければ不明とする」という制約が、この構成でもっとも重要な1行です。 これを書かないと、AIは「予算の話は出ていないが、規模から見て500万円程度と思われる」といった内容を、事実のように書きます。CRMに入ってしまえば、後から見た人は本人が聞いた情報だと受け取ります。
出力形式を固定する
自由文ではなく、項目が固定されたJSONで返させます。CRMの入力欄は決まった数・決まった名前で存在するため、自由文で返されると、後段で「どこからどこまでが顧客課題か」を切り出す処理が必要になり、そこが壊れやすくなるからです。
{
"customer_issue": "",
"customer_request": "",
"budget": "",
"decision_maker": "",
"competitor": "",
"action_items_ours": "",
"next_action": "",
"next_action_due": "",
"confidence_note": ""
}
Claude API には Structured Outputs(JSON Schemaを指定すると、その形式に沿った出力だけが生成されるよう制約をかける仕組み)が提供されています。スキーマを渡す方式と、ツール定義を使う方式の2通りがあります。同種の機能は他社のLLM APIにもあります。これを使うと、項目名の揺れや、JSONとして壊れた出力による処理落ちがなくなります。
confidence_note は、AIが判断に迷った箇所を書かせる欄です。確認する人が、どこを重点的に見ればよいか分かります。
システムへ連携する
承認後、JSONの各項目をCRMの対応する入力欄へ書き込みます。
| JSONのキー | Salesforceの項目 |
|---|---|
customer_issue | 商談オブジェクトのカスタム項目「顧客課題」 |
budget | カスタム項目「予算感」 |
decision_maker | カスタム項目「決裁者」 |
competitor | カスタム項目「競合」 |
next_action | ToDo(活動)の件名 |
next_action_due | ToDoの期日 |
HubSpotの場合は PATCH /crm/v3/objects/{objectType}/{recordId} に properties を渡します。自社で決めた一意のIDで更新したい場合は、hasUniqueValue を立てたプロパティを作り、クエリパラメータ idProperty にその名前を指定すると、HubSpotの内部IDを知らなくても更新できます。
CRM側の項目を先に作っておく必要があります。 既存の「備考」欄に全部流し込む構成にすると、検索も集計もできず、日報を書く手間が減っただけで終わります。この構成の価値は、7項目が別々の欄に構造化されて入ることにあります。
人が確認する
初期運用では全件を人が確認します。生成結果をTeamsのチャネルへ投稿し、営業担当が承認ボタンを押した内容だけがCRMへ入る形にします。
3か月ほど運用して誤抽出率を測ったうえで、段階的に自動化を進めます。
| 段階 | 運用 |
|---|---|
| 第1段階 | 全件を人が確認して承認 |
| 第2段階 | confidence_note が空の場合のみ自動登録、それ以外は確認へ |
| 第3段階 | 金額と決裁者だけ人が確認、他は自動登録 |
金額と決裁者は自動化しないことを推奨します。 この2項目は誤りが商談の判断そのものを狂わせるうえ、誤っていても後から気づきにくいためです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 文字起こしが生成されていない | 30分後にもう一度取りに行く。2回失敗したら担当者に「手動で日報を入力してください」と通知する |
| Graphが403を返す | 処理を止め、管理者へ通知する。リトライしても解消しないため繰り返さない |
| 案件が特定できない | AIを呼ばず、担当者に案件を選ばせるカードをTeamsへ送る。推測で別案件に書き込まない |
| 同名顧客が複数ヒットする | 同上。候補を並べて選ばせる |
| AIの出力がスキーマに合わない | 1回だけ再実行する。2回失敗したら文字起こしのリンクを添えて担当者へ送る |
| 商談が5分未満 | 処理対象外にする。日程調整だけの通話で日報が生成されるのを防ぐ |
| CRMへの書き込みが失敗する | 生成済みのJSONを保持し、担当者に通知する。生成をやり直さない(LLMの再実行コストが無駄になるため) |
記録を残す
次の3つを残します。営業活動の記録は、後から「なぜこの判断をしたか」を確認する対象になるためです。
- 入力した文字起こし(またはその保存先へのリンク)
- AIの出力JSON(承認前の生の状態)
- 承認者、承認日時、修正された箇所
修正箇所のログは、プロンプト改善の材料にもなります。「予算だけ毎回直されている」と分かれば、その項目の指示文を見直せます。
04実装レベルの3段階
半自動化の時点で、10分の作業が4〜5分になります。本格構成にすると3分程度になりますが、CRM側のカスタム項目の設計とAPI連携が必要になるため、実装量は倍以上になります。半自動化で一度止めて、効果を測ってから進めることを勧めます。
05工数削減シミュレーション
導入後 1,200件 × 3分 ÷ 60 = 60 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- オンライン商談が中心で、CRMを日常的に運用しており、営業10名以上・月500商談以上の組織。CRMにカスタム項目を追加できること。
- 対面・電話商談が大半の組織。CRMの項目を追加できない環境。月間商談が100件未満で、投資に対する削減時間が小さい場合。
07最小構成で試す方法
システム連携をせず、既存の環境だけで試せます。まずこれをやってください。
- Teamsの文字起こしをダウンロードする(会議の詳細画面から取得できます)
- ChatGPT、Claude、Gemini などのチャット画面に、上のプロンプトを貼る
- 続けて文字起こしを貼り、生成させる
- 出てきた内容をSalesforceへコピーする
これだけで「AIの抽出精度が実用に足るか」が分かります。過去の商談20件で試して、7項目のうち何項目が直しなしで使えるかを数えてください。5項目以上がそのまま使えるなら、自動化する価値があります。 3項目以下なら、プロンプトか入力データに問題があるので、自動化を作る前にそこを直します。
社内の情報を外部AIに入れてよいかは、先に情報システム部門へ確認してください(§13)。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 文字起こしがまだ生成されていない状態でワークフローが動く | 会議終了ではなく、文字起こしファイルの生成をトリガーにする |
| Graph APIが403を返す | テナント設定で文字起こしAPIアクセスが許可されているかを、実装前に確認する |
| アドホック会議の文字起こしが取れない | カレンダーに予定を入れてから会議を始める運用にする。または手動保存に切り替える |
| 固有名詞が誤変換される | 自社製品名・競合名・顧客名の置換辞書を用意する。案件情報をプロンプトに含める |
| AIが予算を推測して書く | プロンプトに「明記がなければ不明」の制約を入れる。confidence_note に迷いを書かせる |
| 60分商談で後半の情報が抜ける | 20分ごとに分割して抽出し、最後に統合する |
| CRMの項目名とJSONのキーが合わない | JSON Schemaで出力形式を固定し、対応表をコードの1か所にまとめる |
| 同名顧客で別案件に書き込まれる | 会議件名に案件番号を入れる運用にする。特定できない場合はAIを呼ばず担当者に選ばせる |
| 承認が滞留して結局CRMが空のまま | 承認カードに期限を設け、24時間で上長へエスカレーションする |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 顧客の社名、担当者の氏名・役職、予算金額、社内の検討状況、競合の情報。顧客の営業秘密に触れる可能性があります。
確認すべきことは4つです。
- 外部AIへの入力可否 … 顧客との秘密保持契約で、商談内容の第三者提供が制限されていないかを確認します。制限がある場合は、Azure OpenAI Service など、入力データを学習に使わないことが契約で保証されるサービスを選びます
- 文字起こしの取得許可 … 会議の録画・文字起こしには、参加者への告知が必要です。顧客が同席する商談では、冒頭で了解を得る運用にします
- アクセス権限 … 生成された日報が、担当外の営業からも見える状態にならないよう、CRM側の権限設定と揃えます
- 自動実行してよい範囲 … §7の「人間の確認」に書いたとおり、初期は全件承認とします。金額と決裁者は、運用が安定した後も人の確認を残すことを推奨します
誤生成が起きた場合のリスクは、「事実でない顧客課題が案件の判断根拠になる」ことです。承認ログを残し、後から誤りをたどれる状態にしてください。
10まず何から始めるか
1週目:精度を測る
営業2名に協力してもらい、過去の商談20件の文字起こしで最小構成(§8)を試します。7項目それぞれについて、直しなしで使えたかを記録します。判断基準は「5項目以上が直しなしで通るか」です。
2週目:前提を確認する
情報システム部門に3点を確認します。(a)Graph API経由の文字起こしアクセスがテナントで許可されているか。(b)商談内容を外部AIに入力してよいか。(c)Salesforceにカスタム項目を追加できるか。ここで止まる場合は、構成を変える必要があります。
3〜4週目:半自動化を1チームで動かす
営業1チーム(5名程度)を対象に、文字起こし取得からTeams通知までを作ります。CRM登録は手動のままにします。ここまでで、10分の作業が4〜5分になるかを実測します。
その後: 削減効果が確認できたら、CRM連携を追加し、対象を全営業へ広げます。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Teams会議の文字起こしをGraph API v1.0で取得できること、カレンダー予定のある会議に限られること、テナント設定により403が返ること | Microsoft Learn: List transcripts / Get callTranscript | 2026-09-02 |
| Power Automateのトリガー(SharePoint「ファイルが作成されたとき」等) | Microsoft Learn: トリガー | 2026-09-02 |
| Claude APIのStructured Outputs(JSON Schemaによる出力形式の固定) | Anthropic: Structured outputs | 2026-09-02 |
| HubSpotのプロパティ更新(PATCH、idPropertyによる外部キー更新) | HubSpot: Properties API | 2026-09-02 |
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0001)についてのご相談はこちらから。
