はじめに

「商談が終わったら、すぐに活動内容を入力してください」

営業現場でよく聞くこの一言が、いかに現場の負担になっているか。

移動中、次のアポの準備中、それでも入力しなければならない。結果として記録が後回しになり、CRMのデータ品質が下がり、マネージャーは実態が見えなくなる···そんな悪循環は、多くの営業組織が抱える慢性的な課題です。

この記事では、Salesforce の 画面フロー機能とPrompt TemplateのStructured Output(構造化出力)機能を組み合わせて、この課題をどのように解決できるかを、実際の実装例をもとに解説します。

動画:利用イメージ

音声入力ーAIによる項目振り分け

この機能を使った利用例がこちらです。モバイルに音声で話すだけで、AIが重要情報を自動抽出し情報を更新します。本例ではテストオブジェクトというカスタムオブジェクトを対象としていますが、どのオブジェクトに対しても転用可能です。

何をする機能なのか

やっていることはシンプルです。

ここでは、レコードページから画面を起動する例をご紹介します。

  1. 営業担当者がレコードページのボタンを押す
  2. 「ここに音声入力してください」というテキストエリアが表示される
  3. 担当者は商談の内容を自由に話すか、テキストで入力する
  4. 「次へ」を押すとAIが内容を解析し、案件の各項目を自動で更新する

従来であれば「課題は何か」「予算はどれくらいか」「ステージはどこまで進んだか」を個別に入力する必要がありました。このフローでは、商談後のメモを自由形式で入力するだけで、AIがそれらを自動的に仕分けして書き込みます。

プロンプトについて

プロンプト全文と応答構造

本例ではテストオブジェクトを対象としていますが、このプロンプトは商談オブジェクトに更新する想定のプロンプトです。

▪ プロンプト全文

▪ プロンプトの設計ポイント

【1. 使用モデル:Gemini 2.5 Flash】

今回はGemini 2.5 Flashを使用しています。速度とコストのバランスが良く、日本語の音声文字起こし処理に適したモデルです。

【2. 出力形式:JSON構造化出力+セクションマーカー方式】

プロンプト自体はシンプルなテキスト指示ですが、SalesforceのStructured Output(構造化出力)機能によって、AIの回答はJSON形式で返されます。フロー側では structuredResponse.budget のようにドット記法で各項目に直接アクセスできるため、追加のパース処理は一切不要です。

【3. 「確定情報でなくても積極的に抽出する」という指示】

通常のデータ抽出では「確実な情報のみ抽出」という指示が多いですが、このプロンプトは逆のアプローチを取っています。商談では「100万くらい」「来春かな」という曖昧な言及も重要な営業情報であるため、「わずかでも言及があれば値を入れる」と明示しています。

【4. 空欄上書きリスクを防ぐ「完全除外条件」】

「一切言及がなかった場合のみ『本MTGでは更新候補無し』」と書くことで、フロー側の制御でこのキーワードが格納されている場合は更新しないように制御することができます。この制御を入れることで、既存のCRMデータが空欄で上書きされてしまうリスクを防ぐことができます。(今回のフローではこの制御分岐は入れていません)

【5. ステージは「状態の文章」で記録する】

opp.stage(案件ステージ)に対して、単に「提案中」「交渉中」ではなく「担当者は前向きだが部長決裁待ち」のような状況説明文を要求しています。マネージャーがリスト画面を一覧したときに、クリックせずに状況が把握できるCRMを実現するための設計です。

出力形式:JSON応答構造について

ここで、応答形式をJSON、応答構造から「新しいLightning種類」を選択し出力構造を作成します。

名称を指定します

次に、出力先項目を指定します。ここの項目変数名はプロンプト側と整合性が取れる形にする必要があります。(ただし、厳密に完全一致させなくても大丈夫です)

また、この説明欄を入力することで、より精度高く抽出することが可能になります。プロンプト側でしっかりと定義している場合には記載していなくても問題ありません。

