Skip to main content

Prepararse para crear una acción de Apex

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Preparar su organización para crear acciones.
  • Comprobar que su Apex esté listo para las acciones.
Nota

Nota

¿Es su idioma de aprendizaje español (LATAM)? Comience el reto en un Trailhead Playground en español (LATAM) y utilice las traducciones entre paréntesis para navegar. Copie y pegue solo los valores en inglés, ya que las validaciones del reto dependen de los datos en ese idioma. Si no aprueba el reto en su organización en español (LATAM), recomendamos que (1) cambie la configuración local a Estados Unidos, (2) cambie el idioma a inglés (según estas instrucciones) y, luego, (3) haga clic en el botón “Check Challenge” (Comprobar el reto) nuevamente.

Consulte la insignia Trailhead en su idioma para obtener más información sobre cómo aprovechar la experiencia de Trailhead en otros idiomas.

Note

Nuevo Generador de Agentforce disponible de forma general.

¡Agentforce se actualizó! Desde febrero de 2026, la nueva experiencia de creación de agentes está disponible de forma general. En esta insignia, se usa el generador heredado en lugar del nuevo, pero pronto la actualizaremos. Para dar los primeros pasos con el generador nuevo ahora, complete la ruta Realizar un recorrido por el nuevo Generador de Agentforce u obtenga más información en la documentación de Agentforce.

Pronóstico: Se aproximan días soleados

Toda persona que estuvo de vacaciones sabe que prestar atención al clima es esencial para aprovechar al máximo sus planes de viaje. Y en Coral Cloud Resorts, los huéspedes pueden prever días soleados y cálidos... hasta que el clima cambia. Para asegurarse de que sus huéspedes están aprovechando al máximo su estadía, independientemente del clima, el equipo de Coral Cloud quiere agregar la capacidad de recopilar información del clima a sus agentes de IA. Para hacerlo, necesita crear una acción que extraiga los datos climáticos de una clase de Apex a través de una API externa.

Registrarse para obtener una organización de Developer Edition con Agentforce

Para completar este módulo, necesita una organización especial de Developer Edition que contiene Agentforce y nuestros datos de muestra. Regístrese para obtener esta organización gratuita y personalizada de Developer Edition con Agentforce, haga clic en el vínculo y conéctela a Trailhead para completar los retos de este módulo. Tenga en cuenta que esta organización está diseñada para trabajar con los retos de esta insignia y podría no funcionar con otras insignias. Siempre compruebe que está utilizando el Trailhead Playground o la organización especial Developer Edition que recomendamos.

  1. Regístrese para obtener una organización gratuita de Developer Edition con Agentforce.
  2. Complete el formulario:
    1. Para Email, ingrese una dirección de email activa.
    2. En Username (Nombre de usuario), ingrese un nombre de usuario que parezca una dirección de email y sea único, pero no es necesario que sea una cuenta de email válida (por ejemplo, sunombre@ejemplo.com).
  3. Después de completar el formulario, haga clic en Registrarme. Se muestra un mensaje de confirmación.
  4. Cuando reciba el email de activación (podría tardar unos minutos), ábralo y haga clic en Verificar cuenta.
  5. Complete el registro por medio de su contraseña y la pregunta de comprobación. Sugerencia: Guarde su nombre de usuario, contraseña y URL de inicio de sesión en un lugar seguro, como un gestor de contraseñas, para acceder a estos datos fácilmente en otro momento.
  6. Habrá iniciado sesión en su cuenta de Developer Edition.

Ahora, conecte su nueva organización Developer Edition a Trailhead.

  1. Asegúrese de haber iniciado sesión en su cuenta de Trailhead.
  2. En la sección Challenge (Reto) de la parte inferior de esta página, haga clic en el nombre de la organización y, luego, haga clic en Connect Org (Conectar organización).
  3. En la página de inicio de sesión, ingrese el nombre de usuario y la contraseña para la Developer Edition que acaba de configurar.
  4. En la pantalla ¿Permitir acceso?, haga clic en Permitir.
  5. En la pantalla Want to connect this org for hands-on challenges? (¿Desea conectar esta organización para retos prácticos?), haga clic en Yes! (Sí). Guarde los cambios. Se le redirigirá de nuevo a la página del reto y estará listo para utilizar su nueva Developer Edition para ganar esta insignia.

Preparar la organización para los agentes

Antes de que empiece a personalizar los agentes, habilite todas las funciones obligatorias de la organización.

  1. Haga clic en Setup (Configuración) y seleccione Setup (Configuración).
  2. En el cuadro de búsqueda rápida de configuración, busque y seleccione Einstein Setup (Configuración de Einstein).
  3. Asegúrese de que Einstein esté activado. Si ya está activado, haga clic en el botón de alternancia Off (Desactivado) y, luego, de vuelta en On (Activado).

    Habilitar la alternancia de Einstein.
  1. Actualice su navegador para volver a cargar Setup (Configuración).
  2. En Setup Quick Find (Búsqueda rápida de configuración), busque y seleccione Salesforce Go.
  3. En el cuadro de texto Search features... (Buscar funciones...), ingrese y seleccione Agentforce (Default) (Agentforce [Predeterminado]).

    Agentforce (Default) (Agentforce [Predeterminado]) seleccionado.
  1. Haga clic en Get Started (Empezar).
  2. Haga clic en Turn On (Activar).
  3. Haga clic en Confirm (Confirmar).

Crear acciones de agente con funciones que ya tiene

¡Bien! Ya está todo casi listo para crear una acción personalizada para su agente. Uno de los motivos más importantes para crear agentes de IA con Salesforce es que puede usar las funciones que ya están integradas en su organización. En este caso, quiere agregarle a un agente de IA para Coral Cloud Resort la información del clima. Coral Cloud ya tiene una clase de Apex WeatherService para obtener el clima de la ubicación de Coral Cloud Resort desde una API externa. Veamos cómo se aplica a una acción.

public with sharing class WeatherService {
    /**
     * Gets the weather at Coral Cloud Resorts for the provided date
     */
    public static Weather getResortWeather(Datetime dateToCheck) {
        Integer currentYear = Date.today().year();
        Integer yearDelta = currentYear - dateToCheck.year();
        dateToCheck = dateToCheck.addYears(yearDelta);
        String isoDate = dateToCheck.format('yyyy-MM-dd');
        String dateString = dateToCheck.format('MMMM d');
        // Prepare API request
        HttpRequest req = new HttpRequest();
        req.setEndpoint(
            'callout:Weather_Endpoint/weather?lat=37.789782764570425&lon=-122.39723702244089&date=' +
            isoDate
        );
        req.setMethod('GET');
        // Make callout
        Http http = new Http();
        HttpResponse res = http.send(req);
        if (res.getStatusCode() != 200) {
            throw new CalloutException('Bad response: ' + res);
        }
        // The response contains a list of temperatures for different times of the day
        // We parse the response and find the min and max temperatures
        String body = res.getBody();
        WeatherApiResponse weatherResponse = (WeatherApiResponse) JSON.deserialize(
            body,
            WeatherAPIResponse.class
        );
        List<Decimal> temperatures = new List<Decimal>();
        for (TemperatureWrapper item : weatherResponse.weather) {
            if (item.temperature != null) {
                temperatures.add(item.temperature);
            }
        }
        temperatures.sort();
        // Prepare temperatures and description
        Decimal minTempC = temperatures[0];
        Decimal maxTempC = temperatures[temperatures.size() - 1];
        Decimal minTempF = toFahrenheit(minTempC);
        Decimal maxTempF = toFahrenheit(maxTempC);
        String description =
            'On ' +
            dateString +
            ', temperature should be between ' +
            minTempC +
            '°C (' +
            minTempF +
            '°F) and ' +
            maxTempC +
            '°C (' +
            maxTempF +
            '°F) at Coral Cloud Resorts.';
        // Return weather info
        Weather weather = new Weather();
        weather.minTemperatureC = minTempC;
        weather.minTemperatureF = minTempF;
        weather.maxTemperatureC = maxTempC;
        weather.maxTemperatureF = maxTempF;
        weather.description = description;
        return weather;
    }
    private static Decimal toFahrenheit(Decimal celsius) {
        return (celsius * 9 / 5 + 32).setScale(1);
    }
    private class WeatherApiResponse {
        public List<TemperatureWrapper> weather;
    }
    private class TemperatureWrapper {
        public Decimal temperature;
    }
    public class Weather {
        public Decimal minTemperatureC;
        public Decimal minTemperatureF;
        public Decimal maxTemperatureC;
        public Decimal maxTemperatureF;
        public String description;
    }
}

Esta es una clase de Apex bastante directa que envía una solicitud HTTP a un servicio climático para obtener el clima de la fecha ingresada. Sin embargo, la clase de Apex no está disponible para que la use el Generador de Agentforce. Podría actualizar esta clase para que sea un método invocable, pero una mejor práctica es crear una nueva clase de Apex establecida en InvocableMethod que llame al WeatherService original. Con la anotación InvocableMethod, puede llamar al código Apex personalizado desde herramientas declarativas, como Flow, aplicaciones externas a través de REST y Agentforce.

