【Agentforce実践】解約予兆を自動検知してリテンション施策を提案するエージェントを作ってみた

解約の兆候を点数で判定し、判定理由とリテンション施策の文章を生成AIに書かせる仕組みをSalesforce上で構築。点数の計算まで生成AIに任せると数字を誤るため、点数はフローの加点ルール、文章は生成AIという分担にした過程と、7件の取引先での検証結果をまとめた。

構築・検証した仕組み

SaaS(インターネット経由で利用するソフトウェアサービス)では、既存顧客の解約(チャーン)が売上に直接影響します。利用頻度の低下やNPS(顧客がサービスを他者に勧める意向を示す指標)の悪化など、解約の兆候はSalesforceに記録されています。この記録から解約リスクを点数で判定し、判定理由とリテンション施策(顧客の継続利用を促す取り組み)の文章を生成AIに書かせ、担当者へのToDo(対応すべき作業)作成までを自動化しました。Salesforce Sandbox(本番とは別の検証環境)で構築・検証しています。

解約の申し出を受けてからでは、不満の聞き取りや改善提案に使える時間が限られます。

兆候そのものはSalesforceに残っています。利用回数の落ち込み、NPSの悪化、未解決のサポートケースの増加。ただ、数百件の取引先についてこれらを毎週人手で確認するには時間がかかります。

そこで、取引先のデータが更新されたらフローが起動し、解約リスクの点数を付け、生成AIが判定理由とリテンション施策を日本語で書き、担当者にToDoを配るところまでをSandboxで作りました。Prompt BuilderとFlow Builderが中心で、Apexは呼び出し用の1クラスだけです。

作りながら分かったのは、点数の計算を生成AIに任せると数字を間違えることでした。最終的に、点数はフローの加点ルール、文章は生成AIという分担に落ち着いています。

今回作るもの — 全体の流れ

  1. 取引先の利用回数やNPSが更新される
  2. レコードトリガフロー(データの作成・更新をきっかけに自動実行する処理)が非同期パス(レコード保存の確定後に別処理として走る経路)で起動し、加点ルールで解約リスクスコアとリスクレベルを算出する
  3. 算出した点数と検知した解約の兆候をプロンプトテンプレートへ渡し、生成AIが判定理由とリテンション施策を日本語で書く
  4. 点数、リスクレベル、生成された文章を取引先に書き戻す
  5. リスクが高・中なら、取引先所有者にフォローアップToDoを作成する

1回判定するとAI処理済フラグが立ち、同じ取引先は再び判定されません。翌月のデータで評価し直すには、スケジュールフローなどでフラグを戻す処理が別に要ります。今回はそこまで作っていません。

点数はルール、文章は生成AI

最初は点数の計算も生成AIに任せました。ところが「NPS 15は負の値」「合計85点」といった誤りが出ます。加点表を渡しても、足し算そのものを間違えます。そこで点数とリスクレベルはフローの加点ルールで確定させ、生成AIには確定した判定を渡して、理由と打ち手の文章だけを書かせる形にしました。誤差が出せない数値は計算式、言葉にする部分は生成AI、という分担です。

解約予兆検知の全体の流れ。取引先データの更新、フローによる加点、生成AIによる文章作成、書き戻し、ToDo作成の5段

自動処理を担うのは、レコードトリガフローとプロンプトテンプレートです。あわせて作るAgentforceエージェント「解約リスクアナリスト」は、担当者がチャットで個別の取引先について相談するための窓口で、自動処理の経路とは別に動きます。

Step 1 — Agentforceエージェントの作成

このエージェントが担当する範囲

ここで作るエージェントは、担当者がチャットで「この取引先の状況はどうか」と聞くための窓口です。取引先の更新をきっかけに自動で走る処理は、Step 4以降のプロンプトテンプレートとフローが担当します。エージェントを作っただけでは自動化されません。自動処理だけが必要なら、このStepは飛ばせます。

エージェントの新規作成

Agentforce Studioを開き、「New Agent」ボタンから新しいエージェントを作成します。

設定項目値
エージェント名解約リスクアナリスト
API参照名Churn_Risk_Analyst
種別AgentforceEmployeeAgent(社内向け)
説明取引先の利用回数、NPS、サポート満足度、未解決ケース数を読み、保存されている解約リスクの点数と判定理由を日本語で答えます。
Agentforce Studioのエージェント一覧画面。解約リスクアナリストが表示されている
Agentforce Studioのエージェント一覧。作成した「解約リスクアナリスト」が表示されています。

