Cómo enviar notificaciones a Slack desde PHP, macOS y Windows

En la actualidad trabajamos con máquinas que realizan procesos largos
o, incluso, esas máquinas están lejos de nosotros. Cuando sucede algún
evento que nos interese, como que ha terminado de procesar un fichero
grande o nuestro sitio web está recibiendo un ataque, recibir una
notificación de este hecho podría ayudarnos a ser más proactivos y vivir
más tranquilos.

Construir un sistema de notificaciones puede ser una tarea enorme e,
incluso, cara económicamente. Pero existen alternativas ya
construidas.

Una forma sencilla de construir nuestro propio sistema de
notificaciones consiste en utilizar Slack y su posibilidad de crear aplicaciones o bots.

La ventaja es que nuestros programas no necesitan conocer cómo
funciona el sistema de notificaciones de Windows, MacOS, Android o iOS.
Solamente tienen que enviar un mensaje a Slack.

¿Qué es Slack?

Slack es una plataforma de comunicación basada principalmente en mensajes organizados mediante espacios de trabajo, canales y conversaciones.

Slack está principalmente orientada a equipos de trabajo pero también
puede resultar útil como herramienta personal. Slack dispone de
aplicaciones para diferentes sistemas operativos y dispositivos móviles,
por lo que un mensaje enviado a nuestro espacio de trabajo puede
convertirse inmediatamente en una notificación en nuestro ordenador,
teléfono móvil o smartWatch, dependiendo de cómo tengamos configuradas
las notificaciones.

Esta característica permite utilizar Slack como intermediario entre
nuestros programas y nuestros dispositivos.

Aprender creando

La mejor forma de aprender algo es haciendo algo práctico. Vamos a
crear la infraestructura necesaria para enviar desde nuestro PC con
Windows, nuestro Macbook con MacOS o nuestro hosting web con PHP un
mensaje a Slack para que nos llegue a todos nuestros dispositivos
conectados a Slack.

Técnicamente haremos esto: nuestro programa detectará un determinado
acontecimiento y realizará una petición HTTPS a la API de Slack. Slack
recibirá el mensaje y se encargará de distribuirlo a nuestros
dispositivos conectados.

Esto permite crear multitud de automatizaciones. Por ejemplo:

  • avisarnos cuando finaliza una copia de seguridad;
  • recibir una alerta cuando se produce un error en nuestra página
    web;
  • conocer cuándo termina una tarea programada;
  • avisarnos si queda poco espacio disponible en un servidor;
  • recibir el resultado de un proceso ejecutado mediante
    cron;
  • saber cuándo termina una conversión de vídeo que tarda varias
    horas;
  • recibir una alerta cuando un determinado servicio deja de
    funcionar;
  • conocer cuándo ha finalizado un proceso en nuestro Mac;
  • o recibir desde Windows el resultado de un script de
    mantenimiento.

Slack gratuito y el
límite de aplicaciones

Para realizar este tutorial podemos utilizar un espacio de trabajo
gratuito de Slack.

Conviene distinguir entre una aplicación y un bot. En este artículo crearemos una aplicación personalizada de Slack y dentro de ella utilizaremos un usuario bot para enviar los mensajes.

En el plan gratuito existen límites sobre las aplicaciones e
integraciones que podemos instalar. Por ejemplo, actualmente Slack
establece un límite de 10 aplicaciones de terceros o
aplicaciones personalizadas instaladas
en un espacio de trabajo gratuito.

Podemos crear una única aplicación, por ejemplo, llamada
Notificaciones y utilizar la misma aplicación para enviar notificaciones desde nuestro MacBook, nuestro PC y nuestro hosting web. Incluso podemos crear diferentes canales y desde el programa elegir dónde publicar.

Con este enfoque una única aplicación de Slack puede centralizar las
notificaciones procedentes de muchos sistemas diferentes.

Crear nuestra aplicación en
Slack

El primer paso consiste en crear una aplicación de Slack.

Debemos acceder a la web de la
API de Slack
y crear una nueva aplicación.

Podemos darle un nombre descriptivo como
Notificaciones.

También tendremos que indicar el espacio de trabajo de Slack en el
que queremos instalarla.

Una aplicación de Slack puede disponer de diferentes permisos. Como
en nuestro caso únicamente queremos publicar mensajes, debemos conceder
al bot el permiso OAuth chat:write. Este permiso permite que la aplicación publique mensajes.

Después instalaremos la aplicación en nuestro espacio de trabajo.
Durante el proceso, Slack generará un Bot User OAuth
Token
.

Los tokens de bot suelen comenzar por xoxb-, por ejemplo:

xoxb-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXX

Este token es una credencial secreta.

No debemos publicarlo en una página web, subirlo a un repositorio
público ni incluirlo en un ejemplo que vayamos a compartir con otras
personas.

Cualquier persona que consiga un token válido podría utilizar los
permisos asociados a nuestra aplicación.

Si accidentalmente hacemos público el token, debemos revocarlo y
generar unas credenciales nuevas.

Añadir el bot al canal

También necesitaremos un lugar en el que publicar las
notificaciones.

Podemos crear, por ejemplo, un canal llamado
#notificaciones.

Una vez hecho esto necesitaremos conocer el identificador del
canal.

Los identificadores de canales de Slack tienen un aspecto similar a
C0123456789. Este identificador será el que utilizaremos al llamar a la API.

Slack permite otras formas de organizar y enviar mensajes, pero para
un sistema personal de alertas un canal específico suele ser el enfoque
apropiado.

Cómo se envía un mensaje a
Slack

Slack proporciona el método de su API
chat.postMessage.

La petición se realiza mediante HTTPS utilizando la URL
https://slack.com/api/chat.postMessage.

Debemos enviar nuestro token mediante la cabecera HTTP:

Authorization: Bearer TOKEN

y proporcionar como mínimo el canal y el contenido del mensaje.

Conceptualmente enviaremos un documento JSON parecido a este:

{
    "channel": "C0123456789",
    "text": "Copia de seguridad terminada correctamente"
}

Esta operación es independiente del lenguaje de programación que
utilicemos.

Por esta razón podemos realizar exactamente la misma petición desde
PHP, AppleScript, PowerShell, Python, Java, C# o prácticamente cualquier
entorno capaz de efectuar una petición HTTPS.

Vamos a ver tres ejemplos.

Enviar una
notificación a Slack desde PHP

Supongamos que tenemos una página web alojada en un hosting PHP y
queremos recibir una notificación cuando sucede algún
acontecimiento.

Podría tratarse de una tarea ejecutada mediante cron, una copia de seguridad o un proceso interno de nuestra aplicación.

Una implementación sencilla utilizando cURL sería la siguiente:

<?php

$token = getenv('SLACK_BOT_TOKEN');
$canal = 'C0123456789';

$datos = [
    'channel' => $canal,
    'text' => 'Mensaje enviado desde mi servidor PHP'
];

$curl = curl_init('https://slack.com/api/chat.postMessage');

curl_setopt_array($curl, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $token,
        'Content-Type: application/json; charset=utf-8'
    ],
    CURLOPT_POSTFIELDS => json_encode($datos)
]);

$respuesta = curl_exec($curl);

curl_close($curl);

echo $respuesta;

El token se obtiene mediante:

getenv('SLACK_BOT_TOKEN')

en lugar de escribirlo directamente en el código.

Siempre que nuestro hosting lo permita, resulta preferible almacenar
credenciales y secretos mediante variables de entorno o mediante algún
mecanismo de configuración situado fuera del directorio público de
nuestra página web.

Crear una función
PHP para enviar mensajes

Si vamos a utilizar Slack desde diferentes partes de nuestra
aplicación PHP, podemos encapsular el código anterior en una
función:

function enviarSlack($mensaje)
{
    $token = getenv('SLACK_BOT_TOKEN');
    $canal = 'C0123456789';

    $datos = [
        'channel' => $canal,
        'text' => $mensaje
    ];

    $curl = curl_init('https://slack.com/api/chat.postMessage');

    curl_setopt_array($curl, [
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            'Authorization: Bearer ' . $token,
            'Content-Type: application/json; charset=utf-8'
        ],
        CURLOPT_POSTFIELDS => json_encode($datos)
    ]);

    $respuesta = curl_exec($curl);

    curl_close($curl);

    return $respuesta;
}

