Skip to main content

Command Palette

Search for a command to run...

Aprendizajes al momento de probar Copilot Studio

Construyendo agentes IA

Updated
6 min read
Aprendizajes al momento de probar Copilot Studio
S

I have worked as a frontend and backend developer handling technologies such as Django, Ionic, Laravel, MySQL, Spring (Java), Oracle, NodeJS, Angular, VueJS with the goal of developing websites and mobile applications that offer high performance and are interactive.

You can learn more about me by visiting my website: www.stalinmaza.com

#frontend #backend #fullstack #javascript #nodejs #php

Inserción de Variables en un contenido tipo JSON para Solicitudes HTTP

Para configurar el Body (Cuerpo) de una solicitud HTTP (Web Request) en tu Tópico, puedes usar el modo de edición JSON. La forma más limpia y recomendada para insertar los valores de tus variables es usando la sintaxis de expresiones de la plataforma (como Power Virtual Agents o Power Automate en un contexto de Tópico).

Estructura del Body (JSON con Variables)

El método consiste en escribir la estructura JSON y reemplazar los valores dinámicos usando las variables disponibles en el contexto del tópico sea local o global.

{
    filename: Topic.BannerFilename,
    scope: Global.Scope,
    storageFilePath: Topic.BannerFileStoragePath
}

Este enfoque de usar el contenido mediante formula garantiza que la API de destino recibirá un JSON con valores dinámicos, manteniendo el formato de datos correcto sin tener que recurrir a complejas concatenaciones de strings o funciones para concatenas una serie de valores.

Manejo de Archivos y la Disparidad Record vs. File

Es mucho mejor y más fácil de manejar la lectura de archivos, mediante el manejo de los archivos directamente dentro del Tópico, utilizando la acción HTTP, en lugar de intentar pasar el archivo a un Flujo de Power Automate (Cloud Flow) para su procesamiento.

Cuando se utiliza un paso para llamar a un Flujo de Power Automate desde un Tópico con la intención de enviarle un archivo leído (que es típicamente de tipo File o Binary Content en el Tópico), ocurre un problema:

  • El Tópico tiene una variable de tipo File.

  • El conector del Flujo de Power Automate (Cloud Flow) no acepta directamente ese tipo File. En su lugar, pide un Record (Registro/Objeto JSON) que contenga el archivo.

  • Resultado: El desarrollador se ve obligado a crear un objeto Record (como vimos en la sección anterior) para encapsular el contenido del archivo y pasarlo. Este paso de transformación es innecesario y propenso a errores.

Para manejar este caso, la solución más eficiente es realizar la llamada a la API que procesa el archivo directamente desde el Tópico usando el paso Send an HTTP Request o similar.

El Tópico tiene acceso directo al contenido del archivo en Base64 y al nombre del archivo después de que el usuario lo sube. Puedes usar las variables del Tópico para construir el Body JSON (como se explica arriba) y enviarlo a la API de destino (Usando cualquier conector que permita cargar ese archivo en una nube de almacenamiento como Azure Blob Storage).

De esta manera, se elimina el flujo de Power Automate como intermediario, se simplifica el diseño, se evita la conversión de tipos de datos problemáticos (File a Record), y se reduce la latencia.

Manejo de condiciones en flujos de Power Automate

En Power Automate, la clave para crear ramas paralelas de manejo de errores es modificar la configuración "Ejecutar después de" de las acciones subsiguientes. Por defecto, una acción solo se ejecuta si la acción anterior fue exitosa. Al cambiar esto, puedes forzar rutas de fallo.

Para evitar problemas de variables en el agente (donde los outputs se convierten a minúsculas):

  • Respuesta del agente: Se debe definir TODOS los parámetros de salida (ej. status, error_code, user_id).

  • Nomenclatura: Los nombres de los parámetros deben estar en minúsculas y usar guion bajo (_) como separador (ej., codigo_respuesta en lugar de CodigoRespuesta).

Al usar esta estructura, se garantiza que:

  • La acción de respuesta final es la misma, siempre con los mismos campos, manteniendo el contrato de la API para el agente.

Uso de Custom Prompts para recolección de datos

