NEWS
Telegram - Inline Keyboard - gelöst
-
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
-
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:
-
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:
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