Ahora podemos enviar una notificación simplemente escribiendo:

enviarSlack('La copia de seguridad ha terminado correctamente.');

Para enviar una notificación de que se ha terminado la copia de
seguridad sería algo como:

if ($copiaCorrecta) {
    enviarSlack('✅ Copia de seguridad terminada correctamente.');
} else {
    enviarSlack('⚠️ Se ha producido un error durante la copia de seguridad.');
}

Podemos incluir en el mensaje cualquier información que resulte
útil:

enviarSlack(
    "Nuevo pedido recibido.\n" .
    "Número: " . $pedido . "\n" .
    "Importe: " . $importe . " euros"
);

De esta manera, un acontecimiento producido en nuestro hosting puede
generar inmediatamente una notificación en nuestro teléfono.

Enviar una
notificación desde un Mac con AppleScript

El mismo sistema puede utilizarse desde macOS.

AppleScript no necesita disponer de una implementación específica de
la API de Slack. Podemos utilizar el comando curl incluido en macOS mediante do shell script.

Un ejemplo sería:

set slackToken to "xoxb-XXXXXXXXXXXX"
set slackChannel to "C0123456789"
set slackMessage to "El proceso del Mac ha terminado correctamente"

set jsonData to "{\"channel\":\"" & slackChannel & "\",\"text\":\"" & slackMessage & "\"}"

set command to "curl -s -X POST " & ¬
    "-H " & quoted form of ("Authorization: Bearer " & slackToken) & " " & ¬
    "-H " & quoted form of "Content-Type: application/json; charset=utf-8" & " " & ¬
    "--data " & quoted form of jsonData & " " & ¬
    quoted form of "https://slack.com/api/chat.postMessage"

do shell script command

En un script real debemos evitar almacenar el token directamente en
el código cuando exista la posibilidad de que ese archivo pueda ser
compartido.

Una posibilidad es guardarlo en una variable de entorno, un archivo
de configuración protegido o utilizar el llavero de macOS.

Avisarnos cuando
termina un proceso en el Mac

Supongamos que utilizamos nuestro Mac para ejecutar una tarea que
tarda mucho tiempo.

Nuestro AppleScript podría realizar primero el proceso:

do shell script "/ruta/a/mi/programa"

y después enviar el mensaje a Slack:

set slackMessage to "El proceso ha terminado."

De esta manera podemos abandonar el ordenador y recibir una
notificación en el teléfono cuando la tarea haya finalizado.

También podríamos utilizar el resultado del proceso para enviar
mensajes diferentes dependiendo de si la operación ha terminado
correctamente o se ha producido algún error.

Enviar
una notificación desde Windows con un archivo BAT

Windows también puede participar en nuestro sistema de
notificaciones.

Podemos utilizar PowerShell para realizar la petición HTTP e
invocarlo desde un archivo .bat.

Por ejemplo, podemos crear un archivo llamado
notificar.bat con el siguiente contenido:

@echo off

set "SLACK_TOKEN=xoxb-XXXXXXXXXXXX"
set "SLACK_CHANNEL=C0123456789"
set "SLACK_MESSAGE=El proceso de Windows ha terminado"

powershell -NoProfile -Command ^
  "$headers = @{ Authorization = 'Bearer %SLACK_TOKEN%' }; ^
   $body = @{ channel = '%SLACK_CHANNEL%'; text = '%SLACK_MESSAGE%' } | ConvertTo-Json; ^
   Invoke-RestMethod -Uri 'https://slack.com/api/chat.postMessage' -Method Post -Headers $headers -ContentType 'application/json; charset=utf-8' -Body $body"
Ejecutar la
notificación después de otro programa

Una utilidad interesante de los archivos BAT consiste en encadenar
varios comandos.

Por ejemplo:

@echo off

backup.exe

if %ERRORLEVEL% EQU 0 (
    call notificar.bat
)

En este ejemplo se ejecuta primero:

backup.exe

y se consulta posteriormente su código de salida.

Podemos desarrollar el ejemplo para generar una notificación
diferente cuando se produzca un error:

@echo off

backup.exe

