Telegram offers the feature of bots. A bot allows automated systems and servers to send telegram messages to users. Quite often it can be useful to send stuff to yourself. A classic application of this would be receiving results of cronjob tasks via email. Or maybe you want to grab a small file from your server, but downloading it via SCP would be too much work or wouldn't work at all because firewall stuff / filters / proxy servers / whatever.
telegram.sh allows you to send such things via telegram.
# Send a message to yourself, using a bot token and a chat_id. telegram -t 123456:AbcDefGhi-JklMnoPrw -c 12345 "Hello, World." # You can define the token and chat_id in environment variables or config files. # Then you can just use telegram "Hello, World." # Split them into multiple lines telegram "Hello,"$'\n'"World." # or echo -e "Hello\nWorld." | telegram - # Or you send this one message to another chat: telegram -c 6789 "Hello, Mars." # You can also send messages to multiple chats: telegram -c 1234 -c 6789 "Hello, Planets." # Send stuff via stdin. It will automatically be sent as monospace code: ls -l | telegram - # Use markdown in your message (HTML is available as well): telegram -M "To *boldly* go, where _no man_ has gone before." # Send a local file. telegram -f results.txt "Here are the results." # Or an image, giving you a preview and stuff. telegram -i solar_system.png # We don't need to send a message if we're # sending a file. # Use environment variables to tell curl to use a proxy server: HTTPS_PROXY="socks5://127.0.0.1:1234" telegram "Hello, World." # Check the curl documentation for more info about supported proxy # protocols.
curl. Listing known chats with
jq, but you can
easily use this tool without this.
telegramfile from this repository and put it somewhere.
@botfatherat telegram and start a chat with him.
/newbotcommand to create a new bot. BotFather will give you a token. Keep this.
telegram -t <TOKEN> -l. If you have
jqinstalled, it will nicely list its known chats. The number at the front is your chat id. If you don't have
jqinstalled, it will print a bit of JSON data and tell you what to look for.
telegram -t <TOKEN> -c <CHAT ID> "Hello there."
Carrying the token and the chat id around can be quite cumbersome. You can define them in 4 different ways:
Later variants overwrite earlier variants, so you could define token and
/etc/telegram.sh.conf and then overwrite the token with your own
~/.telegram.sh or on the command line.
The files should look like this:
Multiple chat ids can be defined in a config file as a bash array:
TELEGRAM_TOKEN="123456:AbcDefGhi-JlkMno" CHATS=(12345678, 23456789, 34567)
With such config command
telegram.sh "Hello world" will deliver message to all listed chat ids.
Please be aware that you should keep your token a secret.
You can also add permanent proxy settings in there by adding:
See the curl documentation for more information about which proxy protocols are supported.
-mto receive the last received message. You could use this e.g. to regularly poll the last message and react on commands. Format of the response is
<Message ID> <Sender ID> <Chat ID> <Text>. You could use this feature like this:
telegram -m | read message_id sender_id chat_id text echo "MessageID: $message_id" echo "Text: $text"