
1) Introduction
Bonjour et bienvenue à tous.
Êtes-vous utilisateur de l'application Signal ? Si oui, cette page pourrait vous intéresser.
Cette application est très pratique car elle permet d'envoyer à ses amis des messages et des fichiers multimédia depuis son smartphone (Android ou iphone) ou à partir d'un ordinateur (Linux, Windows ou MacOS).
De mon côté, j'avais besoin d'envoyer des messages via Signal, et cela de façon automatique. J'ai donc cherché sur internet un utilitaire ou une API qui permette d'envoyer des messages en mode CLI (interface en ligne de commande), et j'ai trouvé l'interface "signal-cli" qui permet d'envoyer des messages depuis un Terminal.
Mon objectif ici est donc de décrire les différentes étapes pour utiliser l'interface "signal-cli".
Possédant plusieurs Raspberry Pi, ma solution s'est vite tournée vers ce nano-ordinateur, et l'écriture d'un petit script Python avec utilisation de l'API gspread (pour lire/importer des données depuis Google Sheets).
Voyons donc comment installer "signal-cli" sur un raspberry, puis comment s'en servir.
2) Prérequis
Voici 2 liens importants contenant tout ce qu'il faut:
Le deuxième est la page que nous utiliserons pour télécharger "rpi_signal-cli-0.8.1.tar" qui est spécialement packagé pour le raspberry et qui embarque toutes les dépendances (càd toutes les bibliothèques requises). Le prérequis avant de commencer toute installation est d'avoir au moins Java Runtime Environment (JRE) 11.
Comme mon raspberry est sous Raspberry Pi OS Lite, j'ai dû faire cette installation:
# Si besoin installer Java pi@raspberrypi1:~ $ sudo apt update pi@raspberrypi1:~ $ sudo apt install default-jdk # Vérifier la version de Java pi@raspberrypi1:~ $ java -version openjdk version "11.0.9.1" 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-post-Raspbian-1deb10u2) OpenJDK Server VM (build 11.0.9.1+1-post-Raspbian-1deb10u2, mixed mode) pi@raspberrypi1:~ $ # Positionner la variable JAVA_HOME dans le fichier /etc/environment, de façon à avoir: pi@raspberrypi1:~ $ cat /etc/environment JAVA_HOME="/usr/lib/jvm/java-11-openjdk-armhf" # Rebooter et vérifier que la variable est bien positionnée pi@raspberrypi1:~ $ sudo reboot pi@raspberrypi1:~ $ echo $JAVA_HOME /usr/lib/jvm/java-11-openjdk-armhf pi@raspberrypi1:~ $
On pourra aussi suivre les instructions de la page suivante: https://linuxize.com/post/install-java-on-raspberry-pi/
3) Téléchargement et installation (de signal-cli pour raspberrypi)
# Téléchargement pi@raspberrypi1:~ $ wget https://github.com/DutchForeigner/signal-cli_rpi/blob/main/rpi_signal-cli-0.8.1.tar # On extrait sous /opt pi@raspberrypi1:~ $ sudo tar -xvf rpi_signal-cli-0.8.1.tar -C /opt (ou si la commande ne marche pas, extraire et copier manuellement le répertoire dans /opt)
4) On relie le raspberry au compte Signal existant
En ce qui me concerne, je dispose déjà d'un compte Signal que j'utilise depuis mon smartphone Android et depuis mon PC Linux (sous Kubuntu); je n'ai donc pas eu besoin d'enregistrer un numéro puis de le vérifier.Si vous avez besoin de le faire, il faudra utiliser les 2 commandes suivantes:
signal-cli -u USERNAME register (où USERNAME est votre numéro de téléphone avec le prefixe de votre pays, par exemple +336XXXXXXXX ou +337XXXXXXXX) signal-cli -u USERNAME verify CODE (où CODE est le code que vous recevrez par SMS)Mon besoin est donc simplement de lier mon raspberry à mon compte existant, pour cela il faut générer un URI puis générer un QR code (à partir de cet URI) qu'on pourra ensuite scanner depuis son smartphone.
# On génère l'URI pi@raspberrypi1:~ $ /opt/rpi_signal-cli-0.8.1/bin/signal-cli link -n raspberrypi1 tsdevice:/?uuid=JDOX5lKq94gPzkRAqg7abccbQ&pub_key=BaB%2F8Ob7P61f9RltnISY6ExEkoVrkih56Q7my1NnpBtS # Depuis mon PC je génère un QR code partir de l'URI prabou@prabou-VPCZ23C5E:~$ sudo apt-get install qrencode prabou@prabou-VPCZ23C5E:~$ qrencode "tsdevice:/?uuid=JDOX5lKq94gPzkRAqg7abccbQ&pub_key=BaB%2F8Ob7P61f9RltnISY6ExEkoVrkih56Q7my1NnpBtS" -o $HOME/signal_cli_qrcode.png # Depuis l'appli Android, linker un nouveau device avec Paramètres>Appareils reliés, puis scanner le QR Code, et sur le raspberry on devrait voir ce message qui apparait: ... Associated with: +337XXXXXXXX pi@raspberrypi1:~ $ # On vérifie que le raspberry a bien été ajouté pi@raspberrypi1:~ $ /opt/rpi_signal-cli-0.8.1/bin/signal-cli -u +337XXXXXXXX listDevices - Device 1: Name: null Created: 1617485235825 (2021-04-03T21:27:15.825Z) Last seen: 1617408000000 (2021-04-03T00:00:00.000Z) - Device 2 (this device): Name: null Created: 1617487907790 (2021-04-03T22:11:47.790Z) Last seen: 1617408000000 (2021-04-03T00:00:00.000Z) pi@raspberrypi1:~ $
Et sur le smartphone on devrait avoir ceci pour les appareils reliés:

5) Test d'envoie d'un message
pi@raspberrypi1:~ $ /opt/rpi_signal-cli-0.8.1/bin/signal-cli -u +337XXXXXXXX send -m "Bonjour mon ami, ce message test est envoyé par signal-cli depuis mon raspberry" +336XXXXXXXX 1617488005341 pi@raspberrypi1:~ $
Et si on veut l'intégrer à un script python:
pi@raspberrypi1:~ $ cat send_signal_message.py #!/usr/bin/env python3 """Send message via Signal""" import os MESSAGE = """Bonjour, ceci est mon message.""" CMD = '/opt/rpi_signal-cli-0.8.1/bin/signal-cli -u +337XXXXXXXX send -m "' + MESSAGE + '" +336XXXXXXXX' os.system(CMD) pi@raspberrypi1:~ $
Sachez que de nombreuses options sont disponibles, comme envoyer un message à plusieurs personnes, créer/supprimer/quitter un groupe, etc...
Des exemples sont même proposés ici:
