- Primeros pasos
- Para administradores
- Proyectos de flujo de trabajo de RPA
- Crear un flujo de trabajo RPA a partir de una idea
- Creación de un proyecto
- Cómo iniciar un flujo de trabajo de RPA
- Gestionar archivos y carpetas de proyecto
- Conectar flujos de trabajo de RPA a tus cuentas
- Configurar actividades
- Gestionar las actividades de un proyecto
- Transferir valores entre actividades
- Iterar a través de los elementos
- Gestionar los datos en un proyecto
- Configurar un proyecto para usar tus datos
- Usar recursos de archivos y carpetas
- Proyectos de aplicación
- Aplicaciones en Studio Web
- Diseñar proyectos de aplicación
- Depuración de proyectos de aplicación
- Publicar, implementar y actualizar proyectos de aplicaciones
- Importar y exportar proyectos de aplicación
- Trabajar con entidades en un proyecto de aplicación
- Crear aplicaciones accesibles
- Añadir descriptores accesibles
- La etiqueta Accesible
- Uso del control Pestaña para la accesibilidad
- Diseñar listas y encabezados accesibles
- Diseño de aplicaciones receptivas
- Relación de contraste de color
- Estilos preestablecidos y asignaciones a nivel de aria para el control Encabezado
- Limitaciones conocidas
- Visión general de los controles
- Botón
- Casilla de verificación
- HTML personalizado
- Selector de fechas
- Lista desplegable
- Cargador de archivos
- Cargador de archivos múltiples
- Lista desplegable de selección múltiple
- Botón de radio
- Editor de texto enriquecido
- Control deslizante
- Interruptor
- Área de texto
- Cuadro de texto
- Cuadro de texto (correo electrónico)
- Cuadro de texto (Número)
- Controles de iconos
- Establecer un contexto externo utilizando parámetros de consulta
- Establecer un contexto externo utilizando eventos externos
- Utilizar matrices para rellenar controles desplegables, desplegables de selección múltiple y botones de opción
- Utilizar controles tabulares con entidades de Data Service en proyectos de aplicación
- Insertar agentes conversacionales
- Actividades de la aplicación
- Procesos de agente
- Agents
- Soluciones
- Flujos de trabajo de API
- Pruebas

Guía del usuario de Studio Web
Recuperar detalles del ticket
Este tutorial demuestra cómo utilizar los flujos de trabajo de la API y recuperar los detalles del ticket que luego se integran con los agentes y Maestro.
El flujo de trabajo de la API tiene como objetivo recuperar los detalles del incidente de ServiceNow, luego validar y obtener información adicional sobre el creador del ticket y su empresa asociada de Salesforce, si está disponible.


