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.

La nueva app de entrenamiento neurológico de la ONCE ya está disponible

El Centro de Tiflotecnología e Innovación de la ONCE (CTI) ha anunciado la disponibilidad para descarga de ENTRENO, una nueva aplicación de entrenamiento neurológico orientada a mantener la mente activa mediante una experiencia moderna, directa y especialmente pensada para el uso cotidiano en el móvil.

La propuesta llega como una renovación completa del antiguo Gimnasio Cerebral, con un enfoque actualizado que combina entretenimiento, progresión y retos diarios, sin perder de vista el objetivo de entrenar capacidades cognitivas relevantes para la vida diaria.

Desde la presentación oficial se insiste en que ENTRENO no se limita a proponer minijuegos aislados, sino que estructura el entrenamiento en sesiones breves y repetibles, incorporando retos diarios que favorecen la constancia. Esa continuidad es clave si lo que se busca es reforzar habilidades como la memoria, la atención o la rapidez mental con pequeñas píldoras de práctica distribuida.

Además, la app persigue  mejorar la destreza general en el manejo de dispositivos móviles, haciendo que la interacción con el teléfono forme parte del propio entrenamiento.

Una app accesible, gratuita y pensada para evolucionar

ENTRENO nace, según se explica en los materiales asociados al lanzamiento, como respuesta a una demanda conocida de disponer de una aplicación accesible, divertida y suficientemente desafiante que sustituyera con garantías a la anterior generación de juegos de este estilo.

Aunque está diseñada para personas con discapacidad visual, no se plantea como un producto solo para un perfil, sino como una app inclusiva que puede disfrutar cualquier persona.

La aplicación se distribuye de forma gratuita y se apoya en un planteamiento de accesibilidad amplio, con compatibilidad con lectores de pantalla y ajustes que facilitan la interacción.

El CTI vincula además el lanzamiento con la iniciativa Modos ON, orientada a impulsar el videojuego accesible, lo que ayuda a entender por qué la app adopta un lenguaje de retos, progresión y recompensas que encaja bien con dinámicas de juego.

¿qué juegos incluye?

ENTRENO incorpora nueve juegos relacionados con distintas capacidades cognitivas para el entreno de la memoria, atención, rapidez mental, percepción y funciones ejecutivas como planificar, decidir o resolver problemas.

Los juegos están diseñados para que el entrenamiento no sea abstracto, sino conectado con situaciones reales. Ositos, por ejemplo, se plantea como una tarea de selección bajo reglas cambiantes en la que la clave no es solo reaccionar, sino inhibir respuestas automáticas y sostener la concentración mientras se atienden pedidos que varían. 

En De Pesca el entrenamiento se apoya en la discriminación auditiva y la velocidad de reacción, obligando a diferenciar señales útiles frente a estímulos negativos para una partida exitosa.

El juego de Mayormente lleva el foco al cálculo mental rápido y a la actualización de información bajo presión temporal. La mecánica de comparar resultados de operaciones sencillas, incrementando la dificultad, conecta con tareas muy comunes como estimar importes, cambios o decisiones rápidas en compras.

El juego de Ciudad Bullicio trabaja la capacidad de distinguir sonidos cotidianos y decidir con rapidez si dos estímulos son iguales o distintos, semejante a los procesos de discriminación y comparación auditiva que usamos continuamente al movernos en espacios urbanos.

Esa palabra me suena se orienta a la memoria verbal reciente, con una dinámica de memorización inicial y posterior reconocimiento frente a distracciones.

En Hal Revés el énfasis recae en la flexibilidad cognitiva y en la gestión de interferencias, obligando a responder de manera contraria a lo esperado.

El objetivo de Sónar es esquivar obstáculos guiándose por la información que aporta el sonar.

El juego de Semáforo se centra en la estimación temporal, pidiendo al usuario que cuente mentalmente un número de segundos y ejecute la acción en el momento justo.

El juego de Super Ahorro utiliza el contexto del supermercado para entrenar estimación y comparación de cantidades, planteando el reto de elegir la opción más barata cuando el precio no se presenta de forma directa.

Progresión, niveles y rutina diaria

Uno de los detalles más relevantes en una app de este tipo es cómo evita el estancamiento. En la documentación asociada se indica que cada minijuego dispone de diez niveles de dificultad creciente y que, al superar el nivel máximo, se activa un modo infinito.

La app busca ofrecer un recorrido de aprendizaje claro para quien empieza y, a la vez, garantizar recorrido a medio plazo para quien busca mantener el hábito.

Disponibilidad y requisitos mínimos

