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.
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.
- Regístrese para obtener una organización de Developer Edition con Agentforce gratuita.
- Rellene el formulario:
- En Email (Correo electrónico), introduzca una dirección de correo activa.
- 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).
- En Email (Correo electrónico), introduzca una dirección de correo activa.
- Una vez completado el formulario, haga clic en Sign me up (Registrarse). Aparece un mensaje de confirmación.
- Cuando reciba el correo electrónico de activación (es posible que tarde unos minutos), ábralo y haga clic en Verificar cuenta.
- 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.
- Ya ha iniciado sesión en su Developer Edition.
Ahora, conecte su organización de Developer Edition a Trailhead.
- Primero, asegúrese de iniciar sesión en su cuenta de Trailhead.
- 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).
- 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.
- En la pantalla Allow Access? )¿Permitir acceso?), haga clic en Allow (Permitir).
- 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.
- Haga clic en Setup (Configuración)
y seleccione Setup (Configuración).
- En el cuadro Setup Quick Find (Configuración de búsqueda rápida), busque y seleccione Einstein Setup (Configuración de Einstein).
- Compruebe que Einstein también se haya activado. Si ya lo está, desactívelo y vuelva a activarlo.

- Actualice su navegador para volver a cargar la configuración.
- En el cuadro Quick Find (Búsqueda rápida) en Setup (Configuración), busque y seleccione Salesforce Go.
- En el cuadro de texto Search features... (Buscan funciones...), introduzca y seleccione Agentforce (Default) (Agentforce [predeterminado]).
![Opción Agentforce (Default) (Agentforce [predeterminado]) seleccionada.](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/agent-customization-with-apex/get-ready-to-create-an-apex-action/images/es-ES/8c633e908d2fd728f1ae0908abb1b047_kix.szvk34w8evu.png)
- Haga clic en Get Started (Empezar).
- Haga clic en Turn On (Activar).
- 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.
