El aviso que nadie tiene que acordarse de mandar

Cómo avisar automáticamente cuando se libera una nueva versión de un informe, sin depender de que alguien recuerde escribir al equipo. Power BI Pro, Power Automate estándar, sin rol de administrador.

ARQUITECTURAS DE AUTOMATIZACIÓN · 04 El aviso que nadie tiene que acordarse de mandar Alerta automática de publicación con licencia Pro y conectores estándar. Sin premium, sin administrador. Guardar Guardar Guardar Check-in → correo Un solo aviso por sesión de trabajo, con la versión definitiva

«Nos avisamos antes de publicar» es de esos acuerdos que se cumplen dos semanas. Lo conté en el artículo del método: no falla por dejadez, falla porque el aviso compite con veinte cosas más y pierde. Surge algo urgente, publicas, cierras el portátil, y alguien se pasa la tarde trabajando encima de una copia que ya está vieja.

En aquel artículo, los acuerdos de trabajo terminaban en un paso que decía «avisar al equipo», con una nota al margen: automatizable. Eso es lo que decidí hacer, quitarle ese paso a las personas. Así que esto es lo que monté, con lo que tenía a mano: Power BI Pro, Power Automate estándar, SharePoint y Outlook. Sin Power Automate Premium, sin capacidad Fabric y sin pedir rol de administrador.

En 20 segundos

Sí se puede automatizar el aviso con licencia Pro y conectores estándar. La clave es no intentar detectar directamente la publicación en Power BI Service, sino observar el check-in del archivo .pbix en SharePoint.

El flujo detecta el cambio, comprueba que el archivo ya fue liberado, recupera el comentario de check-in y envía el aviso. Todo lo demás de este artículo son los filtros que hicieron falta para que no acabara siendo ruido.

01 · El resultadoQué vamos a conseguir

Cuando una persona termina de trabajar en el informe, el proceso queda así:

01Check-in del .pbix
02Power Automate detecta el cambio
03Recupera el comentario
04Envía el aviso

El correo que llega incluye el archivo, la persona que lo modificó, la fecha y hora en horario local, el comentario del cambio y el enlace al archivo.

Una publicación, un aviso. Ese fue el criterio con el que descarté todo lo demás.

02 · La decisión importanteQué significa «publicar»

Aquí está la primera decisión. Cuando me planteé la pregunta —«¿se puede avisar cuando se publica un informe?»— me di cuenta de que el problema estaba en qué es realmente publicar. «Publicar» puede significar varias cosas, aunque te parezca que no es así, y no todas son detectables con esta solución.

Evento¿Detectable?
Subir el informe directamente a Power BI ServiceNo
Terminar una actualización de datosNo de forma nativa
Hacer check-in de una nueva versión del .pbix

Me quedé con la tercera, y no solo por descarte: es la que significa lo que quiero comunicar. Cuando alguien libera el archivo con su comentario, ese es el momento exacto en que las copias del resto del equipo dejan de ser la última versión.

Importante

El flujo observa SharePoint, no Power BI Service. Si alguien publica directamente desde Power BI Desktop sin pasar por el proceso de check-out y check-in, la alerta no lo detectará.

Lo digo aquí y no lo repito más: esto refuerza el protocolo de equipo, no lo sustituye ni lo vigila.

03 · Lo que necesitasEntorno de trabajo

Donde lo construí

Power BI
Pro, capacidad compartida
Power Automate
Estándar, sin conectores premium
Permisos
Sin rol administrativo de organización
Origen
Biblioteca documental con check-out obligatorio
Archivo
Biblioteca sincronizada en el explorador
Destino
Correo mediante Office 365 Outlook

La combinación importa más que cada dato suelto: sin rol de administrador y sin conectores premium, la mitad de lo que encuentras buscando «alerta publicación Power BI» queda descartado de entrada.

04 · La arquitecturaCómo funciona

La solución se resume en cuatro pasos:

01SharePoint detecta que el archivo cambió
02El flujo filtra la carpeta correcta
03Comprueba Checked out = false
04Obtiene el comentario y envía el correo
ESTRUCTURA DEL FLUJO Dos filtros antes de gastar una acción When an item or a file is modified SharePoint · disparador de sondeo se ejecuta con cada guardado ¿El archivo está en la carpeta de informes? condición · filtra el resto del sitio No → sin acciones Checked out = false condición · el filtro clave No → guardado intermedio Obtener comentario de check-in · HTTP a SharePoint Enviar un correo electrónico (V2) · Outlook
Puse las dos condiciones antes que la llamada REST a propósito: así casi todas las ejecuciones terminan sin gastar una acción de conector.

