====== Installing telegram to send notification messages ====== ===== Intro ===== If you look on internet, you will found thousands of recipes like this one: install telegram in order to send notification messages from one computer directly to your phone. **My goal with this recipe is to create a ''telegram_msg'' command that just send a text message**, nothing more. Although it might seem a simple goal, you will discover that it is not a simple one: the [[https://github.com/vysheng/tg|Telegram command line application]] doesn't have a "send message" combination of arguments to do so. Moreover, a combination of pipes --to simulate a writing from the console-- doesn't achieve the desired result because the telegram-cli program doesn't end: it keeps cyling over and over reading nothing from the pipe. To put things worst, [[https://github.com/vysheng/tg/issues/625|the first command you have to issue in ''telegram-cli'' is contact_list]]. It's a known error, at least on June, 2015. Said that, the only approximation to my goal I've seen so far today is: * Run telegram-cli as a daemon, and when it starts, issue a contact_list command the first time * After that, send the command through netcat (nc) command ===== Step 1: install necesary packages ===== $ sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev $ sudo apt-get install libevent-1.4-2 libevent1-dev $ sudo apt-get install libpython3.4 libpython3.4-dev $ sudo apt-get install libjansson4 libjansson-dev ===== Step 2: download the project ===== It is not compulsory to have git installed in the destination machine. You can have git in another machine and use it to download the project: git clone https://github.com/vysheng/tg.git **The project will appear in a directory called "tg".** Afterwards you can move the project to the destination machine. Up to date (01/07/2015), this current version does not work. I've downloaded version 1.0.5.1 instead, which works correctly. ===== Step 3: configure and build the project ===== Nothing special here. Go to the directory where you have downloaded the project and: $ ./configure $ make ===== Step 4: a basic test ===== Make a simple confirmation that the program is working. You can skip this test because we will have to create another user --telegramd-- to run the service and we will have to do it again. The program is called ''telegram-cli'' and it's under the ''bin'' directory. Go there, and execute: $ ./telegram-cli -k ../tg-server.pub Something similar to this will appear: $:~/tg-1.0.5.1/bin$ ./telegram-cli ../tg-server.pub -k ../tg-server.pub Telegram-cli version 1.0.5, Copyright (C) 2013-2014 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'. This is free software, and you are welcome to redistribute it under certain conditions; type `show_license' for details. Telephone number (with '+' sign): You have to provide the telephone number of this account --normally your telephone number-- but with your national prefix. Then the sms will be requested, so it is advisable to have this phone near when doing this. You can issue a contact_list command to check thet that this client is working: > contact_list .... .... ===== Step 5: install the client ===== I've opted for manually install the client. I've copied the ''telegram-cli'' program under ''/usr/local/share/telegram'' and the public key of the server under /etc, with very restricted permissions for reading. # mkdir /usr/local/share/telegram # cp telegram-cli /usr/local/share/telegram I've also created a directory called ''/etc/telegram'' that will hold all the configuration and the public key: # mkdir /etc/telegram # chmod u=rwx,g=rx,o=rx /etc/telegram # cp tg-server.pub /etc/telegram # chmod g=r,o=r,u=r /etc/telegram/tg-server.pub ===== Step 6: create the system user telegramd ===== In order to run the telegram-daemon as root, you will need to create the user telegramd. I've opted to create this user as a system user: # useradd -M --user-group --system --shell=/bin/false telegramd Impersonate this user and run the telegram-cli program again, to create a proper configuration file: telegramd@:~$ /usr/local/share/telegram/telegram-cli -k /etc/telegram/tg-server.pub Telegram-cli version 1.0.5, Copyright (C) 2013-2014 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'. This is free software, and you are welcome to redistribute it under certain conditions; type `show_license' for details. Telephone number (with '+' sign): ===== Step 7: create a daemon and install it ===== Telegram-cli has a bug that provokes that, unless ''contact_list'' is the first command issued, no message can be sent through the program. Moreover, there is no way to create a program that just sends a message and ends: the program waits forever even if you run through a pipe. __A more simple version to make automatic notifications from a machine would be desirable.__ Let's go for it. The code for the daemon is this (customize the adequate variables): #!/bin/bash # # telegram.sh - to start / stop a telegram server # # ### BEGIN INIT INFO # Provides: telegram # Required-Start: $local_fs $network $syslog # Required-Stop: $local_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Telegram server ### END INIT INFO TELEGRAM_BIN="/usr/local/share/telegram/telegram-cli" TELEGRAM_PORT=1234 TELEGRAM_ARGS="-p /home/telegramd/.telegram-cli -k /etc/telegram/tg-server.pub -d -P $TELEGRAM_PORT" PID_FILE=/var/run/telegram.pidfile umask 022 test -f "$TELEGRAM_BIN" || exit 0 case $1 in start) echo "Starting telegram server" $TELEGRAM_BIN $TELEGRAM_ARGS & echo $! > "$PID_FILE" # issue the command "contact_list" because it's needed # for sending messages sleep 5 echo "contact_list" | nc 127.0.0.1 $TELEGRAM_PORT echo "done" ;; stop) echo "Stopping telegram server" # first make a gentle kill kill $(cat "$PID_FILE") # then sleep and make a hard kill sleep 4s kill -9 $(cat "$PID_FILE") 2> /dev/null rm "$PID_FILE" echo "done" ;; reload) $0 stop $0 start ;; status) if kill -0 $(cat "$PID_FILE") ; then echo "Telegram process is running" else echo "Telegram process has stopped" fi ;; *) echo "Usage: $0 start | stop | reload | status" ;; esac exit 0 Install it under ''/etc/init.d'' (in ubuntu): sudo mv telegram-daemon /etc/init.d sudo chown root:root /etc/init.d/telegram-daemon ===== Step 8: install the telegram-msg program ===== After that I've created a ''telegram-msg'' program to just send a message through telegram. The program is pretty simple: #!/bin/bash # # telegram-msg - sends a telegram message # # echo "msg $1 $2" | nc 127.0.0.1 1234 ===== Step 8: first test ===== $ sudo /etc/init.d/telegram-daemon start $ telegram-msg somebody "some message you want to send"