Cегодня я хотел бы поделиться своим опытом синхронизации уведомлений Continuous Integration серверов (Bamboo, Jenkins, TeamCity и тп.) с бесплатным мессенджером от Павла Дурова — Telegram.
Данную проблему захотелось решить из-за того, что программисты на нашем проекте не реагировали на уведомления, присылаемые на почту, а телеграмм у нас корпоративный мессенджер. Подопытным CI является наш корпоративный Bamboo, с которого и должны приходить эти самые уведомления.
Для организации данной синхронизации мы будем использовать BOT API от телеграмма, Gmail API от Google, а также наш ubuntu сервер на Digital Ocean.
Для начала нам нужно создать нового бота в телеграмм. Для этого я рекомендую воспользоваться пунктом 1 из вот этой статьи: habrahabr.ru/post/262247. После регистрации мы получаем данные доступа к нашему боту вида: 112714817:AAEwZWoZ6X1Go76gt3_hUz9717ihNboXrnw
Обязательно запоминаем эти данные — они нам ещё пригодятся!
![](https://habrastorage.org/r/w1560/files/c90/abd/69b/c90abd69bd3e439690cb3204cdd34dab.png)
Далее, нам нужно создать новый чат, в который и будет отсылать уведомления наш бот. Создаем и не забываем пригласить в него бота и ваших коллег. Теперь нам обязательно нужно узнать ID этого чата, для чего посылаем в чат любое тестовое сообщение, а затем в браузере или сurl (что кому удобнее) вбиваем:
![](https://habrastorage.org/r/w1560/files/a3d/824/236/a3d824236c72447b8eeb423bf5bf4cd2.png)
Из ответа сервера мы узнаем, что ID нашего чата — «-35576913» (учтите, что «-» — это часть ID, терять его нельзя). Теперь проверяем, что все работает правильно. Для этого пытаемся отправить с нашего бота тестовое сообщение:
![](https://habrastorage.org/r/w1560/files/fc2/36b/f18/fc236bf1801f47848b67889c7af5127f.png)
Отлично: мы получили наше тестовое сообщение, а значит все работает как надо! Теперь плавно переходим к Gmail API. Для начала нам нужно создать новый проект в console.developers.google.com. После чего выдаем нашему проекту доступ к Gmail API. А затем нам необходимо получить JSON с креденшелами нашего нового проекта:
![](https://habrastorage.org/r/w1560/files/9aa/4e5/20e/9aa4e520e31c491386c76a3c7390bf02.png)
![](https://habrastorage.org/r/w1560/files/cd9/d0b/a59/cd9d0ba59261411b8388aea6e3bf8c52.png)
Отлично, почти все готово! Теперь я предлагаю воспользоваться моим скриптом на python. Взять его можно здесь: github.com/egorvas/ci_to_telegram/blob/master/ci_to_telegram.py
Также необходимо будет поставить два сторонних python модуля:
Вам нужно положить файлик с client_secret.json в ту же папку, что и скрипт, и запустить выполнение, после чего откроется браузер и предложит вам разрешить доступ к gmail почте.
![](https://habrastorage.org/r/w1560/files/c7d/6d8/05f/c7d6d805fa8a4084b48399c5a55145e3.png)
Я для нашего проекта создал новый gmail аккаунт, к которому и привязал уведомления с bamboo, но вы можете использовать уже созданный. Как душа пожелает!
Не забываем проверить, что уведомления с CI приходят на эту почту. Теперь в папке со скриптом, помимо client_secret.json, должна лежать папка credentials. Если все так, значит вы сделали верно.
![](https://habrastorage.org/r/w1560/files/60c/726/dfb/60c726dfb2404e48b41a839570dc0881.png)
Теперь нам нужно немного видоизменить скрипт, для этого меняем переменные TELEGRAM_BOT_CREDENTIALS и CHAT_ID на те, что мы узнали выше. Теперь пробуем выполнить скрипт, и, если все правильно, то в чат с вашим ботом должны упасть все непрочитанные письма.
В двух словах о том, что делает скрипт. Сначала он находит все непрочитанные письма в вашем почтовом ящике, затем он отправляет текст от них к вам в телеграмм, а далее — делает эти письма прочитанными.
Остался самый последний шаг: нам нужно организовать повторяющийся запуск этого скрипта. Я использовал cron на нашем ubuntu сервере. Грузим нашу папку со скриптами по ssh на сервер и настраиваем cron:
Для начала устанавливаем cron:
Затем запускаем редактор настроек cron:
Добавляем повторение нашего скрипта через каждую минуту:
Проверяем, что все сохранилось корректно:
Теперь наш скрипт запускается каждую минут. Если новых писем на почте нет, то он ничего не делает. А в ином случае — отправляет текст письма к вам в телеграмм и делает письмо прочитанным.
На этом все. Спасибо за внимание. Если будут вопросы — пишите, с радостью отвечу.
Данную проблему захотелось решить из-за того, что программисты на нашем проекте не реагировали на уведомления, присылаемые на почту, а телеграмм у нас корпоративный мессенджер. Подопытным CI является наш корпоративный Bamboo, с которого и должны приходить эти самые уведомления.
Для организации данной синхронизации мы будем использовать BOT API от телеграмма, Gmail API от Google, а также наш ubuntu сервер на Digital Ocean.
Для начала нам нужно создать нового бота в телеграмм. Для этого я рекомендую воспользоваться пунктом 1 из вот этой статьи: habrahabr.ru/post/262247. После регистрации мы получаем данные доступа к нашему боту вида: 112714817:AAEwZWoZ6X1Go76gt3_hUz9717ihNboXrnw
Обязательно запоминаем эти данные — они нам ещё пригодятся!
![](https://habrastorage.org/files/c90/abd/69b/c90abd69bd3e439690cb3204cdd34dab.png)
Далее, нам нужно создать новый чат, в который и будет отсылать уведомления наш бот. Создаем и не забываем пригласить в него бота и ваших коллег. Теперь нам обязательно нужно узнать ID этого чата, для чего посылаем в чат любое тестовое сообщение, а затем в браузере или сurl (что кому удобнее) вбиваем:
https://api.telegram.org/bot<TOKEN>/getUpdates
![](https://habrastorage.org/files/a3d/824/236/a3d824236c72447b8eeb423bf5bf4cd2.png)
Из ответа сервера мы узнаем, что ID нашего чата — «-35576913» (учтите, что «-» — это часть ID, терять его нельзя). Теперь проверяем, что все работает правильно. Для этого пытаемся отправить с нашего бота тестовое сообщение:
https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=-35576913&text=Test_Message
![](https://habrastorage.org/files/fc2/36b/f18/fc236bf1801f47848b67889c7af5127f.png)
Отлично: мы получили наше тестовое сообщение, а значит все работает как надо! Теперь плавно переходим к Gmail API. Для начала нам нужно создать новый проект в console.developers.google.com. После чего выдаем нашему проекту доступ к Gmail API. А затем нам необходимо получить JSON с креденшелами нашего нового проекта:
![](https://habrastorage.org/files/9aa/4e5/20e/9aa4e520e31c491386c76a3c7390bf02.png)
![](https://habrastorage.org/files/cd9/d0b/a59/cd9d0ba59261411b8388aea6e3bf8c52.png)
Отлично, почти все готово! Теперь я предлагаю воспользоваться моим скриптом на python. Взять его можно здесь: github.com/egorvas/ci_to_telegram/blob/master/ci_to_telegram.py
Также необходимо будет поставить два сторонних python модуля:
pip install google-api-python-client
pip install requests
Вам нужно положить файлик с client_secret.json в ту же папку, что и скрипт, и запустить выполнение, после чего откроется браузер и предложит вам разрешить доступ к gmail почте.
![](https://habrastorage.org/files/c7d/6d8/05f/c7d6d805fa8a4084b48399c5a55145e3.png)
Я для нашего проекта создал новый gmail аккаунт, к которому и привязал уведомления с bamboo, но вы можете использовать уже созданный. Как душа пожелает!
Не забываем проверить, что уведомления с CI приходят на эту почту. Теперь в папке со скриптом, помимо client_secret.json, должна лежать папка credentials. Если все так, значит вы сделали верно.
![](https://habrastorage.org/files/60c/726/dfb/60c726dfb2404e48b41a839570dc0881.png)
Теперь нам нужно немного видоизменить скрипт, для этого меняем переменные TELEGRAM_BOT_CREDENTIALS и CHAT_ID на те, что мы узнали выше. Теперь пробуем выполнить скрипт, и, если все правильно, то в чат с вашим ботом должны упасть все непрочитанные письма.
В двух словах о том, что делает скрипт. Сначала он находит все непрочитанные письма в вашем почтовом ящике, затем он отправляет текст от них к вам в телеграмм, а далее — делает эти письма прочитанными.
Остался самый последний шаг: нам нужно организовать повторяющийся запуск этого скрипта. Я использовал cron на нашем ubuntu сервере. Грузим нашу папку со скриптами по ssh на сервер и настраиваем cron:
Для начала устанавливаем cron:
sudo apt-get update
sudo apt-get install cron
Затем запускаем редактор настроек cron:
crontab -e
Добавляем повторение нашего скрипта через каждую минуту:
* * * * python /usr/share/telegram/ci_to_telegram.py>
Проверяем, что все сохранилось корректно:
crontab -l
Теперь наш скрипт запускается каждую минут. Если новых писем на почте нет, то он ничего не делает. А в ином случае — отправляет текст письма к вам в телеграмм и делает письмо прочитанным.
На этом все. Спасибо за внимание. Если будут вопросы — пишите, с радостью отвечу.