if %ERRORLEVEL% EQU 0 (
    set "RESULTADO=La copia de seguridad ha terminado correctamente"
) else (
    set "RESULTADO=ERROR: la copia de seguridad ha fallado"
)

A continuación podemos utilizar el valor de RESULTADO como contenido del mensaje enviado a Slack.

El principio es exactamente el mismo que en PHP y AppleScript:
nuestro programa detecta un acontecimiento y realiza una petición a la
API de Slack.

Comprobar la respuesta de
Slack

Hay un detalle importante que no debemos ignorar en una
implementación real.

No basta con comprobar que la conexión HTTPS se ha realizado
correctamente.

La API de Slack devuelve un documento JSON indicando si la operación
ha tenido éxito.

Una respuesta correcta contendrá un valor equivalente a:

{
    "ok": true
}

Mientras que, si existe algún problema, recibiremos una respuesta
similar a:

{
    "ok": false,
    "error": "..."
}

Por tanto, nuestros scripts deberían comprobar el campo
ok cuando sea importante asegurarnos de que la notificación ha sido aceptada por Slack.

Esto permite detectar situaciones como un token incorrecto, permisos
insuficientes o un canal al que la aplicación no puede acceder.

Seguridad

El elemento más delicado de todo este sistema es el token OAuth del
bot.

Debemos tratarlo igual que una contraseña.

En particular, conviene seguir varias reglas:

  • no publicarlo en GitHub ni en otros repositorios públicos;
  • no incluirlo en artículos, capturas de pantalla o
    documentación;
  • evitar almacenarlo directamente dentro del código;
  • impedir que pueda descargarse desde nuestro servidor web;
  • utilizar variables de entorno o mecanismos seguros de almacenamiento
    de credenciales;
  • revocarlo inmediatamente si sospechamos que ha quedado
    expuesto.

También es aconsejable conceder a la aplicación únicamente los
permisos que necesita.

Para los ejemplos de este tutorial nos interesa utilizar
chat:write.

No existe ninguna razón para conceder acceso a mensajes, usuarios,
archivos u otros recursos si nuestra aplicación solamente necesita
publicar una notificación.

Aplicar el principio del mínimo privilegio reduce las consecuencias
de una posible filtración del token.

No utilizar Slack
como sistema de registro

Aunque podemos enviar mensajes automáticos, Slack no debería
convertirse en el registro completo de actividad de nuestro
servidor.

No sería razonable, por ejemplo, enviar una notificación por cada
petición HTTP recibida por una página web.

Las notificaciones deben reservarse para acontecimientos que
realmente queremos conocer.

El envío masivo puede encontrarse con los límites de frecuencia
establecidos por Slack.

Para almacenar grandes cantidades de acontecimientos debemos utilizar
archivos de registro, bases de datos o plataformas específicas de
monitorización. Slack puede actuar como la última etapa del sistema y
avisarnos únicamente cuando ocurre algo que requiere nuestra
atención.

Limitaciones de la cuenta
gratuita

El plan gratuito de Slack es suficiente para un sistema doméstico o
un pequeño sistema de notificaciones como el descrito en este tutorial,
pero debemos tener presentes sus restricciones.

Slack también establece limitaciones sobre el historial disponible en
los espacios de trabajo gratuitos y aplica límites de frecuencia a las
llamadas realizadas contra su API.

Estas restricciones no suelen representar un problema para un sistema
que envía unas pocas alertas al día, pero son importantes si pretendemos
utilizar Slack para registrar automáticamente una gran cantidad de
acontecimientos.

Proyecto BlindTex para matemáticas accesibles con LaTeX

El proyecto BlindTex es un proyecto orientado a convertir expresiones matemáticas escritas en LaTeX a lenguaje natural, con el objetivo de facilitar su lectura mediante productos de apoyo como lectores de pantalla y dispositivos braille. La idea es la de transformar una sintaxis pensada para composición matemática en una salida más cercana al lenguaje hablado para recorrer el contenido y entender y recorrer con mayor facilidad.

El proyecto se presenta como una herramienta de accesibilidad especializada en la conversión de ecuaciones escritas en LaTeX a lenguaje natural. Su enfoque está dirigido a reducir barreras de acceso al conocimiento científico y técnico para personas ciegas o con baja visión.

