Agent Customization with Flows

エージェント対応フローを作成し、そのフローを最大限に活用できるようにエージェントを構成します。


https://trailhead.salesforce.com/content/learn/modules/agent-customization-with-flows

# Learn How to Make Agent-Ready Flows

+ 自動起動フローを作成する（トリガーなし）

エージェントアクションは、「自動起動フロー（トリガーなし）」フロー種別のフローのみをサポートします。レコードトリガーフローなど、他のフロー種別も技術的には自動起動フローとして分類できますが、割り当てるフローは「トリガーなし」タイプである必要があります。既存のフローをエージェントアクションで使用する場合、そのフローが「トリガーなし」タイプでない場合は、「自動起動フロー（トリガーなし）」フロー種別を使用してフローを再作成する必要があります。

+ 非常に詳細に記述する

エージェントは、フローの要素名と変数名、そしてフローが処理するデータから、フローの動作を理解します。そのため、フロー内のあらゆるものに正確でわかりやすい名前を付けることが重要です。「foo」のような変数名や「Get Records 1」のような要素名は避けてください。代わりに、「Account_ID」のような説明的な変数名や、「Get Recent Accounts In User's Territory」のような説明的な要素名を使用してください。

フロー内の全てに説明を追加することは既にベストプラクティスですが、フローがエージェントアクションによって実行される場合は、さらに重要になります。エージェントはフローの説明と、全ての要素と変数の説明を使用します。これらのテキストはすべて、エージェントがフローの機能とフローが処理するデータを理解するのに役立ちます。

フローの入力変数と出力変数には、適切な名前と説明を必ず記入してください。適切な名前と説明がないと、エージェントは変数とそのデータをどのように処理すべきかを正確に判断できません。

>フローの説明は他の説明よりも指示的なので注意してください。これは、エージェントにフローを追加すると、フローの説明が自動的にエージェントへの指示となるためです。フローの説明をエージェントへの指示の形式で記述することで、時間を節約できます。

+ 常に入力変数と出力変数を使用する

フローベースのエージェントアクションでは、フロー内に少なくとも1つの入力変数と少なくとも1つの出力変数が常に必要です。これらの変数が必須でない場合でも、入力変数と出力変数を使用することをお勧めします。フローに詳細なコンテキストを与えることでフローの精度が向上し、フローが適切なデータを送信するとエージェントのパフォーマンスが向上します。

エージェントに渡すデータが思い浮かばない場合でも、出力変数として送信することを検討すべきものがあります。それはエラーメッセージです。エージェントはフローから何らかの結果を期待しており、たとえそれが単に「YOUR FLOW FINISHED」というフローのメッセージであっても、期待しています。しかし、フローが失敗し、予期しないエラーが発生することもあります。フローからデータが何も得られない場合、エージェントは謝罪し、「問題が発生しました」という一般的なメッセージを返す可能性があります。あるいは、顧客に何かを提示したいという理由だけで、コンテキストを考慮せずに他のデータを提示することもあります。

これを防ぐには（そして出力変数の要件を満たすためにも）、より詳細で役立つエラーメッセージを表示する出力変数を作成してください。フロー内の障害パスと割り当て要素を使用して、出力変数にエラーメッセージを設定します。そして、エージェントにその出力変数をどのように、いつ使用するかを指示してください。設定方法については、次のユニットで説明します。

+ レコード変数を恐れないで

レコード変数はフロー内でのみ使用されるわけではありません。エージェントもレコード変数を受け取ることができます。エージェントにレコードから複数の項目、あるいは複数のレコードから複数の項目を送信する必要がある場合は、複数の変数を作成しないでください。代わりに、そのデータ用のレコード変数またはレコードコレクション変数を作成し、出力できるようにします。エージェントが顧客のオープンケースから 4 つの項目を要求したとします。4 つの個別の変数を使用する代わりに、それら 4 つのケース項目を 1 つのレコード変数で返します。複数のケースを返す場合は、単一のレコードコレクション変数で返すことができます。

+ エージェントに過剰な負担をかけないようにする

エージェントはフローからデータを受け取ると、そのデータが何らかの用途に使われるべきだと判断する傾向があります。そのため、そのデータを使って意思決定を行ったり、顧客に不必要にデータを見せてしまう可能性があります。顧客が見るべきではないデータを見せてしまうことさえあります。したがって、エージェントに使用してほしくないデータは絶対に渡さないでください。

残念ながら、このルールはフローのデフォルトのレコード取得設定と矛盾しています。レコードデータの保存方法のデフォルトは「すべてのフィールドを自動的に保存」ですが、エージェントはおそらくすべてのフィールドを必要としません。代わりに、「フィールドを選択して変数を割り当てる」設定を選択し、別のレコード変数を使用して、エージェントに必要なフィールドのみを選択してください。

+ 長いテキスト文字列を変数に送信しない

テキスト変数は255文字までしか格納できず、制限を超える文字は切り捨てられます。テキストデータ型の入力変数に長さが不明なテキストを割り当てる際は注意してください。255文字を超えるテキストをフローに送信する場合は、開発者と協力してApex定義の変数を作成してください。

+ 互換性のないデータ型を避ける
 
これらの複雑なデータ型は、出力変数を介してエージェントに返すことはできません。

通貨
ピックリスト
複数選択ピックリスト
Apex定義

+ フローの変数を変更した場合、エージェントアクションを再作成する

フローからエージェントアクションを作成すると、アクションはフローの入力変数と出力変数の1回限りのスナップショットを取得します。このスナップショットは静的であり、フローの変数を変更しても更新されません。エージェントが古い変数を使用してフローを実行した場合に問題が発生するのを防ぐには、エージェントアクションを削除し、新しいエージェントアクションを作成して、フローをそのエージェントアクションに割り当てる必要があります。