補足:JSON応答構造を利用する場合の注意事項

カスタム Lightning 種類で項目のデータ型が Date, DateTime, Time だった場合は、フローから値にアクセスしても取得できない問題があります。(2026/3/6 確認時点)

現状回避策として Lightning 種類では String にしておき、フローの数式項目を使って変換します。

フローの構造

技術的には、以下の4ステップで構成されています。

STEP 1:レコードの取得

対象レコードのIDをもとに、現在の商談情報を取得します。

STEP 2:音声入力画面

ユーザーに向けて「ここに音声入力してください」というテキストエリアを表示します。フロー種類は Screen Flow(画面フロー)であるため、Lightning ページ上でそのままウィジェットとして起動できます。

STEP 3:AIによる解析

ここが核心部分です。Flow の generatePromptResponse アクションを通じて、Prompt Template(プロンプトテンプレート)を呼び出します。

入力として先ほどのテキストエリアの内容を渡すと、AIが以下の6項目を JSON 形式で返します。

  • budget 予算情報
  • event コンペリングイベント
  • pain 顧客課題
  • stage 案件ステージの進捗
  • req 要求仕様・要件
  • start 導入時期・タイミング

これは Salesforce の Structured Output(構造化出力)機能を活用したものです。

AIに対して「この形式のJSONで回答せよ」と指定することで、後続の処理でそのまま各フィールドに書き込めるようになります。

STEP 4:レコードの更新

STEP 3 で得たJSONの各値を、対応するレコードの項目にそれぞれ書き込んで完了です。

補足:

「本MTGでは更新候補無し」の場合には更新しない制御を入れる場合には、このように決定要素による条件分岐を入れることによって実現可能です。

なぜ Structured Output(構造化出力) が重要なのか

従来のAI活用では、AIの回答はテキストとして返ってくるため、「その中から必要な情報を抜き出す」という後処理が必要でした。正規表現や文字列解析を駆使しても、AIの回答のゆらぎに対応しきれないケースがありました。

Structured Output を使うと、AIは最初から指定した構造のJSONで回答します。フローから見れば structuredResponse.budget のように、オブジェクトのプロパティとして値を参照できるため、追加の解析処理が不要になります。

この仕組みにより、「AIの出力をそのままSalesforceの項目に書き込む」という処理が、コードを一行も書かずにノーコードで実現できます。

現場への展開イメージ

このデモ実装ではテスト用カスタムオブジェクトを対象としていますが、実運用では Opportunity(商談)や Event(行動)オブジェクトへの応用が考えられます。

たとえば:

  • 商談終了後:担当者が車の中で商談メモを音声入力 → Opportunity の StageName、予算、顧客課題などが自動更新
  • 訪問報告:活動内容をフリーテキストで記録 → 「競合情報」「顧客要望」「次のアクション」が自動でカテゴリ分けされて記録
  • マネージャーレビュー: AI が整理した項目をもとに状況をレポートで一目で確認、週次レビューの準備時間を削減

まとめ

Salesforce Flow の generatePromptResponse アクションと Prompt Template の Structured Output を組み合わせることで、「自由なテキスト入力 → 構造化されたCRMデータ」という変換が、驚くほどシンプルな構成で実現できます。

  • ノーコード:Apexを書かずにFlowとテンプレートだけで構築可能
  • 構造化出力:AIの回答を最初からJSONで受け取るためパース処理不要
  • 現場への展開:Lightningページにボタン一つで組み込めるScreen Flow形式

「営業がCRMを入力しない問題」は、ツールの問題ではなく入力コストの問題です。入力コストをAIで限りなくゼロに近づけることが、データ品質と現場定着の鍵になります。

※ 本記事は Salesforce の実装例をもとに作成しています。ご紹介した機能はお客様の環境に応じて Agentforce 関連のライセンスや設定が必要な場合があります。