Para transformar una entrada de texto libre como Quiero crear el usuario John Doe, john.doe@hashnode.me, Especialista de Negocios, Panamá, +51 25454845, y que la inteligencia artificial haga el trabajo de detectar ciertas variables o patrones y entregarte un objeto JSON estructurado, es esencial agregar un paso para utilizar un AI Prompt.

Screenshot of selecting an action.

Cuando tengas el prompt diseñado, debes utilizar la opción de “Probar” para ejecutar varios casos de entradas posibles y validar los resultados deseados.

Guardar resultado del mensaje: Guarda el resultado del mensaje en una nueva variable de Tópico, por ejemplo, Topic.DetectedLanguage. Copilot Studio reconocerá la salida como un objeto complejo (StructuredOutput) si el mensaje especifica un JSON.

Configurar el salto de preguntas en caso de que un valor ya ha sido capturado

Una vez que el JSON se almacena en la variable Topic.DetectedLanguage, se puede aprovechar usar la funcionalidad de Omitir (Skip) en los nodos de preguntas subsiguientes para evitar preguntar por datos que ya se extrajeron.

Añade un nodo de Pregunta: Agrega una pregunta para, por ejemplo, el Idioma.

Configura el Comportamiento de Omitir:

  1. Selecciona el nodo de pregunta.

  2. En las propiedades del nodo (o en la configuración avanzada, dependiendo de la versión), busca la opción "Comportamiento de omisión" o "Skip behavior".

  3. Introduce la fórmula de Power Fx que verifica si el campo extraído está vacío:

Fórmula para el campo Idioma:

If(IsBlank(Topic.DetectedLanguage) || Topic.DetectedLanguage, false, true)

IsBlank(...) || ... = "": Verifica si el valor es nulo o un string vacío (""), ya que instruiste a la IA a usar un string vacío si faltaba un dato.

false: Si el campo está vacío (es "" o IsBlank), la condición de If es true, pero queremos ejecutar la pregunta (no omitir), por lo que retornamos false para la omisión.

true: Si el campo contiene un valor, la condición es false, por lo que retornamos true para la omisión (saltarse el paso).

Conservar el Formato de los Prompts

Cuando estás creando un Mensaje de IA (AI Prompt) en Copilot Studio, especialmente aquellos complejos que incluyen instrucciones detalladas, estructuras JSON o ejemplos de few-shot, es crucial que el formato (espacios, saltos de línea y tabulaciones) se mantenga intacto. El problema ocurre al copiar y pegar directamente desde editores de código avanzados como VS Code, Sublime Text o incluso aplicaciones de procesamiento de texto con formato (Word, Google Docs):

El Problema del Formato Enriquecido
Los editores avanzados a menudo incluyen caracteres invisibles o un formato de texto enriquecido (como tabulaciones especiales, saltos de línea de bloque, o metadatos de formato) que son diferentes de los simples caracteres de texto plano que necesita Copilot Studio.

Cuando pegas directamente

Copilot Studio (o el campo de texto subyacente) puede intentar interpretar estos caracteres especiales. El resultado es un prompt deformado o un texto que el modelo de IA ya no puede leer correctamente, lo que lleva a resultados inesperados o errores en la extracción/generación. Por ejemplo, los saltos de línea necesarios para separar las instrucciones del JSON pueden desaparecer.
Para evitar este problema, la mejor práctica es utilizar una herramienta de edición de texto plano como el Bloc de Notas (Notepad) en Windows, TextEdit (en modo texto plano) en Mac, o cualquier editor simple:

  • Copia tu prompt desde VS Code u otro editor avanzado.

  • Pégalo en el Bloc de Notas. Al hacerlo, el Bloc de Notas elimina automáticamente todo el formato enriquecido y los caracteres invisibles, dejando solo el texto puro.

  • Copia el contenido del Bloc de Notas.

  • Pégalo en el campo de Mensaje de IA de Copilot Studio.

Este paso intermedio garantiza que solo se transfieren los saltos de línea y los espacios estándar, preservando la estructura lógica de tu prompt para que el modelo de IA lo interprete de manera predecible y correcta.

More from this blog

S

Stalin Maza Blog

25 posts

Desarrollador apasionado por la tecnología. En este blog comparto lo que aprendo, repaso conceptos clave y documento soluciones útiles que me han servido en mi camino profesional.