ENTRENO está disponible para iOS y Android y, según el anuncio del CTI, requiere como versiones mínimas iOS 13 y Android 6.

Puedes descargar ENTRENO para iPhone desde la AppStore o descargar ENTRENO para Android desde la PlayStore.

En la página de la noticia encontrarás varios videos con más información y tutoriales.

Cómo etiquetar imágenes y componentes visuales en Android con Content Description

En el desarrollo de aplicaciones para Android, la accesibilidad es un aspecto que no puede dejarse de lado. Uno de los errores más comunes en las interfaces de aplicaciones móviles es utilizar iconos o imágenes sin acompañarlos de una descripción accesible. Para los usuarios que dependen de TalkBack u otros lectores de pantalla, estos elementos pueden convertirse en barreras de accesibilidad muy severas si no cuentan con la información adecuada para identificar la funcionalidad de dichos botones o elementos visuales.

La propiedad contentDescription permite añadir una etiqueta textual a cualquier componente visual, de forma que TalkBack la anuncie en lugar de limitarse a leer un nombre técnico como “ic_send” o a ignorar la imagen por completo.

Ejemplo básico en XML

Un caso clásico es un botón con un icono de avión de papel que representa la acción de enviar un mensaje. Visualmente resulta evidente, pero sin descripción accesible no es comprensible para quien no puede ver la pantalla:

<ImageButton
android:id="@+id/sendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_send"
android:contentDescription="Enviar mensaje"
/>

En este ejemplo, TalkBack leerá “Enviar mensaje” al situarse sobre el botón, en lugar de un nombre de archivo técnico.

Ejemplo con Jetpack Compose

En Compose, la accesibilidad se maneja mediante modificadores de semántica. El equivalente a contentDescription sería:

IconButton(
onClick = { /* Acción para enviar */ },
modifier = Modifier.semantics { contentDescription = "Enviar mensaje" }
) {
Icon(
imageVector = Icons.Default.Send,
contentDescription = null // Evitamos redundancia
)
}

En este ejemplo el botón anuncia la etiqueta “Enviar mensaje” al interactuar con TalkBack. El icono interno no necesita contentDescription porque ya se ha definido en el contenedor.

Buenas prácticas

La propiedad contentDescription es sencilla de usar, pero conviene aplicarla con criterio:

  1. Priorizar la función: un icono de engranaje para un botón para ir a los ajustes de la app no debería describirse como “rueda dentada”, sino como “Ajustes”, que es la acción real.
  2. Ser breve y claro: descripciones cortas facilitan la navegación. Un botón que abre un chat debe decir “Abrir chat”, no “Icono de burbuja de diálogo para iniciar conversación”.
  3. Evitar redundancias: si un TextView ya tiene texto visible, no es necesario repetirlo en contentDescription. TalkBack lo leerá automáticamente.
  4. Ocultar lo decorativo: para imágenes que solo son decorativas, se debe establecer android:contentDescription=»@null» en XML o contentDescription = null en Compose. De esta forma TalkBack las ignora.

Etiquetar adecuadamente los componentes visuales no solo es una buena práctica de desarrollo, sino un compromiso con la inclusión digital. Al igual que ocurre con cualquier aspecto del diseño, dedicar unos segundos a escribir una descripción accesible marca la diferencia entre una app usable y otra que excluye a parte de sus usuarios. La propiedad contentDescription es una de las herramientas más simples y a la vez más poderosas que Android pone en manos de los desarrolladores para mejorar la accesibilidad. Añadir una descripción clara y precisa a imágenes e iconos garantiza que los usuarios con lectores de pantalla comprendan e interactúen con la interfaz en igualdad de condiciones.

Accesibilidad en Android TV

Al hablar de accesibilidad digital, suele pensarse en dispositivos móviles, sitios web o aplicaciones de escritorio. Sin embargo, los dispositivos utilizados en el entorno doméstico también forman parte del ecosistema digital. Android TV, el sistema operativo de Google para televisores inteligentes, reproductores multimedia y decodificadores, ha incorporado importantes avances en materia de accesibilidad en los últimos años.

Las Smart TV ya no son simplemente “televisores”. Hoy son plataformas interactivas con cientos de aplicaciones, acceso a Internet, funciones de búsqueda por voz, sistemas de compra y hasta videojuegos. Por eso, las personas con discapacidad también necesitan poder navegar por ellas, entender su contenido y controlarlas sin barreras.

