🤖
Salesforceフロー開発にAIを活用してみた
背景・課題
私は普段、社内のSalesforce開発をやっています。Salesforceにはフローという機能があり、画面上でローコードでビジネスプロセスを組み立てられるのですがこれが結構大変なのです。
実際のフローはこんな感じで画面上で要素を組み合わせて構築しています
何が大変かというと、
- 全部画面上で手作業でポチポチ設定するしかない
- フローが複雑になると、全体の流れや修正箇所の特定がしずらい
- 最近のAI活用の波に乗れない(手作業だから)
要するに、便利だけど効率が悪いという悩みがありました。
こんなアプローチを思いついた
そこで思いついたのが、フローのメタデータを直接いじってしまうという方法です。
実はSalesforceのフローは裏側ではXMLファイルで管理されいるため、これをローカルに落としてWindsurfAIに「このフロー、どういう構造になってる?」「ここを修正するにはどうすればいい?」と聞けば、もっと効率的に開発できるんじゃないかと思ったのです。
つまり、今まで画面でポチポチやってたのを、AIと一緒にコードレベルで直接編集してしまおうという作戦です。
実際にやってみた
検証内容
- フローのメタデータを取得(VSCodeでマニフェストファイル作成)
a. 詳細な手順は割愛(参考サイト:https://base.terrasky.co.jp/articles/cHjOB ) - WindsurfAIにフローの解析を依頼
a. プロンプトはお試しでそれほど精査せずざっくりと投げてみた - 修正が必要な場所を指示してメタデータを修正してもらう
- Salesforce組織にデプロイして画面上で確認してみる
取得できたメタデータの一部
<decisions>
<name>CheckLeadContact</name>
<label>リードまたは取引先責任者が取得できたか否か</label>
<defaultConnectorLabel>No</defaultConnectorLabel>
<rules>
<name>Yes</name>
<conditionLogic>or</conditionLogic>
<conditions>
<leftValueReference>GetLead</leftValueReference>
<operator>IsNull</operator>
<rightValue>
<booleanValue>false</booleanValue>
</rightValue>
</conditions>
<conditions>
<leftValueReference>GetContact</leftValueReference>
<operator>IsNull</operator>
<rightValue>
<booleanValue>false</booleanValue>
</rightValue>
</conditions>
<connector>
<targetReference>GetTasks</targetReference>
</connector>
<label>Yes</label>
</rules>
</decisions>
フローの解析結果の一部
Salesforce Flow 「活動.リード取引先責任者の活動履歴チェック更新」の解析結果
このフローの処理内容と構成要素を以下にまとめました:
基本情報
・フロー名: TaskUpdateIsExistConvertedTask
・ラベル: 活動.リード取引先責任者の活動履歴チェック更新
・トリガー: Task(活動)オブジェクトの作成・更新後に自動実行
・目的: 活動の件名や内容に基づいてリード・取引先責任者の活動履歴フィールドを自動更新
処理フロー
1. リード/取引先責任者の取得: 活動に関連するリードまたは取引先責任者を取得
2. 関連活動の取得: 同じリード/取引先責任者に紐づく全活動を取得
3. 活動のループ処理: 各活動を順次チェック
4. 初回日付の設定: 初回ポジタッチ日、初回活動日、初回対話日を計算
5. 最新情報の設定: 架電ステータス、メール内容、依頼ステータス等の最新情報を保持
6. 活動項目のコピー: 件名、MiiTelメモ、チャットタグ等をリストに追加
7. フラグの判定: 活動の種類に応じて各種フラグを設定
8. 更新実行: リード/取引先責任者のレコードを更新
主要な変数
・判定用一時変数: IsExistChatTmp, IsExistConvertedTmp, IsExistGoodCallTmp等
・リスト変数: SubjectList, MiiTelMemoList, ChatTagList, CallTriggerList
・日付変数: FirstActivityDateTmp, FirstPositiveTouchDateTmp
・その他: CallStatusTmp, MailContentsTmp, RecipientTmp等
主要な数式
・JudgeExistXXX系: 活動件名に特定キーワード(「取引化」「有効電話」等)が含まれるかを判定
・FirstXXXDate系: 初回の各種日付を計算(既存値がない場合のみ設定)
・最新値保持系: 既存値がある場合は最新値を保持する仕組み
(省略)
このフローは活動の件名パターンに基づいて営業活動の進捗状況を自動的に追跡・更新する重要な業務自動化機能です。
検証結果
良かった点
- フローの解析精度が想像以上:数式や変数の中身まで詳しく追ってくれて、本質的な問題を見抜いてくれた
- 複製フローの修正が楽:同じような内容のフローが別にあるが、同じ修正内容を反映するのがとても簡単になりました(従来は画面上で全く同じ操作を繰り返す必要があり、設定漏れなどの人的ミスが頻発していた)
イマイチだった点
- メタデータ修正の品質:要素同士の接続がばらばらになったり、変数名重複でデプロイエラーが多発
- Salesforce特有の制約を理解できていない:複数選択リストでは使用できない数式を使ってしまうなど、プラットフォーム固有の仕様への対応が不十分
結論
分析は優秀、修正は要注意
AIによるフローの解析は実用レベルでした。特に複製フローへの展開など、従来の手作業では面倒だった作業が格段に楽になりました。
ただし、実際のメタデータ修正はSalesforce特有の制約もあり注意が必要です。
今後の展望
- プロンプトを調整することでコード修正の精度も高められるのでは
- フロー→Apexクラスへの移行が楽にできそう(逆も然り)
Discussion