Skip to main content

Prepararse para crear una acción de Apex

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Preparar la organización para crear acciones.
  • Comprobar que su código Apex está preparado para las acciones.
Nota

Nota

¿Su idioma de aprendizaje es español? Comience el reto en un Trailhead Playground en español y utilice las traducciones proporcionadas entre paréntesis para navegar. Copie y pegue solo los valores en inglés, ya que las validaciones del reto se basan en los datos en inglés. Si no aprueba el reto en su organización en español, le recomendamos que (1) cambie la configuración regional a Estados Unidos, (2) cambie el idioma a inglés, siga las instrucciones descritas aquí y, a continuación, (3) vuelva a hacer clic en el botón Check Challenge (Comprobar el reto).

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 Agentforce Builder disponible!

Agentforce se ha actualizado. Desde febrero de 2026, está disponible la nueva experiencia de creación de agentes. En esta insignia se usa el generador anterior y no el nuevo, pero la actualizaremos en breve. Para empezar con el nuevo generador, complete la ruta Recorrido por el nuevo Agentforce Builder o lea más información en la documentación de Agentforce.

Pronóstico: se acercan días soleados

Como sabe cualquier persona que haya estado de vacaciones, es fundamental estar pendiente de la previsión meteorológica para sacar el máximo provecho de los planes del viaje. En Coral Cloud Resorts, los huéspedes pueden esperar que los días sean soleados y haga buena temperatura... hasta que no sea así. Para asegurarse de que los huéspedes aprovechan al máximo su estancia, independientemente del tiempo, el equipo de Coral Cloud quiere agregar la capacidad de recopilar información sobre el tiempo para sus agentes de IA. Para ello, deben crear una acción que extraiga los datos del tiempo de una clase de Apex con una API externa.

Regístrese para obtener una organización de Developer Edition con Agentforce