LaTeX es uno de los formatos más utilizados para escribir fórmulas matemáticas, artículos científicos, apuntes técnicos y documentación universitaria.

Un contenido puede estar bien escrito para ser renderizado visualmente. Pero eso no implica que sea fácil de interpretar de forma auditiva. Una expresión como una fracción, una raíz o una potencia puede volverse ambigua o muy difícil de seguir si no se expresa con una estructura verbal clara. BlindTex trabaja justamente sobre ese problema.

La herramienta no se limita a “leer caracteres”, sino que se intenta trasladar la estructura matemática a una forma verbal. En la documentación del repositorio se muestra como ejemplo la conversión de una fracción escrita en LaTeX a una salida como fracción 2 sobre 3 más 4 finFracción, dando una idea más clara de la jerarquía de la expresión matemática.

Instalación y uso

BlindTex puede instalarse desde Python con usando pip y se debe ejecutar desde la terminal.

El proyecto incluye una web pública de presentación y una aplicación web para probar conversiones, lo que ayuda a acercar la herramienta tanto a desarrolladores como a potenciales usuarios finales o docentes interesados en experimentar con ella.

Software libre y posibilidad de colaboración

BlindTex se distribuye como proyecto de código abierto bajo licencia GPL-3.0 y mantiene su código en GitHub.

Accesibilidad en los videos de la administración y las empresas gracias a la IA

La accesibilidad audiovisual ha dejado de ser un proyecto excepcional reservado a grandes presupuestos y tiempos infinitos. La combinación de automatización, producción en la nube y flujos de trabajo estandarizados está cambiando la economía de los subtítulos, las transcripciones y las audiodescripciones, reduciendo de forma drástica el coste económico por minuto y, sobre todo, el tiempo necesario para hacer que un video o presentación multimedia sea completamente accesible.
En este nuevo contexto, la excusa de que no es asumible desde el punto de vista económico pierde fuerza, porque el mercado ya ofrece modelos operativos diseñados precisamente para industrializar la accesibilidad sin sacrificar la calidad.

Este cambio viene de la mano de la Inteligencia Artificial (IA) y las nuevas oportunidades de automatización que ofrece a empresas y profesionales.

Este cambio no es únicamente tecnológico, es también regulatorio y reputacional. El Acta Europea de Accesibilidad establece estándares obligatorios para garantizar la accesibilidad de productos y servicios y traslada a empresas privadas y entidades públicas una responsabilidad más clara en la eliminación de barreras.
Según las WCAG para que un contenido multimedia sea accesible debe incorporar, como mínimo, audiodescripciones, subtítulos y transcripciones, y hacerlo de forma consistente en volumen y en el tiempo.

El problema, hasta hace poco, era que hacer accesible un vídeo implicaba un esfuerzo grande en tareas especializadas que van mucho más allá de poner subtítulos. En audiodescripción se requiere detectar silencios y duraciones, escribir un guion específico, rehacer locuciones cuando procede, seleccionar tomas válidas y montar el resultado final. En subtitulado de tipo closed captions es necesario identificar personajes, transcribir diálogos y locuciones, describir músicas y sonidos relevantes y controlar métricas como caracteres por línea y caracteres por segundo para asegurar legibilidad y sincronización. Además, la accesibilidad moderna tiende a incorporar transcripciones navegables, capítulos y artefactos en diferentes formatos listos para publicación en múltiples plataformas. Cuando todo esto se aborda artesanalmente, cada minuto adicional de video arrastra el mismo esfuerzo y el mismo coste provocando que el proceso de hacer accesible un contenido multimedia fuese económicamente más caro.

La automatización para la accesibilidad

La automatización orientada a accesibilidad marca un punto de inflexión en las oportunidades de negocio y de la situación legal sobre el concepto de adaptaciones razonables para la accesibilidad. Una producción multimedia se puede convertir en un contenido accesible generando variantes accesibles de forma automatizada, supervisada y autónoma, sin exigir conocimientos de edición de vídeo al equipo que produce el contenido. Esto permite producir en masa en la nube, obtener distintos archivos y formatos, y resolver de forma práctica un problema frecuente.

