NEWS
[gelöst]: signal-rest-api: Nachricht mit Bild senden
-
Mahlzeit!
Heute bräuchte ich mal wieder eure Hilfe.Ich habe auf meiner Synology einen Docker-Container mit dem signal-rest-api laufen.
Das Versenden von Nachrichten funktioniert damit wunderbar.Jetzt scheitere ich aber leider daran, auch Nachrichten mit einem Bild zu versenden.
Ich mache das mit folgendem Code:
var fs = require('fs'); var base64File = ''; function toBase64(filePath) { const img = fs.readFileSync(filePath); return Buffer.from(img).toString('base64'); } function sendSignalTest(message, recipients, attachment = '') { if (attachment == '') { var sendParams = { url: 'http://192.168.178.5:8086/v2/send', headers: {'Content-Type': 'application/json'}, body: '{"message": "' + message + '", "number": "+491571234567", "recipients": [ ' + recipients + ' ]}' }; } else { base64File = toBase64(attachment); var sendParams = { url: 'http://192.168.178.5:8086/v2/send', headers: {'Content-Type': 'application/json'}, body: '{"message": "' + message + '", "base64_attachments": ["' + base64File + '"],"number": "+491571234567", "recipients": [ ' + recipients + ' ]}' }; } request.post(sendParams, function(error, response, body) { if (error) { console.error(error); } else { if(response.statusCode == 200) { console.log('Signal-Nachricht an Empfänger ' + recipients + ' versendet!'); } else { console.log(response.body); } } }); } sendSignalTest('Test', '+491721234567', '/opt/iobroker/ipcam/snapshots/20230912111634.jpg');
Beim Versenden erhalte ich leider folgende Fehlermeldung:
14:11:36.629 info javascript.0 (640) script.js.test.SignalTest: {"error":"Couldn't process request - invalid request"}
Es liegt entweder an der Art und Weise, wie das (Base64-codierte) Bild in die Parameter geprömpelt wird, oder an der Codierung der Datei.
Wo ist hier der Fehler?
Kann mir da mal jemand Licht ans Fahrrad machen? -
Die Base64-Codierung schließe ich fast aus.
Wenn ich das Bild online durch einen Dienst codieren lasse, sieht das Ergebnis identisch aus.JS: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4pLSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZP...AAAAAAAAAAAAAAAAD/2Q== Online: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4pLSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZP...AAAAAAAAAAAAAAAAD/2Q==
-
@codierknecht sagte in signal-rest-api: Nachricht mit Bild senden:
body: '{"message": "' + message + '", "base64_attachments": ["' + base64File + '"],"number": "+491571234567", "recipients": [ ' + recipients + ' ]}'
Also ich bin ja immer Fan davon, JSON-Strings NICHT manuell zusammenzubauen, sondern die entsprechenden Funktionen dafür zu nutzen. Sonst sind wieder irgendwelche Anführungszeichen falsch o.ä.
-
Ich nehme an, dass die recipients falsch sind und sicherlich auch in Anführungszeichen müssen. Also
body: '{"message": "' + message + '", "base64_attachments": ["' + base64File + '"],"number": "+491571234567", "recipients": ["' + recipients + '"]}'
Aber wie gesagt...
const fs = require('fs'); function toBase64(filePath) { const img = fs.readFileSync(filePath); return Buffer.from(img).toString('base64'); } function sendSignalTest(message, recipients, attachment) { const reqBody = { message, number: '+491571234567', recipients: [recipients], }; if (attachment) { reqBody.base64_attachments = [toBase64(attachment)]; } const sendParams = { url: 'http://192.168.178.5:8086/v2/send', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(reqBody), }; request.post(sendParams, (error, response, body) => { if (error) { console.error(error); } else { if (response.statusCode == 200) { console.log('Signal-Nachricht an Empfänger ' + recipients + ' versendet!'); } else { console.log(response.body); } } }); } sendSignalTest('Test', '+491721234567', '/opt/iobroker/ipcam/snapshots/20230912111634.jpg');
-
@haus-automatisierung sagte in signal-rest-api: Nachricht mit Bild senden:
irgendwelche Anführungszeichen
-
@haus-automatisierung
Du bist heute mein Held des Tages.
Funktioniert einwandfrei. Tausend Dank!Hatte ich schon mal erwähnt, dass ich mit JS auf Kriegsfuß stehe?
-
@haus-automatisierung
By the way: Was macht Dein Speicher-Projekt?