El detalle que decide si esto cuesta licencia

«Enviar una solicitud HTTP a SharePoint» pertenece al conector de SharePoint, que es estándar. No hay que confundirla con el conector HTTP genérico, que sí es premium en Power Automate.

Encontré una forma de obtener el dato que necesitaba sin pagar más, pero esa solución solo funciona con SharePoint, porque la acción únicamente habla con su API REST. Si quisiera conectarme de la misma manera a otros servicios, tendría que usar opciones Premium.

05 · Paso a pasoMontar el flujo

1. Crear el flujo

En Power Automate creé un flujo de nube automatizado con el disparador When an item or a file is modified. También contemplé «Cuando se crea o modifica un archivo (solo propiedades)»: funciona igual de bien, porque un check-in es una modificación sobre un archivo que ya existe, no una creación.

2. Seleccionar el sitio y la biblioteca

Solo hay dos campos: el sitio de SharePoint y la biblioteca donde están almacenados los informes.

3. Filtrar la carpeta

El disparador escucha la biblioteca entera. Como el sitio es un grupo con mucha gente y muchos archivos, sin este filtro el flujo se ejecutaría con cada acta de reunión que alguien tocara. Añadí una condición para que continúe únicamente cuando el archivo esté dentro de la carpeta de informes.

4. Añadir el filtro clave

condición
Checked out   is equal to   false

Usé el campo booleano nativo del disparador, con el valor insertado como booleano puro desde el editor de expresiones (fx), no como el texto «false». Consideré las alternativas de texto —«Checked Out To» y sus variantes—, que también habrían servido, pero requerían una expresión empty() alrededor y dependen de cómo venga rellenado un campo de persona. El booleano es más limpio.

5. Recuperar el comentario

El comentario de check-in no aparece en el contenido dinámico del disparador. Ni con otro nombre ni escondido: no viene. Hay que ir a buscarlo con SharePoint → Enviar una solicitud HTTP a SharePoint, con método GET. Y aquí hay una bifurcación que a mí me costó dos ejecuciones fallidas descubrir.

CÓMO LEER EL COMENTARIO Dos formas de pedir el mismo dato OPCIÓN A · VALOR PLANO Termina la URI en /$value …/CheckInComment /$value Devuelve texto plano. Cómodo… hasta que el comentario trae una raya (—) o comillas tipográficas. ✕ BadGateway (502) EncoderFallbackException OPCIÓN B · JSON Sin /$value, con header Accept …/CheckInComment Accept: application/json;odata=nometadata Devuelve un objeto JSON. El texto va escapado dentro de una cadena, así que el Unicode ya no rompe nada. ✓ Aguanta cualquier carácter se lee con ?['value'] Empecé con la opción A. Un comentario con raya larga me tumbó el flujo. Terminé en la B.
Word y muchos editores convierten solos un guion en raya larga y las comillas rectas en tipográficas, así que la opción A falla tarde o temprano aunque nadie lo busque.

La opción A es la que probé primero, porque es la más cómoda: se termina la URI en /$value y SharePoint devuelve el comentario como texto plano, sin necesidad de analizar JSON.

opción a · valor plano
_api/web/lists/getbytitle('Documentos')/items([ID])/File/CheckInComment/$value

Funcionó en las pruebas… hasta que un check-in real llevó una raya larga en el comentario. El flujo terminó en BadGateway, y al abrir la salida de la acción el detalle era claro: Unable to translate Unicode character, un EncoderFallbackException. El endpoint plano no consigue codificar ciertos caracteres —la raya , las comillas «tipográficas», las viñetas— al devolverlos en crudo.

La opción B lo resuelve: se pide lo mismo sin el sufijo /$value y se añade un encabezado Accept para que la respuesta llegue en JSON.

opción b · json — uri y header
_api/web/lists/getbytitle('Documentos')/items([ID])/File/CheckInComment

Accept:  application/json;odata=nometadata

En ambos casos, el [ID] debe proceder del contenido dinámico del disparador, no ir fijo. La diferencia es qué haces con la respuesta, y eso cambia la expresión del correo del paso siguiente.

Ojo con el nombre de la biblioteca

Antes incluso de ese fallo, mi primerísima versión usaba getbytitle('Documents') y falló con un NotFound. El motivo: en un inquilino en español el título interno de la biblioteca es Documentos, aunque la URL contenga «/Documents/». La URL y el título no tienen por qué coincidir.

A largo plazo es mejor usar el identificador único de la biblioteca, que sobrevive a los renombrados.

6. Evitar comentarios vacíos

Si alguien hace check-in sin escribir nada, la llamada devuelve vacío y el correo llega con un hueco justo donde va lo importante. Lo resolví envolviendo el valor en una expresión condicional. Como me quedé con la opción B, el comentario ahora viene dentro del JSON y se extrae con ?['value']:

expresión · comentario con reserva (opción b)
if(empty(body('Obtener_comentario_checkin')?['value']),
   'Sin comentario',
   body('Obtener_comentario_checkin')?['value'])

Si te hubieras quedado con la opción A del valor plano, la misma expresión iría sin el ?['value'], directamente sobre body('Obtener_comentario_checkin'). En cualquiera de los dos casos, el nombre tiene que coincidir exactamente con el de la acción: en las referencias internas, los espacios se sustituyen por guiones bajos.

Y que el correo diga «Sin comentario» no es solo estética: deja visible que el acuerdo de documentar el cambio no se cumplió.

7. Dar formato a la fecha

La fecha nativa llegaba en UTC crudo, con pinta de 2026-08-17T13:29:07Z: ilegible, y seis horas por delante de mi hora local. La sustituí por:

expresión · fecha local legible
convertTimeZone(triggerOutputs()?['body/Modified'],
                'UTC',
                'Central Standard Time (Mexico)',
                'dd/MM/yyyy HH:mm')

El tercer parámetro es el identificador de zona horaria de Windows, no el de IANA. Si tu equipo está en otro huso, ese es el valor que cambia.

8. Enviar el correo

Un aviso sencillo es suficiente:

cuerpo del correo
Nueva versión publicada

Archivo:        [nombre del archivo]
Modificado por: [persona]
Fecha:          [fecha]
Comentario:     [comentario]
Enlace:         [archivo]
EL CORREO QUE LLEGA Cinco datos, cero clics para entenderlo Nueva versión publicada Archivo voz_operacion.pbix Modificado por Autora 1 Fecha 17/08/2026 07:29 Comentario [reporte] página de agentes: arreglé el encabezado de las tarjetas de tiempos promedio Enlace …/Informes/voz_operacion.pbix
Datos de ejemplo del correo que recibí en la prueba final.

No hace falta más. El aviso no tiene que contar toda la historia del cambio: tiene que permitir que el resto del equipo entienda en segundos qué cambió y si su copia puede haber quedado obsoleta.

06 · El filtro centralPor qué Checked out = false importa tanto

Mientras una persona trabaja en el archivo puede guardarlo muchas veces. SharePoint detecta esas modificaciones, pero todavía no existe una nueva versión definitiva: la versión llega con el check-in.

Esto lo vi con claridad en el historial de ejecuciones, y es el punto donde esta alerta se cruza con algo que ya había verificado en la nota anterior: una sesión de check-out produce una sola fila en el historial de versiones, guardes una vez o quince. Las dos cosas conviven sin contradecirse.

El historial de versiones no crece con cada guardado. Los eventos de modificación, .

UNA SESIÓN DE TRABAJO Muchos guardados, un solo correo Eventos que recibe el flujo check-out guardar · guardar · guardar check-in Qué hace el flujo se ejecuta · condición falsa · no hay correo condición verdadera · correo La nueva versión definitiva no existe hasta el check-in.
Sin este filtro, recibiría media docena de correos por tarde, ninguno con comentario.

El resultado es simple: muchos guardados, un solo correo, y con la versión definitiva.

07 · Las pruebasCómo supe que funcionaba

El historial de ejecuciones fue mi herramienta de diagnóstico. Vale la pena mirarlo en lugar de dar por bueno que «funciona porque no dio error».

Durante los guardados intermedios

Guardando el informe mientras seguía desprotegido, las ejecuciones aparecieron en estado Succeeded, pero con las acciones de la llamada REST y del correo marcadas como Skipped. Eso es justo lo que buscaba: el disparador se activó, la condición dio falso, y el flujo terminó sin enviar nada.

El primer check-in real falló, y fue útil

La primera liberación de verdad terminó en Failed. Al abrir el detalle vi tres cosas de una vez: el check-in sí genera el evento, ambas condiciones dieron verdadero —la lógica de detección funcionaba— y la ejecución murió en la llamada REST con el NotFound del nombre de la biblioteca.

Corregí el nombre y reejecuté con Resubmit, que reintenta con los mismos datos del disparador sin obligarte a repetir a mano el ciclo de check-out y check-in. Si estás depurando algo así, ese botón te ahorra media tarde.

Y un tiempo después, con el flujo ya en producción

Una ejecución terminó en Failed otra vez, y encima tardando doce minutos en hacerlo. Esa duración ya decía algo: un error de configuración falla al instante; doce minutos son reintentos agotándose.

El mensaje era BadGateway, pero el dato útil estaba enterrado en el innerError de la salida de la acción: Unable to translate Unicode character. Es el fallo del paso 5 —el comentario de aquel check-in llevaba una raya larga.

Cambié la lectura a JSON, volví a pulsar Resubmit sobre esa misma ejecución fallida —que conservaba el comentario problemático, así que era la prueba perfecta— y esta vez el correo llegó con la descripción que yo había puesto, sin problemas.

08 · LimitacionesLo que debes saber antes de usarlo

No es instantáneo

El disparador de SharePoint funciona mediante sondeo: cada cierto tiempo comprueba si hubo cambios, en lugar de recibirlos automáticamente cuando ocurren. Con las licencias estándar de Microsoft 365, el intervalo mínimo suele ser de unos cinco minutos y no se puede reducir sin cambiar de plan. Para este caso no supone un problema, pero es bueno tenerlo en cuenta para que el equipo no lo interprete como un error si el flujo tarda unos minutos en reaccionar.

Reacciona a más cosas de las que parece

«Modificado» incluye cambios de metadatos, y la condición filtra por carpeta pero no por tipo de archivo. Si alguien edita una columna de la vista o deja un Excel de apoyo en la carpeta, el flujo también se dispara.

La conexión pertenece a una cuenta

Las conexiones de SharePoint y Outlook son de quien las creó, y el correo sale desde esa cuenta. Si esa persona pierde acceso o deja la organización, el flujo se rompe.

Los permisos importan

Mientras la carpeta herede los permisos de un sitio de grupo amplio, cualquier persona con permiso de edición puede hacer check-in y generar el aviso. Restringir la carpeta al equipo de BI sería lo más lógico.

09 · VariantesPequeños cambios que mejoran el flujo

Filtrar por extensión

Añadir a la segunda condición una comprobación de que el nombre del archivo termina en .pbix.

Enviar el aviso a Teams

El conector de Teams también es estándar, así que cambiar el destino no altera el licenciamiento. Y el mensaje queda como historial para el equipo, mientras que el correo no.

Incluir el número de versión

Permite relacionar el aviso con el historial del archivo cuando aparece un incidente, que es justo el momento en que alguien va a intentar hacerlo con prisa.

10 · Errores frecuentesSi algo falla, revisa esto primero

A1

NotFound al consultar SharePoint

Causa

El título interno de la biblioteca no coincide con lo que aparece en la URL.

Revisa

El título real o, mejor, el identificador único de la biblioteca. Lo confirmas en el JSON de salida del disparador, en el historial de ejecuciones.

A2

Un correo por cada guardado

Causa

El flujo reacciona a cada modificación del archivo, no solo a la versión liberada.

Revisa

Que exista la condición Checked out = false y que el valor esté insertado como booleano, no como texto.

A3

No aparece el comentario

Causa

El comentario de check-in no está entre las salidas del disparador.

Revisa

Que lo estés recuperando con la solicitud HTTP a SharePoint, y que el nombre de la acción coincida con el usado en la expresión.

A4

El correo llega con un hueco donde iba el comentario

Causa

El check-in se hizo sin escribir comentario, la llamada devolvió vacío y el token se insertó tal cual.

Revisa

Que el valor esté envuelto en if(empty(...), 'Sin comentario', ...). Que el hueco se vea es parte de la función: empuja a escribir el comentario la próxima vez.

A5

La fecha llega en UTC crudo y con horas de más

Causa

El campo nativo de modificación viene en formato ISO y hora Zulu, que no coincide con la hora a la que el equipo recuerda haber trabajado.

Revisa

Que estés aplicando convertTimeZone con el identificador de zona de Windows correcto. Verifícalo; no lo deduzcas del nombre de la ciudad.

A6

También avisa por archivos que no son .pbix

Causa

La condición filtra por carpeta, no por tipo de archivo. Cualquier documento de apoyo que alguien deje ahí genera alerta.

Revisa

Añade una comprobación sobre el nombre del archivo para aceptar solo los que terminan en .pbix.

A7

Alguien publicó y no llegó ningún aviso

Causa

Se publicó al servicio sin pasar por el archivo controlado. Publicar y guardar el .pbix son operaciones independientes, y solo la segunda pasa por SharePoint.

Revisa

No es un fallo del flujo, sino del protocolo: la alerta lo refuerza, no lo sustituye. Cerrar esa brecha de verdad requiere el registro de auditoría o un repositorio.

A8

El flujo deja de funcionar sin haber tocado nada

Causa

Cambió la cuenta propietaria de las conexiones, o perdió acceso al sitio.

Revisa

Las conexiones del flujo y quién figura como responsable. Déjalo documentado antes de que haga falta.

A9

BadGateway cuando el comentario lleva una raya o comillas tipográficas

Causa

El endpoint /$value devuelve el comentario en texto plano y no consigue codificar ciertos caracteres Unicode (la raya , las comillas «tipográficas», las viñetas). Falla con un 502 y un EncoderFallbackException en la salida. Aparece tarde, porque Word convierte solo los guiones en rayas sin que nadie lo escriba a propósito.

Revisa

Pide el comentario en JSON en lugar de en valor plano: quita el /$value de la URI, añade el header Accept: application/json;odata=nometadata y lee el dato con ?['value'] en la expresión del correo. El JSON escapa el texto y el problema desaparece para cualquier carácter.

11 · ChecklistAntes de ponerlo en producción

  • El equipo tiene claro qué significa «publicar».
  • El archivo se trabaja con check-out y check-in.
  • El flujo escucha solo la carpeta correcta.
  • Está configurado Checked out = false, como booleano.
  • El comentario se obtiene correctamente y tiene reserva si viene vacío.
  • El comentario se lee en JSON, no con /$value, para que aguante rayas y comillas tipográficas.
  • La biblioteca utilizada en la llamada REST es la correcta.
  • La fecha se muestra en la zona horaria del equipo.
  • El correo muestra archivo, persona, fecha, comentario y enlace.
  • Está documentado que el aviso puede no ser instantáneo.
  • Está documentado quién es responsable de la conexión.

Esta es la tercera nota de la serie

El método de trabajo en equipo del que sale este aviso —los acuerdos, el protocolo de publicación y las alternativas de control de versiones con licencia Pro— está en «Publicar entre varios, sin perder trabajo».

Y la mecánica de sincronización, bloqueo y versiones que explica por qué hace falta el filtro de la sección 06 está en «Tu copia local miente».

12 · GlosarioTérminos que aparecen en el artículo

TérminoQué significa
Conector estándar / premiumClasificación de licenciamiento. Los estándar vienen incluidos con Microsoft 365; usar uno premium obliga a que quien dispare el flujo tenga licencia de Power Automate Premium, o a cubrir el flujo con una licencia por flujo.
Disparador de sondeoDisparador que consulta periódicamente si hubo cambios, en lugar de recibir una notificación inmediata. Su frecuencia mínima la fija el plan de licencia.
Check-out / check-inDesprotección y liberación de un archivo en una biblioteca documental. Mientras está desprotegido, nadie más puede editarlo y el historial no cierra una versión nueva.
CheckInCommentPropiedad del archivo en la API REST de SharePoint que contiene el comentario escrito al liberarlo. Máximo 1023 caracteres.
/$valueSufijo de la API REST que devuelve el valor de una propiedad como texto plano, en lugar de envuelto en una estructura de datos. Cómodo, pero se atraganta con ciertos caracteres Unicode.
?['value']Forma de leer, dentro de una expresión, el campo value de una respuesta JSON. Es la alternativa a /$value cuando se pide el comentario como JSON.
SkippedEstado de una acción que no llegó a ejecutarse porque la condición que la contiene dio falso. No cuenta contra los límites de acciones de la plataforma.
ResubmitReejecución de un flujo con los mismos datos del disparador original. Permite depurar sin reproducir a mano el evento que lo activó.

13 · FuentesDocumentación consultada

Afirmaciones verificadas contra la documentación del conector en agosto de 2026. El flujo descrito lleva funcionando en producción desde entonces; las correcciones surgidas de fallos reales están integradas en el texto.

No hace falta una arquitectura complicada para eliminar un aviso manual. La clave está en no intentar detectar directamente algo que Power Automate no expone como evento: el evento útil ya existía en SharePoint, que es el check-in de una nueva versión.

01Detecta
02Filtra
03Recupera
04Avisa

El resultado no parece espectacular. Y precisamente por eso es útil: el equipo deja de depender de que alguien se acuerde de mandar el mensaje.

¿Qué evento usas tú para marcar «publicado»? ¿Y qué datos lleva tu aviso que a mí me faltan? Cuéntamelo y lo incorporo al artículo con tu crédito.

Glenda Piñero Muñoz

Especialista en Power BI y análisis de datos. Construyo modelos, y también los flujos de Power Automate que hacen que esos datos lleguen solos a quien los necesita: alertas, integraciones y entrega automatizada. Escribo sobre los problemas reales que me encuentro y cómo los resuelvo.