Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

Carsten

Zitat von: viegener am 17 Oktober 2016, 15:28:19
Generell sind die Keyboards (inline oder normal) für eine Dialogfunktion sicher hilfreich, allerdings würde das aus meiner Sicht schwierig über FHEM-Befehle zu machen sein. Aufrufe von Funktionen aus Perl wären hier vermutlich besser...
Wäre für meine Zwecke perfekt.  :D
Was für eine Response triggern die Inline-Keyboards eigentlich?

viegener

Zitat von: speex am 16 Oktober 2016, 20:01:16
Ansonsten noch mal eine Frage zu den replyKeyboards, ich hatte ja schon mal in der Vergangenheit darauf hingewiesen das einem die confirmation immer wieder gezeigt wird solange bis man praktisch wieder manuell "/" eingibt und wieder die ursprügnliche befehls liste angezeigt bekommt.
Hab eher zufällig heute noch mal ein bisschen bei telegram rumgestöbert und bin zufällig auf folgendes gestossen https://core.telegram.org/bots/api/#replykeyboardhide verstehe ich das richtig das man zuvor beschriebenes verhalten so lösen könnte das nach dem confirm das Replykeyboard wieder ausgeblendet wird?

Das Verhalten hat sich nicht geändert - das keyboard wird automatisch ausgeblendet, Ausgeblendet heisst nicht entfernt, es gibt nur hide (ausblenden) im telegram API. Also ja das Verhalten ist schon so, dass es ausgeblendet wird (zumindest in firefox, Android und iOS).

Es wird halt immer das letzte Keyboard gespeichert und über den Button ist es wieder anzeigbar.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: Carsten am 17 Oktober 2016, 17:39:38
Wäre für meine Zwecke perfekt.  :D
Was für eine Response triggern die Inline-Keyboards eigentlich?

Das genau ist das Problem, auch die inlineKeyboards sind eigentlich nicht dafür eine normale Nachricht zu schicken, sondern eine sogenannte inline-query oder schickt den Benutzer in einen anderen Chat oder ruft einen Url im client auf. Nicht unbedingt für den Dialog zu gebrauchen. Da die queries auch nicht als normale messages üebr den update kommen, muss man einen speziellen Aufruf machen, ich sehe noch nicht was man damit anfangen könnte.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

JoeALLb

... ist mir gerade aufgefallen, vielleicht hilfts. Ich konnte keine Beeinträchtigung erkennen, und nutze noch die Testversion, bis SVn aktualisiert wurde...

Callback returned no valid JSON: malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at ./FHEM/50_TelegramBot.pm line 1684.

:D
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

viegener

Zitat von: JoeALLb am 18 Oktober 2016, 12:44:41
... ist mir gerade aufgefallen, vielleicht hilfts. Ich konnte keine Beeinträchtigung erkennen, und nutze noch die Testversion, bis SVn aktualisiert wurde...

Callback returned no valid JSON: malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at ./FHEM/50_TelegramBot.pm line 1684.

:D

Das ist ein Fehler des Telegram-Servers, das passiert gelegentlich mal wenn von dort eine HTML-(Fehler-)Seite geliefert wird. Kein Fehler im Modul und kein Grund zur Beunruhigung.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: Carsten am 16 Oktober 2016, 10:02:36
@viegener: Wäre es möglich, die Funktion "editMessageText" zum implementieren? Könnte das ganz gut gebrauchen, um die letzte Statusmeldung aktuell zu halten, ohne jedesmal eine neue Nachricht zu schicken.

In der neuesten version in github gibt es jetzt einen Befehl msgEdit damit lassen sich Meldungen ändern. Die Id der nachricht muss (analog) zu replyID mit angegeben werden

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Habe gerade die letzten Änderungen am TelegramBot auch ins SVN hochgeladen, damit diese ab morgen über update verfügbar sind:

- HTML oder markdown in Textnachrichten - siehe parseModeSend
- Nachrichten im nachhinein Ändern - siehe msgEdit
- Wenn Nachrichten von unbekannten Kontakten abgelehnt werden findet ein Vermerk im log statt (log level 3)
- diverse fixes (z.B. multibot umegbungen)

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Firetic

Danke klappt super mit der HTML Formatierung :-)

Hätte noch einen Wunsch:

Wenn ich mir eine Message mit HTML Link schicken lasse, erhalte ich automatisch ein "Preview" der Seite... Könnte man dies irgendwie verhindern? Bin in der Dokumention auf "disable_web_page_preview" gestoßen, vielleicht ist das ja damit möglich.

Gruß Firetic

viegener

Zitat von: Firetic am 20 Oktober 2016, 11:09:04
Danke klappt super mit der HTML Formatierung :-)

Hätte noch einen Wunsch:

Wenn ich mir eine Message mit HTML Link schicken lasse, erhalte ich automatisch ein "Preview" der Seite... Könnte man dies irgendwie verhindern? Bin in der Dokumention auf "disable_web_page_preview" gestoßen, vielleicht ist das ja damit möglich.

Gruß Firetic

Kein Problem findet sich inzwischen in github - Attribut webPagePreview:)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

RaspiCOC

@viegener: So, update jetzt wieder im regulären Repository!

Muss jetzt einfach mal was loswerden: Vielen Dank!!!!! Das ist so ziemlich das beste Modul, dass mir seit geraumer Zeit untergekommen ist! Macht einfach immer wieder Freude! Jetzt spricht das Haus mit mir!!!!!

Carsten

Vielen Dank!

msgEdit funktioniert super. Ich muss mir nur noch einen intelligenten Weg einfallen lassen, mir die sentMsgId nach der spaeter upzudatenden Nachricht asynchron zu merken. Direkt nach dem Absenden steht noch die alte drin, weil das ja ein wenig dauert.

viegener

Zitat von: Carsten am 20 Oktober 2016, 22:55:26
Vielen Dank!

msgEdit funktioniert super. Ich muss mir nur noch einen intelligenten Weg einfallen lassen, mir die sentMsgId nach der spaeter upzudatenden Nachricht asynchron zu merken. Direkt nach dem Absenden steht noch die alte drin, weil das ja ein wenig dauert.

Im Prinzip sollte für diesen Zweck das Reading sentMsgResult funktionieren. Das Reading nimmt den Wert SUCCESS an, sobald die Nachricht erfolgreich versandt wurde und dann findet sich auch in sentMsgId die entsprechende Id.

Also folgendes müsste auf den ersten Blick gehen:

notify auf sentMsgResult setzen und aktivieren wenn Du die Nachricht versenden willst.
sentMsgID im notify an geeigneter Stelle (z.B. Dummy ?) speichern
Zur Sicherheit kann man noch überprüfen ob dass die nachricht ist, um die es geht

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

schmitteharry

Hallo und guten Abend,

ich habe ein TelegramBot Gerät eingerichtet :

define tele_bot TelegramBot aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
attr tele_bot event-on-change-reading msgId


Desweiteren habe ich ein Notify definiert, dass sobald sich <msgId> ändert,
also eine Nachricht einrifft, darauf reagieren soll und eine Antwort schicken soll :

define bot_notify notify tele_bot set tele_bot send @Empfaenger tele_bot-Nachricht.


Das Ganze funktioniert auch soweit ganz gut. Allerdings wird, wenn ich unabhängig über die Befehlszeile eine Nachricht schicke :
set tele_bot send @Emfaenger Andere Nachricht
immer auch das Notify ausgelöst und die damit verbundene Nachricht geschickt, obwohl dies nach meinem Verständnis nicht passieren sollte,
da beim senden <msgId> nicht verändert wird.

Wäre toll wenn ich einen Hinweis bekäme, wie ich das lösen kann.

Starkstrombastler

Dein Notify muss auf das Reading lauschen, also
define bot_notify notify tele_bot:msgId.* set tele_bot send @Empfaenger tele_bot-Nachricht
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

schmitteharry

Vielen Dank für die Antwort : Es hat direkt richtig funktioniert.

Zitat
Dein Notify muss auf das Reading lauschen, also

define bot_notify notify tele_bot:msgId.* set tele_bot send @Empfaenger tele_bot-Nachricht


Ich bin davon ausgegangen, dass mit
attr tele_bot event-on-change-reading msgId
das Lauschen schon auf das Reading bereits eingeschränkt ist.