エージェントの詳細設定

エージェントの詳細画面で、ロールと会社情報を設定します。

ロール設定(点数は計算させない)

「あなたは、顧客担当者から取引先の状況を聞かれたときに答える役割です。取引先の月間利用回数、前月との差、NPS、サポート満足度、未解決ケース数、最終ログイン日、契約更新日を読み、すでに保存されている解約リスクの点数と判定をそのまま伝えます。点数は計算し直しません。次に何をするかを聞かれたら、誰がいつまでに何をするかを日本語で答えます。」

会社情報

「はてなベース株式会社は、法人向けにクラウドサービスを提供しています。顧客担当者は、各社の利用状況と問い合わせの履歴を見て、契約の継続に必要な支援を行います。」

エージェントの詳細設定画面。説明、ロール、会社の3つの文が日本語で入っている
エージェントの詳細設定。ロールに「点数は計算し直しません」と書いて、採点はフロー側に任せます。

トピック「解約予兆分析」の設定

エージェントにトピックを追加し、プロンプトで分析ロジックを指示します。

設定項目値
トピック名解約予兆分析
分類の説明Account(取引先)の利用状況・満足度データから解約リスクを分析する
スコープAccount(取引先)データの解約リスク分析

トピックの指示文に入れる内容

  • 分析対象データ — 月間利用回数と前月比、NPSスコア(-100〜100)、サポート満足度、未解決ケース数、最終ログイン日からの経過日数、契約更新日までの残日数
  • 判定基準 — 利用量が前月比50%超で落ちた場合と、NPSが0未満の場合を重く見る。30日を超える未ログイン、未解決ケース4件以上も加点対象。いずれも今回の記事で決めた独自の基準で、NPSの一般的な区分とは別物
  • 出力形式 — 0〜100のリスクスコアをHigh/Medium/Lowに分類し、リテンション施策を日本語で提案

設定が終わったら、エージェントビルダーの会話プレビューで動作を確かめます。「アルファ商事の解約リスクはどうなっていますか」と聞くと、トピック「解約予兆分析」が選ばれ、その取引先の利用回数と満足度が返ります。

エージェントビルダーの会話プレビュー。解約リスクを尋ねると、トピック解約予兆分析が選ばれ、取引先の月間利用回数19、前月100、サポート満足度が返っている
会話プレビュー。中央にエージェントがトピックとアクションを選んだ過程が出ます。回答の冒頭が英語になる点は、ロール設定の書き方で調整できます。

Step 2 — Accountカスタムフィールドの準備

入力用フィールド(解約シグナルデータ)

Accountオブジェクトにカスタムフィールドを追加します。オブジェクトマネージャーのAccount設定から「項目とリレーション」→「新規」で追加できます。

フィールド名API名型補足
月間利用回数Monthly_Usage_Count__c数値(10,0)当月のサービス利用回数
前月利用回数Previous_Month_Usage__c数値(10,0)比較用の前月データ
最終ログイン日Last_Login_Date__c日付最後にサービスにログインした日
サポート満足度Support_Satisfaction__c選択リスト非常に満足/満足/普通/不満/非常に不満
NPSスコアNPS_Score__c数値(3,0)-100〜100
未解決ケース数Open_Case_Count__c数値(10,0)未解決のサポートケース数
契約更新日Contract_Renewal_Date__c日付次回の契約更新予定日

出力用フィールド(AI分析結果)

AIエージェントの分析結果を格納するフィールドも用意します。

フィールド名API名型補足
解約リスクスコアChurn_Risk_Score__c数値(3,0)加点の合計。今回のルールでは最大95点
リスクレベルChurn_Risk_Level__c選択リスト高/中/低(60点以上=高、30-59=中、30未満=低)
リテンション施策Retention_Action__cロングテキスト推奨するリテンション施策
AI判定理由Churn_AI_Reason__cロングテキスト検知されたシグナルの詳細
解約予兆検知日Churn_Signal_Detected_Date__c日付フロー実行日
リテンション対応状況Retention_Status__c選択リスト未対応/対応中/対応済/解約
AI処理済フラグChurn_AI_Processed__cチェックボックス無限ループ防止用
AI生レスポンスChurn_AI_Raw_Output__cロングテキスト生成AIが返した文字列をそのまま保存(原因調査用)

数式フィールド — 利用変動率

前月比の利用変動率を自動計算する数式フィールドも追加します。

Usage_Change_Rate__c(数式 / パーセント型)

IF(Previous_Month_Usage__c > 0, (Monthly_Usage_Count__c - Previous_Month_Usage__c) / Previous_Month_Usage__c, 0)

前月100回、当月19回なら表示は-81%です。前月0回のときは変化率を0とするため、「比較できない」と「変化なし」を区別できません。本番では前月0回を判定対象から外すなど、扱いを決めてください。

Lightning Record Pageへの反映

フィールドを作成しただけではLightning Experience上に表示されません。Lightning Record Page(レコードページ)のレイアウトを編集し、「解約シグナル(入力データ)」「AI解約リスク分析結果」の2セクションを追加します。

レイアウト設定を忘れずに

項目を作っただけでは画面に出ません。今回の環境はレコードページで項目を直接配置できる設定だったため、Accountレコード画面の右上ギアアイコンから「編集ページ」を開き、Lightning App Builderで項目を並べました。従来のページレイアウトで運用している組織では、そちらに項目を追加します。どちらの場合も、項目の参照権限が必要です。

Step 3 — テストデータの投入

動作検証のため、リスクレベルが異なる7件のテスト取引先を用意しました。最終ログインと契約更新日は、検証した日を基準にした相対日数で示します。この記事の検証日は2026年9月15日です。

取引先名月間利用前月利用変動率NPS満足度未解決Case最終ログイン契約更新日期待リスク
アルファ商事19100-81%-10非常に不満546日前29日後高
ベータ工業5080-37.5%15不満311日前59日後中
ガンマソリューションズ6085-29.4%30普通26日前89日後低
デルタコンサルティング4070-42.9%10不満136日前44日後中
イプシロンテック9095-5.3%65満足03日前179日後低
ゼータホールディングス120110+9.1%85非常に満足01日前364日後低
エータサービス1090-88.9%-30非常に不満861日前14日後高

テストデータの設計意図

  • アルファ商事 — 4つのシグナルすべてに当たる想定。利用量81%減、NPS-10、46日ログインなし、未解決ケース5件
  • ベータ工業 — 利用量は37.5%減、NPSは15。最終ログインは11日前で、未解決ケースは加点対象にならない上限の3件
  • ガンマソリューションズ — NPSがちょうど30。加点条件の境界を確かめるための1件
  • イプシロンテック、ゼータホールディングス — 今回の加点条件にどれも当たらず、いずれも0点になる想定
  • エータサービス — アルファ以上に深刻。利用量89%減、NPS-30、61日ログインなし、未解決ケース8件

Step 4 — プロンプトテンプレートの作成

生成AIへの指示は、設定メニューのPrompt Builderで「プロンプトテンプレート」として作ります。フローやApexから名前を指定して呼び出せるうえ、指示文を直すたびにコードを触らずに済みます。

設定項目値
テンプレート種別Flex(レコードに紐づかない汎用型)
テンプレート名Churn Risk Analyzer(API名 Churn_Risk_Analyzer)
入力context(テキスト1つ。取引先データと判定結果をまとめた文章)
モデルGPT-4o mini(Salesforce標準で選べるモデル)
言語日本語

指示文の中身

テンプレートでは、判定理由とリテンション施策の作成を指示します。点数の計算は頼みません。

  • 判定理由を書く — 検知した兆候を影響の大きい順に説明する。渡された数値をそのまま引用する。検知していない兆候は書かない。契約更新日が近ければ残日数を挙げる。200文字以内
  • リテンション施策を書く — 誰が・いつまでに・何をするかを必ず入れる。その取引先固有の数値を根拠に1つ以上入れる。期限はリスクレベルが高なら3日以内、中なら2週間以内、低なら次回の定例まで。実施する順に2つまで。200文字以内

出力はJSONだけを返させます。reason と retentionAction の2キーです。

プロンプトビルダーの編集画面。Churn Risk Analyzerの指示文と、モデルにOpenAI GPT 4 Omni Miniが設定されている
プロンプトビルダーの編集画面。左でモデルを選び、右に指示文を書きます。点数の計算は指示していません。

今日の日付を渡す

日付を渡さずに施策を書かせたところ、すでに過ぎた日が期限に指定されました。そこで入力の先頭に本日の日付を入れています。残日数や期限が合っているかは、生成後にも確かめてください。

Step 5 — フローから生成AIを呼ぶApexクラス

プロンプトテンプレートはフローから直接呼べますが、今回はApex(Salesforce上で動くプログラム)を1クラス挟みました。生成AIが返したJSON(項目名と値の組で書かれたデータ形式)を項目ごとに分解する処理はフローで書きづらく、応答の前後に説明文が付いたときに捨てる処理も入れたかったからです。

項目内容
クラス名ChurnRiskAiAnalyzer
入力取引先ID、フローが算出した点数とリスクレベル、検知した解約の兆候の文章
出力成否、判定理由、リテンション施策、生の応答
呼び出し方法Apex標準のプロンプトテンプレート呼び出し

取引先の9項目に本日の日付と判定結果を添え、名前を指定してプロンプトテンプレートを呼び出します。応答から最初の「{」と最後の「}」の間を切り出し、JSONとして読み取れなければ成否をfalseで返します。

取引先から読む9項目は、取引先名、月間利用回数、前月利用回数、利用変動率、最終ログイン日、サポート満足度、NPSスコア、未解決ケース数、契約更新日です。フローから受け取るのは取引先ID、点数、リスクレベル、シグナルの文章の4つ。フローへ返すのは成否、判定理由、リテンション施策、生の応答の4つです。この入出力どおりに作れば、フローのアクション要素から同じように呼び出せます。

テストクラスの書き方

この呼び出し方はテストの中では使えないため、文章の組み立てとJSONの切り出しを個別に検証しています。生成AIが使えないときに成否falseと失敗の内容が返ることも確認しました。テストでモデルを呼ばないので、何度回しても利用枠は減りません。

Step 6 — レコードトリガフローの構築

フローの全体像

「解約予兆AI検知フロー」(API名 Account_Churn_AI_Detection)をレコードトリガフローとして作成します。

設定項目値
オブジェクトAccount
トリガタイミングレコード更新後(After Save)
最適化アクションと関連レコード
処理の実行場所非同期パス(レコード保存の確定後に実行)
エントリ条件AI処理済フラグがfalse、かつ当月と前月の利用回数が入っていること

フロー自身の更新による再実行を防ぐ

開始条件に Churn_AI_Processed__c = false を含め、フローの最後で true に変更します。これでフロー自身がレコードを更新しても再実行されません。翌月に評価し直すときは、スケジュールフローなどでフラグを false に戻します。

生成AIの呼び出しは非同期パスに置く

生成AIの呼び出しは、Salesforceから外部への通信として扱われます。レコード保存と同じ処理の中では実行できず、即時パスに置くとエラーで止まります。フローの開始要素で非同期パスを追加し、その先にAI呼び出しを置いてください。処理はレコード保存が確定した数秒後に走ります。

非同期パスを使うときは、エントリ条件を「レコードが条件を満たすように更新されたとき」に変える必要があります。この設定では条件式にISCHANGED関数が使えません。今回はAI処理済フラグと利用回数の入力有無だけで条件を組みました。

フロー内の変数・数式

変数名型用途
v_RiskScore数値(初期値 0)加点式のリスクスコア累計
v_RiskLevelテキスト(初期値「低」)リスクレベル(高/中/低)
v_Reasonテキスト判定理由を連結
v_Actionテキスト推奨アクションを連結

加点の組み立て

フローの中心です。4つの「決定」要素を順に通り、当てはまった条件ごとに「割り当て」要素で点数を足します。

決定要素条件(設定した値そのまま)加点兆候として残す文
利用量低下チェック変化率が -0.5 より小さい+40点利用量が前月比50%超の減少
利用量低下チェック変化率が -0.2 より小さい(上に当たらない場合)+20点利用量が前月比20%超50%以下の減少
NPS悪化チェックNPSが 0 より小さい+25点NPSスコアが負値
NPS悪化チェックNPSが 30 より小さい(上に当たらない場合)+10点NPSスコアが30未満
未ログインチェック最終ログインからの経過日数が 30 より大きい+15点30日を超えてログインなし
未解決ケースチェック未解決ケース数が 3 より大きい+15点未解決ケースが3件超

境界の値に注意

条件はすべて「より小さい」「より大きい」で、等号を含みません。ちょうど-50%の減少は40点ではなく20点、NPSちょうど30は加点なし、未解決ケースちょうど3件も加点なしです。テストデータのガンマソリューションズとベータ工業が、この境界に当たります。

4つの加点を全部足すと95点です。項目の説明では0〜100を格納できる型にしていますが、このルールで出る最大値は95点になります。

生成AIに理由と施策を書かせる

リスクレベルが確定したら、Step 5で作ったApexクラスをアクション要素から呼びます。渡すのは取引先ID、点数、リスクレベル、加点時に組み立てたシグナルの文章です。

フロー要素処理
AIで理由と施策を作成Apexクラスを呼び、判定理由とリテンション施策を受け取る
AI生成の成否成功なら生成された文章を採用。失敗なら加点ルールが組み立てた文章のまま進む
AIが書いた文章を反映判定理由、リテンション施策、生の応答を変数に格納する

生成AIが落ちても処理を止めない

AI呼び出しには失敗時の接続先を設定し、判定結果を書き戻す要素につなぎます。プロンプトテンプレートの名前を存在しない名前に変えて試したところ、点数95点とリスクレベル「高」はそのまま書き戻され、文章だけが加点ルール版の「利用量が前月比50%以上減少。NPSスコアが負値。」になりました。確認したのはこの経路だけです。書き戻し自体が失敗する場合や、Apexで例外が出る場合の記録先は別に設計してください。

リスクレベル判定と結果書き戻し

加点が終わったら、合計点でリスクレベルを決め、取引先レコードに書き戻します。

スコア範囲リスクレベルアクション
60点以上高即時対応 + ToDo自動作成
30〜59点中要注意 + ToDo自動作成
30点未満低通常対応(定期の状況確認を続ける)

ToDo自動作成

リスクレベルが「高」または「中」の場合、取引先所有者にフォローアップToDoを作成します。期限と優先度はリスクレベルから決めます。

リスクレベルToDoの期限優先度
高2日後High
中7日後Normal
低ToDoを作らない—

ToDoの本文には、点数、生成AIが書いた判定理由、リテンション施策がそのまま入ります。担当者はToDoを開けば、何が起きていて次に何をすればよいかを読めます。

Flow Builderの画面。リスクレベル判定のあとApexアクションで生成AIを呼び、成功なら生成文を反映し、失敗ならそのまま書き戻す分岐
リスクレベルを決めたあとに生成AIを呼びます。生成できなければ右の分岐を通らず、ルールが書いた文章のまま取引先を更新します。

ToDoに何が入るか

件名はリスクレベルと取引先名を並べた「【解約リスク高】アルファ商事 フォローアップ」の形です。ToDoの一覧で、高リスクと中リスクに判定された取引先を確認できます。本文には点数、判定理由、リテンション施策が入るので、取引先レコードを開き直さずに次の連絡を始められます。

Step 7 — 動作検証と結果

テスト実行

アルファ商事のAI処理済フラグをfalseに戻して保存すると、フローが非同期パスで起動します。十数秒後にレコードを再読み込みすると、点数と生成AIが書いた文章が入っています。

開始条件は「条件を満たすように更新されたとき」です。テストデータを入れたあとにフローを作った場合、フラグは最初からfalseなので、そのまま保存しても起動しません。いったんフラグをtrueで保存してから、falseに戻してください。

アルファ商事の点数 — 95点(高リスク)

  • 利用量が前月比50%超の減少(当月19回、前月100回で81%減) → +40点
  • NPSスコアが負値(-10) → +25点
  • 最終ログインから30日超(46日前) → +15点
  • 未解決ケースが3件超(5件) → +15点
  • 合計 95点 → リスクレベル「高」

生成AIには、95点という判定結果と、検知した解約の兆候を渡しました。

生成AIが書いた判定理由

「利用量が前月比で81.0%減少しており、非常に不満のサポート満足度やNPSスコアが-10であることから、顧客の満足度が低下しています。また、最終ログイン日が46日前で、未解決ケース数が5件であるため、解約リスクが高まっています。契約更新日まで残り29日であるため、緊急度が高い状況です。」

生成AIが書いたリテンション施策

「カスタマーサクセスチームは、2026年9月18日までにアルファ商事株式会社の担当者と連絡を取り、未解決のケースについて解決策を提示します。また、2026年9月20日までに利用状況の改善に向けた提案を行います。」

加点ルールだけの頃は、理由が「利用量が前月比50%以上減少。NPSスコアが負値(批判者)。30日以上ログインなし。未解決ケースが3件超。」、施策が「即時対応:CSマネージャーによる緊急ヒアリング実施。」でした。どのシグナルで加点したかは分かりますが、その取引先の数字は出てきません。生成AIを挟むと、81.0%、-10、46日前、5件、残り29日という実際の値が文章に入ります。

アルファ商事の取引先レコード。解約リスクスコア95点、リスクレベル高、生成AIが書いた判定理由とリテンション施策が表示されている
アルファ商事の取引先レコード。左が入力データ、下が判定結果です。右のパネルにフォローアップToDoが並びます。

全7件の結果

取引先名スコアレベル加点の内訳ToDoの期限
アルファ商事95点高利用+40, NPS+25, ログイン+15, ケース+152日後
エータサービス95点高利用+40, NPS+25, ログイン+15, ケース+152日後
デルタコンサルティング45点中利用+20, NPS+10, ログイン+157日後
ベータ工業30点中利用+20, NPS+107日後
ガンマソリューションズ20点低利用+20作成なし
イプシロンテック0点低加点なし作成なし
ゼータホールディングス0点低加点なし作成なし

高リスク2件と中リスク2件の計4件にToDoが作られました。高リスクの2件は期限が2日後で優先度High、中リスクの2件は7日後で優先度Normalです。低リスクの3件にはToDoを作りません。

期限が2か所に出てくる点は設計の弱いところです。ToDoの期限はフローが決め(高は2日後、中は7日後)、本文の日付は生成AIが指示文の「高なら3日以内、中なら2週間以内」に従って書きます。9月15日の実行では、ToDoの期限が9月17日、生成文の日付が9月18日と9月20日でした。9月20日は5日後で、指示した「高なら3日以内」にも従っていません。担当者に見せる期限を1つにするなら、フローが計算した日付を生成AIに渡し、その日付だけを使わせてください。

自動作成されたToDoの画面。件名に解約リスク高と取引先名が入り、コメントにリスクスコアと判定理由、推奨アクションが記載されている
自動作成されたToDo。期限は2日後、優先度はHigh。コメント欄に点数と生成AIが書いた文章がそのまま入ります。

結果を見て分かったこと

  • 低リスクと判定した取引先にも、生成AIは打ち手を書きます。ゼータホールディングスには「月間利用回数120回を踏まえて活用事例を提供し、さらなる利用促進を図る」という内容でした。解約を止める話ではなく、利用を伸ばす話に変わっています
  • ガンマソリューションズはNPSがちょうど30で、「30より小さい」という条件に当たりません。利用量の20点だけで低リスクです。NPS30の取引先も拾うなら、条件を「30以下」に変えます。ガンマは10点が足されて合計30点、中リスクになります
  • 同じ95点のアルファ商事とエータサービスでも、今回の出力では数値を挙げる順番と対応策が異なりました
  • 指示文では「施策にその取引先固有の数値を1つ以上入れる」としましたが、アルファ商事の施策に数値は入りませんでした。次の修正案は、引用させたい数値を指示文で名指しすることです。この方法で入るかどうかは未検証です
  • 判定理由の日本語が整わないことがあります。「非常に不満のサポート満足度」は選択肢の値をそのまま文に埋めた結果で、読みにくい表現です。社外に出す文面に使うなら、人が手を入れる前提にしてください

つまずいた3点

1. 生成AIに点数を計算させると間違える

最初の版では、加点表を指示文に書いて点数の計算ごと生成AIに任せました。7件に対して次の誤りが出ました。

取引先生成AIの出力何が誤りか
ベータ工業85点。「NPSスコアが15と負の値であるため」15は負の値ではない。同じデータをフローの加点ルールで計算すると30点
ガンマソリューションズ40点だがリスクレベルは「高」指示した区分では40点は「中」
デルタコンサルティング100点同じデータをフローの加点ルールで計算すると45点。倍以上ずれている

指示文を細かくしても、足し算と大小比較の誤りは消えませんでした。点数はフローの加点ルールで確定させ、生成AIには確定した判定を渡す形に変えています。

