FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: accessburn am 23 August 2019, 10:18:07

Titel: Telegram queryInline in Gruppen
Beitrag von: accessburn am 23 August 2019, 10:18:07
Hallo,

ich hab zwecks des WAFs von einem Bot und dem defaultpeer auf eine Gruppe zusammen mit dem Bot umgestellt.
Jetzt habe ich das Problem das die Buttons die ich auf anfrage per queryInline rausschicke keinerlei Funktion mehr haben weil folgender Befehl scheinbar nicht funktioniert:

/[HomeStatus]=set Telegram queryInline @-08154711 (Scharf|Zuhause)

Das Problem scheint die User_id der Gruppe darin zu sein. Jemand eine Idee?


Grüße aus Ffm,
Tobias
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: yersinia am 23 August 2019, 11:25:42
Mal die commandref (https://fhem.de/commandref.html#TelegramBot) bemüht?
Zitatchat names (also known as groups in telegram groups must be prefixed with #)
Zitatset aTelegramBotDevice message @#justchatting Hello
    to send the message "Hello" to a chat with the name "justchatting"
Vielleicht hilft das schon.
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: accessburn am 23 August 2019, 12:25:35
Ich habs in allen möglichen Varianten versucht. Entweder bekomme ich fehlermeldungen in allen formen und farben, oder die Ausgabe der Buttons, aber ohne reaktion.

ZitatTelegramBot FHEM -  Befehl:set Telegram queryInline @#-08154711 (Wohnzimmer an|Wohnzimmer aus) (Schlafzimmer an|Schlafzimmer aus) (Vitrine an|Vitrine aus) Licht: - Ergebnis:
FAILED peer not found :#-08154711:
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: yersinia am 23 August 2019, 13:17:30
Mal
set Telegram queryInline #-08154711 (Wohnzimmer an|Wohnzimmer aus) (Schlafzimmer an|Schlafzimmer aus) (Vitrine an|Vitrine aus) Licht
versucht?

Die API (https://core.telegram.org/bots/api/#sendmessage) gibt auch nichts anderes an:
ZitatsendMessage

Use this method to send text messages. On success, the sent Message is returned.
Parameter    Type    Required    Description
chat_id    Integer or String    Yes    Unique identifier for the target chat or username of the target channel (in the format @channelusername)

Hat der Bot ggf keine Berechtigungen in der Gruppe was zu posten? siehe auch (https://telegram.org/blog/permissions-groups-undo)
ZitatOr even restrict members from sending messages altogether – let the admins chat amongst themselves while everybody else witnesses their wisdom in silent awe.

Die Frage ist aber, wozu man überhaupt eine Gruppe benötigt, wenn m user mit dem Bot kommunizieren können. Man kann ja solche nachrichten auch an mehrere User schicken.
set Telegram queryInline @08154711 @47110815 (Wohnzimmer an|Wohnzimmer aus) (Schlafzimmer an|Schlafzimmer aus) (Vitrine an|Vitrine aus) Licht
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: accessburn am 23 August 2019, 13:25:21
Ich versuche mal deinen Vorschlag, bin mir aber ziemlich sicher das auch schon versucht zu haben.

Ich hatte mich für diese Methode entschieden weil ich es ums verrecken ebenfalls nicht geschafft habe das mehrere Personen den Bot ansprechen durften. Immer nur die Userid die in defaultpeer angegeben war. Wenn nichts angegeben war, reagierte er auch überhaupt nicht.

Wenn man das so lösen kann, dann würde ich das auch wieder auf die ursprüngliche Variante machen, was eh besser ist, da nicht jeder das liest was ein anderer gerade anfordert oder ausführt.
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: yersinia am 23 August 2019, 14:14:52
Also ich nutze den TelegramBot von zwei User-Accounts und das funktioniert ganz gut - auf gewisse Keywörter antwortet der Bot (https://forum.fhem.de/index.php/topic,102816.msg965436.html#msg965436) mit vordefinierten Anwtorten. Und zwar an den User, der die Anfrage gestellt hat (via Reading msgPeerId).
Ich arbeite allerdings nicht mit Buttons so wie du - und habe auch keine Gruppenchats.

Ich müsste nachschauen wenn ich wieder an FHEM rankomme, was ich bei defaultpeer eingetragen habe, aber ich meine das Attribut ist leer. Muss ich aber prüfen.
Ich nutze allerdings eher das Attribut cmdRestrictedPeer <peer(s)>
ZitatcmdRestrictedPeer <peer(s)>
Restrict the execution of commands only to messages sent from the given peername or multiple peernames (specified in the form of contact id, username or full name, multiple peers to be separated by a space). This applies to the internal machanisms for commands in the TelegramBot-Module (favorites, cmdKeyword etc) not for external methods to react on changes of readings. A message with the cmd and sender is sent to the default peer in case of another peer trying to sent messages
NOTE: It is recommended to use only peer ids for this restriction to reduce spoofing risk!

Edit: zum Testen zuhause kann man auch die Telegram Desktop App (https://desktop.telegram.org/) nutzen.

Edit2: Ich sehe gerade, dass es vlt gar nicht geht mit Gruppen (commandref (https://fhem.de/commandref.html#TelegramBot)):
ZitatqueryInline [ @<peer1> ... @<peerN> ] (<keyrow1>) ... (<keyrowN>) <text>
Sends the given message to the recipient(s) with an inline keyboard allowing direct response
IMPORTANT: The response coming from the keyboard will be provided in readings and a corresponding answer command with the query id is required, sicne the client is frozen otherwise waiting for the response from the bot!
REMARK: inline queries are only accepted from contacts/peers that are authorized (i.e. as for executing commands, see cmdKeyword and cmdRestrictedPeer !)
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: accessburn am 23 August 2019, 14:40:36
Okay, "geht nicht" ist schon mal eine Ansage.

Vielleicht kannst du mir ja irgendwann mal anhand deinen Settings zeigen wie du das mit zwei defaults gelöst hast.
Ich nutze jedoch die Version ohne Subs, nur favorites und ein notify.
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: yersinia am 23 August 2019, 17:26:40
Meines Verständnisses nach, sind ja Bots öffentlich (jdfs hab ich das mal so verstanden; ob das immer noch so ist, weiss ich nicht), demnach hab ich die Attribute auch so gepflegt:
Attributes:
   allowUnknownContacts 0
   cmdKeyword DoIt
   cmdRestrictedPeer 471108150 133747110

Mehr habe ich gar nicht gemacht. Meldet sich ein peer der nicht in der cmdRestrictedPeer enthalten ist, verwirft der Bot die Anfrage ohne Rückmeldung.

Der Rest läuft wie hier beschrieben (https://forum.fhem.de/index.php/topic,102816.msg965436.html#msg965436) - das notify reagiert auf eine Änderung des msgText-Readings und ruft die sub auf und übergibt (beim Aufruf) dieser das TelegramBot-Device und die Readings msgText sowie msgPeerId. msgText enthält das Codewort (wie zB Wetter, Licht, whatever; vorallem <> cmdKeyword) und msgPeerId die id des anfragenden Kontakts. (Eigentlich müsste man die Werte nicht übergeben, da man diese bequem aus dem Device auslesen kann)
Die sub bastelt daraus einen FHEM-Befehl für den TelegramBot. Mittels if -elsif Prüfungen kann man sich die Rückgabewerte dann zusammenstellen.

Wenn ich das hier lese:
IMPORTANT: The response coming from the keyboard will be provided in readings and a corresponding answer command with the query id is required, sicne the client is frozen otherwise waiting for the response from the bot!
REMARK: inline queries are only accepted from contacts/peers that are authorized (i.e. as for executing commands, see cmdKeyword and cmdRestrictedPeer !)

dann wirst du wohl cmdRestrictedPeer mit der id von dir und deiner Frau erstellen müssen.

Ich könnte mir vorstellen, dass der User den Bot mit "Licht" anspricht und dann die sub den command
set Telegram queryInline @08154711 (Wohnzimmer an|Wohnzimmer aus) (Schlafzimmer an|Schlafzimmer aus) (Vitrine an|Vitrine aus) Licht
generiert und an FHEM übergibt (sprich: raus sendet). Im nächsten Schritt kommt die Antwort von dem User und wird in ein Reading geschrieben, mit dem du weiterarbeiten kannst (zB auch in der sub).

Alternativ könnte man auch ganze Sätze wie "Licht Wohnzimmer an" schicken lassen und dies dann in der sub verarbeiten. Halte ich aber für gewagt.

Wenn du dies
set Telegram queryInline @08154711 (Wohnzimmer an|Wohnzimmer aus) (Schlafzimmer an|Schlafzimmer aus) (Vitrine an|Vitrine aus) Licht
an dich selbst schickst und dann darauf antwortest, wie wird das im TelegramBot-Device abgelegt?
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: Peteruser am 23 August 2019, 17:27:12
Hallo,
sorry, aber meinb BOT spricht mit der Gruppe und nimmt auch deren Befehle an.

Schonmal an das gedacht:
attr Telegram allowUnknownContacts 0
attr Telegram allowUnknownContacts 1
> und dann die Frau was auf die Gruppe schicken lassen
Sonst ignoriert der nämlich die Befehle.

Er gibt info:
set Telegram message @#Gruppenname Nachrichtentext

Im rawdevice, sind da schon alle Kontakte sichtbar?

Grüße Peter
Titel: Antw:Telegram queryInline in Gruppen
Beitrag von: accessburn am 26 August 2019, 07:18:44
Moinsen, tatsächlich war es das allowUnknownContacts...
Da er das Weibchen nicht kennt wurde sie knallhart ignoriert... Glückspilz  8)

Das war auf alle fälle der fehlende Schritt. Danke und 'closed'