27 Dec 2014

Telegram on Raspberry Pi

Submitted by Max

In one of our last tutorials we have installed WhatsApp on Raspberry.
Whatsapp at the moment is definitely the most famous app for messaging services, but there are also many alternatives although little known. One of these is Telegram.

"Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed. Unlike WhatsApp, Telegram is cloud-based and heavily encrypted. As a result, you can access your messages from several devices at once, including tablets and computers, and share an unlimited number of photos, videos and files (doc, zip, mp3, etc) of up to 1,5 GB. Thanks to our multi-data center infrastructure and encryption, Telegram is also faster and way more secure. On top of that, Telegram is free and will stay free — no ads, no subscription fees, forever." From https://telegram.org/

Well, then we try to install it on Raspberry

You need:

a Raspberry Pi B or B+, with the latest version of Raspbian, or our MIcroSD Card 8GB Class 10 Raspbian preinstalled.


Update the packages with

sudo apt-get update

sudo apt-get upgrade


Install libs: readline or libedit, openssl and (if you want to use config) libconfig and liblua. If you do not want to use them pass options --disable-libconfig and --disable-liblua respectively.


sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make

Clone GitHub Repository

git clone --recursive https://github.com/vysheng/tg.git && cd tg



Running this command takes a little time and after install is done.


navigate to the folder tg

cd tg


bin/telegram-cli -k tg-server.pub -W

The first time we start telegram we must enter the phone number, including land code (for Italy is +39).

You should receive on your phone a sms message with a code, enter it and hit "Enter"

Now we are ready to use telegram, if you send a message from your smartphone you can see it on terminal.

To send a message type

msg Name_Lastname My message from Raspberry

Telegram on Raspberry first message

To send a photo type

send_photo Name_Lastname /folder/photo.jpg

Telegram on Raspberry send photo

Send message automatically

To send message automatically create a file

sudo nano /home/pi/tg.sh

with this content

cd ${tgpath}
(echo "msg $to $msg"; echo "safe_quit") | ${tgpath}/bin/telegram-cli -k tg-server.pub -W

save and exit, give it execution permissions

sudo chmod -R 0655 /home/pi/tg.sh

test it with

/home/pi/tg.sh Name_lastname "your message"

Raspberry Pi Telegram automatic message

Raspberry Pi Telegram alert

to send an image create a file

sudo nano /home/pi/tg_photo.sh

with this content

cd ${tgpath}
(echo "send_photo $to $msg"; echo "safe_quit") | ${tgpath}/bin/telegram-cli -k tg-server.pub -W

save and exit, give it execution permissions

sudo chmod -R 0655 /home/pi/tg_photo.sh

test it with

/home/pi/tg_photo.sh Name_Lastname /folder/photo.png

Other supported commands are:

    msg <peer> Text - sends message to this peer
    fwd <user> <msg-seqno> - forward message to user. You can see message numbers starting client with -N
    chat_with_peer <peer> starts one on one chat session with this peer. /exit or /quit to end this mode.
    add_contact <phone-number> <first-name> <last-name> - tries to add contact to contact-list by phone
    rename_contact <user> <first-name> <last-name> - tries to rename contact. If you have another device it will be a fight
    mark_read <peer> - mark read all received messages with peer
    delete_msg <msg-seqno> - deletes message (not completly, though)
    restore_msg <msg-seqno> - restores delete message. Impossible for secret chats. Only possible short time (one hour, I think) after deletion


    send_photo <peer> <photo-file-name> - sends photo to peer
    send_video <peer> <video-file-name> - sends video to peer
    send_text <peer> <text-file-name> - sends text file as plain messages
    load_photo/load_video/load_video_thumb/load_audio/load_document/load_document_thumb <msg-seqno> - loads photo/video/audio/document to download dir
    view_photo/view_video/view_video_thumb/view_audio/view_document/view_document_thumb <msg-seqno> - loads photo/video to download dir and starts system default viewer
    fwd_media <msg-seqno> send media in your message. Use this to prevent sharing info about author of media (though, it is possible to determine user_id from media itself, it is not possible get access_hash of this user)
    set_profile_photo <photo-file-name> - sets userpic. Photo should be square, or server will cut biggest central square part

Group chat options

    chat_info <chat> - prints info about chat
    chat_add_user <chat> <user> - add user to chat
    chat_del_user <chat> <user> - remove user from chat
    rename_chat <chat> <new-name>
    create_group_chat <chat topic> <user1> <user2> <user3> ... - creates a groupchat with users, use chat_add_user to add more users
    chat_set_photo <chat> <photo-file-name> - sets group chat photo. Same limits as for profile photos.


    search <peer> pattern - searches pattern in messages with peer
    global_search pattern - searches pattern in all messages

Secret chat

    create_secret_chat <user> - creates secret chat with this user
    visualize_key <secret_chat> - prints visualization of encryption key. You should compare it to your partner's one
    set_ttl <secret_chat> <ttl> - sets ttl to secret chat. Though client does ignore it, client on other end can make use of it
    accept_secret_chat <secret_chat> - manually accept secret chat (only useful when starting with -E key)

Stats and various info

    user_info <user> - prints info about user
    history <peer> [limit] - prints history (and marks it as read). Default limit = 40
    dialog_list - prints info about your dialogs
    contact_list - prints info about users in your contact list
    suggested_contacts - print info about contacts, you have max common friends
    stats - just for debugging
    show_license - prints contents of GPLv2
    help - prints this help


    export_card - print your 'card' that anyone can later use to import your contact
    import_card <card> - gets user by card. You can write messages to him after that.


    quit - quit
    safe_quit - wait for all queries to end then quit

The opportunities that telegram offers are very interesting and in the next tutorials we will see how to use them, for example, Raspberry could send us a photo after an alarm or ask Raspberry to do an action following a particular message, for example "turn on heating."

Follow us on social to stay informed.