NEWS
Telegram inline-keyboard ohne Text2Command
-
Meine eigentliche Frage findet sich weiter unten im Spoiler, die habe ich mir selbst beantwortet.
In diesem Thread werde ich nun einfach meine Erfahrungen und Fortschritte mit dem Inline-Keyboard ohne Nutzung von Text2Command posten und beschreiben. Wenn ihr Fragen habt, immer los! -
-
@MCU Ich weiß jetzt leider nicht, was mir der direkt von dir verlinkte Post sagen soll?! Bisschen mehr Text als nur ein Link wäre schon enorm hilfreich.
Aber ich glaube ich habe es inzwischen selbst gelöst, zumindest sofern "unter der Haube" auch alles so ist wie es eigentlich sein soll.
Mein Gedanke war, dass man nach Aufruf des Menüs eine Funktion aufrufen muss, die einem den vergangenen Text bearbeitet. Das ist aber quark, das macht man direkt bei Aufruf des Menüs.
Also statt bei Aufruf des Menüs eine neue Nachricht zu schicken wir die bestehende Nachricht einfach bearbeitet. Dann klappts auch mit dem Nachbarn.Ganz Konkret:
Das sind praktisch die Aufrufe der aktuell bestehenden Menüs:
Das "Startmenü" ist ganz klassisch eine geschickte Nachricht von Telegram ohne vorher was zu bearbeiten. Damit geht es quasi los ohne, dass man sich eine Nachricht von davor überschreibt:
sendTo('telegram.0', { chatId: getState("telegram.0.communicate.requestChatId").val, text: "Aktion wählen", reply_markup: { inline_keyboard: [ [{ text: 'Licht', callback_data: 'menu_licht' }], [{ text: 'Strom', callback_data: 'menu_strom' }], [{ text: 'Heizung', callback_data: 'menu_heizung' }], [{ text: 'Status', callback_data: 'menu_status' }] ], resize_keyboard: true, one_time_keyboard: false } });
Und die anderen Menüs sind nach dem Schema aufgebaut:
sendTo('telegram.0', { chatId: getState("telegram.0.communicate.botSendChatId").val, text: 'Hauptmenü', editMessageText: { options: { chat_id: getState("telegram.0.communicate.requestChatId").val, message_id: last_message_id, reply_markup: { inline_keyboard: [ [{ text: 'Licht', callback_data: 'menu_licht' }], [{ text: 'Strom', callback_data: 'menu_strom' }], [{ text: 'Heizung', callback_data: 'menu_heizung' }], [{ text: 'Status', callback_data: 'menu_status' }] ], } } } });
Hier sieht man auch schön den Vergleich wie ein Menü aussieht, was erstellt wird (das erste) und einem Menü, bei dem das vorhige ersetzt wird (das zweite).
Das sieht dann so aus:
GIF in Aktion -
@Joshude
könntest du das mal bitte als export anbieten?
Also das komplette Blockly damit ich das auf meine sachen umbauen kann.
Ich bekomme das nicht hin, es werden mir keine Nachrichten an Telegram geschickt.
Habe versucht, dass nach zu bauen.. -
@bishop
Klar, hier:
telegraminline.txtIst allerdings noch nicht 100%ig fertig. Sprich die Grundzüge gehen, es sind aber noch nicht alle Menüs und alle Grundfunktionen auf inline umgebaut.
Was geht ist das Hauptmenü und der Aufruf der Untermenüs Strom und Licht. Heizung und Status ist noch ohne Funktion.
Innerhalb der Menüs gibts beim Licht noch ein Untermenü "Wohnzimmer", was auch teilweise geht.Ich kann das Script gerne updaten, wenn ich weiter dran gebaut habe und es vollständig ist.
Mir gefällt das mit dem inline-Menü jedenfalls wesentlich besser als das Menü mit den normalen Buttons, da der Chat nicht so vollgespammt wird.
-
@Joshude
vielen dank, werde mir das mal anschauen! -
@bishop Hier mal meine aktuelle Version, wo zumindest alle Menüs was tun sollten und eigentlich auch alle Funktionen gehen sollten, wenn ich nichts übersehen habe. Jeweils mit den benötigten callback-aufrufen, damit das Menü auch vernünftig funktioniert. Hier wird dann auch der Text definiert, der als Antwort kommen soll, alternativ gibt es callback-aufrufe, die ohne Text auskommen. Sollte eigentlich alles recht selbsterklärend sein, wenn mans erstmal vor sich hat
-
@Joshude
grandios!hast du das alles mit blockly gemacht ode rgibt es auch ein anderes programm?
-
@michael_4358
danke dir! Das ist alles in Blockly entstanden, allerdings sind die meisten Funktionen innerhalb des Blocklys direkt JavaScript-Funktionen. Gibt noch ein paar blockly-Funktionen, die werde ich allerdings auch noch zu Javascript umbauen.