Seguimos hablando de Power Automate y Microsoft Teams en lo que respecta a las aprobaciones. Si no has visto la entrada sobre las formas de generar una aprobación puedes revisarla haciendo click aquí
Para darnos una mejor idea, esto será lo que cubriremos:
- Tener solo un subconjunto de miembros del equipo como aprobadores
- Enviar una petición de aprobación a usuarios individuales
- Posibles problemas y cómo resolverlos
- Crear procesos de aprobación usando otras herramientas aparte de Power Automate
- Azure Logic Apps
- Bots personalizados de Teams
- Microsoft Graph
También te puede servir hacerlo con correo electrónico y opciones.
TENER SOLO UN SUBCONJUNTO DE MIEMBROS DEL EQUIPO COMO LOS APROBADORES
¿Qué pasaría si solo quisiéramos que unos cuantos miembros del equipo puedan hacerse cargo de las aprobaciones? Quizá solo los dueños, o incluso si prefiriéramos que los miembros del equipo no puedan ver las peticiones de aprobación. Aquí es donde empieza a volverse más problemático.
Cuando usamos la acción «Create an approval» en Power Automate, se nos requiere especificar a los usuarios que tienen permisos para tomar parte en las aprobaciones. Cuando nosotros entonces publicamos la carta de aprobación en un canal, todos en ese equipo podrán verla, no solo los aprobadores, pero eso no es todo. Todos también pueden dar click en los botones de la carta adaptativa independiente de que tengan permisos para manejar la aprobación o no.
Cuando alguien sin los permisos da click en los botones, la aprobación no ocurrirá, pero la carta empezará a mostrar el texto «This request is not assigned to you». El texto no se muestra solo para el usuario que dio click en el botón, será mostrado para todos, incluyendo a las personas que tengan permiso para hacer la aprobación. Y lo peor es que los aprobadores ya no podrán tener los botones disponibles para manejar la aprobación.
En resumen, cuando alguien que no tiene permiso para manejar la aprobación da click en los botones, nadie puede procesar la aprobación por medio de la carta adaptativa luego de ello. Por suerte, los dueños aun pueden dar click en el link de aprobación que aparece en la carta, ser redirigidos a la página de aprobaciones de Power Automate y manejar la aprobación desde ahí.
Pero, ¿qué hay de la nueva acción «Post an adaptive card to a Teams channel and wait for a response»? ¿Acaso tiene el mismo problema?
Como ya mencionamos antes, una de las diferencias claves es que la acción «Post and wait for a response» no requiere o nos ofrece una opción para especificar las personas que tienen permisos para manejar la aprobación. Cualquiera que pueda ver la carta puede hacerlo, lo cual significa que si enviamos la carta en un canal de equipo, todos los miembros del equipo pueden hacer la aprobación.
¿Y qué si enviáramos la carta adaptativa a un canal privado? ¿Podríamos crear un canal privado, darle solo acceso a los aprobadores y hacer que las cartas de aprobación sean enviadas ahí?
Eso estaría bastante bien, por desgracia no es posible enviar peticiones de aprobación a un canal privado.
La causa principal para este problema parece deberse al hecho de que no podemos añadir algún tipo de app de Teams a canales privados. Esto significa que el Flow bot (el cual es responsable por enviar las cartas de aprobación y regresar la respuesta de vuelta al flujo) no puede ser añadido al canal. Lo mismo aplica para todos los bots personalizados y otros tipos de apps también.
Independiente de la actividad que decidamos usar, al final no hay forma de tener solo un subconjunto de miembros de equipo para que manejen aprobaciones en un canal de equipo.
La mejor opción que tenemos es crear la aprobación por separado y especificar a los usuarios que tienen permiso para aprobar.
Aun así, todos pueden ver la información de aprobación y dar click en los botones. Dado que la información sensible no puede ser manejada de esta forma y los aprobadores pueden necesitar navegar lejos de Teams para manejar algunas de las tareas que otros miembros puedan dar click por accidente.
Por lo tanto, parece que se nos acaban las opciones, por lo que si no queremos que cada miembro del equipo pueda ver y dar click en las peticiones de aprobación o tener un equipo separado solo para los aprobadores y enviar las aprobaciones ahí, puede que nos interese echarle un vistazo a dirigir las peticiones de aprobación a todos los aprobadores individualmente como un mensaje de chat de Teams propio.
ENVIANDO UNA PETICIÓN DE APROBACIÓN A USUARIOS INDIVIDUALES
Idealmente seríamos capaces de enviar una carta de aprobación a un grupo de chat que consista de todos los aprobadores. De esta forma, todo estaría controlado respecto al estado de aprobación, pero como ya vimos, con las acciones «Send your own adaptive card as the Flow bot to a user» y «Post an adaptive card to a user and wait for a response» solo podemos enviarlos a un solo destinatario.
Por suerte, aun podemos crear la aprobación primero y después enviar la carta adaptativa atada a esa aprobación a todos los aprobadores individualmente dentro de un loop. Cuando alguno de los aprobadores responda, el flujo procederá, así como también lo harán todas las cartas adaptativas separadas que estén atadas a esa sola aprobación.
La desventaja de este método es que cuando alguien responda a la petición de aprobación, la carta adaptativa solo será actualizada para esa persona. Los demás aprobadores sabrán que la petición de aprobación ya ha sido manejada.
Aun cuando sabemos las IDs de los mensajes que contienen las cartas adaptativas, no tenemos los medios para actualizarlas. Power Automate no ofrece directamente acciones para hacerlo y Microsoft Graph tampoco tiene operaciones para actualizar mensajes de chat privados.
¿Y qué hay de la acción «post and wait for a response»?
Esta acción nos permite actualizar la carta pero de nuevo, solo lo permite para la persona que responde. Además, la acción no es recomendable para que varias personas tomen parte en la misma aprobación simultáneamente ya que crea una aprobación separada en cada ejecución de la acción y se detiene para esperar inmediatamente luego de enviar la carta. Funciona en un loop al enviar la aprobación primero a una persona, esperando a que esa persona responda y luego procede a enviar la petición de aprobación a la siguiente persona.
Puede ser útil para aprobaciones secuenciales, pero para tener varias personas tomando parte en la misma aprobación a la vez simplemente no funciona. Y respecto a la primera opción (crear y enviar la aprobación por separado en un loop), existe una solución que si bien no es tan simple como desearíamos, es algo que funcionará.
ENVIANDO UN RESUMEN A TODOS LOS DEMÁS APROBADORES
En esta situación estamos usando la opción «first response applies». Cuando alguno de los aprobadores responda, enviaremos a todos los demás aprobadores otra carta adaptativa que contiene un resumen del resultado de la aprobación.
Para hacer esto, primero tomaremos la información sobre el aprobador original de la acción «Create an approval» y haremos un loop a través de los usuarios. En cada repetición del loop compararemos si el usuario es alguien aparte de la persona que respondió. De serlo, les enviaremos la carta adaptativa que tiene toda la información relevante sobre la aprobación. Para la persona que manejó esta aprobación, la carta de aprobación original ha sido actualizada automáticamente para mostrar la información.
PROBLEMAS POTENCIALES Y CÓMO RESOLVERLOS
Crear procesos de aprobación con Power Automate es usualmente bastante directo. Aun así, hay varias situaciones que pueden provocarnos dolores de cabeza. Para listar los más comúnes, aquí tenemos algunos problemas que podemos encontrar y cómo lidiar con ellos.
1. Si tu organización tiene limitado el uso de apps de Teams, asegúrate que el Flow bot no esté entre las apps bloqueadas.
Cuando usamos las acciones de Teams para enviar una carta adaptativa a un usuario o canal, la app de Flow bot es añadida automáticamente para ese usuario o canal. Si no está entre las apps permitidas, añadir el Flow bot al chat/canal resultará en un fallo y nuestra carta adaptativa no será enviada.
2. Cuando seleccionamos el equipo y el canal a donde vamos a enviar la carta adaptativa, hay que asegurarnos que el canal no es privado.
No podemos enviar una carta adaptativa como un Flow bot a un canal privado. Si lo intentamos veremos el siguiente error:
Forbidden. The request failed. Error code: ‘BotRequestFailed’. Error Message: ‘Request to the Bot framework failed with error: ‘{“error”:{“code”:”BotNotInConversationRoster”,”message”:”The bot is not part of the conversation roster.”}}’.’.
El error seguramente ocurre porque no podemos añadir la app de Flow bot (o cualquier otra app de Teams) a un canal privado. Esto puede deberse a un tema de seguridad o una limitación técnica.
3. La cuenta de servicio (el autor del flujo de Power Automate) necesita tener una licencia de Microsoft Teams y una licencia de Exchange Online (para tener una bandeja de entrada de correo, la cual es requerida) para que todas las acciones funcionen correctamente.
También puede que necesitemos una licencia de Flow por usuario si estamos usando algún conector premium, tal como el conector HTTP o el Azure Key Vault.
4. Antes solía recibir el error “Unable to reach app. Please try again.” al intentar aprobar una orden por medio de la carta adaptativa.
En base a mi experiencia, esto es un error temporal o bien puede ocurrir si la persona que hizo la orden (el solicitante) no tiene una licencia de Teams.
CREAR PROCESOS DE APROBACIÓN USANDO HERRAMIENTAS APARTE DE POWER AUTOMATE
Por una razón u otra, puede que optemos por alguna aplicación que no sea Power Automate para procesos de aprobación. Quizá los costes de licencia nos preocupen si usamos algún conector premium y nuestro flujo es activado directamente por el usuario. Para casos así podemos optar por opciones.
AZURE LOGIC APPS
Azure Logic Apps no tiene alguna de las acciones para aprobación, tales como «Create an approval». Debido a esto, no podemos crear una aprobación primero y luego enviarla a Teams para finalmente pausar para esperar por una respuesta por separado.
Aun así tenemos las acciones «Post an adaptive card to a Teams channel/user» y «wait for a response». Debido a esto, crear aprobaciones para que sean manejadas por todos los miembros del equipo en un canal es enteramente posible con Logic Apps. La desventaja es que es más complicado si queremos que diferentes usuarios tomen parte en la misma aprobación simultáneamente mediante un chat privado.
Como mencionamos antes, si fuéramos a crear un loop a través de las aprobaciones y «Post an adaptive card to a Teams user and wait for a response» la logic app se detendría de inmediato para esperar por la respuesta del primer usuario. Entonces procedería al siguiente usuario solo después de recibir una respuesta del primero.
Deberíamos ser capaces de trabajar con esta funcionalidad. Podríamos hacerlo si, por ejemplo, llamáramos a otra logic app de manera asíncrona dentro del loop. Las diferentes instancias de esa otra logic app entonces manejaría el enviar las peticiones de aprobación individuales y continuaría conforme los usuarios individuales respondan.
Para que esto funcione correctamente, también necesitaríamos registrar el estado de las aprobaciones colectivas en una fuente de datos separada en algún lugar. Inicialmente luego de una respuesta, revisaríamos la fuente de datos para ver si los otros aprobadores ya han respondido y proceder acorde.
BOTS DE TEAMS PERSONALIZADOS
En vez de tener el Flow bot manejar las comunicaciones entre nuestro Power Automate/Logic App y Teams, también podemos optar por crear nuestro propio bot de Teams. Esta es una alternativa a Flow bot si:
- Queremos que varios usuarios individuales tomen parte en el proceso de aprobación vía grupo de chat. Basado en la documentación de Microsoft Bot Framework deberíamos ser capaces de crear un grupo de conversación con dos o más usuarios y nuestro bot.
- Queremos enviar la petición de aprobación a varios usuarios individuales y actualizar la carta original cuando uno de ellos responda.
- Queremos manejar las aprobaciones en un canal de equipo pero no queremos que todos los miembros del equipo sean aprobadores. Si nosotros, por ejemplo, queremos que solo los dueños puedan responder, podemos fácilmente revisar si el usuario que ha respondido es dueño del equipo, ignorar sus respuestas de no serlo, y actualizar la carta para esconder los botones solo si un dueño responde.
A fin de cuentas, nuestro bot es un servicio web que necesita crear el mensaje de aprobación, enviarlo a Teams y manejar la respuesta del usuario. Crear el proceso de aprobación usando un bot personalizado requiere mucho más trabajo que simplemente implmentarlo usando Power Automate y después Logic Apps. En el lado bueno, tenemos mucho más control sobre los detalles.
Cuando estamos pensando en implementar un proceso de aprobación, es recomendable hacerlo usando principalmente Power Automate y Logic Apps ya que hacen todo mucho más rápido, pero si algunas de sus funciones no funcionan para ti, entonces sí vale la pena crear un bot personalizado.
MICROSOFT GRAPH
Microsoft Graph también nos ofrece una forma de crear canales de mensajes con cartas adaptativas, y aunque podemos fácilmente incluir botones en estas cartas adaptativas, aun necesitamos un API de fondo (un lugar donde enviar la respuesta de aprobación cuando un usuario da click en esos botones). Enviar cartas adaptativas a canales vía Microsoft Graph puede ser útil si solo queremos mostrar un mensaje. De todas formas, para comunicación de dos personas, un bot es la mejor opción.
Como nota final, solo podemos crear un nuevo mensaje 1:1 en un chat existente y no podemos crear chats nuevos vía Microsoft Graph. Podemos listar chats existentes para averiguar el ID del chat a donde queremos enviar un mensaje. Aun así, la operación solo soporta permisos delegados, por lo que solo podemos listar los chats donde los usuarios registrados estén participando.
Cualquier duda nos leemos abajo.