2. 即時の処理からは生成AIを呼べない

レコード保存と同じ処理の中では、外部への通信ができません。AI呼び出しは、開始要素に追加した非同期パスへ置いてください。この設定では開始条件の書き方も変わり、ISCHANGED関数が使えなくなります。今回はAI処理済フラグと利用回数の入力有無だけで条件を組みました。

3. 今日の日付を渡さず、過去の日付が期限になった

日付を渡さずに施策を書かせたところ、すでに過ぎた日が期限に指定されました。入力の先頭に本日の日付を入れたあとの検証では、この現象は出ていません。契約更新日までの残日数も同じ情報に依存します。

まとめと本番運用に向けて

構築したもの

構成要素名称内容
Agentforceエージェント解約リスクアナリスト社内向け。担当者がチャットで相談する窓口
カスタムフィールド16個入力7 + 出力8 + 数式1
プロンプトテンプレートChurn Risk Analyzer判定理由とリテンション施策を日本語で書かせる
ApexクラスChurnRiskAiAnalyzerプロンプトテンプレートの呼び出しとJSONの読み取り
レコードトリガフロー解約予兆AI検知フロー非同期パスで加点、AI呼び出し、書き戻し、ToDo作成
Lightning Record PageAccountレコードページ「解約シグナル(入力データ)」「AI解約リスク分析結果」の2セクション
テストデータ7件高リスク2件・中リスク2件・低リスク3件

実装時の要点

押さえる設定

  • 点数とリスクレベルは加点ルールで決める。生成AIには確定した判定を渡し、判定理由と顧客への対応策だけを書かせる
  • 生成AIの呼び出しは非同期パスに置く。即時の処理からは外部通信ができない
  • AI呼び出しが失敗しても書き戻しへ進む。テンプレート名を誤らせた検証では、点数とリスクレベルが記録され、文章だけが加点ルール版になった
  • AI処理済フラグで、フロー自身の更新による再起動を止める
  • 入力の先頭に本日の日付を入れる。今回の検証では、日付を渡さないと過ぎた日が期限に指定された
  • ToDoの期限と優先度はリスクレベルから決める。高は2日後、中は7日後

生成AIを何回呼ぶか

費用を見積もるために、呼び出し回数を整理します。点数はフローで計算し、判定理由とリテンション施策の文章を作るときだけ生成AIを呼びます。取引先1件の判定につき1回です。

場面呼び出し回数
取引先1件の判定1回
今回の検証(7件を1巡)7回
この記事を作る間の合計約40回(指示文の作り直しを4巡、単体の試行を数回)
取引先500件を毎日評価する場合(AI処理済フラグを日次で戻す処理を足したとき)1日500回、30日で15,000回

日次で全件を評価すると回数が一気に増えます。減らすなら、加点が30点以上の取引先だけ文章を作る、点数が前回から上がった取引先だけ作る、といった条件をフローに足してください。点数の計算は加点ルールなので、文章を作らなくてもリスクの一覧は作れます。

テストクラスの中では生成AIを呼びません。テストを何度実行しても回数は増えません。

加点条件を自社向けに調整する

加点の閾値は業種や契約形態で変わります。

調整ポイント現在の設定検討例
利用量減少の重度閾値50%以上業種によっては30%でも重大リスク
NPS閾値負値で重度、30未満で中度NPS業界平均に合わせて調整
未ログイン日数30日超日次利用SaaSなら7日、月次なら60日
未解決ケース数3件超サポート体制に応じて2件や5件に
リスクレベル境界60点/30点高感度にするなら50点/20点に

本番運用で足すとよいもの

  • 過去のやり取りを読ませる — 取引先に紐づくケース履歴や商談履歴をプロンプトへ渡し、打ち手の根拠を増やす
  • 利用データの自動連携 — 外部SaaSのAPIとフローHTTP Callout機能で利用回数・ログイン日を自動更新
  • ダッシュボード — CRM Analyticsで「リスクレベル別取引先数推移」「業種別解約リスク分布」を可視化
  • Slackアラート — 高リスク検知時にCSチャンネルへ自動通知
  • スケジュール実行 — 日次スケジュールフローでAI処理済フラグを戻し、定期的に評価し直す。このとき、高・中の取引先には毎回ToDoが作られる。未完了のToDoが残っていれば作らない、リスクが上がったときだけ作る、といった条件を足す