Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]: signal-rest-api: Nachricht mit Bild senden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst]: signal-rest-api: Nachricht mit Bild senden

    This topic has been deleted. Only users with topic management privileges can see it.
    • Codierknecht
      Codierknecht Developer Most Active last edited by Codierknecht

      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 haus-automatisierung 2 Replies Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @Codierknecht last edited by

        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==
        
        1 Reply Last reply Reply Quote 0
        • haus-automatisierung
          haus-automatisierung Developer Most Active @Codierknecht last edited by

          @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 Homoran 2 Replies Last reply Reply Quote 0
          • haus-automatisierung
            haus-automatisierung Developer Most Active @haus-automatisierung last edited by haus-automatisierung

            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 2 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @haus-automatisierung last edited by

              @haus-automatisierung sagte in signal-rest-api: Nachricht mit Bild senden:

              irgendwelche Anführungszeichen

              Screenshot_20230913-144836_Firefox.jpg

              🤔

              1 Reply Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @haus-automatisierung last edited by

                @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? 😁 😁 😁

                1 Reply Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @haus-automatisierung last edited by

                  @haus-automatisierung
                  By the way: Was macht Dein Speicher-Projekt? 😎

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  901
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  306
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo