Signal Messenger

Hallo zusammen

Gibt es hier jemanden der eine Möglichkeit gefunden hat irgendwie Signal Messages zu senden? Sie stellen „nur“ Java, C++ und JavaScript Clients zur Verfügung. Aber evtl. über einen Rest API in einem Docker Container oder ähnliches. Ist wohl irgendwie möglich, bin aber nicht sicher was der einfachste Weg ist.

Viele Grüsse,
Oliver

Ich hab gerade CallMeBot gefunden. Vielleicht ist das eine Notlösung?
Bin gerade dabei, es selbst für mich zu testen.

Auf Github habe ich jetzt auch noch eine API für Docker von @bbernhard gefunden. Mit meinen spärlichen Docker-Kenntnissen bringe ich die auf meiner Synology irgendwie nicht zum laufen. Ich vermute das Problem beim Port 8080, den ich schon für IPS verwende.

Servus
Das scheint an anderer bbernhard zu sein. Mit Docker kenn ich mich leider nicht aus.
Meine Seite ist die hier.

gruß
bb

Ist aber ein sehr großer Zufall, dass es den Namen nochmal gibt.

Ah, danke, mit der Signal CLI Rest API kann ich schon mal Nachrichten versenden (erst über CURL getestet). Das sollte sich wohl auch in IP-Symcon integrieren lassen.
Ich kenne mich mit der Synology nicht aus, aber ich dort kann man bestimmt auch ein Port Mapping bei den Docker Container machen…

Ich habe mir eine Funktion geschrieben, mit der ist es nun möglich Signal Nachrichten zu senden:

function SendSignal($message)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'http://ipaddr:port/v2/send');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"message\": \"". $message . "\", \"number\": \"+410000000\", \"recipients\": [ \"+410000000\" ]}");

    $headers = array();
    $headers[] = 'Content-Type: application/json';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
}

Ich kriege den Docker-Container nicht zum laufen. :relieved: Was allerdings sicherlich an meinen sehr spärlichen Kenntnissen von Docker liegt.
Folgende Situation:
Mein IPS läuft auf einer Synology als Docker. Dabei habe ich unter anderem den Port 8080 lokal als Container-Port gemapped. Warum, weiß ich gerade nicht.
Die Signal CLI REST API habe ich geladen und sie läuft ebenfalls. Wenn ich nach Anleitung den Befehl http://localhost:8080/v1/qrcodelink?device_name=signal-api ausführe, tut sich jedoch nichts.
Ich habe auch in einem zweiten Versuch bei dem Signal-Container einfach mal ein Portmapping lokaler Port automatisch auf Container-Port 8081 gemacht. Auch da tut sich nichts.
Beides läuft auf/als bridge, falls das noch relevant ist.

Hat jemand einen Hinweis, was ich falsch mache bzw. was ich tun kann?

Evtl. verstehe ich das auch falsch aber der Container Port wäre ja 8080 und der muss auf einen anderen lokalen Port gemappt werden (sofern denn lokal die Synology wäre)…

Kannst du mal einen Screenshot der Einstellungen machen?

Ansonsten: Kannst du die ENV Variablen ändern/setzen? Dort sehe ich auch ein PORT, man könnte wohl auch den ändern und müsste dann kein Mapping machen.

Edit: Wenn es auf Bridge läuft muss du natürlich trotzdem den richtigen Port nach aussen öffnen…

Ich habe jetzt einmal IPS gelöscht, dann die Signal-CLI-REST-API mit Port mapping 8080:8080 gestartet. Danach IPS wieder gestartet, da wurde dort der Port 8080 lokal automatisch mit Port 49159 gemapped. Im Ergebnis laufen beide Container. Bisher habe ich auch noch kein Problem in IPS mit Port 8080 festgestellt.

Zuerst konnte ich den QR-Code anzeigen, das Handy koppeln und dann funktioniert es. Ich freue mich.
Lediglich finde ich etwas komisch, dass das Skript 22 Sekunden braucht, um eine Nachricht zu senden. Das scheint aber normal zu sein, wie es auf GitHub erklärt ist.

Im Skript der Signal CLI REST API wird „recipients“ geschrieben. Das ist ja die Mehrzahl.
Wie kann man mehrere Empfänger dort eintragen (in welcher Schreibweise)? Und sind auch Gruppen möglich?

Das ist ja einfach nur ein Array wenn man sich das Beispiel anschaut.

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

Ich habs nicht ausprobiert, gehe aber davon aus dass man hier nun einfach mehrere Nummern eintragen kann:

"recipients": [ "+44987654", "+44123245", "+44321341" ]}

Und ich starte die API im json-rpc mode, da kommen die Nachrichten eigentlich sehr schnell an (ca. 3 Sekunden)

Ich habe mir folgende Funktion geschrieben um Nachrichten zu senden:

function SendSignal($message)
{

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'http://ipaddr:port/v2/send');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"message\": \"". $message . "\", \"number\": \"+41112223344\", \"recipients\": [ \"+41112223344\" ]}");

    $headers = array();
    $headers[] = 'Content-Type: application/json';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
}

Ich hatte auch so ein Skript geschrieben und es schon mit , versucht. Durch die andere Schreibweise mit den vielen „“ kam ich da etwas durcheinander. Hab’s jetzt geschafft.

Für Nachrichten an Gruppen habe ich es mit dem Gruppen-Link probiert, das ging nicht. Hat da noch jemand eine Idee?

Und derzeit dauern die Nachrichten bei mir im normal-mode auch nur ca. 3 Sekunden. Das genügt mir auch, da ich sowieso nicht weiß, wie ich auf einen anderen Mode wechseln kann. „Never change a running system“.

Evtl. hilft dir das hier:

Noch eine Frage zur Message:
Ich habe versucht, mit „\n“ einen Zeilenumbruch einzufügen. Wenn ich das tue, wird keine Nachricht übertragen.
Gibt es eine Lösung, dass ich den String für die Message auch mit Zeilenumbruch versehen kann?

Ja, du musst das Backslash „escapen“, das heisst ein weiterer Backslash voranstellen, also so:

Linie 1 \\n Linie 2

Damit weiss dein System dass der Backslash von \n nicht in der Konsole interpretiert werden sondern weitergereicht werden soll.

1 „Gefällt mir“