La buena noticia es que el equipo de Coral Cloud creó una clase de Apex que ya está realizando llamadas a WeatherService. Echemos un vistazo a la clase y veamos cómo implementa WeatherService.

public with sharing class CheckWeather {
    @InvocableMethod(
        label='Check Weather'
        description='Check weather at Coral Cloud Resorts at a specific date'
    )
    public static List<WeatherResponse> getWeather(
        List<WeatherRequest> requests
    ) {
        // Retrieve the date for which we want to check the weather
        Datetime dateToCheck = (Datetime) requests[0].dateToCheck;
        WeatherService.Weather weather = WeatherService.getResortWeather(
            dateToCheck
        );
        // Create the response for Copilot
        WeatherResponse response = new WeatherResponse();
        response.minTemperature = weather.minTemperatureC;
        response.maxTemperature = weather.maxTemperatureC;
        response.temperatureDescription =
            'Temperatures will be between ' +
            weather.minTemperatureC +
            '°C (' +
            weather.minTemperatureF +
            '°F) and ' +
            weather.maxTemperatureC +
            '°C (' +
            weather.maxTemperatureF +
            '°F) at Coral Cloud.';
        return new List<WeatherResponse>{ response };
    }
    public class WeatherRequest {
        @InvocableVariable(
            required=true
            description='Date for which we want to check the temperature. The variable needs to be an Apex Date type with format yyyy-MM-dd.'
        )
        public Date dateToCheck;
    }
    public class WeatherResponse {
        @InvocableVariable(
            description='Minimum temperature in Celsius at Coral Cloud Resorts location for the provided date'
        )
        public Decimal minTemperature;
        @InvocableVariable(
            description='Maximum temperature in Celsius at Coral Cloud Resorts location for the provided date'
        )
        public Decimal maxTemperature;
        @InvocableVariable(
            description='Description of temperatures at Coral Cloud Resorts location for the provided date'
        )
        public String temperatureDescription;
    }
}

Lo primero que hay que observar es la anotación @InvocableMethod para el método getWeather. Los dos parámetros que se pasaron se usan en el proceso de crear una acción de agente. El parámetro label (etiqueta) aparece como Agent Action Label (Etiqueta de acción de agente). El parámetro description (descripción) aparece como Agent Action Instructions (Instrucciones de acción de agente). Las descripciones son importantes con los agentes de IA y cómo el agente entiende el método.

Entonces, hay dos clases públicas, WeatherRequest y WeatherResponse, que tienen anotaciones @InvocableVariable para Create an Agent Action Input (Crear un entrada de acción de agente) y Outputs (Salidas) respectivamente.

Para WeatherRequest, la anotación @InvocableVariable para dateToCheck tiene el parámetro required (obligatorio) establecido en true (verdadero). La configuración Create an Agent Action Require Input (Crear una entrada requerida para la acción de agente) se verá forzada a quedar marcada como predeterminada. El parámetro description (descripción) se mostrará como Input Instructions (Instrucciones de entrada). Además, establecer el tipo de variable en Date (Fecha) para dateToCheck establece el tipo de datos de entrada.

Para WeatherResponse, hay tres variables con la anotación @InvocableVariable, minTemperature, maxTemperature y temperatureDescription. Cada una tiene un parámetro description (descripción) establecido que se muestra en Create an Agent Action Outputs Instructions (Crear instrucciones de salida para la acción de agente). Además, los tipos de variables Decimal, Decimal y String (Cadena) aparecen como Output Rendering (Representación de salida). El tipo de variable String (Cadena) se establecerá como Text for Output Rendering (Texto para representación de salida).

Configurar permisos

Como con cualquier función de Apex, debe tener el acceso adecuado para el archivo Apex. Este paso ya se realizó en la organización de Dev personalizada que está usando para esta insignia. Ya se configuraron los permisos, por lo tanto, el agente de IA tiene acceso a la clase de Apex que contiene el método invocable a través de un conjunto de permisos. De no ser así, el agente no podría considerarlo cuando crea un plan, incluso si usted creara una acción y la agregara a un agente. La falta de permisos adecuados es uno de los principales motivos por el cual las acciones de Apex no funcionan como corresponde en Agentforce.

Ahora tiene una mejor idea de lo que hace falta al usar Apex para las acciones. Es bastante información, pero se hará una mejor idea cuando cree la acción en la próxima unidad.

Recursos

Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios