Telegram Bot gebruiken voor Domoticz-notificaties
Introductie
Voor Domoticz-notificaties kun je verschillende commerciële apps gebruiken, maar het is ook mogelijk om Telegram Bot hier voor in te zetten. Telegram is vergelijkbaar met WhatsApp, maar dan met volledige Cross platform-ondersteuning! Ook kun je met Telegram-berichten Domoticz beheren. In juni 2015 heeft Telegram een bot-platform geïntroduceerd. Hierdoor hoef je op je Domoticz-systeem geen andere software te installeren als je Telegram wilt gebruiken voor Domoticz-notificaties of om bepaalde opdrachten uit te laten voeren.
Benodigdheden
Telegram Bot en token aanmaken
We gaan nu eerst een eigen Telegram Bot maken. Dat klikt een stuk lastiger dan het in werkelijkheid is. Hieronder zie je een voorbeeld van het maken van een bot genaamd Domoticz met de gebruikersnaam ehocobot en het token is 657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2. Dit token heb je nodig om als bot berichten te kunnen verzenden.
Met de Telegram-app (op je smartphone of pc, dat maakt niet uit) maak verbinding met @BotFather en volg het onderstaande gesprek (jouw berichten staan in het rood gedrukt):
What can this bot do? Botfather is one bot to rule them all. Use it to create new bot accounts and manage your existing bots. About Telegram bots: https://core.telegram.org/bots, Bot API manual: https://core.telegram.org/bots/api
Hello
They call me the Botfather, I can help you create and set up Telegram bots. Please read this manual before we begin: https://core.telegram.org/bots. You can control me by sending these commands:
/newbot – create a new bot
/token – generate authorization token
/revoke – revoke bot access token
/setname – change a bot’s name
/setdescription – change bot description
/setabouttext – change bot about info
/setuserpic – change bot profile photo
/setcommands – change bot commands list
/setjoingroups – can your bot be added to groups?
/setprivacy – what messages does your bot see in groups?
/deletebot – delete a bot
/cancel – cancel current operation
/newbot
Allright, a new bot. How are we going to call it? Please choose a name for your bot.
Domoticz
Good. Now let’s choose a username for your bot. It must end in ‘bot’. Like this, for example: TetrisBot or tetris_bot.
ehocobot
Done! Congratulations on your new bot. You will find it at telegram.me/ehocobot. You can now add a description, about section and profile photo for your bot, see /help for a list of commands.
Use this token to access the HTTP API:
657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Bewaar je bot-naam, gebruikersnaam en token op een veilige plek!
Bot testen en Chat ID opzoeken
Stuur een paar berichtjes naar de zojuist aangemaakte Telegram Bot om te kijken of alles goed werkt. De Telegram Bot zal nu nog niets antwoorden, aangezien je hem nog niet verder geprogrammeerd hebt. Nadat je een paar berichten hebt gestuurd kun je de http api gebruiken om de berichten op te halen. In dit geval is het doel om het ID van je Telegram gebruiksnaam te vinden. Vervang in onderstaande url het dummy token door jouw echte token en pak het in een willekeurige browser:
1 |
https://api.telegram.org/bot657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2/getUpdates |
Let op! Vergeet niet het woord “bot” na https://api.telegram.org/.
Als je alles goed gedaan hebt dan zal je iets als onderstaande zien:
1 2 3 |
{"ok":true,"result":[{"update_id":463345810, "message":{"message_id":1,"from":{"id":274720651,"is_bot":false,"first_name":"Joost","language_code":"nl"},"chat":{"id":274720651,"first_name":"Joost","type":"private"},"date":1539284671,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":462233811, "message":{"message_id":2,"from":{"id":274720651,"is_bot":false,"first_name":"Joost","language_code":"nl"},"chat":{"id":274720651,"first_name":"Joost","type":"private"},"date":1539284676,"text":"Test"}}]} |
Je hebt het ID nodig die achter “from”:{“id”: staat (in dit voorbeeld 274720651). Dit is het ID (274720651) van je gebruikersnaam die je gebruikt om berichten naar je bot te sturen en het ID waar je Domoticz-notificaties op zal ontvangen.
Test nu of je bot een bericht naar jou kan sturen:
1 |
https://api.telegram.org/bot657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2/sendMessage?chat_id=274720651&text=Hello |
Indien alles goed gaat zal je iets als onderstaand zien:
1 |
{"ok":true,"result":{"message_id":3,"from":{"id":637893624,"is_bot":true,"first_name":"Domoticz","username":"ehocobot"},"chat":{"id":274720651,"first_name":"Joost","type":"private"},"date":1539284767,"text":"Hello"}} |
Op je Telegram app zal je ook een bericht ontvangen.
Domoticz instellen om Telegram Bot Noficaties te gebruiken
We gaan nu Domoticz instellen dat er gebruik gemaakt gaat worden van Telegram notificaties. Ga in Domoticz naar Setup > Settings> Notifications > Custom HTTP Action. Activeer deze box, vul het ID (274720651) in het #TO-veld en kopieer onderstaande url in het veld URL/Action (uiteraard met jouw eigen token):
1 |
https://api.telegram.org/bot657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2/sendMessage?chat_id=#TO&text=#MESSAGE |
Klik een keer op de Test-knop om te kijken of alles goed werkt en sla de wijzigen op door op Apply Settings te klikken.
Notificaties naar Channel versturen (meerdere gebruikers)
Bovenstaande methode werkt met één gebruiker. Indien meerdere gebruikers de Domoticz-notificaties moeten ontvangen, dan moet je gebruik maken van een channel. Maak eerst in Telegram een channel aan. Zet de channel nog niet op privé, aangezien we de channel-ID eerst nog moeten achterhalen. Geef de channel een @channelName. Voeg jouw bot toe als Administrator, zodat de bot berichten kan versturen. De bot zal niet in je contactenlijst staan, je moet er zelf naar zoeken. Verstuur een bericht naar de zojuist aangemaakte channel met de bot API:
1 |
https://api.telegram.org/bot657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2/sendMessage?chat_id=@channelName&text=123 |
Het resultaat zal iets als onderstaande zijn:
1 |
{"ok":true,"result":{"message_id":2,"chat":{"id":-1002346216984,"title":"Domoticz","username":"channelName","type":"channel"},"date":1539427366,"text":"123"}} |
Je kunt nu je channel op privé zetten en bij het #TO-veld -1002346216984 invullen (dit is je channel-ID).
Telegram Bot berichten versturen met Curl
Je kunt eenvoudig de https url gebruiken met Curl:
1 |
curl "https://api.telegram.org/bot657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2/sendMessage?chat_id=274720651&text=test" |
Echter, het is beter om gebruik te maken van onderstaand format, waarbij de tekst URL encoded is:
1 |
curl --data chat_id=274720651 --data-urlencode "text=Some complex text $25 78%" "https://api.telegram.org/bot657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2/sendMessage" |
Telegram Bot foto’s versturen met Curl
Met de Telegram Bot api kun je ook eenvoudig foto’s versturen door gebruik te maken van de sendPhoto methode:
1 |
curl -s -X POST "https://api.telegram.org/bot657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2/sendPhoto" -F chat_id=274720651 -F photo="@/path/to/your/photo.jpg" |
De Telegram Bot api heeft nog veel meer functies die hier worden uitgelegd. Nog meer informatie via je op deze site.
Telegram Bot berichten versturen met Curl in Lua
Curl kan direct gebruikt worden in Lua met de os.execute functie:
1 2 3 4 5 6 7 8 |
commandArray = {} token = "657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2" chatid = 274720651 message = 'Dit bericht komt vanuit een Lua-script!' if (devicechanged['Test'] == 'On') then os.execute('curl --data chat_id='..chatid..' --data-urlencode "text='..message..'" "https://api.telegram.org/bot'..token..'/sendMessage" ') end return commandArray |
Dankjewel ehoco.nl voor je fraai stukje documentatie. (Had wellicht zelfs in het engels gemoeten?)
Werkt als een trein!
Een prettige verrassing na alle teleurstelling met commerciële apps (bv Pushsafer).
Voor mij als Telegram-Newbie was niet alles direct duidelijk: “maak verbinding met @BotFather” Ok, dat betekent dus @BotFather intypen in het Search-veld.
Ik heb ook jouw Domoticz Instelling “Custom HTTP Action” opgevolgd omdat ik eea – vreemd genoeg – niet via de Domoticz Instelling “Telegram” a/d praat kreeg.
Nogmaals dank voor je uitstekende uitleg.
Ook vanuit mij dank je wel ehoco. berichten werken echter alleen vanuit de app of browser.
Vanuit Domoticz komt er niet aan. ID en Token zijn correct utieraard, en de actie is actief.
Waar zou dat aan kunnen liggen?
Wat staat er in de log?
Inderdaad: Wat staat er in je log?
Gebruik je “Custom HTTP Action” (werkt bij mij) of de “Telegram”-optie (in Settings-Notifications) (deze werkt nl – vreemd genoeg – niet bij mij).
Suc6.
werkt uitstekend prima handleiding
ligt het aan mij of is de tekst weg van dit artikel, zou het graag een keer doorlezen
Bedankt voor de melding, de tekst zou nu weer zichtbaar moeten zijn.
Denk dat het niet meer lukt. Als ik de URL intoets krijg ik:
{“ok”:false,”error_code”:401,”description”:”Unauthorized”}
Domoticz stuurt mij – zonder uitzondering – dagelijk een berichtje.
Ook de Test-button werkt (bericht komt met een paar seconden binnen op Telegram android).
Werkt bij mij in elk geval dus prima.
Zou dit graag willen gebruiken maar naar het invoeren van de 1e URL ontvang ik enkel: {“ok”:true,”result”:[]}
Helaas geen ID.
Ik heb exact hetzelfde probleem. https://api.telegram.org/bot657432935:ABGsNuT5l7KHgKcYu40-gX-7184Z3LFx5A2/getUpdates geeft mij (met invulling van eigen id en token en inclusief bot ervoor) geen resultaten
In je “getUpdates”-voorbeeld gebruik je – volgens mij – niet je eigen Id maar alleen het Token.
Maar volgens mij is dit geen belangrijke stap.
Belangrijkste is of je jezelf (=Telegram App) een berichtje kunt sturen dmv (mbv Token en Id):
https://api.telegram.org/bot/sendMessage?chat_id=&text=Hallo
Suc6
Lullig, maar deze site verknalde m’n voorbeeld link…
Nogmaals, maar nu met andere haakjes:
https://api.telegram.org/bot%5BTOKEN%5D/sendMessage?chat_id=%5BID%5D&text=Hallo
Beste Ehoco, ik heb de notificaties helemaal werkend in domoticz.
Alleen begrijp ik niet hoe ik Telegram Bot foto’s versturen met Curl werkend kan krijgen.
Waar vul ik dit in?
Ik heb een dahua camera reeds werkend, en krijg nu een foto via de mail. Ik zou dit heel graag werkend willen hebben via Telegram.
Dat zijn voorbeeld-regels die je in een script kunt verwerken.
Hallo kan iemand mij helpen draai domoticz via raspberry ik kan wel een text notificatie via telegram krijgen.
nou wil ik ook mijn esp32 cam snapshot doorsturen maar dat lukt niet geen foto ook geen foutmelding in domoticz.
Dit zijn mijn regels:
#!/bin/sh
SnapFile=”/var/tmp/camsnapshot.jpg”
# Get snapshot via Domoticz server
wget -O $SnapFile “192.168.178.239:8080/camsnapshot.jpg?idx=1”
# Send Telegram message with image
curl -s -X POST “https://api.telegram.org/botxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxx/sendPhoto” -F chat_id=xxxxxxxx -F photo=”@$SnapFile”(werkt niet)
curl -s -X POST “https://api.telegram.org/botxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxx/sendMessage?chat_id=-xxxxxxxxx&text=testing” (deze werkt)
# Remove Image
/bin/rm $SnapFile
ik heb precies hetzelfde probleem, foto verzenden lukt niet, tekst wel. I s er inmiddels een oplossing???
Het heeft altijd gewerkt, maar nu dus niet meer.
De TEST button in Domoticz geeft netjes een test msg door, maar als ik probeer, als het voorbeeld hier, de test te sturen, krijg als antwoord:
{
ok: false,
error_code: 400,
description: “Bad Request: message text is empty”
}
De notifications in Domoticz werken ook niet.
klopt had ik ook. in het voorbeeld op deze site zit een foutje. Het werkt als je de tekst ‘&text=Hello’ uit het voorbeeld vervangt voor ‘&text=Hello’
Hallo,
Is er iemand dit bovenstaande (of onderstaande) ook herkend en de oplossing hiervoor kent?
ok: false,
error_code: 400,
description: “Bad Request: message text is empty”
groet en bvd M vdWerf
Weet iemand hoe je *verschillende** berichten kunt sturen via de Call api van Telegram?
https://www.callmebot.com/telegram-call-api/
Verschillend: ik bedoel daarmee:
als de rookmelder afgaat, wil ik een ‘rookmelder alarm’ tekst.
als de bewegingsmelder afgaat, wil een ‘bewegingsmelder’ tekst.
Het lijkt erop dat ik in de URL/ACtie maar één tekst kan maken:
http://api.callmebot.com/start.php?user=@MijnNaam&text=Brandmelding+Brandmelding+Brandmelding+Brandmelding+Alarm&lang=nl-NL-Standard-B&rpt=5
Hoi Ehoco,
Hopelijk kan je helpen. Ik heb de eerste stappen door lopen voor het aanmaken van een account.
Nu geef je aan https://api.telegram.org/bot dan code met daar achter /getUpdates
Ik krijg alleen het volgende te zien.
{“ok”:true,”result”:[]} meer niet en ook in verschillende browsers.
wat doe ik verkeerd. Hoor graag van je