This page is part of archived documentation for openHAB 2.5. Go to the current stable version
# Telegram Actions v1
The Telegram Action service allows sending formatted messages to Telegram clients (https://telegram.org (opens new window)), by using the Telegram Bot API.
# Prerequisites
As described in the Telegram Bot API, this is the manual procedure needed in order to get the necessary information.
- Create the Bot and get the Token
- On a Telegram client open a chat with BotFather.
- Send
/newbotto BotFather and fill in all the needed information. The authentication token that is given will be needed in the next steps.
- Create the destination chat
- Open a chat with your new Bot and send any message to it. The next step will not work unless you send a message to your bot first.
- Get the chatId
- Open a browser and invoke
https://api.telegram.org/bot<token>/getUpdates(where<token>is the authentication token previously obtained) - Look at the JSON result to find the value of
id. That is the chatId. Note that if using a Telegram group chat, the group chatIds are prefixed with a dash that must be included in the config file. (e.g. bot1.chatId: -22334455)
- Test the bot
- Open this URL in your web browser, replacing <token> with the authentication token and <chatId> with the chatId:
https://api.telegram.org/bot<token>/sendMessage?chat_id=<chatId>&text=testing- Your Telegram-bot should send you a message with the text:
testing
# Actions
Each of the actions returns true on success or false on failure.
sendTelegram(String group, String message): Sends a Telegram via Telegram REST API - direct messagesendTelegram(String group, String format, Object... args): Sends a Telegram via Telegram REST API - build message with format and argssendTelegramPhoto(String group, String photoURL, String caption): Sends a Picture via Telegram REST API. The URL can be specified using the http, https, and file protocols.sendTelegramPhoto(String group, String photoURL, String caption, Integer timeoutMillis): Sends a Picture via Telegram REST API, using custom HTTP timeoutsendTelegramPhoto(String group, String photoURL, String caption, String username, String password): Sends a Picture, protected by username/password authentication, via Telegram REST APIsendTelegramPhoto(String group, String photoURL, String caption, String username, String password, int timeoutMillis, int retries): Sends a Picture, protected by username/password authentication, using custom HTTP timeout and retries, via Telegram REST API
# Configuration
The action can be configured in services/telegram.cfg.
| Property | Default | Required | Description |
|---|---|---|---|
| bots | Yes | Comma-separated list of <bot-name>s | |
<bot name>.chatId | Yes | chat id | |
<bot name>.token | Yes | authentication token | |
<bot name>.parseMode | No | Support for formatted messages, values: Markdown or HTML. Default: no formatting is used |
See https://core.telegram.org/bots/api#markdown-style (opens new window) for formatting options if Markdown or HTML is set as parseMode.
# Configuration example
bots=bot1,bot2
bot1.chatId=22334455
bot1.token=xxxxxxxxxxx
bot1.parseMode=Markdown
bot2.chatId=654321
bot2.token=yyyyyyyyyyy
It this example two bots can be used (bot1 and bot2).
# Examples
# Send a text message to telegram chat
telegram.rules
rule "Send telegram with Fixed Message"
when
Item Foo changed
then
sendTelegram("bot1", "item Foo changed")
end
# Send a text message with a formatted message
telegram.rules
rule "Send telegram with Formatted Message"
when
Item Foo changed
then
sendTelegram("bot1", "item Foo changed to %s and number is %.1f", Foo.state.toString, 23.56)
end
# Send an image to telegram chat
When sending an image from a URL, do not place the username/password in the URL like this:
http://<username>:<password>@server/image.png; pass the credentials to the sendTelegramPhoto
method instead.
http, https, and file are the only protocols allowed.
telegram.rules
rule "Send telegram with image and caption from image accessible by url"
when
Item Light_GF_Living_Table changed
then
sendTelegramPhoto("bot1", "http://www.openhab.org/assets/images/openhab-logo-top.png",
"sent from openHAB")
end
telegram.rules
rule "Send telegram with image without caption from image accessible by url"
when
Item Light_GF_Living_Table changed
then
sendTelegramPhoto("bot1", "http://www.openhab.org/assets/images/openhab-logo-top.png",
null)
end
If an image is on a web server requiring authentication, credentials can be passed as additional parameters:
telegram.rules
rule "Send telegram with image without caption from image accessible by url"
when
Item Light_GF_Living_Table changed
then
sendTelegramPhoto("bot1", "http://www.openhab.org/assets/images/openhab-logo-top.png",
null, "username", "password")
end
To send a base64 jpeg or png image:
telegram.rules
rule "Send telegram with base64 image and caption"
when
Item Light_GF_Living_Table changed
then
var String base64Image = "data:image/jpeg;base64, LzlqLzRBQ..."
sendTelegramPhoto("bot1", base64Image, "sent from openHAB")
end
To send an image that resides on the local computer file system:
telegram.rules
rule "Send telegram with local image and caption"
when
Item Light_GF_Living_Table changed
then
sendTelegramPhoto("bot1", "file:///path/to/local/image.jpg", "sent from openHAB")
end
To send an image based on an Image Item:
telegram.rules
rule "Send telegram with Image Item image and caption"
when
Item Webcam_Image changed
then
sendTelegramPhoto("bot1", Webcam_Image.state.toFullString, "sent from openHAB")
end