-
Abre Data Manager y añade el NúmeroDeIncidente como una propiedad de Entrada , con las siguientes propiedades:
- Tipo: cadena
- Descripción: referencia para el número de ticket entrante
- Obligatorio: Verdadero
-
En Data Manager, añade incidenteObject y isValidCallerIdLink como variables, con las siguientes propiedades:
- objetoDeIncidente : almacena los detalles del incidente enriquecidos.
- Tipo: objeto
- Valor predeterminado: dejar vacío
- isValidCallerIdLink : verifica si el caller_id_link recuperado de ServiceNow es una URL válida.
- Tipo: booleano
- Valor predeterminado: falso
- objetoDeIncidente : almacena los detalles del incidente enriquecidos.
-
Abre la ventana de configuración de depuración . En el campo obligatorio númeroDeIncidente , introduce INC0026701.
-
Añade una actividad Conector y configúrala para utilizar la siguiente actividad de ServiceNow : Buscar incidentes por número de incidente. Esto recupera los detalles del incidente en función del número de incidente proporcionado como entrada.
- Selecciona tu conexión de ServiceNow.
- Conecta el ID de incidente a la siguiente variable: flujo de trabajo > entrada > númeroDeIncidente.
- Cambia el nombre de la salida del contexto de la actividad a
$context.outputs.incident_1.
-
Para comprobar si se encontró algún incidente en el paso anterior, añade una actividad Si con la siguiente condición:
$context.outputs.incident_1.content && $context.outputs.incident_1.content.length > 0$context.outputs.incident_1.content && $context.outputs.incident_1.content.length > 0 -
En la rama Entonces , si se encuentra algún incidente, procede a validar el
caller_id_linky obtener más detalles. Añade una actividad Intentar capturar .-
Dentro del bloque Intentar , añade una actividad de Script con el siguiente código:
const callerIdLink = $context.outputs.incident_1.content[0].caller_id_link; const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i; $context.variables.isValidCallerIdLink = (callerIdLink && urlRegex.test(callerIdLink)); return $context.variables.isValidCallerIdLink;const callerIdLink = $context.outputs.incident_1.content[0].caller_id_link; const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i; $context.variables.isValidCallerIdLink = (callerIdLink && urlRegex.test(callerIdLink)); return $context.variables.isValidCallerIdLink;Cambia el nombre de la actividad a "Validar enlace de caller_id" y el nombre de salida de contexto a
$context.outputs.Validate_Caller_ID_Link. -
Dentro del mismo bloque Intentar , añade una actividad Si con la siguiente Condición:
$context.variables.isValidCallerIdLink. Cambia el nombre de la actividad a "If caller_id_link is valid", y el nombre de salida de contexto a$context.outputs.If_Caller_ID_Valid. -
En la rama Entonces (enlace válido) de la actividad Si anterior, añade una actividad Conector , Solicitud HTTP de Service Now, con la siguiente configuración:
- Conexión de ServiceNow : cuenta de desarrollador de ServiceNow
- Método—GET
- Solicitar URL :
$context.outputs.incident_1.content[0].caller_id_link ```Rename the activity to "Get Ticket Creator". The context output name remains as `$context.outputs.ServiceNow_HTTP_Request_1`.$context.outputs.incident_1.content[0].caller_id_link ```Rename the activity to "Get Ticket Creator". The context output name remains as `$context.outputs.ServiceNow_HTTP_Request_1`.
-
En la rama Else (enlace no válido) de la actividad Si anterior, añade una actividad Script con el siguiente código:
console.error("Invalid caller_id_link, skipping 'Get Ticket Creator' activity."); return null;console.error("Invalid caller_id_link, skipping 'Get Ticket Creator' activity."); return null;Cambia el nombre de la actividad a "Registrar caller_id_link no válido" y el nombre de salida de contexto a
$context.outputs.Log_Invalid_Caller_ID. -
Fuera de la actividad Si , pero aún dentro del bloque Intentar , añade la actividad Script con el siguiente Código. Esta actividad combina los detalles iniciales del incidente con los detalles del creador obtenidos en un único objeto de incidente.
const incident = $context.outputs.incident_1.content[0]; let creatorDetails = null; const creatorOutput = $context.outputs.ServiceNow_HTTP_Request_1.content; if (creatorOutput && Array.isArray(creatorOutput) && creatorOutput.length > 0) { creatorDetails = creatorOutput[0]; } else if (creatorOutput && typeof creatorOutput === 'object' && creatorOutput !== null) { creatorDetails = creatorOutput; } let companyDetails = null; const companyOutput = $context.outputs.ServiceNow_HTTP_Request_1.content; if (companyOutput && typeof companyOutput === 'object' && companyOutput !== null) { companyDetails = companyOutput; } else if (companyOutput && Array.isArray(companyOutput) && companyOutput.length > 0) { companyDetails = companyOutput[0]; } return { ...incident, creator: creatorDetails, company: companyDetails };const incident = $context.outputs.incident_1.content[0]; let creatorDetails = null; const creatorOutput = $context.outputs.ServiceNow_HTTP_Request_1.content; if (creatorOutput && Array.isArray(creatorOutput) && creatorOutput.length > 0) { creatorDetails = creatorOutput[0]; } else if (creatorOutput && typeof creatorOutput === 'object' && creatorOutput !== null) { creatorDetails = creatorOutput; } let companyDetails = null; const companyOutput = $context.outputs.ServiceNow_HTTP_Request_1.content; if (companyOutput && typeof companyOutput === 'object' && companyOutput !== null) { companyDetails = companyOutput; } else if (companyOutput && Array.isArray(companyOutput) && companyOutput.length > 0) { companyDetails = companyOutput[0]; } return { ...incident, creator: creatorDetails, company: companyDetails };
Cambia el nombre de la actividad a "JS: objeto de incidente". El nombre de salida de contexto sigue siendo
$context.outputs.Javascript_1. 6. Asigna el objeto de incidente a una variable: añade la actividad Asignar con la siguiente configuración:-
A variable : selecciona la variable IncidentObject definida al principio.
-
Establecer valor : hace referencia al nombre de contexto de la actividad de Script anterior:
$context.outputs.Javascript_1$context.outputs.Javascript_1Cambia el nombre de la actividad a "Asignar objetoDeIncidente". El nombre de salida de contexto sigue siendo
$context.outputs.Assign_1.
-
En el bloque Capturar de la actividad Intentar capturar actual, añade una actividad Script con el siguiente código:
let errorMessage = `Error in Try_Catch_1: ${$error.title || 'Unknown Error'}`; if ($error.detail) { errorMessage += `\nDetails: ${$error.detail}`; } if ($error.data && $error.data.status) { const statusCode = $error.data.status; if (statusCode === 0 || statusCode === -1) { errorMessage += "\nNetwork error: Unable to connect to ServiceNow."; } else if (statusCode >= 500 && statusCode < 600) { errorMessage += "\nServiceNow server error."; } } console.error(errorMessage); console.error("Stack Trace:", $error); return null;let errorMessage = `Error in Try_Catch_1: ${$error.title || 'Unknown Error'}`; if ($error.detail) { errorMessage += `\nDetails: ${$error.detail}`; } if ($error.data && $error.data.status) { const statusCode = $error.data.status; if (statusCode === 0 || statusCode === -1) { errorMessage += "\nNetwork error: Unable to connect to ServiceNow."; } else if (statusCode >= 500 && statusCode < 600) { errorMessage += "\nServiceNow server error."; } } console.error(errorMessage); console.error("Stack Trace:", $error); return null;Cambia el nombre de la actividad a "Registrar detalles del error" y el nombre de la salida de contexto a
$context.outputs.Log_Error_Catch. -
Si se produce algún error, añade una actividad Asignar para utilizar el objeto de incidente simplificado con los detalles iniciales de ServiceNow:
- A variable : selecciona la variable IncidentObject definida al principio.
- Establecer valor— ``` (($incidentDetails) => ({ id: $incidentDetails.sys_id, número: $incidentDetails.number, short_description: $incidentDetails.short_description, descripción: $incidentDetails.description, state: $incidentDetails.state, urgencia: $incidentDetails.urgencia, impact: $incidentDetails.impact, open_at: $incidentDetails.opened_at, cerrado_en: $incidentDetails.closed_at })) ($context.outputs.curated_search_incident_1.content[0])
The activity name and the context output name remain as they are.The activity name and the context output name remain as they are.
-
-
Sal de la actividad Intentar capturar y añade una Respuesta vacía en la rama Else . Cambia el nombre de la actividad Respuesta a "No se encontraron resultados".
-
Para comprobar si algún objeto de incidente contiene información suficiente sobre el correo electrónico del creador y el ID de la cuenta de la empresa, añade una actividad Si con la siguiente condición:
$context.variables.incidentObject && $context.variables.incidentObject.creator && $context.variables.incidentObject.creator.email && $context.variables.incidentObject.company && $context.variables.incidentObject.company.account_id$context.variables.incidentObject && $context.variables.incidentObject.creator && $context.variables.incidentObject.creator.email && $context.variables.incidentObject.company && $context.variables.incidentObject.company.account_id- En la rama Entonces , añade una actividad Conector y configúrala para utilizar la actividad de Salesforce : Buscar utilizando SOQL. Cambia el nombre de la actividad a "Obtener contacto" y el nombre de la salida de contexto a
$context.outputs.soqlQuery_1. - En el campo Consulta , abre el editor de expresiones y escribe:
"SELECT Id, Name, Email, AccountId FROM Contact WHERE Email = '" + $context.variables.incidentObject.creator.email + "' LIMIT 1""SELECT Id, Name, Email, AccountId FROM Contact WHERE Email = '" + $context.variables.incidentObject.creator.email + "' LIMIT 1"- En la rama Entonces , añade una actividad Si con la siguiente Condición:
$context.outputs.soqlQuery_1.content && $context.outputs.soqlQuery_1.content.length > 0
Rename the activity to "If Contact Found" and the context output name to `$context.outputs.If_Contact_Found`. This conditional activity checks if a contact was found in Salesforce.Rename the activity to "If Contact Found" and the context output name to `$context.outputs.If_Contact_Found`. This conditional activity checks if a contact was found in Salesforce.-
En la rama Entonces de la actividad "Si se encuentra el contacto", añade una actividad Conector y configúrala para utilizar la actividad Obtener cuenta de Salesforce :
- Conexión de Salesforce : cuenta de desarrollador de Salesforce
- ID de cuenta :
$context.variables.incidentObject.company.account_id$context.variables.incidentObject.company.account_id
Cambia el nombre de la salida de contexto a
$context.outputs.curated_account_1. Esta actividad recupera los detalles de la cuenta de Salesforce utilizando el account_id del IncidentObject enriquecido. -
En la rama Entonces de la actividad "Si se encuentra el contacto", añade una actividad Para cada y configúrala en:
$context.outputs.soqlQuery_1.content. Este bucle itera a través de los resultados de la búsqueda de contactos de Salesforce (aunque la consulta SOQL se limita a 1). Dentro del bucle, intenta obtener detalles del caso relacionados con el contacto encontrado. -
Dentro del cuerpo del bucle Para cada , añade una actividad Conector , Solicitud HTTP de Service Now, con la siguiente configuración:
- Conexión de ServiceNow : cuenta de desarrollador de Salesforce
- Método—GET
- Solicitar URL :
"/services/data/v64.0/sobjects/Case/" + $currentItem.Id"/services/data/v64.0/sobjects/Case/" + $currentItem.Id
Cambia el nombre de la actividad a "Detalles del caso". El nombre de salida de contexto permanece como está.
-
Sal del bucle Para cada y añade una actividad Respuesta vacía.
-
En la rama Else de la actividad "Si se encuentra el contacto", añade una actividad Respuesta con la siguiente Respuesta:
- Respuesta—
No Salesforce Contact found for the incident creator email."No Salesforce Contact found for the incident creator email."
Cambia el nombre de la actividad a "Devolver el error No se encontró ningún contacto".
- Respuesta—
- En la rama Entonces , añade una actividad Conector y configúrala para utilizar la actividad de Salesforce : Buscar utilizando SOQL. Cambia el nombre de la actividad a "Obtener contacto" y el nombre de la salida de contexto a