Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

Begonnen von viegener, 20 Juni 2015, 18:59:41

Vorheriges Thema - Nächstes Thema

Dopamin

Hi

Vielen Dank für deine Hinweise.
Habe jetzt aus dem Kanal eine Gruppe gemacht. Jetzt reagiert der Bot auch auf Anfragen, jedoch bleibt ein kleines Problem.
Und zwar werden die Antworten nicht direkt in der Gruppe geschrieben sondern es kommt die Antwort nur direkt an mich sodass die anderen Personen in der Gruppe diese Antwort nicht sehen. Wenn ich aus FHEM versucht mittels Befehl eine Nachricht in der Gruppe zu posten bekomme ich folgenden Fehler:

set TelegramBot msg @#Gruppenname test

FAILED peer not found :#Gruppenname:

Ist das so gewollt das die Antworten bzw. Nachrichten vom Bot nicht direkt im Chat/Gruppe landen?

Ein erneuter Versuch die Gruppenchat ID herauszufinden ist weiterhin erfolglos.

curl -x POST https://api.telegram.org/botTOKEN/getUpdates liefert folgendes Ergebnis:

{"ok":true,"result":[]}

Gruß

Dopamin

Muschelpuster

Also bei taucht die Gruppe in den Kontakten des Bot auf. Du erkennst sie an dem Bindestrich vor der ID:-14xxxxxx1::#FHEM Ich kann an den Gruppennamen wir auch an die ID schreiben:set telegramBot message @#FHEM Test123
set telegramBot message @-14xxxxxx1 Test456


überprüfte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Dopamin

Ahh ich hab den Fehler gefunden.
Hatte allowunknowncontacts auf 0 gestellt und somit hat er den neuen Kontakt nicht hinzugefügt bzw ignoriert.

Habe diesen Chatboscript aus dem Forum implementiert und jetzt muss ich es nurnoch hinbekommen, das wenn jemand in der Gruppe z.n /help schreibt das der Telegrambot auch das ganze in der Gruppe ausgibt und nicht direkt zu dem Kontakt.

Marlen

Hallo,

Zitat[/Habe diesen Chatboscript aus dem Forum implementiert und jetzt muss ich es nurnoch hinbekommen, das wenn jemand in der Gruppe z.n /help schreibt das der Telegrambot auch das ganze in der Gruppe ausgibt und nicht direkt zu dem Kontakt.quote]

Ich glaub das geht nicht, was in Gruppen geschrieben wird, liest er nicht!
In Gruppen schreiben hingegen würde gehen!

LG
  Marlen

Dopamin

Doch es funktioniert.

Habe das ganze Script ein bissl umgeschrieben und auch die msgChat mit ausgegeben. Und wenn die msgChat ungleich leer ist, dann soll er die msgChatID als msgPeerID nutzen.
Schon funktioniert die ganze Sache. Und wenn ich jetzt direkt in der Gruppe /hilfe schreibe antwortet der Bot in der Gruppe. Wenn ich den Bot direkt anschreibe, dann erhalte nur ich die Antwort vom Bot.
Genauso wie ich es mir vorgestellt habe.
Danke nochmal an alle die mir bei meinem Problem geholfen haben.

Gruß

Dopamin

Marlen

Ohhh....das interessiert mich aber jetzt!

Kannst du hierzu mal dein notify posten?

LG
  Marlen

Dopamin

Klar doch. Also mein Notify sieht folgendermaßen aus

fhembot:msgText:.* {my $msgText = ReadingsVal("fhembot","msgText","");my $msgPeerId = ReadingsVal("fhembot","msgPeerId","");my $msgChat = ReadingsVal ("fhembot","msgChat",""); if($msgPeerId eq "ID"){tg_analyse($msgChat,$msgPeerId,$msgText);} }

ID steht natürlich für die IDs der Kontakte.

Und in dem Telegram Script 99_myUtilsTelegram.pm musst du dann natürlich noch eine Änderung vornehmen.

my ($msgChat, $msgPeerId, $msgText) = @_;
        Log "fhembot", "Gruppe: $msgChat";
Log "fhembot", "Sender: $msgPeerId";
Log "fhembot", "Text: $msgText";
        $msgChat = substr($msgChat,0,11);
        if($msgChat != '') {$msgPeerId = $msgChat};


$msgChat in der erste Zeile hinzufügen.
Da die Variable msgChat aber die ID und den Namen enthält, habe ich mit substr($msgChat,0,11) die Variable auf 11 Zeichen gekürtzt. Danach dann natürlich die Überprüfung ob die Variable msgChat ungleich leer ist, und wenn diese Bedingung erfüllt ist (was im Gruppenchat sein sollte) dann setzt er die msgPeerID auf die msgChat ID.
Wenn du den Bot direkt ansprichst, sollte es eigentlich keine msgChat ID geben.

Ist vielleicht nicht die sauberste Lösung das zu lösen aber es funktioniert bei mir :-)
Vielleicht findet sich ja ein Pfiffiger der das sauber löst und den Code hier veröffentlicht :-)
Bin halt nicht so der Hardcoreprogrammierer  ;D

Gruß

Dopamin

hartenthaler

@Dopamin, klingt spannend was Du da erreicht hast. Aber ich brauche noch etwas Hilfe um zu verstehen was man damit jetzt machen kann.

Ich sage mal was ich verstanden habe, aber bitte korrigiere mich.

Du hast einen Telegram Bot, der fhem-Kommandos entgegen nimmt und beantwortet. Dieser Bot ist aber nun nicht mehr in einem direkten Chat mit genau einem Nutzer, sondern Du hast den Bot in eine Telegram-Gruppe eingeladen in der sich z.B. auch noch weiterer Familienmitglieder befinden. Und Du hast den Privatsphären-Modus deaktiviert, so dass der Bot alles mitbekommt (ist das nötig oder reicht es nicht, dass der Bot nur die Anfragen sieht, die mit einem / beginnen). Wenn nun jemand im Gruppenchat eine Anfrage stellt, dann beantwortet der Chat-Bot diese und alle in der Gruppe können die Antwort sehen. Unabhängig davon und parallel kann jeder Berechtigte auch direkt mit dem Bot kommunizieren und diese Kommunikation ist dann nur für ihn sichtbar.

Habe ich das richtig verstanden? Welches Problem löst das nun für Dich - welchen Vorteil siehst Du?
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Dopamin

Hallo

Ja genau. Der Bot befindet sich bei uns in der Familiengruppe. Und alle Berechtigten der Gruppen können halt Befehle absetzen und der Bot beantwortet dann die Anfragen.
Das hat unterschiedlichen nutzen. Bei uns dient es erstmal das meine Frau z.B weiss wenn ich mal das WLAN oder Funksteckdosen in den Kinderzimmern abschalte wenn die es wieder mit der PC Nutzung übertreiben :-)
Dann brauch Sie mich nicht extra anrufen.
Weiterhin dient es dafür wenn der letzte das Haus verlässt und es mal vergessen wird Fenster zu schließen das dort in der Gruppe automatisch die Nachricht eintrifft das noch ein Fenster auf ist und dieses dann ruhig auch mal durch die Kinder geschlossen werden ohne ständig anzurufen und zu bitten.
Ich weiss sehr spezieller Einsatzzweck aber bei uns ab und an mal notwendig.

Gruß

Dopamin

Marlen

Guten Abend!
Wird echt immer interessanter!
Wie deaktiviert man den Privatsphären-Modus?
Und wie kann man das Modul bearbeiten? Direkt von FHEM aus oder über die Konsole mit nano?

Wäre es dann möglich 2 Bot's in einer Gruppe zu haben und der eine Bot empfängt vom anderen  Bot Befehle?

LG
  Marlen

igami

Zitat von: Marlen am 06 Dezember 2016, 21:19:02
Wie deaktiviert man den Privatsphären-Modus?
über den botfather

Zitat von: Marlen am 06 Dezember 2016, 21:19:02
Und wie kann man das Modul bearbeiten? Direkt von FHEM aus oder über die Konsole mit nano?
Sowohl als auch. Siehe Commandref FHEMWEB attribut editFileList.
Die Frage ist nur was du ändern möchtest und nicht mit allen teilen willst ;)

Zitat von: Marlen am 06 Dezember 2016, 21:19:02
Wäre es dann möglich 2 Bot's in einer Gruppe zu haben und der eine Bot empfängt vom anderen  Bot Befehle?
Nein, bots können nicht mit Bots kommunizieren
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Marlen

Was bewirkt das deaktivieren des Privatsphären-Modus?

Hab ihn deaktiviert und jetzt empfängt der Bot auch Gruppennachrichten! Dann muss ich doch das Modul nicht mehr ändern!?

Dopamin

Ja Empfangen geht aber das direkte Antworten des Bots im Gruppenchat funktioniert damit nicht. Deshalb ja meine Änderung.
Ich schreibe z.B einfach /fenster in mein Gruppenchat und er gibt dann genau aus welche Fenster offen sind. (für die Kids leichter als in jedem Zimmer nachzuschauen) :-)

Marlen

Warum soll das Antworten nicht gehen, mein Bot schreibt doch jetzt auch an Gruppen!?

LG
  Marlen

Dopamin

okay.
Bei mir hat das ganze nicht funktioniert. Wenn ich in meiner Gruppe z.B /fenster geschrieben habe um den Fensterstatus zu überprüfen, dann kam die Antwort vom Bot nicht in der Gruppe sondern direkt explizit nur an mich. Das hätten dann die anderen Gruppenmember garnicht mitbekommen.
Deshalb habe ich das ganze umgeschrieben, das geprüft wird von wo die nachricht kommt und wenn eine Nachricht für den Bot in ein Gruppenchat ankommt, dann soll er die Antwort auch nur an den Gruppenchat weiterleiten.

Wenn es bei dir auf Anhieb funktioniert, dann ist es ja gut. Bei meiner Config hat es so nicht funktioniert.

Gruß

Dopamin