📌 本記事は【中編】です
この記事は、Salesforce Agentforceを使って「議事録ファイルから日報を自動作成するエージェント」を作るハンズオン連載の第2回目です。
まだ環境準備やApexクラスの作成がお済みでない方は、先に 前編 をご覧ください。
今回のゴール
前編では、Sandboxの環境を整え、標準機能の壁を越えるための「Apex部品(ファイル読み込みクラス)」を作成しました。
今回の【中編】では、いよいよアプリケーションの核心部分を作っていきます。
具体的には、以下の2つの「脳」と「神経」を構築します。
- Prompt Builder (第3章): AIに「どう要約するか」を教える指示書を作成。
- Flow (第4章): レコードIDを受け取り、ApexとAIを連携させてデータを保存するロジックを構築。
第3章:AIの脳を作る (Prompt Builder)
第2章までで「環境」と「道具」は揃いました。ここからはAgentforceの頭脳となるプロンプト(指示書)を作成していきます。
今回は 「Flexテンプレート」 という種類を使用します。これは、特定のレコードに縛られず、自由に入力値を定義できるため、今回のように「Apexで変換したテキスト」を渡すケースに最適です。
3-1. プロンプトテンプレートの作成と入力定義
Flexテンプレートでは、作成時の画面で「AIに何を渡すか(入力)」を定義します。
-
[設定] > [プロンプトビルダー] を開きます。
-
[新規プロンプトテンプレート] をクリックします。
-
表示された画面で、以下の順序で設定を行います。
-
プロンプトテンプレートの種類:
Flex -
名前:
Generate Daily Report -
API参照名:
Generate_Daily_Report -
説明:
議事録テキストから日報を生成します。
【重要:入力の定義】
同じ画面内の「入力」セクションで、変数を定義します。- (追加) ボタンをクリック
-
名前:
MinutesText -
ソース種類:
自由テキスト- ※ここで「オブジェクト」ではなく「自由テキスト」を選ぶのがポイントです。
-
プロンプトテンプレートの種類:
-
設定ができたら [次へ] をクリックして、エディタ画面へ進みます。

