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? -
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== -
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?@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.ä.
-
@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'); -
@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.ä.
@haus-automatisierung sagte in signal-rest-api: Nachricht mit Bild senden:
irgendwelche Anführungszeichen

:thinking_face:
-
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
Du bist heute mein Held des Tages.
Funktioniert einwandfrei. Tausend Dank!Hatte ich schon mal erwähnt, dass ich mit JS auf Kriegsfuß stehe? :grin: :grin: :grin:
-
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
By the way: Was macht Dein Speicher-Projekt? :sunglasses: