Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Telegram - Inline Keyboard - gelöst

    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

    Telegram - Inline Keyboard - gelöst

    This topic has been deleted. Only users with topic management privileges can see it.
    • ruhigundrelaxed
      ruhigundrelaxed last edited by

      Hallo zusammen.

      Leider stehe ich auf dem Schlauch, und brauche mal klugen Input. Es geht, wie im Betreff beschrieben um die Inline Keyboards.

      Der Rückgabewert der Inline Keyboards wird, so wie es in der readme des Adapters steht über "answerCallbackQuery" gehandhabt.

      Es wird auch ein Beispiel genannt:

      if (command ==="1_2") {
          sendTo('telegram', {
              user: user,
              answerCallbackQuery: {
                  text: "Pressed!",
                  showAlert: false // Optional parameter
              }
         });
      }      
      
      

      Was ja ansich auf Verständlich ist. Jedoch wird mir der Kontext bzw. der Scope nicht klar. Wo kommt z.B. die Variable "command" her.

      Mein Ziel ist es innerhalb eines Skripts auf Buttons zu reagieren. Die node-telegram-bot-api macht das mit einem event, welches das "api object" wirft.

      api.on('callback_query', function(msg) {
          var user = msg.from.id;
          var data = msg.data;
          api.sendMessage(msg.from.id, "You clicked button with data '"+ data +"'");
      });
      
      

      Nur das ist object ja im iobroker script kontext für mich nicht greifbar. (Oder doch?) Warscheinlich ist es ganz einfach, und ich sehe den Wald vor Bäumen nicht. Kann mich bitte einer in die richtige Richtung stupsen?

      Gruß

      Martin

      1 Reply Last reply Reply Quote 0
      • ruhigundrelaxed
        ruhigundrelaxed last edited by

        Lösung gefunden. Trotzdem danke.

        on({id: "telegram.0.communicate.request", change: 'any'}, function(obj){
        var stateval = getState('telegram.0.communicate.request').val;
        var benutzer = stateval.substring(1,stateval.indexOf("]"));     
        var command  = stateval.substring(stateval.indexOf("]")+1,stateval.length);   
            sendTo('telegram.0', {
                user: benutzer,
                answerCallbackQuery: {
                    text: command,
                    showAlert: false // Optional parameter
                }
           });
        });
        
        

        Gefunden hier:

        viewtopic.php?t=6515

        1 Reply Last reply Reply Quote 0
        • Netfreak25
          Netfreak25 last edited by

          @ruhigundrelaxed:

          Lösung gefunden. Trotzdem danke.

          on({id: "telegram.0.communicate.request", change: 'any'}, function(obj){
          var stateval = getState('telegram.0.communicate.request').val;
          var benutzer = stateval.substring(1,stateval.indexOf("]"));     
          var command  = stateval.substring(stateval.indexOf("]")+1,stateval.length);   
              sendTo('telegram.0', {
                  user: benutzer,
                  answerCallbackQuery: {
                      text: command,
                      showAlert: false // Optional parameter
                  }
             });
          });
          
          

          Gefunden hier:

          viewtopic.php?t=6515 `

          Top! Vielen Dank soweit!

          Das hat bei mir immer einen Fehler geschmissen wenn der Bot normale Nachrichten bekommen hat 😕

          Meine Lösung hierfür ist dem callback_data ein "muster" voran zu hängen, welches sozusagen den Button definiert.

          Falls jenes "Muster" nun gefunden wird, wird das answerCallbackQuery gesendet.

          In meinem Fall habe ich als pattern/muster "key_" genutzt

          Der folgende Code bestätigt nun stupide jede Button dessen callback_data mit "key_" beginnt.

          Falls eine Nachricht nun mit dem Text "key_" beginnt, wird auch eine Antwort gesendet, und dann kommt der Fehler halt doch noch :geek:

          on({id: "telegram.0.communicate.request", change: 'any'}, function(obj){
          var stateval = getState('telegram.0.communicate.request').val;
          var benutzer = stateval.substring(1,stateval.indexOf("]"));     
          var command  = stateval.substring(stateval.indexOf("]")+1,stateval.length);
          
          var checkval = command.indexOf('key_') + 1;
          
          if (checkval == 1) {
              sendTo('telegram.0', {
                  user: benutzer,
                  answerCallbackQuery: {
                      showAlert: false // Optional parameter
                  }
             });
          
          };
          
          });
          
          

          Geht vielleicht auch cleverer das ganze aber ich bin nun d'accord

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

          Support us

          ioBroker
          Community Adapters
          Donate

          854
          Online

          31.8k
          Users

          79.9k
          Topics

          1.3m
          Posts

          2
          3
          1292
          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