Una buena implementación de accesibilidad en este entorno permite que personas ciegas, con baja visión, dificultades motoras o sordera puedan ver contenidos audiovisuales con subtítulos y audiodescripciones, navegar por menús, apps y configuraciones usando solo un mando a distancia, controlar el dispositivo con comandos de voz y escuchar la interfaz leída por un lector de pantallas.

Navegación por Android TV

Android TV está diseñado para ofrecer una experiencia de usuario sencilla, optimizada para pantallas grandes y control remoto. Su interfaz está compuesta por distintas secciones que permiten acceder a aplicaciones, configuraciones del sistema, contenidos recomendados y servicios multimedia.

A continuación se describen las principales áreas del sistema y su funcionalidad:

Escritorio

Es la primera pantalla que se muestra al encender el dispositivo. Desde ella se accede a las aplicaciones instaladas, contenidos recomendados y accesos directos a servicios multimedia. Suele estar organizada en filas horizontales que se pueden recorrer con el mando a distancia mediante las flechas de dirección.

Dependiendo del dispositivo, puede incluir una barra de búsqueda por voz o texto, así como accesos a ajustes rápidos o perfiles de usuario.

Esta pantalla suele estar asociada al botón Inicio del mando a distancia.

Menú de ajustes

Desde este panel se configuran todos los aspectos del sistema: red, imagen, sonido, accesibilidad, almacenamiento, actualizaciones, etc. Está estructurado de forma jerárquica y permite navegar con el mando siguiendo una exploración vertical y profundizando las opciones hacia la derecha.

Se puede acceder a esta sección desde un botón en el escritorio con el icono de un engranaje y etiquetado como Ajustes y, en algunos modelos de televisión, haciendo una pulsación mantenida del botón de Inicio en el mando a distancia.

Buscador

Android TV integra un sistema de búsqueda por texto o por voz que permite encontrar películas, series, vídeos, aplicaciones o ajustes del sistema. Utiliza el motor de Google para ofrecer resultados relevantes tanto dentro de apps como en la tienda de contenido.
También, en algunos modelos, realiza la búsqueda en los contenidos almacenados en el dispositivo o en los catálogos de las plataformas de streaming como HBO o Disney.

Se puede acceder al buscador utilizando la función de micrófono o a través de un botón en el escritorio. 

Aplicaciones

Existe un panel que muestra una cuadricula de aplicaciones instaladas. Desde este panel se pueden abrir o cerrar las aplicaciones o desinstalarlas mediante el menú contextual de cada icono.

Cada aplicación instalada funciona como una ventana de acceso a un servicio o contenido específico. Algunas permiten personalización, guardado de contenidos, inicio de sesión, o integración con canales del escritorio.

Se puede acceder a este panel utilizando el botón Apps del mando a distancia, desde el menú de ajustes o a través de un botón en el escritorio.

Google Play Store

Algunos fabricantes incluyen la tienda de aplicaciones de Google desde la que podemos instalar nuevas apps para añadir más funcionalidad a nuestra televisión.

Su catálogo está adaptado a dispositivos de pantalla grande y control remoto. Incluye categorías como entretenimiento, juegos, herramientas, educación y más.

El acceso a la Playstore se realiza mediante la app Playstore. En algunos mandos a distancia se incluye un botón específico para esta app.

Perfiles y cuentas de usuario

Algunos modelos de Android TV permiten gestionar varios perfiles para personalizar la experiencia de cada usuario. Esto incluye recomendaciones, historial de visualización y ajustes individuales.
En la esquina superior derecha del escritorio suele haber un icono para acceder a los perfiles de usuario disponibles.

Ajustes rápidos o menú contextual

En algunos dispositivos se puede acceder a un pequeño panel lateral que muestra opciones rápidas como modo de imagen, audio, subtítulos o entradas de vídeo.

Para acceder a este menú contextual se debe utilizar o un botón específico del mando a distancia o una pulsación mantenida del botón Enter.

Selector de entrada

Este panel permite cambiar entre diferentes fuentes de señal: HDMI, antena, AV, etc. Este panel es especialmente relevante en televisores que combinan Android TV con sintonizadores de televisión tradicional.

Para acceder a este panel debemos utilizar el botón Input del mando a distancia (si lo incluye) o desde el menú de ajustes, en la sección de entradas o dispositivos externos.

Protectores de pantalla y contenidos dinámicos

Además de todas estas secciones en Android TV existen contenidos dinámicos que aparecen cuando se dan ciertas situaciones como varios minutos de inactividad, algún cambio en la emisión o alguna notificación para el usuario.