# Create an Agent-Ready Flow

何もしないで検証ボタンをクリックしてみる

:::note alert
We can’t find an Autolaunched flow named 'Cancel Contact's Booking'. Make sure its API Name is 'Cancel_Contact_s_Booking'.
:::

これを見る限り、Your Challengeしかチェックしえなさそう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/96ea9c6b-17d2-4af7-a26e-1dcf05e6092a.png)

有効化せずにチェック

:::note alert
We can’t find an active version of the 'Cancel Contact’s Booking' flow.
:::


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/c0e31eb0-00e5-4415-b5b3-445b7f900e05.png)

無事合格...

# Add a Flow as an Agent Action

何もしないで検証ボタンをクリックしてみる

:::note alert
We can’t find Einstein enabled in your org. Refer to the instructions in this unit to turn it on.
:::

設定もあるので、指示通りにやってみるか？


Agentforce Agentsを有効にしたら２つのエージェントが出てきた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/31ac86e2-a949-491a-805e-110e7db39f71.png)

ここで、検証ボタンをクリック

:::note alert
We can’t find the Booked Activity Management topic. Make sure you complete the prework before you attempt this challenge.


予約済みアクティビティ管理のトピックが見つかりません。このチャレンジに挑戦する前に、必ず事前課題を完了してください。
:::

本文通りに進めないとダメみたいですね。

### トピックを構成するためのガイドラインとベスト プラクティス

+ 関連するSalesforceオブジェクトに関する情報を基にトピックを構築します。エージェントがデータの使用方法を理解できるよう、オブジェクトの目的を説明します。
+ トピックに対して、アクションによって提供されていないSalesforceデータを使用しないよう指示します。エージェントは権限によって付与されたすべてのオブジェクトと項目にアクセスできることに注意してください。この指示により、エージェントが関連性のないデータや共有すべきでないデータについて話すことを防ぎます。
+ トピックに、顧客にID値を表示しないように指示してください。レコードコレクション変数には常にレコードのIDが含まれるため、この指示がないと、エージェントが顧客にとって意味のないデータであっても、顧客にID値を表示してしまう可能性が高くなります。この指示により、顧客が難解なデータに混乱するのを防ぐことができます。
+ エージェントのアクションについて言及する際は、必ずアクションのAPI名を使用してください。例えば、「Get Customer Details action」ではなく、「Get_Customer_Details action」と言及してください。これにより、エージェントはアクション名と周囲のテキストを区別しやすくなります。


「新規」ボタンが表示されない場合は、エージェント設定ページに戻り、「Agentforce」をオフにしてから、再度オンに切り替えてください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/771b5170-f8a2-40be-8b0a-7b60fa6e79f7.png)


+ 顧客にアクティビティのリストを見せた後、どのようにサポートできるか尋ねます。
+ 顧客が不明な場合は、他のアクションを実行する前に Get_Customer_Details アクションを実行して、顧客の連絡先レコードを取得するために、必ず顧客の電子メール アドレスと会員番号を尋ねる必要があります。
+ 顧客が現在予約されているアクティビティについて尋ねた場合は、Get_Contact_s_Upcoming_Bookings アクションを実行し、出力を顧客に提示します。

「トピックの重複が検出されました」というメッセージウィンドウが表示された場合は、「無視」をクリックします。

Topic Overlap Detected 

Overlapping topics should be evaluated to determine whether rewriting or merging is necessary.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/20b04489-53cf-41f5-b928-7084cb56cf10.png)

3\. [新規]をクリックし、[新しいアクションの作成]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d9d2688f-538c-433b-91a3-2c99bfe0aa8e.png)


4\. 参照アクション タイプとして フローを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/753d3ad9-06ff-4f77-ab33-b300860bfc41.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/18fb29ff-a0a5-4bea-ac9f-db5da2614d14.png)


「入力が必要」にチェックを入れます。
この設定は、エージェントに、送信するデータがなければこのアクションを実行しないよう指示します。この設定を使用することで、フローの実行に必要なデータがない場合にフローが実行されないようにすることができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/50eed93a-3b82-4343-b91b-ef8c97ab8c5d.png)


「会話に表示」にチェックを入れます。
この設定により、エージェントは、この変数の内容を顧客に送信しても問題ないことを通知されます。特定の出力に対して「会話に表示」チェックボックスが選択されていない場合、そのフロー変数の内容は顧客と共有されません。

あれぇ、 Get Contact’s Upcoming Bookingsがない？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/dc864d89-eb2d-4650-8e60-43fee1e11527.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6f148b85-3250-4f35-b475-367f713dd24a.png)

フローを見てもない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e172bee5-ab0f-4702-9527-906b967add80.png)

仕方ないので、ここで検証ボタンをクリックしてみる

:::note alert
We can’t find the 'Get_Contact_s_Upcoming_Bookings' agent action on the Booked Activity Management topic. Make sure you complete the prework before you attempt this challenge.
:::

あちゃぁ、さっきの本文で作っている。チェックされてないけどいるってことだ...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/42802432-0efd-4d00-8731-d1c9e8fb0ea1.png)


エージェントのテストまで実施

:::note alert
We can’t find exactly 4 instructions in the Booked Activity Management topic.
:::

 Instructionを追加後

:::note alert
 We can't find the Cancel Contact's Booking action. Make sure its API Name is 'Cancel_Contact_s_Booking'.
:::

キャンセルは試してないけど合格できました...

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7bdc728f-411c-4c40-b192-1798746d64bf.png)