Отправка сообщений Telegram messenger с сервера

Сегодня я раскажу о том, как получать сообщения о событиях на сервере при помощи Telegram Messenger. В этой статье мы установим и настроим на сервере Telegram Messenger CLI и встроим автоматическую отправку сообщений в Ruby приложение при помощи этой утилиты.


Установка

Прежде всего надо развернуть Telegram Messenger CLI на сервере. Вообще, на официальной страничке есть инструкция, как это сделать для большинства популярных операционных систем, но я раскажу как это делается под Debian:

Нам понадобятся следующие зависимости:

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

Теперь склоним git-репозиторий с исходным кодом Telegram CLI:

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

Дальше как обычно:

./configure
make

Я склонил и установил программу в директорию /opt, поэтому сама утилита telegram-cli лежит в /opt/tg/bin/. Для удобства я рекомендую добавить эту директорию в окружение (PATH) пользователя, который запускает само Ruby-приложение:

export PATH=$PATH:/opt/tg/bin

Авторизация

Запустив telegram-cli, программа попросит телефон для авторизации и получения списка контактов. Специально для таких целей, я завёл рабочую сим-карту, но чтобы попробовать/побаловаться, подойдёт любой сервис, предоставляющий номер и смс-ответ. Вот несколько ссылок:

pinger.com/tfw
receive-sms-online.com
virtual-number.ru/services-sms.html

Не забудьте добавить выбранный номер в список ВАШИХ контактов.

Можно отправлять сообщения:

telegram-cli -k /путь/до/ключа.pub -W -e 'msg Получатель Сообщение'

Отправка сообщений

Встроим автоматическую отправку сообщений в Ruby-приложение на сервере.

Создадим конфигурационный файл, в котором будут содержаться:

config/telegram.yml:

peer: 'Получатель'
key_path: 'путь/до/ключа.pub'
telegram_path: 'путь/до/telegram-cli'

И создадим класс, который будет слать сообщения:

require 'singleton'
require 'yaml'
 
class TelegramMessageService
  include Singleton
 
  TG_CONFIG = YAML.load_file(File.expand_path('путь/до/config/telegram.yml', __FILE__))
 
  def send(message)
    system("#{TG_CONFIG['telegram_path']} -k #{TG_CONFIG['key_path']} -W -e 'msg #{TG_CONFIG['peer']} #{message}'")
  end
end

Готово! Теперь можно использовать:

TelegramMessageService.instance.send('message text')

В месте, где необходимо отправить сообщение. Например, если произошола ошибка, или если наждо отправить ежедневный отчёт о посещениях... В общем функционал видится довольно полезным.


Как всегда, ссылка на простенький проект на Github


22.12.2014
Обсуждение недоступно