El encargo del negocio
Una persona pregunta ¿Quedan unidades de CAF-250?. La política comercial no conoce el stock: el asistente debe consultar el inventario actual y devolver el resultado.
Vas a construir una herramienta de solo lectura. No reserva, no vende y no descuenta unidades. El criterio clave es distinguir cero unidades de no he podido consultar.
Este caso amplía la práctica más allá de lo necesario para reconocer los conceptos de PL-900.
1. Preparar la consulta
Comprueba que la lista del caso 04 contiene CAF-250 con 4 unidades, ACE-1L con 0 y LEC-1L con 12. El nombre visible de la columna principal es SKU y su nombre interno es Title.
En Copilot Studio, con el agente del caso 06, abre Flujos / Flows → Nuevo flujo → Agent flow.
Utiliza When an agent calls the flow y Respond to the agent. Nombre: Consultar_stock_Barrio_Demo. En el desencadenador añade la entrada de tipo texto SKU.
El flujo debe responder de forma síncrona: Asynchronous response = Off, en la configuración de red de la respuesta, y completar la consulta dentro del límite de 100 segundos. No incluyas una aprobación humana o un proceso largo en este recorrido.
2. Normalizar el código y leer el catálogo
Entre el desencadenador y la respuesta:
- Añade Redactar / Compose, llamado SKU_normalizado.
- Construye una expresión
toUpper(trim(...))insertando dentro el contenido dinámico de la entrada SKU del desencadenador. - No escribas a mano una propiedad supuesta del desencadenador: el identificador interno de la entrada puede diferir del nombre mostrado.
- Añade SharePoint → Obtener elementos, con nombre Leer_catalogo, sitio y lista del laboratorio y Top Count = 100.
- Añade Filtrar matriz, llamada Buscar_SKU, cuyo origen sea
valuede Leer_catalogo.
En el modo avanzado del filtro:
@equals(toUpper(trim(item()?['Title'])), outputs('SKU_normalizado'))
Esto compara el código completo y admite caf-250 o espacios laterales. No es una búsqueda aproximada por nombre.
La lectura completa está acotada a las ocho filas de esta práctica. Para un catálogo mayor, diseña una consulta filtrada en el origen, revisa índices y paginación y valida la unicidad del SKU. No uses este Top Count como garantía de buscar en todo un almacén.
3. Preparar una respuesta inequívoca
Antes de cualquier condición, inicializa estas variables:
| Variable | Tipo | Inicial |
|---|---|---|
| Encontrado | Booleano | false |
| NombreProducto | Cadena | Vacía |
| StockProducto | Entero | 0 |
| MinimoProducto | Entero | 0 |
| Resultado | Cadena | NO_LOCALIZADO |
Añade una condición: length(body('Buscar_SKU')) igual a 1. En Sí, asigna:
Encontrado = true
NombreProducto = first(body('Buscar_SKU'))?['Producto']
StockProducto = int(first(body('Buscar_SKU'))?['Existencias'])
MinimoProducto = int(first(body('Buscar_SKU'))?['Minimo'])
Resultado = OK
El bloque anterior es un mapa de asignaciones: utiliza una acción Establecer variable por fila. Los accesos y las conversiones se introducen en el editor de expresiones; true es booleano.
En No, añade otra condición: longitud mayor que 1. Si se cumple, asigna Resultado = AMBIGUO. Si no, conserva NO_LOCALIZADO.
Después de las condiciones deja una única acción Respond to the agent con estas salidas:
| Salida | Tipo | Valor |
|---|---|---|
| Encontrado | Booleano | Variable Encontrado |
| SKU | Texto | Salida de SKU_normalizado |
| Producto | Texto | NombreProducto |
| Existencias | Número | StockProducto |
| Minimo | Número | MinimoProducto |
| Resultado | Texto | Variable Resultado |
Cuando no se ha localizado el producto, los ceros iniciales son valores de relleno: solo se deben interpretar cantidades si Encontrado es true y Resultado es OK.
Deja que un fallo del conector falle como consulta; no añadas una salida de éxito que convierta cualquier excepción en cero existencias. Publica el flujo para poder añadirlo como herramienta.
4. Conectar la herramienta al agente
En Herramientas / Tools, añade el flujo publicado. Describe su uso: Consultar stock por SKU exacto en el inventario de Barrio Demo. Pedir el SKU si falta. No modifica registros.
Completa las instrucciones del agente:
Para informar de stock, llama a Consultar_stock_Barrio_Demo en cada consulta nueva. No utilices el conocimiento documental ni una respuesta anterior como inventario actual. Si Encontrado es true y Resultado es OK, informa de Producto y Existencias; cero significa agotado. Si Resultado es NO_LOCALIZADO, explica que el código no se encuentra. Si es AMBIGUO, pide revisión del catálogo. Ante un error de ejecución, explica que no has podido consultar. Nunca afirmes reservar ni modificar stock.
Revisa qué conexión utiliza el flujo. Una conexión del creador no aplica automáticamente los permisos del usuario que pregunta. Mantén esta prueba en tu sesión; antes de compartirla, define autenticación, permisos y las credenciales de ejecución apropiadas.
5. Validar datos y fallos
| Prueba | Resultado esperado |
|---|---|
| Consultar CAF-250 | Herramienta ejecutada; 4 unidades |
| Consultar ACE-1L | 0 unidades; consulta correcta |
| Consultar XYZ-999 | No localizado; no inventa cantidades |
| Preguntar “¿Hay stock?” sin código | Solicita SKU antes de consultar |
| Consultar caf-250 | Encuentra CAF-250 |
| Cambiar CAF-250 a 9 y preguntar de nuevo | Nueva ejecución; 9 unidades |
| Duplicar temporalmente un SKU en la lista de prácticas | AMBIGUO; no elige la primera fila |
| Conexión de prueba sin acceso | Error de consulta; no informa de 0 como dato |
| Pedir reservar dos unidades | No afirma reservar; la lista sigue igual |
Revisa el historial del flujo, las salidas y la traza del agente, además del texto final. Para simular el fallo utiliza exclusivamente una conexión o lista de prueba, sin retirar permisos de recursos compartidos.
Entrega y cierre
Entrega el flujo publicado como herramienta, el agente guardado y evidencias de producto encontrado, agotado, desconocido, ambiguo y fallo de conexión. No necesitas publicar el agente en un canal externo.
Elimina la fila duplicada, restaura CAF-250 a 4 y recupera la conexión del caso. Continúa con la validación de atención y stock.
La conversación sigue aquí
Preguntas y experiencias
¿Te has atascado en un paso o has encontrado otra forma de hacerlo? Comparte lo que has probado y ayuda a quienes lleguen después.
Lee los comentarios o entra para participar.
Cargando comentarios…
Para una pregunta sobre otro tema, abre una conversación en la comunidad. Normas de participación y privacidad.