Acceder o salir de estas secciones es algo no resuelto del todo en todas las versiones de Android TV 4. Si no se requiere ningún tipo de interacción o acción por parte del usuario podemos salir de este contenido pulsando la tecla Enter del mando a distancia pero si utilizamos un servicio de accesibilidad puede que la accesibilidad no funcione mientras el foco del sistema esté en este panel de contenido dinámico.

Servicios de accesibilidad y fragmentación de la plataforma

Aunque los servicios de accesibilidad para Android TV vienen por defecto, en la mayoría de fabricantes, esto es cierto sólo cuando el dispositivo utilice Android TV 4 o una versión superior. Además, el fabricante puede incluir cambios o personalizaciones en su versión de Android limitando o ampliando las características y servicios de accesibilidad.

Además de estas personalizaciones que pueden reducir la accesibilidad de Android TV, el fabricante también puede reducir la accesibilidad al proporcionar un mando a distancia táctil o que no incluya los botones suficientes para que los servicios de accesibilidad funcionen de forma apropiada. 

En una versión pura y sin personalizaciones de Android TV 4 podemos encontrar los servicios de accesibilidad en la sección de Ajustes > Preferencias del dispositivo > Accesibilidad.

En este conjunto de servicios de accesibilidad es usual encontrar las siguientes herramientas para mejorar la accesibilidad a la hora de utilizar el dispositivo:

TalkBack: lector de pantallas

TalkBack es el lector de pantallas incluido en Android TV. Una vez activado, proporciona una descripción por voz de los elementos visibles en pantalla, lo que permite su uso sin necesidad de visión.

Funcionalidades principales:

• Lectura por foco: al desplazarse por la interfaz con el mando, TalkBack verbaliza el elemento seleccionado.
• Comandos mediante el mando a distancia: se pueden emplear combinaciones de teclas para ejecutar acciones, avanzar, retroceder o activar funciones.
• Soporte para contenido dinámico: TalkBack proporciona retroalimentación sobre notificaciones, banners y cambios de estado en aplicaciones compatibles.

En algunos dispositivos, TalkBack puede activarse manteniendo pulsados simultáneamente los botones de bajar y subir volumen, o una pulsación mantenida del botón para silenciar el micrófono del mando a distancia.

Ampliación (Zoom)

La función de ampliación permite hacer zoom sobre la imagen de la pantalla. Resulta útil para personas con baja visión y puede activarse mediante combinaciones de botones específicas del mando.

Subtítulos

El sistema permite activar subtítulos para contenidos compatibles, así como personalizar su apariencia (tamaño de letra, colores, fondo, tipo de borde, posición en la pantalla, etc).
En algunas versiones más modernas de Android Tv, además, estos subtítulos pueden ser leídos automáticamente por el lector de pantallas.

Control por voz

Android TV es compatible con el Asistente de Google, lo que permite controlar el dispositivo mediante comandos de voz. Esta funcionalidad facilita tareas como abrir aplicaciones, reproducir contenido o modificar el volumen, sin necesidad de navegar manualmente.

En las versiones más modernas de Android TV se ha incluido compatibilidad con Gemini y la inteligencia artificial de Google.

Accesibilidad en los contenidos en emisión

Cuando la televisión accede a los distintos canales mediante una conexión digital se pueden acceder a ciertos servicios de accesibilidad que ofrecen las propias emisoras de televisión. Entre las opciones disponibles se encuentran:

  • Soporte para pistas de audiodescripción, cuando están disponibles en el contenido.
  • Subtítulos automáticos, en algunas aplicaciones de Google.
  • Compatibilidad con salida de audio por Bluetooth o en modo mono, útil para audífonos.

Interacción mediante el mando a distancia

La principal vía de interacción en Android TV es el mando a distancia. Dado que no se dispone de pantalla táctil ni puntero, la navegación se realiza secuencialmente mediante las teclas de dirección, las opciones y teclas del mando a distancia para el acceso a los menús, la activación de botones y el teclado virtual en pantalla.

Aunque el sistema y TalkBack están diseñados para funcionar con esta interfaz, permitiendo la navegación y activación de elementos sin barreras visuales, la accesibilidad de muchas aplicaciones depende del esfuerzo y el interés del desarrollador en incluir características de accesibilidad.

El número de teclas incluidos en el mando a distancia puede limitar algunas funciones del lector de pantallas ya que el acceso a funciones como abrir el menú contextual o accesos rápidos a la pantalla de inicio, a los ajustes generales o al escritorio de apps puede dificultarse si el mando no incluye estos accesos rápidos. Además, aunque la televisión no está diseñada como una interfaz táctil, el mando a distancia si puede incluir una pantalla táctil para sustituir algunas funciones como el teclado en pantalla. 