Automatización con calidad

Pero la automatización no elimina la exigencia de calidad. En accesibilidad, la calidad no es un lujo, es un requisito funcional. Un subtítulo mal segmentado o una audiodescripción imprecisa no sólo incumple criterios, también compromete la comprensión y la experiencia de usuario. Por eso resulta especialmente relevante el modelo de compañías como LViS Vally, que combinan automatización con una metodología de revisión humana en dos fases para garantizar que los elementos accesibles sean precisos, claros, estén sincronizados y sean plenamente comprensibles para cualquier persona. Ese componente humano, incorporado como control de calidad estructural y no como corrección ocasional, es el puente entre la eficiencia de la producción automática y la fiabilidad que requieren contenidos institucionales, educativos, formativos o corporativos.

La excusa del coste económico ya no es válida. Empresas como LViS Vally ofrecen tarifas individuales de 40 euros por hacer accesible un minuto de contenido de video. Esos precios debían ser multiplicados por 20 o por 100 hace un par de años.

Nuevas oportunidades de negocio en la accesibilidad gracias a la IA

Desde la perspectiva de negocio, la discusión también ha cambiado. La accesibilidad ya no compite sólo por presupuesto, compite por el riesgo y la oportunidad. El incumplimiento puede traducirse en sanciones, reclamaciones o deterioro reputacional, mientras que la accesibilidad bien ejecutada mejora la transparencia, amplía la participación y refuerza la percepción de modernidad y responsabilidad social. Además, la reutilización del contenido y la mejora en difusión y posicionamiento son efectos colaterales habituales cuando se dispone de transcripciones, textos y metadatos reutilizables. En otras palabras, la accesibilidad no es únicamente coste, es también una inversión que amplifica el valor del contenido y su alcance.

Gracias a las nuevas oportunidades que nos ofrece la Inteligencia artificial el ecosistema actual reduce el coste de oportunidad de hacer accesibles los contenidos multimedia y debilita la narrativa de que no hay presupuesto como justificación estructural. Con obligaciones normativas más próximas, con expectativas sociales crecientes y con soluciones que combinan automatización y control humano de calidad, la accesibilidad audiovisual se está convirtiendo en una práctica estándar. La pregunta relevante ya no es si una organización puede permitirse hacer accesible su contenido, sino si puede permitirse no hacerlo cuando existen vías rápidas, escalables y económicamente racionales para cumplir y, al mismo tiempo, ampliar el impacto de su comunicación.

Herramientas OTP y la seguridad digital

En un mundo digital donde las contraseñas ya no son suficientes para proteger nuestras cuentas, las herramientas OTP (One-Time Password) se han convertido en una capa adicional esencial para mantener a salvo nuestra identidad, nuestros datos y nuestra privacidad.

Una OTP es una contraseña que solo se puede usar una vez, y que suele tener una validez de unos pocos segundos. Es un código numérico que se genera de forma automática y que sirve para verificar la identidad de un usuario cuando se accede a una cuenta o se realiza una operación sensible. Aunque existen varios tipos de OTP, el más común en el ámbito personal y empresarial es el TOTP (Time-based One-Time Password), que genera un nuevo código cada 30 segundos.

Este código no es generado de forma manual, ni se recibe por SMS (algo que puede ser interceptado). Lo genera una app de autenticación en el dispositivo del usuario, a partir de una clave secreta compartida cuando se activa la verificación en dos pasos (2FA) en la cuenta del usuario.

¿Por qué usar herramientas OTP?

Utilizar OTP como parte de un sistema de verificación en dos pasos (2FA) mejora radicalmente la seguridad de las cuentas, incluso si alguien averigua la contraseña principal. Este sistema de seguridad evita accesos no autorizados: Un atacante necesitaría también el código temporal generado por la app OTP, lo cual requiere acceso físico al dispositivo. Esto reduce, por ejemplo, el impacto del phishing: Aunque un atacante consiga la contraseña con técnicas de ingeniería social, no podrá acceder sin el código temporal.

Además, esta solución de seguridad no depende de la red móvil: A diferencia de los códigos enviados por SMS, una app OTP funciona sin necesidad de estar conectada a Internet.

Este sistema de seguridad ofrece compatibilidad con múltiples servicios: Plataformas como Google, GitHub, Microsoft, Dropbox, Amazon o incluso bancos ya ofrecen integración con autenticación OTP.

Diversidad en las herramientas

Hay muchas apps de autenticación disponibles: Google Authenticator, Microsoft Authenticator, Authy, 1Password, entre otras. Cada una tiene sus ventajas y limitaciones en cuanto a sincronización, respaldo o interfaz de usuario. Además, cada una de ellas ofrece distintos niveles de accesibilidad en su interfaz de usuario y limitaciones a la hora de importar y exportar los tokens de autenticación entre otros dispositivos y aplicaciones OTP. Por ejemplo, el proyecto Free OTP ofrece una solución de código libre que implementa los protocolos HOTP y TOTP garantizando la mayor compatibilidad con los distintos servicios de OTP.

Es aconsejable utilizar una herramienta en la que confiemos y que permita exportar e importar las claves que tengamos almacenadas ya que estas operaciones son necesarias cuando llega ese momento de cambiar de dispositivo de seguridad.

Problemas de accesibilidad

Junto a los posibles problemas de accesibilidad en la interfaz de usuario que pueda tener el cliente OTP que estemos utilizando, hay que mencionar que el proceso de autenticación puede presentar barreras de accesibilidad a algunas personas con discapacidad o poca soltura tecnológica.

El proceso consiste en copiar un número de 6 cifras desde una aplicación en nuestro teléfono móvil a una página web o una ventana de autenticación de usuario donde hay un campo numérico donde se nos solicita esa contraseña numérica. El problema es que tenemos menos de 30 segundos para completar este proceso.

Algunos clientes OTP incorporan la función de almacenar en el portapapeles la contraseña generada, evitando la necesidad de memorizar el número.

También si estamos utilizando el ecosistema de Apple, podemos copiar el número en nuestro iPhone y pegarlo desde el portapapeles del Mac gracias al servicio de interoperabilidad de Apple llamado Continuity.

Otra solución puede ser tener un cliente OTP también en nuestro equipo de escritorio o equipo portátil y así podemos obtener estas contraseñas OTP en nuestro dispositivo móvil o nuestro equipo de trabajo.

AsoPMR y Park4Dis: Cómo la tecnología está transformando la movilidad para miles de personas

La tecnología tiene el poder de cambiar vidas. Y a veces, todo empieza con una experiencia personal, una barrera que se convierte en motor de cambio. Este es el caso de AsoPMR, la Asociación de Personas con Movilidad Reducida, y su proyecto estrella conocido como Park4Dis.

Carlo Castellano, fundador de AsoPMR, vivió en primera persona un problema al que se enfrentan miles de personas con movilidad reducida que es el de localizar plazas de aparcamiento accesibles, entender la normativa aplicable en cada ciudad y notificar incidencias cuando algo no funciona. Lo que parecía un obstáculo cotidiano escondía un problema estructural que consistía en la falta de información accesible y unificada sobre las plazas PMR (personas con movilidad reducida) en Europa.

Así nació Park4Dis, una app que permite localizar plazas accesibles, compartir información útil y mejorar la movilidad de las personas con discapacidad. Lo que empezó como una solución puntual, hoy es un proyecto con más de 11.000 usuarios en más de 350 ciudades de 10 países europeos.

Innovación con propósito

AsoPMR es una organización sin ánimo de lucro fundada en 2019 con la misión de facilitar la autonomía, movilidad e inclusión social de las personas con movilidad reducida usando la tecnología. Su enfoque combina escucha activa, soluciones prácticas y un fuerte compromiso comunitario.

Su visión es global y colaborativa buscando crear un mundo donde la movilidad no dependa del lugar en el que se vive o se viaja, sino del derecho universal a moverse con dignidad.

AsoPMR está abierta a todas las personas con movilidad reducida que buscan mejorar su autonomía y calidad de vida, así como a cualquier persona comprometida con la inclusión social y la movilidad sostenible. Los socios tienen acceso a recursos exclusivos, apoyo en distintas áreas y la posibilidad de participar en proyectos e iniciativas que impactan directamente en la comunidad PMR.

