Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Telegram Inline Keyboard einzeilig

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.2k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

[gelöst] Telegram Inline Keyboard einzeilig

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptcommunication
14 Beiträge 3 Kommentatoren 1.1k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • G Offline
    G Offline
    Gwenselah
    schrieb am zuletzt editiert von Gwenselah
    #1

    Hallo,

    wie schaffe ich es, dass die Ausgabe mit nur einem Eintrag pro Zeile erfolgt? Aktuell sieht es so aus:
    ea31bf7d-0efd-4796-ba46-59c7693c1fdc-image.png

    Das Test-Script dazu ist folgendes:

    var Rollos = [
        {text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"},
        {text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}
    ];
    
                sendTo('telegram', {
    					user: "Andy",
    					text: "Welchen Rollladen willst Du steuern?",
    					reply_markup: {
                            inline_keyboard: [Rollos],
                            resize_keyboard:   false, 
                            one_time_keyboard: true
    					}
    				});   
    

    resize_keyboard: true brachte keinen Erfolg.

    Vielen Dank
    Andy

    T 1 Antwort Letzte Antwort
    0
    • G Gwenselah

      Hallo,

      wie schaffe ich es, dass die Ausgabe mit nur einem Eintrag pro Zeile erfolgt? Aktuell sieht es so aus:
      ea31bf7d-0efd-4796-ba46-59c7693c1fdc-image.png

      Das Test-Script dazu ist folgendes:

      var Rollos = [
          {text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"},
          {text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}
      ];
      
                  sendTo('telegram', {
      					user: "Andy",
      					text: "Welchen Rollladen willst Du steuern?",
      					reply_markup: {
                              inline_keyboard: [Rollos],
                              resize_keyboard:   false, 
                              one_time_keyboard: true
      					}
      				});   
      

      resize_keyboard: true brachte keinen Erfolg.

      Vielen Dank
      Andy

      T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von ticaki
      #2

      @Gwenselah

        reply_markup: {
           keyboard: [
               ['Line 1, Button 1'],
               ['Line 2, Button 2']
           ],
           resize_keyboard:   true,
           one_time_keyboard: true
         }
      

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      G 1 Antwort Letzte Antwort
      0
      • T ticaki

        @Gwenselah

          reply_markup: {
             keyboard: [
                 ['Line 1, Button 1'],
                 ['Line 2, Button 2']
             ],
             resize_keyboard:   true,
             one_time_keyboard: true
           }
        
        G Offline
        G Offline
        Gwenselah
        schrieb am zuletzt editiert von
        #3

        @ticaki
        Vielen Dank für Deine Rückmeldung.
        Ich möchte gerne inline_keyboard verwenden, um mit dem Rückgabewert weiter arbeiten zu können.

        T 1 Antwort Letzte Antwort
        0
        • G Gwenselah

          @ticaki
          Vielen Dank für Deine Rückmeldung.
          Ich möchte gerne inline_keyboard verwenden, um mit dem Rückgabewert weiter arbeiten zu können.

          T Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von
          #4

          @Gwenselah
          Ist mir schon klar. Hätte vielleicht mehr auf die Arrayklammern hinweisen sollen. :)

          var Rollos = [
            [{text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"}],
            [{text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}]
          ];
          
          sendTo('telegram', {
            user: "Andy",
            text: "Welchen Rollladen willst Du steuern?",
            reply_markup: {
              inline_keyboard: Rollos,
              resize_keyboard:   false, 
              one_time_keyboard: true
            }
          });
          

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          G L 2 Antworten Letzte Antwort
          0
          • T ticaki

            @Gwenselah
            Ist mir schon klar. Hätte vielleicht mehr auf die Arrayklammern hinweisen sollen. :)

            var Rollos = [
              [{text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"}],
              [{text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}]
            ];
            
            sendTo('telegram', {
              user: "Andy",
              text: "Welchen Rollladen willst Du steuern?",
              reply_markup: {
                inline_keyboard: Rollos,
                resize_keyboard:   false, 
                one_time_keyboard: true
              }
            });
            
            G Offline
            G Offline
            Gwenselah
            schrieb am zuletzt editiert von
            #5

            @ticaki
            ja, die Klammern machen den Unterschied. Danke dafür.
            Ist dies dann ein mehrdimensionales Array oder heißt das anders?

            T 1 Antwort Letzte Antwort
            0
            • G Gwenselah

              @ticaki
              ja, die Klammern machen den Unterschied. Danke dafür.
              Ist dies dann ein mehrdimensionales Array oder heißt das anders?

              T Nicht stören
              T Nicht stören
              ticaki
              schrieb am zuletzt editiert von
              #6

              @Gwenselah sagte in Telegram Inline Keyboard einzeilig:

              @ticaki
              ja, die Klammern machen den Unterschied. Danke dafür.
              Ist dies dann ein mehrdimensionales Array oder heißt das anders?

              Ja, das war es aber auch schon vorher. Du hattest um Rollos ein [] und damit ein mehrdimensonales Array jedoch nur mit einer Zeile.

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              1 Antwort Letzte Antwort
              0
              • G Offline
                G Offline
                Gwenselah
                schrieb am zuletzt editiert von
                #7

                :+1::+1: :+1:

                1 Antwort Letzte Antwort
                0
                • G Offline
                  G Offline
                  Gwenselah
                  schrieb am zuletzt editiert von
                  #8

                  hab doch noch eine ergänzende Frage. Wie greife ich auf das Array zu oder schleife über die Elemente?

                  Folgendes habe ich probiert:

                  log(Rollos[0].text + " - " + Rollos[0].Objekt);
                  
                    for (var i=0;i<Rollos.length; i++) {
                      log(Rollos[i]["text"] + " - " + Rollos[i]["Objekt"]);
                    }
                  
                  T 1 Antwort Letzte Antwort
                  0
                  • G Gwenselah

                    hab doch noch eine ergänzende Frage. Wie greife ich auf das Array zu oder schleife über die Elemente?

                    Folgendes habe ich probiert:

                    log(Rollos[0].text + " - " + Rollos[0].Objekt);
                    
                      for (var i=0;i<Rollos.length; i++) {
                        log(Rollos[i]["text"] + " - " + Rollos[i]["Objekt"]);
                      }
                    
                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #9

                    @Gwenselah
                    Das müsste eigentlich mit:

                    for (var i=0;i<Rollos.length; i++) {
                        log(Rollos[i][0].text + " - " + Rollos[i][0].Objekt);
                    }
                    

                    gehen. Hab aber gerade nen Knoten im Kopf. :)

                    Edit: kannst du mir den Callback code zeigen, bräuchte ich gerade als Beispiel für mein Projekt. Danke

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    G 1 Antwort Letzte Antwort
                    0
                    • L Offline
                      L Offline
                      LJSven
                      schrieb am zuletzt editiert von
                      #10

                      Hier scheinen ein paar Telegram Profis zu sein - ich möchte gern via Telegram Button eine Alexa Routine starten - kann mir dafür jemand ein Script schreiben?

                      Beispiel:
                      Auf dem Button soll stehen "Benjamin Blümchen" und Routine XYZ123345 soll gestartet werden.

                      Wenn ich das über text2command mache, wird immer nur der erste Eintrag abgespielt.

                      1 Antwort Letzte Antwort
                      0
                      • T ticaki

                        @Gwenselah
                        Ist mir schon klar. Hätte vielleicht mehr auf die Arrayklammern hinweisen sollen. :)

                        var Rollos = [
                          [{text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"}],
                          [{text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}]
                        ];
                        
                        sendTo('telegram', {
                          user: "Andy",
                          text: "Welchen Rollladen willst Du steuern?",
                          reply_markup: {
                            inline_keyboard: Rollos,
                            resize_keyboard:   false, 
                            one_time_keyboard: true
                          }
                        });
                        
                        L Offline
                        L Offline
                        LJSven
                        schrieb am zuletzt editiert von
                        #11

                        @ticaki sagte in Telegram Inline Keyboard einzeilig:

                        @Gwenselah
                        Ist mir schon klar. Hätte vielleicht mehr auf die Arrayklammern hinweisen sollen. :)

                        var Rollos = [
                          [{text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"}],
                          [{text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}]
                        ];
                        
                        sendTo('telegram', {
                          user: "Andy",
                          text: "Welchen Rollladen willst Du steuern?",
                          reply_markup: {
                            inline_keyboard: Rollos,
                            resize_keyboard:   false, 
                            one_time_keyboard: true
                          }
                        });
                        

                        Was macht das "OBJEKT"? ich möchte gern eine Routine triggern, aber bekomme es nicht ans laufen.

                        1 Antwort Letzte Antwort
                        0
                        • T ticaki

                          @Gwenselah
                          Das müsste eigentlich mit:

                          for (var i=0;i<Rollos.length; i++) {
                              log(Rollos[i][0].text + " - " + Rollos[i][0].Objekt);
                          }
                          

                          gehen. Hab aber gerade nen Knoten im Kopf. :)

                          Edit: kannst du mir den Callback code zeigen, bräuchte ich gerade als Beispiel für mein Projekt. Danke

                          G Offline
                          G Offline
                          Gwenselah
                          schrieb am zuletzt editiert von
                          #12

                          @ticaki
                          Ja so klappt es. Vielen Dank.
                          Hier ist mein Script. Ich habe eine mehrstufige Auswahl und muss daher mit Erkennungszeichen (%, §) arbeiten.
                          @LJSven Ich nutze Alexa Routinen nur als Sprachtrigger, die Logik bilde ich mit Javascript ab. Der Trigger setzt einen Datenpunkt auf True und darauf reagiert ein Script.
                          Zu der anderen Frage: Mit Objekt definiere ich den Datenpunkt, über den dann meinen Shelly auslöst.

                          var Rollladen = [
                              [{text: "Wohnzimmer Rollladen Links", Objekt: 'shelly.0.SHSW-25#00CDCF#1.Shutter.Position',callback_data: "%Wohnzimmer Rollladen Links"}],
                              [{text: "Wohnzimmer Rollladen Rechts", Objekt: 'shelly.0.SHSW-25#00465F#1.Shutter.Position',callback_data: "%Wohnzimmer Rollladen Rechts"}]
                          ];
                          
                          sendTo('telegram', {
                            user: "Andy",
                            text: "Welchen Rollladen willst Du steuern?",
                            reply_markup: {
                              inline_keyboard: Rollladen,
                              resize_keyboard:   false, 
                              one_time_keyboard: true
                          
                            }
                          
                          });
                          
                          on({id: "telegram.0.communicate.request", ack: false, change: 'any'}, function (obj) {
                              command = obj.state.val.substring(obj.state.val.indexOf(']')+1);
                              console.log("Received: " + command);
                          	var benutzer = obj.state.val.substring(1, obj.state.val.indexOf("]"));
                              //console.log ("Benutzer:" + benutzer)
                              // Menü beginnen
                              var cmd = command.toUpperCase();
                              var TelegramText="";				
                          				
                              if (command.substring(0,1) === "%") {                        
                                  //log("Rollläden gefunden");
                          
                                  var RollladenSwitch=[
                                      {text: "zu", callback_data: "§" + command + "$zu"},
                                      {text: "25%", callback_data: "§" + command + "$25"},
                                      {text: "50%", callback_data: "§" + command + "$50"},
                                      {text: "75%", callback_data: "§" + command + "$75"},
                                      {text: "auf", callback_data: "§" + command + "$auf"}
                                  ];
                                  sendTo('telegram', {
                                      user: benutzer,
                                      text: "Du hast >" + command.substring(1) + "< gewählt. \n Welche Position soll der Rollladen einnehmen?",
                                      reply_markup: {
                                          inline_keyboard: [RollladenSwitch],
                                          resize_keyboard:   false, 
                                          one_time_keyboard: true
                          
                                      }
                                  });   
                              } else if (command.substring(0,1) === "§") {         
                                  log ("Rollladen Switch: " + command);  
                                  //$ finden
                                  var Divider = command.indexOf("$");
                                  var Rollo = command.substring(2,Divider);
                                  var RolloState = command.substring(Divider+1);
                                  if (RolloState =="auf") {RolloState = "100"};
                                  if (RolloState =="zu") {RolloState = "0"};
                                  //log(Divider);
                                  //log(">"+Rollo+"<");
                                  //log(RolloState);
                          
                                  //find Objekt Attribut
                                  
                                  for (var i=0;i<Rollladen.length; i++) {
                                      if (Rollladen[i][0].text == Rollo)  {                                
                                          setState(Rollladen[i][0].Objekt,parseInt(RolloState));
                                          log(">" + Rollo + "< auf Position " + RolloState + " gesetzt.");
                                      }      
                                  };		
                              };
                          });
                          

                          P.S. nicht wundern, ich hab das aus einem großen Kontext zusammen kopiert, daher ist der erste SendTo Aufruf so statisch reinkopiert.

                          T 1 Antwort Letzte Antwort
                          0
                          • G Gwenselah

                            @ticaki
                            Ja so klappt es. Vielen Dank.
                            Hier ist mein Script. Ich habe eine mehrstufige Auswahl und muss daher mit Erkennungszeichen (%, §) arbeiten.
                            @LJSven Ich nutze Alexa Routinen nur als Sprachtrigger, die Logik bilde ich mit Javascript ab. Der Trigger setzt einen Datenpunkt auf True und darauf reagiert ein Script.
                            Zu der anderen Frage: Mit Objekt definiere ich den Datenpunkt, über den dann meinen Shelly auslöst.

                            var Rollladen = [
                                [{text: "Wohnzimmer Rollladen Links", Objekt: 'shelly.0.SHSW-25#00CDCF#1.Shutter.Position',callback_data: "%Wohnzimmer Rollladen Links"}],
                                [{text: "Wohnzimmer Rollladen Rechts", Objekt: 'shelly.0.SHSW-25#00465F#1.Shutter.Position',callback_data: "%Wohnzimmer Rollladen Rechts"}]
                            ];
                            
                            sendTo('telegram', {
                              user: "Andy",
                              text: "Welchen Rollladen willst Du steuern?",
                              reply_markup: {
                                inline_keyboard: Rollladen,
                                resize_keyboard:   false, 
                                one_time_keyboard: true
                            
                              }
                            
                            });
                            
                            on({id: "telegram.0.communicate.request", ack: false, change: 'any'}, function (obj) {
                                command = obj.state.val.substring(obj.state.val.indexOf(']')+1);
                                console.log("Received: " + command);
                            	var benutzer = obj.state.val.substring(1, obj.state.val.indexOf("]"));
                                //console.log ("Benutzer:" + benutzer)
                                // Menü beginnen
                                var cmd = command.toUpperCase();
                                var TelegramText="";				
                            				
                                if (command.substring(0,1) === "%") {                        
                                    //log("Rollläden gefunden");
                            
                                    var RollladenSwitch=[
                                        {text: "zu", callback_data: "§" + command + "$zu"},
                                        {text: "25%", callback_data: "§" + command + "$25"},
                                        {text: "50%", callback_data: "§" + command + "$50"},
                                        {text: "75%", callback_data: "§" + command + "$75"},
                                        {text: "auf", callback_data: "§" + command + "$auf"}
                                    ];
                                    sendTo('telegram', {
                                        user: benutzer,
                                        text: "Du hast >" + command.substring(1) + "< gewählt. \n Welche Position soll der Rollladen einnehmen?",
                                        reply_markup: {
                                            inline_keyboard: [RollladenSwitch],
                                            resize_keyboard:   false, 
                                            one_time_keyboard: true
                            
                                        }
                                    });   
                                } else if (command.substring(0,1) === "§") {         
                                    log ("Rollladen Switch: " + command);  
                                    //$ finden
                                    var Divider = command.indexOf("$");
                                    var Rollo = command.substring(2,Divider);
                                    var RolloState = command.substring(Divider+1);
                                    if (RolloState =="auf") {RolloState = "100"};
                                    if (RolloState =="zu") {RolloState = "0"};
                                    //log(Divider);
                                    //log(">"+Rollo+"<");
                                    //log(RolloState);
                            
                                    //find Objekt Attribut
                                    
                                    for (var i=0;i<Rollladen.length; i++) {
                                        if (Rollladen[i][0].text == Rollo)  {                                
                                            setState(Rollladen[i][0].Objekt,parseInt(RolloState));
                                            log(">" + Rollo + "< auf Position " + RolloState + " gesetzt.");
                                        }      
                                    };		
                                };
                            });
                            

                            P.S. nicht wundern, ich hab das aus einem großen Kontext zusammen kopiert, daher ist der erste SendTo Aufruf so statisch reinkopiert.

                            T Nicht stören
                            T Nicht stören
                            ticaki
                            schrieb am zuletzt editiert von ticaki
                            #13

                            Danke, eine Frage:

                                    var RollladenSwitch=[
                                        {text: "zu", callback_data: "§" + command + "$zu"},
                                        {text: "25%", callback_data: "§" + command + "$25"},
                                        {text: "50%", callback_data: "§" + command + "$50"},
                                        {text: "75%", callback_data: "§" + command + "$75"},
                                        {text: "auf", callback_data: "§" + command + "$auf"}
                                    ];
                            

                            würde nicht auch:

                            var RollladenSwitch=[
                                        {text: "zu", callback_data: '{"cmd":0,"device":command,"state":0}'},
                                        {text: "25%", callback_data: '{"cmd":0,"device":command,"state":25}'},
                            ...
                                    ];
                            

                            gehen und das auswerten einfacher macht? Bin noch am planen. :)
                            EDIT: Das hier geht zwar, aber da gibt es ein Zeichenlimit für callback_data:

                            var kb = [
                                        [{text:"b1", callback_data:'{scriptname:"'+s+'",answer:"111"}'}],
                                        [{text:"b2", callback_data:'{scriptname:"'+s+'",answer:"222"}'}]
                                        ];
                            

                            Du solltest davon aber unabhängig noch folgendes nach einem Druck auf das Telegram Keyboard zurück senden:

                                    sendTo('telegram', {
                                       user: user,
                                       answerCallbackQuery: {
                                           text: "Pressed!", // oder Rollladen geht zu, geht auf oder Rollo 1 ausgewählt
                                           showAlert: false // Optional parameter
                                       }
                                   })
                            

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            1 Antwort Letzte Antwort
                            0
                            • G Offline
                              G Offline
                              Gwenselah
                              schrieb am zuletzt editiert von
                              #14

                              Danke für den finalen SendTo Befehl. Das macht die Sache rund.
                              Meine Callbackauswertung ist nicht elegant, läuft aber im Kontext einer größeren. Und da gerade alles funktioniert, mag ich da nicht ran.

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              619

                              Online

                              32.7k

                              Benutzer

                              82.4k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe