Signal Nachrichten per API versenden: signal-cli-rest-api

Der bekannte Signal Messenger kann nicht nur ├╝ber dessen App, sondern auch ├╝ber die Befehlszeile oder von anderen Systemen verwendet werden. Eine einfache M├Âglichkeit daf├╝r bietet die signal-cli-rest-api, welche in Form eines Docker-Containers zur Verf├╝gung steht.┬áDamit die API funktioniert, muss diese zuvor ├╝ber die Signal-App gekoppelt werden.

Profil

Docker Basics

Docker erm├Âglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabh├Ąngige isolierte Umgebung:
Beim ersten Start eines Containers, l├Ądt Docker selbstst├Ąndig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker
SoftwareSignal-cli-rest-api
GitHubhttps://github.com/bbernhard/signal-cli-rest-api
aktuelle Version 0.66
gefunden23.03.2023

Wer Docker auf seinem System installiert hat, kann die API mit folgendem Befehl starten:

docker run -d --name signal-api --restart=always -p 8080:8080 \
      -v $HOME/.local/share/signal-cli:/home/.local/share/signal-cli \
      -e 'MODE=native' bbernhard/signal-cli-rest-api

F├╝r das Einbinden der API in einem anderen Projekt oder f├╝r das Dokumentieren der Parameter bietet sich der Einsatz einer docker-compose.yml - Datei an:

version: "3"
services:
  signal:
    container_name: signal-api
    image: bbernhard/signal-cli-rest-api:latest
    restart: always    
    ports: 
      - "8080:8080"
    environment:
      MODE: 'normal'
    volumes:
      - "./signal:/home/.local/share/signal-cli"

Nachdem der Inhalt in eine Datei gespeichert oder zu einer anderen Docker-Compose-Datei hinzugef├╝gt wurde, kann der Container mit "docker-compose up -d" gestartet werden.

Signal-App verbinden

Der Container erzeugt einen QR-Code über welchen die Signal-App gekoppelt werden kann. Der Aufruf erfolgt über den Browser: http://localhost:8080/v1/qrcodelink?device_name=signal-api 

 

In der Signal-App, am Smartphone, kann die API unter Einstellungen und "Gekoppelte Ger├Ąte" mit "+" gekoppelt werden:

 

Signal-Nachricht senden

Die API erm├Âglicht das Versenden und Abrufen von Nachrichten ├╝ber eine POST-Anfrage:

Signal-Nachricht aus dem Terminal versenden (curl)

Folgender Terminal-Befehl kann nach dem Koppeln eine Signal-Nachricht an eine oder mehrere Telefonnummern senden:

curl -X POST -H "Content-Type: application/json" 'http://localhost:8080/v2/send' \
     -d '{"message": "Test via Signal API!", "number": "+4412345", "recipients": [ "+44987654" ]}' 

Der Parameter "number" steht f├╝r die Telefonnummer des Absenders, also f├╝r die eigene Nummer. Als Ziel: "recipients" k├Ânnen die eigene oder eine oder mehrere andere Telefonnummern verwendet werden. Neben dem Terminal ist es auch m├Âglich die API von bestimmten Systemen direkt zu verwenden, als Beispiel aus Home Assistant.┬á

Home-Assistant - Benachrichtigung

Vorhab sollte kurz erw├Ąhnt werden, dass Home Assistant mit dessen offizieller App bereits eine M├Âglichkeit f├╝r Benachrichtigungen bietet, siehe: Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ. Signal habe ich, wie hier beschrieben, als eine Alternative getestet. Nachdem ich f├╝r Home Assistant auch Docker und eine docker-compose-Datei verwende, habe ich die zuvor erw├Ąhnten Zeilen zur docker-compose.yml-Datei von Home-Assistant hinzugef├╝gt.

In Home Assistant bzw. in dessen Konfiguration k├Ânnen vorab verschiedene Profile f├╝r verschiedene Telefonnummern angelegt werden: Als Beispiel habe ich ein Profil mit dem Namen "signal" zur Home Assistant - Konfiguration hinzugef├╝gt. Hier die zus├Ątzlichen Zeilen der configuration.yaml - Datei:

... 
notify:
  - name: signal
    platform: signal_messenger
    url: "http://signal-api:8080"
    number: "+44987654" # the sender 
    recipients: 
      - "+44987654"
...

Die Parameter "number" und "recipients" spiegeln erneut die Absender und Empf├Ąnger-Telefonnummern wider. Die URL enth├Ąlt den Namen der Signal-API, laut dem Beispiel: "signal-api"

Das Benachrichtigungsprofil kann dann zum Beispiel in einer Automatisierung verwendet werden:

service: notify.signal
data:
  message: >-     
    Temperatur: {{states('sensor.keller_temperature')}}┬░C     
    Luftfeuchtigkeit:{{states('sensor.keller_humidity')}}%     

Uptime Kuma - Benachrichtigung

Wer bestimmte Services mit Uptime Kuma ├╝berwacht, kann sich auch daraus ├╝ber Signal benachrichtigen lassen:

Siehe: Webseiten ├╝berwachen mit Uptime Kuma.

Signal-Nachrichten aus Grafana: nur ├╝ber einen Umweg

Grafana bietet Out-of-the-box keine Unterst├╝tzung f├╝r die Signal-API,┬ásiehe: github.com/grafana/grafana/issues/14952. Zudem k├Ânnen die ├╝bermittelten Parameter bei Verwendung der Webhook-Benachrichtigung nicht vorgegeben werden, wodurch ein direktes Ansprechen der Signal-api nicht funktioniert. Nachdem ich f├╝r Gitea einen einfachen Docker-Container f├╝r das Empfangen von Webhooks verwende, kam mir die Idee die Nachrichten aus Grafana an den webhookd-Container zu schicken und dann automatisch mittels curl an die Signal-api weiterzuleiten. Siehe auch: Docker WebHook Daemon: einfacher Hook-Server f├╝r Bash-Scripts.

F├╝r das Setup habe ich zu "signal" zus├Ątzlich den "webhookd" -Service hinzugef├╝gt. Hier die zus├Ątzlichen Zeilen f├╝r die docker-compose.yml - Datei:

[+]
...
  signal:
    container_name: signal-api
    image: bbernhard/signal-cli-rest-api:latest
    restart: always    
    ports: 
      - "8080:8080"
    environment:
      MODE: 'normal'
    volumes:
      - "./signal:/home/.local/share/signal-cli"
  webhookd:
    hostname: webhookd
    image: ncarlier/webhookd:edge-distrib
    container_name: webhookd
    restart: always
    volumes:
     - ./webhookd:/scripts
     - ./webhookd_tmp:/tmp
    environment:
      WHD_LISTEN_ADDR: ":80"
      WHD_SCRIPTS: /scripts
      WHD_HOOK_TIMEOUT: '600'
...

Das Versenden erfolgt auch hier mit curl. Als Basis habe ich ein Beispiel-Bash-Skript angepasst und den Inhalt im Scripts-Ordner mit dem Namen signal.sh abgespeichert:

Inhalt signal.sh-Datei:

#!/bin/sh
# Validate parameters
payload=$1
payload="$(echo "$payload"|tr -d '\n')"
[ -z "$payload" ] && die "missing request payload"
payload_type=$(echo $payload | jq type -r)
[ $? != 0 ] && die "bad body format: expecting JSON"
[ ! $payload_type = "object" ] && die "bad body format: expecting JSON object but having $payload_type"

#extract message:
message=$(echo $payload | jq .message -r)

#send to signal_api
curl -X POST -H "Content-Type: application/json" "http://signal-api:8080/v2/send" -d "{\"message\": \"$message\", \"number\": \"+4398765\", \"recipients\": [\"+43664601911517\"]}"

Die letzte Zeile im Bash-Skript entspricht dem zuvor erw├Ąhnten curl-Aufruf.

Damit das Bash-Script gestartet werden kann, habe ich das Ausf├╝hren mit chmod +x erlaubt:

chmod +x . signal.sh 

In Grafana reicht jetzt ein neuer "Update contact point" mit der URL http://webhookd/signal. "webhookd" ist dabei der Name des webhookd-Containers und "signal" der Name der Bash-Datei ohne .sh

Die Funktion der Bash-Datei beschr├Ąnkt sich aktuell darauf, dass die ├╝bermittelte Nachricht (Message) ├╝bertragen wird, was den Einsatz von Templates und Variablen f├╝r die Nachricht in Grafana erm├Âglicht.

Fazit

Die "signal-cli-rest-api" kann relativ einfach aus anderen Systemen mittels POST-Aufruf angesprochen werden. Als Beispiel liefert Home Assistant oder Uptime Kuma eine direkte Unterst├╝tzung f├╝r die API. Sollte ein System die API offiziell nicht unterst├╝tzen, kann die API m├Âglicherweise ├╝ber den erw├Ąhnten Webhook-Daemon verwendet werden, siehe: Docker WebHook Daemon: einfacher Hook-Server f├╝r Bash-Scripts.

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE f├╝r deine Bewertung!

Aktualisiert: 23.03.2023 von Bernhard | Translation English |­čöö


Top-Artikel in diesem Bereich


ioBroker installieren - Docker

Mit ioBroker k├Ânnen verschiedene Automatisierungsl├Âsungen oder Ger├Ąte in einem System zusammengefasst werden. Um bestimmte Gateways oder Ger├Ąte ansprechen zu k├Ânnen, werden in ioBroker verschiedene Adapter verwendet.


Bitwarden in Docker betreiben - Setup Schritt f├╝r Schritt

Bitwarden ist ein webbasierter Passwort-Manager, ├Ąhnlich LastPass, aber Open Source und der M├Âglichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwort-Managern einordnet, habe ich auf folgender Seite ├╝berlegt: Passwort-Manager sicher? KeePass vs. LastPass vs. Bitwarden. Bitwarden besteht aus mehreren Services, welche ├╝ber verschiedene Container bereitgestellt werden k├Ânnen. Das relativ aufw├Ąndige Setup wurde mit "Bitwarden Unified" speziell f├╝r ein Selbs...


Inbetriebnahme Zigbee2MQTT in Docker - Schritt f├╝r Schritt

Zigbee2MQTT ist eine Open-Source Zigbee-Bridge welche sich, dank dem Netzwerkprotokoll MQTT, leicht in bestehende Smarthome-L├Âsungen integrieren l├Ąsst. Als Beispiel kann Zigbee2MQTT kombiniert mit MQTT - Broker ┬áMosquitto und Home-Assistant Daten der Zigbee-Ger├Ąte erfassen, anzeigen, aufzeichnen und diese steuern. Das hier beschriebene Setup verwendet Docker als Basis. Herstellerseite:┬áhttps://www.zigbee2mqtt.io


Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details