====== 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"