Loading
Upcoming Mandatory Changes to Public Key Infrastructure (PKI)Read More
Salesforce Enforces New Security Requirements in Summer 2026Read More
Agentforce and Einstein Generative AI
Table of Contents
Select Filters

          No results
          No results
          Here are some search tips

          Check the spelling of your keywords.
          Use more general search terms.
          Select fewer filters to broaden your search.

          Search all of Salesforce Help
          Example: Send a Rich Choice Response to a Customer With an Apex Class

          Example: Send a Rich Choice Response to a Customer With an Apex Class

          In this example, you send multiple links with images associated with food options using an Apex class and rich choice response.

          Required Editions

          Available in: Lightning Experience
          Available in: Enterprise, Performance, Unlimited, and Developer Editions. Required add-on licenses vary by agent type.
          User Permissions Needed
          To build and manage Service Agents:

          Manage Agentforce Service Agents AND Manage AI Agents

          OR

          Customize Application

          To define, edit, delete, set security, and set version settings for Apex classes: Author Apex

          Before you begin:

          Create an Apex Class

          To store and return a list of food options and details, create an Apex class.

          Create an Apex class. In the class editor, add this code snippet.
          public class GetFoodDetailsInvocable {
          
              @InvocableMethod(label='Get Food Details' description='Returns linkURL, linkTitle, image linkURL, image MIME Type, and description text for a given food name')
              public static List<FoodDetailResponse> getFoodDetails(List<FoodDetailRequest> requests) {
                  List<FoodDetailResponse> responses = new List<FoodDetailResponse>();
          
                  for (FoodDetailRequest request : requests) {
                      FoodDetailResponse response = new FoodDetailResponse();
                      FoodDetail foodDetail = new FoodDetail();
                      String foodName = request.foodName.toLowerCase();
          
                      // Populate food details dynamically from GetFoodOptionsInvocable selections
                      if (foodName.contains('pizza')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/pizza';
                          foodDetail.linkTitle = 'Delicious Pizza';
                          foodDetail.linkImageURL = 'https://www.publicdomainpictures.net/pictures/240000/velka/pizza-1508086895mrm.jpg';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'Our pizza is made with the most flavorful tomato sauce and fresh cheese so that you can indulge all of your senses.'
                      } else if (foodName.contains('pasta')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/pasta';
                          foodDetail.linkTitle = 'Tasty Pasta';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1606761568499-5ddd45e43b32';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'Our pasta is topped with the most flavorful tomato sauce and fresh cheese so that you can indulge all of your senses.'
                      } else if (foodName.contains('tiramisu')) {
                          foodDetail.linkURL = 'https://tastesbetterfromscratch.com/easy-tiramisu/';
                          foodDetail.linkTitle = 'Classic Tiramisu';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1571877227200-a0d98ea607e9';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'Our tiramisu is made with the freshest ingredients so that you can indulge all of your senses.'
                      } else if (foodName.contains('tacos')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/tacos';
                          foodDetail.linkTitle = 'Authentic Mexican Tacos';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1551504734-5ee1c4a127da';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'Our tacos are made with the freshest ingredients so that you can indulge all of your senses.'
                      } else if (foodName.contains('quesadilla')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/quesadilla';
                          foodDetail.linkTitle = 'Cheesy Quesadilla';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1613952273499-5de42c1789c7';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('nachos')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/nachos';
                          foodDetail.linkTitle = 'Loaded Nachos';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1606755962773-b35f5d518c46';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('croissant')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/croissant';
                          foodDetail.linkTitle = 'Fresh Croissant';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1587049352907-23d8ff0ceac3';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('ratatouille')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/ratatouille';
                          foodDetail.linkTitle = 'Traditional Ratatouille';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1633527076476-f847fc6d16a2';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('creme brulee')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/creme-brulee';
                          foodDetail.linkTitle = 'French Crème Brûlée';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1609767400465-45e06f28a680';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('sushi')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/sushi';
                          foodDetail.linkTitle = 'Japanese Sushi';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1589308078050-cf38fe054d63';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('ramen')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/ramen';
                          foodDetail.linkTitle = 'Delicious Ramen';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1602334872613-3ab02f3c95a7';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('tempura')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/tempura';
                          foodDetail.linkTitle = 'Crispy Tempura';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1571771439241-89b31f5092c7';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('dumplings')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/dumplings';
                          foodDetail.linkTitle = 'Chinese Dumplings';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1617196036851-20ce58a15b1b';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('peking duck')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/peking-duck';
                          foodDetail.linkTitle = 'Peking Duck';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1643989946129-73e3a872ad80';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('spring rolls')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/spring-rolls';
                          foodDetail.linkTitle = 'Fresh Spring Rolls';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1604328698692-80d9b81baf4d';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('burger')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/burger';
                          foodDetail.linkTitle = 'Classic Burger';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1551782450-a2132b4ba21d';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('hot dog')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/hot-dog';
                          foodDetail.linkTitle = 'Grilled Hot Dog';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1621248313959-d6c0e480c54e';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else if (foodName.contains('apple pie')) {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/apple-pie';
                          foodDetail.linkTitle = 'Homemade Apple Pie';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1606760225157-145fe46c0b7f';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      } else {
                          foodDetail.linkURL = 'https://www.foodwebsite.com/food';
                          foodDetail.linkTitle = 'Unknown Food';
                          foodDetail.linkImageURL = 'https://images.unsplash.com/photo-1606851093480-b24197b5fd6a';
                          foodDetail.linkImageMimeType = 'image/jpeg';
                          foodDetail linkDescriptionText = 'All of our food is delicious.'
                      }
                      response.foodDetails.add(foodDetail);
                      responses.add(response);
                      return responses;
                  }
                  
                  return responses;
              }
          
              // Request Wrapper Class
              public class FoodDetailRequest {
                  @InvocableVariable(label='Food Name' description='The name of the food item' required=true)
                  public String foodName;
              }
          
              public class FoodDetail { 
                  public String linkURL;
                  public String linkTitle;
                  public String linkImageURL;
                  public String linkImageMimeType;
                  public String linkDescriptionText;
              }
          
              // Response Wrapper Class
              public class FoodDetailResponse {
          
                  @InvocableVariable(label='Food Details' required=true)
                  public List<FoodDetail> foodDetails;
          
                   public FoodDetailResponse() {
                      this.foodDetails = new List<FoodDetail>();
                  }
              }
          }
          

          In this Apex class, the GetFoodDetailsInvocable class gets a list of food names and returns a list of food items based on the given names. The class takes the FoodDetailRequest wrapper class as input, which contains a food name and variables that can hold food item details. For each food name, the GetFoodDetailsInvocable class looks for a match against predefined food items. If there’s a match, the class assigns the item’s website link, title, image URL, image MIME type, and description text to a custom object defined by the FoodDetailResponse wrapper class.

          Make sure that the agent user has access to the Apex class.

          Create a Custom Agent Action

          Create a custom agent action that uses the Get Food Details Apex class as a reference action.

          1. Reference Action Type: Apex
          2. Reference Action: Get Food Details
          3. Agent Action Instructions: Finds and retrieves details for food options. For each food option, retrieves its name, image, MIME type, URL, and description text. This action is for when a user asks what is on the menu.
          4. Loading Details: Getting food options
          5. foodName input instructions: The name of the food option. Select Require input.
          6. foodDetails output instructions: Details for a food option, including the link, title, image URL, image MIME type, and description text. Select Show in conversation.

          Create a Custom Subagent

          Create a custom subagent that includes the Get Food Details action.

          1. Open your Agentforce Service agent in Agentforce Builder.
          2. Create a custom subagent with these properties.
            1. Classification Description: This subagent provides the user a list of food options and details. For example, use this subagent when the user says: "what's on the menu."
            2. Scope: Your job is only to provide food options and details.
            3. Instructions:
              Use Get_Food_Details action to get food options and details.
              When the user says: "what's on the menu," always give a list of food options. For example, Classic Tiramisu, Homemade Apple Pie, and Delicious Ramen. Then the user is expected to select a food option. Using the food option name selected by user, pass the name to the Get_Food_Details action to get details about the item.
              When user selects a food option, use the Get_Food_Details action to give the user the link and image for the food option. For example, if user selects Delicious Ramen, then send Delicious Ramen as input to the Get_Food_Details action.
            4. Include the Get Food Details agent action in the subagent.

          To test your agent, activate it and then chat with it on a connected channel.

           
          Loading
          Salesforce Help | Article