Datos y accesibilidad

Park4Dis funciona como un gran mapa colaborativo que permite localizar más de 62.000 plazas PMR registradas. Utiliza datos oficiales, tecnología geoespacial y la participación activa de su comunidad de usuarios. La app no solo localiza plazas, sino que informa sobre sus características, condiciones de uso e incluso permite reportar incidencias.

Este enfoque participativo y centrado en las personas la ha convertido en una herramienta de referencia. AsoPMR ha recibido varios reconocimientos a lo largo de los años, a destacar en 2024 el Premi Mobilicat a la Innovación en Movilidad y el Premio Madrid de IA y tecnologías avanzadas en el ámbito Accesibilidad.

Tecnología que derriba barreras

En AsoPMR se trabaja también en otros proyectos como Spot4Dis, que utiliza la inteligencia artificial y ha recibido financiación a través del Google.org Impact Challenge. El objetivo de este proyecto es automatizar y ampliar el mapeado de plazas PMR a través de visión por computadora y análisis de imágenes. Poder planificar una salida para ir al médico, al trabajo o simplemente disfrutar de un paseo, es algo que muchas veces se da por sentado. Para una persona con movilidad reducida, contar con herramientas como Park4Dis significa mucho más que encontrar un aparcamiento: es recuperar tiempo, dignidad y libertad. Es poder decidir con confianza, sabiendo que la ciudad gracias a la tecnología y al compromiso colectivo empieza a responder a sus necesidades. Park4Dis no solo mapea plazas, sino que traza caminos hacia una movilidad más humana e inclusiva para todos.

Participar en el cambio

AsoPMR no podría haber logrado estos avances sin el apoyo de sus socios, voluntarios y colaboradores. Si quieres formar parte de una comunidad comprometida con la inclusión y la accesibilidad, la asociación está abierta a nuevos socios. Puedes afiliarte a la asociación y participar en ella para conseguir un mundo más accesible.

Cómo Utilizar Contrast Checker para Validar la accesibilidad en las combinaciones de colores

Una de las barreras de accesibilidad más habituales en contenidos de la Web es el bajo contraste de color entre el texto y el fondo.
Para solucionar estas barreras de accesibilidad existen herramientas como el Contrast Checker de WebAIM que permite comprobar si las combinaciones de colores cumplen con los estándares de accesibilidad establecidos por las Web Content Accessibility Guidelines (WCAG).

¿Qué es Contrast checker?

Contrast Checker es una herramienta en línea gratuita proporcionada por WebAIM (Web Accessibility in Mind) que permite verificar si una combinación de colores cumple con los niveles de contraste requeridos por las WCAG buscando que los textos sean legibles para personas con baja visión y daltonismo.

Este verificador evalúa la diferencia entre el color de primer plano (texto) y el color de fondo para determinar si cumple con los niveles de conformidad de AA y AAA definidos en las WCAG.

¿Cómo se utiliza Contrast checker?

La herramienta muestra un formulario con dos campos principales que representan el color del texto y el color de fondo. Estos colores son identificados como Foreground Color para el color en primer plano y background color para el color de fondo.

Se puede introducir el código hexadecimal de un color o utilizar la herramienta de selector de color para buscar el color en la paleta de colores del sistema.

Una vez ingresados los colores, la herramienta calculará automáticamente el ratio de contraste y mostrará los resultados en diferentes categorías.

  • Small Text (Texto pequeño): indica si la combinación de colores pasa los estándares para texto de tamaño normal.
  • Large Text (Texto grande): evalúa si la combinación cumple para textos de al menos 18px en regular o 14px en negrita.
  • Graphics and UI Components: verifica si los colores cumplen para elementos como botones o iconos.

El ratio de contraste se expresa como un número (ejemplo: 4.5:1). Para que la combinación de colores sea accesible, debe cumplir al menos con estos valores:

  • AA (Mínimo) ≥ 4.5:1 ≥ 3:1
  • AAA (Óptimo) ≥ 7:1 ≥ 4.5:1

Si la combinación de colores no pasa la prueba, se mostrará en rojo junto con un mensaje indicando que el contraste es insuficiente.