これで、外部(Flow)からMinutesTextという名前でテキストを受け取れるようになりました。
3-2. プロンプトの記述
画面中央のエディタに、AIへの指示を書きます。以下の内容をコピー&ペーストしてください。
(※{!$Input:MinutesText} の部分は、画面上のリソースピッカーから選択して挿入するのが確実です)
あなたはプロフェッショナルな営業アシスタントです。
以下の「議事録テキスト」を読み込み、営業日報として適切な形式に要約してください。
# 議事録テキスト
{!$Input:MinutesText}
# 指示
1. 議事録の内容を要約し、要点を簡潔にまとめてください。
2. 決定事項やネクストアクション(ToDo)を漏らさず抽出してください。
3. 顧客の懸念点やポジティブな反応があれば強調してください。
4. 出力は以下のフォーマットを厳守してください。
# 出力フォーマット
--------------------------------------------------
【商談報告】
■概要
(会議の要点を3行以内で要約)
■決定事項
(決まったことを箇条書き)
■顧客の反応・懸念点
(ポジティブ/ネガティブな反応があれば記載)
■ネクストアクション(ToDo)
(誰が・いつまでに・何をするか)
--------------------------------------------------
# 制約事項
- 丁寧なビジネス日本語を使用すること。
- テキストが空の場合や読み取れない場合は「情報の取得に失敗しました」とだけ出力すること。
入力できたら、画面右上の [保存] をクリックし、続いて [有効化] をクリックします。
💡 テスト機能について 画面左上の「プレビュー」を使ってテストできます。「入力」欄に適当な会議メモを貼り付けて [応答を生成] を押してみてください。プロンプトを修正して色々試してみると面白いと思います。
第4章:処理をつなぐ (Flow)
「AgentからIDを受け取る」→「ファイルをApexで読む」→「AIに要約させる」→「レコードを更新する」 という一連の流れを、Flowを使って一本の線に繋ぎます。
Agentforceにおいて、Flowは単なる自動化ツールではなく、 「AIに手足を与えるツール」 として機能します。
4-1. 自動起動フローの作成
Agentforceから呼び出すアクションは、必ず 「自動起動フロー (トリガーなし)」 である必要があります。
- [設定] > [フロー] を開き、[新規フロー] をクリックします。
-
[自動起動フロー (トリガーなし)] を選択して [作成] をクリックします。
([作成]ボタンクリック後、エラーが出る場合がありますが、無視してください)
4-2. 入出力変数の作成(重要!)
まず最初に、Agentとデータの受け渡しをするための「ドア(変数)」を作ります。
ここを間違えるとAgentとうまく会話できないので注意してください。
- 画面左側のツールボックスで [新規リソース] をクリックし、以下の2つの変数を作成します。
① 入力用変数(Agent → Flow)
Agentから「どのレコードの話か?」というIDを受け取ります。
| 設定項目 | 値 |
|---|---|
| リソース種別 | 変数 |
| API参照名 | recordId |
| データ型 | テキスト |
| 入力で使用可能 | ✅ チェックを入れる (必須) |
② 出力用変数(Flow → Agent)
処理が終わった後、Agentに「終わったよ」と伝えるためのメッセージを入れます。
| 設定項目 | 値 |
|---|---|
| リソース種別 | 変数 |
| API参照名 | completionMessage |
| データ型 | テキスト |
| 出力で使用可能 | ✅ チェックを入れる (必須) |
⛔️ API参照名に注意
recordId という名前は正確に入力してください。Agentforceの仕様上、コンテキストIDを受け取る変数として最も標準的です。
4-3. ロジックの組み立て
ここから要素を配置して線を繋いでいきます。今回は以下の7ステップで構築します。
Step 1: 元の行動レコードを取得
まずはIDを使って、現在開いている行動レコードの情報を取得します。
「自動起動フロー」の下の「+」をクリックして以下の要素を追加してください。
- 要素: [レコードを取得]
-
表示ラベル:
行動を取得 -
API参照名:
Get_Event_Record -
データソース:
salesforceオブジェクト -
オブジェクト:
行動 (Event) -
検索条件:
活動ID次の文字列と一致するrecordId - 行動レコードの並び替え: 並び替えなし
-
保存するレコード数:
最初のレコードのみ -
レコードデータの保存方法:
すべての項目を自動的に保存
Step 2: 添付ファイルへのリンクを探す
行動レコードに紐付いているファイル(ContentDocumentLink)を探します。
「行動を取得」の下の「+」をクリックして以下の要素を追加してください。
- 要素: [レコードを取得]
-
表示ラベル:
添付ファイルリンクを取得 -
API参照名:
Get_ContentDocumentLinks -
データソース:
salesforceオブジェクト -
オブジェクト:
コンテンツドキュメントリンク (ContentDocumentLink) -
検索条件:
リンク済みエンティティID(LinkedEntityId)次の文字列と一致するrecordId -
並び替え:
降順のSystemModstamp(最新のファイルを狙うため) -
保存するレコード数:
最初のレコードのみ -
レコードデータの保存方法:
すべての項目を自動的に保存
Step 3: ファイルの実体データを取得
リンク情報から、実際のファイルデータ(ContentVersion)を取得します。
「添付ファイルリンクを取得」の下の「+」をクリックして以下の要素を追加してください。
- 要素: [レコードを取得]
-
表示ラベル:
ファイル実体を取得 -
API参照名:
Get_ContentVersion -
データソース:
salesforceオブジェクト -
オブジェクト:
コンテンツバージョン (ContentVersion) -
検索条件: すべての条件に一致(AND)
-
ContentDocumentId次の文字列と一致する添付ファイルリンクを取得.ContentDocumentId -
最新(IsLatest)次の文字列と一致するTrue
-
-
保存するレコード数:
最初のレコードのみ -
レコードデータの保存方法:
すべての項目を自動的に保存
Step 4: Apexでテキスト変換 (第2章で作成したApex利用)
ここでApexを呼び出し、ファイルをテキストに変換します。
「ファイル実態を取得」の下の「+」をクリックして以下の要素を追加してください。
- 要素: [アクション]
- カテゴリ: `すべてのアクション'
-
アクション:
Convert File to Text(第2章で作成したApexクラス) -
表示ラベル:
テキスト変換処理 -
API参照名:
Action_Convert_File_To_Text -
入力値を設定:
contentVersionIds: 「含む」に変更し、ファイル実体を取得 > ContentVersion ID
💡ここは ContentVersion ID です。ContentDocumentIDと間違えやすいので注意 -
出力リソースを表示:
- 「手動で変数を割り当て」にチェック。
-
出力値を保存:output
- [+新規リソース]を選択。
-
リソース種別:
変数 -
API参照名:
ExtractedText -
データ型:
テキスト
Step 5: Prompt Builderで日報生成
変換したテキストをAIに渡し、要約させます。
「テキスト変換処理」の下の「+」をクリックして以下の要素を追加してください。
- 要素: [アクション]
-
カテゴリ:
プロンプトテンプレート -
アクション:
Generate Daily Report(第3章で作成したテンプレート) -
表示ラベル:
日報生成 -
API参照名:
Action_Generate_Report -
入力値を設定:
- MinutesText:
{!ExtractedText}
- MinutesText:
-
出力リソースを表示:
- 「手動で変数を割り当て」にチェック。
-
出力値を保存:output
- [+新規リソース]を選択。
-
リソース種別:
変数 -
API参照名:
GeneratedReport -
データ型:
テキスト
Step 6: 行動レコードを更新
生成された日報を、元の行動レコードの「説明」欄に書き込みます。既存のメモを消さないよう、数式を使って追記します。
- 左側メニュー [新規リソース] > [数式] を作成。
-
API参照名:
DescriptionUpdateFormula - データ型: テキスト
-
数式:
BLANKVALUE({!Get_Event_Record.Description}, "") & BR() & BR() & "--- AI生成日報 ---" & BR() & {!GeneratedReport}
-
API参照名:
2.「日報生成」の下の「+」をクリックして以下の要素を追加してください。
- 要素: [レコードを更新] を配置。
-
表示ラベル:
日報を保存 -
API参照名:
Update_Event_Description - 「レコードを識別する条件を指定し、項目を個別に設定」を選択
-
オブジェクト:
行動 -
検索条件:
活動 ID次の文字列と一致するrecordId -
行動の項目値をレコードに設定:
-
項目:
説明(Description) -
値:
{!DescriptionUpdateFormula}
-
項目:
Step 7: 完了メッセージの設定
最後に、Agentに報告するためのメッセージを変数に入れます。
「日報を保存」の下の「+」をクリックして以下の要素を追加してください。
- 要素: [割り当て]
-
表示ラベル:
メッセージ設定 -
API参照名:
Assign_Completion_Message -
変数:
{!completionMessage} -
演算子:
次の文字列と一致する -
値:
日報の作成が完了し、行動レコードの「説明」欄に保存しました。
![]() |
すべて設定出来たら、 フローは左図のようになっているはずです。 |
4-4. 保存と有効化
フローが完成したら保存します。
- 画面右上の [保存] をクリックします。
-
フローの表示ラベル:
Agent:日報作成 -
API参照名:
Agent_GenerateDailyRport
-
フローの表示ラベル:
- [有効化] をクリックします。
💡 なぜ「有効化」が必要?
Agent Builderの設定画面では、有効化されているフローしか選択肢に表示されません。「フローを作ったのに出てこない!」という場合は、有効化忘れを疑ってください。
これですべての「仕込み」が完了です!
次回の後編(最終回)では、このフローをAgentforceに登録し、実際にチャット画面で会話しながら日報が作られる様子を確認します。
👉 後編:Agentforceへの実装と動作確認 へ続く


