Salesforce
デベロッパー
ブログ

話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output(構造化出力) の実装例

Avatar for Yuki OtaYuki Ota
Salesforce FlowとPrompt Templateの構造化出力機能を活用し、音声入力でCRM情報を自動更新する実装例を解説。商談後のメモを話すだけで、AIが予算・課題・ステージなどを自動で項目別に振り分け。ノーコードで実現する営業DXの実践ガイド。
話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output(構造化出力) の実装例
April 23, 2026

はじめに

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

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

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

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

動画:利用イメージ

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

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

何をする機能なのか

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

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

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

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

プロンプトについて

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

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

▪ プロンプト全文

1【Role】
2活動報告の音声文字起こしを最小修正で正規化(内部のみ)し、以下を出力せよ(コードフェンス禁止)。
3
4【抽出用マーカー規約(厳守)】
5- Key: opp.stage / opp.pain / opp.start / opp.event / opp.budget / opp.req
6
7【Inputs】
8- raw_transcript: {!$Input:input}
9
10【商談更新用(値のみ・ラベル無し・推定抽出強化)】
11- すべての opp.* は、タグ内にプレーンテキストの値のみを簡潔に1行250文字以内で出力。
12- 禁止:Markdown記法(太字・リストなど)、ラベル("金額:"など)、カッコ装飾、信頼度スコア、引用符、改行。
13- 抽出基準(重要):
14  - 「確定」していなくても、会話の中で登場した見込み値、概算、候補、提案内容があれば積極的に抽出すること。
15  - わずかでも関連する言及があれば値を入れ、「本MTGでは更新候補無し」としないこと。
16- 整形ルール:改行は半角スペースへ変換。連続空白は1つへ短縮。
17- 完全除外条件:会話全体を通して、そのトピックに関する言及が一切なかった場合のみ、「本MTGでは更新候補無し」を出力。
18
19[各項目の抽出指針]
20- opp.stage: 商談の現在の到達点と顧客の温度感を要約した説明文。単なるフェーズ名(例:「提案」)ではなく、「担当者は前向きだが部長決裁待ち」「機能要件は合意したが予算で難航中」のように具体的な状況を記述すること。
21- opp.pain: 顧客が漏らした悩み、不満、現状の課題(推測含む)。簡潔に1文で記載。
22- opp.start: 開始時期、導入時期、納期の目安(「来春」「4月頃」等のテキストも可)。簡潔に1文で記載。
23- opp.event: 今後のマイルストーン、コンペリングイベント(幹部プレゼン、定例会、PoC開始など)。簡潔に1文で記載。
24- opp.budget: 金額、予算感、価格帯、コストに関する言及(「100万くらい」「予算確保済み」など幅のある表現もそのまま抽出)。簡潔に1文で記載。
25- opp.req: 機能要件、要望、導入条件、制約事項。簡潔に1文で記載。

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

【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 関連のライセンスや設定が必要な場合があります。

その他の関連記事

Building AI Automations with Prompt Builder Structured Outputs

Building AI Automations with Prompt Builder Structured Outputs

Learn how the Prompt Builder Structured Outputs feature delivers reliable, parseable JSON for Flow and Apex by eliminating hallucinated fields and the need for custom parsing code.April 02, 2026

Use Flex Prompt Template to Summarize Record Changes

Use Flex Prompt Template to Summarize Record Changes

Learn how Einstein Generative AI powered - Flex prompt templates can be used to summarize changes made to records.August 12, 2025