Algunas televisiones permiten la conexión de un teclado externo mediante Bluetooth u otros mandos para jugar a videojuegos o utilizar ciertas herramientas que requieren de más precisión. Estos dispositivos externos, en algunos casos y siempre que lo permita el fabricante de la televisión, pueden utilizarse para mejorar el manejo de los servicios de accesibilidad incluidos en la televisión.

Carencias en accesibilidad

Aunque Android TV 4 ofrece varios servicios de accesibilidad y limita la forma de interacción al uso de un mando a distancia la actual fragmentación originada por los fabricantes hacen que no se pueda asegurar que todos los dispositivos con Android TV 4 sean accesibles.

Además, la documentación de accesibilidad para los desarrolladores de Android TV 4 es aún más escasa que para Android para smartphones por lo que es muy probable encontrar fallos de accesibilidad en las apps.

Unido a esto, Android TV aún no ha incluido soporte para líneas braille, barredores y dispositivos apuntadores para la accesibilidad. Esto hace que el nivel de accesibilidad de Android TV es inferior al que podemos encontrar en las versiones actuales de Android para teléfonos. Esperemos que en futuras actualizaciones de Android TV se reduzca la fragmentación y se amplíe el soporte de accesibilidad para periféricos externos.

Cómo mostrar la pantalla de tu teléfono Android en tu Mac

En un artículo anterior aprendimos a mostrar la pantalla de nuestro iPhone en el mac.

Esta misma necesidad nos puede surgir pero con un teléfono Android. El programa Quicktime no detecta a los teléfonos y dispositivos Android como fuentes de video por lo que necesitaremos otra aplicación como puede ser scrcpy.

¿Qué es scrcpy?

El paquete scrcpy es una herramienta que permite reflejar y controlar dispositivos Android desde un ordenador. Es ideal para realizar demostraciones en tiempo real, capturar la pantalla para tutoriales o pruebas, y mejorar la productividad cuando necesitas interactuar con tu dispositivo móvil sin tener que tocarlo. Además, es una solución ligera, sin necesidad de instalar aplicaciones en el teléfono, ya que utiliza ADB (Android Debug Bridge) para conectarse a tu dispositivo.

Su instalación es sencilla ya que se distribuye como un paquete de Homebrew.

Para instalar scrcpy simplemente deberemos ejecutar este comando de brew en la Terminal de MacOS:

brew install scrcpy

Una vez instalado para poder utilizarlo deberemos activar el modo de depuración por USB en nuestro teléfono Android. Esta opción está disponible dentro del menú de opciones para desarrolladores del teléfono.

Una vez activado este modo de depuración es necesario conectar el teléfono Android al Mac utilizando un cable USB. El teléfono preguntará si confías en el ordenador al que se ha conectado. Debemos responder que sí.

En la Terminal de Mac ejecutaremos el comando:

scrcpy

Aparecerá una nueva ventana con el contenido de nuestro teléfono y, además, si el teléfono está ejecutando una versión de Android moderna, también podremos escuchar el sonido del teléfono en nuestro Mac. De esta forma podremos compartir el contenido visual y auditivo de nuestro teléfono Android en videoconferencias y reuniones compartiendo la pantalla de nuestro Mac.

Puedes consultar más opciones y comandos de scrcpy en la página oficial del proyecto scrcpy.

Revisa la accesibilidad de tu código Android con Android-ally

El desarrollo de aplicaciones Android implica el diseño y la implementación de diversas interfaces de usuario. Es en esta etapa del desarrollo de un proyecto software donde aparecen todas las futuras barreras de accesibilidad que mostrará la aplicación.

Aunque todavía no exista ninguna herramienta automática para la accesibilidad que sea 100% fiable si está demostrado sin duda alguna que la detección temprana de estas barreras mejora la experiencia de la persona que desarrolla estas interfaces de usuario y es en esas etapas donde deberían existir más herramientas automáticas. Curiosamente hay más herramientas de este tipo para las etapas posteriores al desarrollo.

En Android ya existe una herramienta de validación de la accesibilidad pero funciona en aplicaciones que se estén ejecutando en un teléfono Android.

Para ayudar a las personas desarrolladoras de software para Android surge este plugin para Android studio: Android-ally.

Este plugin permite a los desarrolladores realizar ciertas pruebas en sus interfaces durante la etapa de desarrollo.

Además el creador de este plugin lo distribuye como open source para que toda la comunidad de desarrollo de Android pueda utilizarlo y mejorarlo.

Puedes ver un video explicando el plugin en detalle y su instalación en Youtube.