Enviar mensajes de texto con la aplicación Mensajes de MacOS utilizando AppleScript

La aplicación mensajes nos permite enviar texto, audio e imágenes a otros dispositivos de Apple. Esta aplicación puede ser operada a través de AppleScript para realizar multitud de tareas.

El envío de mensajes de texto con esta aplicación es relativamente sencillo utilizando AppleScript.

Para enviar un mensaje de texto debemos indicar desde qué cuenta de Mensajes queremos enviar el texto y a quién queremos enviarlo.

Por ejemplo, supongamos que queremos enviar el mensaje Hola mundo! al usuario con número de teléfono +34555555555. Es necesario añadir el código de país para que Mensajes encuentre al usuario correcto.

Nuestra cuenta de correo configurada para el protocolo Mensajes es prueba@icloud.com y el valor que se debe utilizar para indicar al script que es una cuenta de servicio es: E:prueba@icloud.com

El código sería el siguiente:


set destinatario to "+34555555555"
set textoAEnviar to "Hola mundo!"
set remitente to "E:prueba@icloud.com"
tell application "Messages"
set theBuddy to buddy destinatario of service remitente
send textoAEnviar to theBuddy
end tell

Solucionando problemas

con ciertas operaciones con la aplicación Mensajes y AppleScript podemos obtener algunos mensajes de error. Por ejemplo: si intentamos enviarnos un mensaje a nosotros mismos podríamos obtener un mensaje de error como el siguiente:


Messages ha detectado un error: No puede obtenerse buddy id «C26717C6-647B-48A1-B963-14A4EC5CD5FA:+34555555555».

Este mensaje de error nos indica que no se ha podido crear la conversación desde AppleScript. La solución pasa por abrir la aplicación Mensajes y abrir nosotros mismos una conversación con nuestro propio telf&eeacute;fono y enviarnos un mensaje. Tras esto no debemos borrar esa nueva conversación y probar de nuevo a ejecutar nuestro script de AppleScript. El mensaje de nuestro script debería enviarse sin problemas.

Abrir y comprobar si una aplicación está abierta en MacOS con AppleScript

Con AppleScript podemos enviar y manipular aplicaciones para conseguir realizar tareas pero para que estas aplicaciones puedan realizar dichas tareas deben estar abiertas. Por esta razón, en muchas ocasiones, debemos asegurarnos dentro del código de nuestro script si la aplicación está abierta y de no ser así abrirla para poder operar con ella.

Preguntando si la aplicación está en ejecución

Ya vimos en el artículo estructuras condicionales en AppleScript cómo crear una estructura condicional para hacer preguntas con nuestro script.

Con una sentencia if then podemos preguntar a una aplicación si está activa o no. Por ejemplo, el siguiente código pregunta si la aplicación Mensajes est´ activa:


if application "Messages" is running then
-- código a ejecutar cuando mensajes está abierto
end if

También podemos consultar si la aplicación no está disponible:


if application "Messages" is not running then
-- código a ejecutar cuando la aplicación no está disponible
end if

Abriendo la aplicación

En AppleScript con el comando tell podemos enviar diversos comandos a las aplicaciones. Uno de estos comandos es ordenarle que se abra. Por ejemplo, abramos la aplicación mensajes:


tell application "Messages" to activate

Con tell también podemos crear bloques de código para enviar una serie de comandos a una aplicación. Su sintáxis es la siguiente:


tell application "Nombre de aplicación
-- Código a ejecutar con la aplicación
end tell

En muchas ocasiones es recomendable incluir pausas (comando delay) entre una operación y otra que enviemos a una aplicación para darle tiempo a la aplicación a procesar el comando y obtener un resultado.

Cerrando la aplicación

También podemos ordenar a una aplicación que se cierre. El comando en lugar de activate es quit. El código es el siguiente:


tell application "Messages" to quit

Ejemplo completo

En un script real que quisiera utilizar la aplicación mensajes para algo la estructura del código debería seguir la siguiente lógica:

  • Si la aplicación no está activa
  • Entonces abre la aplicación
  • Opera con la aplicación mensajes con la tranquilidad de que se sabe que recibirá nuestros comandos porque sabemos que está abierta

Nuestro script final quedaría de la siguiente forma:


if application "Messages" is not running then
tell application "Messages" to activate
end if

Esta práctica de seguridad es muy recomendable para asegurarnos de que nuestros scripts funcionan siempre como se espera.