Para completar este módulo, necesita una organización de Developer Edition especial que contenga Agentforce y nuestros datos de ejemplo. Regístrese para obtener esta organización gratuita y personalizada de Developer Edition haciendo clic en el vínculo y conéctela a Trailhead para completar los retos de este módulo. Observe que esta organización se ha diseñado para que funcione con los retos de esta insignia y es posible que no funcione con otras. Compruebe siempre que está usando el Trailhead Playground o la organización especial de Developer Edition que le hemos recomendado.

  1. Regístrese para obtener una organización de Developer Edition con Agentforce gratuita.
  2. Rellene el formulario:
    1. En Email (Correo electrónico), introduzca una dirección de correo activa.
    2. En Username (Nombre de usuario), introduzca un nombre de usuario que tenga el mismo aspecto que una dirección de correo electrónico y que sea exclusivo, pero no tiene por qué ser una cuenta de correo válida (por ejemplo, sunombre@ejemplo.com).
  3. Una vez completado el formulario, haga clic en Sign me up (Registrarse). Aparece un mensaje de confirmación.
  4. Cuando reciba el correo electrónico de activación (es posible que tarde unos minutos), ábralo y haga clic en Verificar cuenta.
  5. Complete el registro estableciendo una contraseña y una pregunta de seguridad. 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 fácilmente más tarde.
  6. Ya ha iniciado sesión en su Developer Edition.

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

  1. Primero, asegúrese de iniciar sesión en su cuenta de Trailhead.
  2. En la sección Challenge (Reto) al final de esta página, haga clic en el nombre de la organización y seleccione Connect Org (Conectar organización).
  3. En la pantalla de inicio de sesión, introduzca su nombre de usuario y contraseña para la organización de Developer Edition que acaba de configurar.
  4. En la pantalla Allow Access? )¿Permitir acceso?), haga clic en Allow (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! Save it (Sí, guardar). Se le redirigirá a la página de retos y ya podrá utilizar su organización de Developer Edition para conseguir esta insignia.

Preparar la organización para los agentes

Antes de poder empezar a personalizar los agentes, habilite todas las funciones requeridas de la organización.

  1. Haga clic en Setup (Configuración) y seleccione Setup (Configuración).
  2. En el cuadro Setup Quick Find (Configuración de búsqueda rápida), busque y seleccione Einstein Setup (Configuración de Einstein).
  3. Compruebe que Einstein también se haya activado. Si ya lo está, desactívelo y vuelva a activarlo.

    Botón Enable Einstein (Activar Einstein).
  1. Actualice su navegador para volver a cargar la configuración.
  2. En el cuadro Quick Find (Búsqueda rápida) en Setup (Configuración), busque y seleccione Salesforce Go.
  3. En el cuadro de texto Search features... (Buscan funciones...), introduzca y seleccione Agentforce (Default) (Agentforce [predeterminado]).

    Opción Agentforce (Default) (Agentforce [predeterminado]) seleccionada.
  1. Haga clic en Get Started (Empezar).
  2. Haga clic en Turn On (Activar).
  3. Haga clic en Confirm (Confirmar).

Crear acciones de agentes con funciones que ya tiene

¡Vale, vale! Ya casi está listo para crear una acción personalizada para su agente. Uno de los mejores motivos para crear agentes de IA con Salesforce es que puede utilizar las funciones que ya tiene en su organización. En este caso, quiere agregar la información meteorológica de Coral Cloud Resorts a un agente de IA. Coral Cloud ya tiene una clase de Apex WeatherService para conseguir la información meteorológica de la ubicación en la que se encuentra Coral Cloud Resort de 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 directa que realiza una solicitud de HTTP a un servicio meteorológico para conseguir la información necesaria para el día que se haya introducido. Sin embargo, la clase de Apex no está disponible para que Agentforce Builder la utilice. Podría actualizar esta clase para hacer que fuese un método invocable, pero la práctica recomendada es crear una nueva clase de Apex que esté establecida en el método InvocableMethod que active la clase WeatherService original. La anotación InvocableMethod le permite activar código Apex personalizado a partir de herramientas declarativas, como Flows, aplicaciones externas mediante REST y Agentforce.

Lo bueno es que el equipo de Coral Cloud ha creado una clase de Apex que ya activa WeatherService. Vamos a ver la clase para ver cómo se 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 se debe observar es la anotación @InvocableMethod para el método getWeather. Los dos parámetros que se han pasado se utilizan en el proceso Create an Agent Action (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 la manera en la que el agente comprende el método.

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

En WeatherRequest, la anotación @InvocableVariable para dateToCheck tiene el parámetro required (requerido) establecido en true. Esto hace que la configuración Create an Agent Action Require Input (Crear una entrada requerida de acción de agente) se marque de manera predeterminada. El parámetro description (descripción) se mostrará como Input Instructions (Instrucciones de entrada). Además, al establecer el tipo de variable en Date (Fecha) para dateToCheck se establece el tipo de fecha de entrada.

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

Configurar permisos

Al igual que cualquier funcionalidad de Apex, debe contar con el acceso adecuado al archivo de Apex. Este paso ya se ha llevado a cabo en la organización personalizada de Developer que está utilizando para esta insignia. Los permisos ya se han configurado, proporcionando así al agente de IA acceso a la clase de Apex que contiene el método invocable mediante un conjunto de permisos. De no ser así, el agente no podría tenerlo en cuenta a la hora de crear un plan aunque haya creado una acción y la haya agregado a un agente. Si no cuenta con los permisos necesarios las acciones de Apex no funcionarán como es debido en Agentforce.

Ahora tiene una mejor idea de lo que necesita para que Apex se utilice con las acciones. Puede parecer mucha información, pero tendrá más sentido cuando cree la acción en la siguiente unidad.

Recursos

Comparta sus comentarios sobre Trailhead en la Ayuda de Salesforce.

Nos encantaría conocer su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios cuando quiera desde el sitio de la Ayuda de Salesforce.

Más información Continuar para compartir comentarios