Как развернуть telegram bot на яндекс

GeekBrains

Яндекс.Почта 360 обзавелась официальным ботом в Telegram

Яндекс.Почта 360 обзавелась официальным ботом в Telegram

Компания Яндекс интегрировала сервис Яндекс.Почта 360 в приложения Почты и Диска, а также запустила чат-бота для пересылки сообщений в Яндекс.Почту. Для тех, кто не знает, Яндекс.Почта 360 — это новый универсальный сервис, который был представлен в сентябре прошлого года. Он объединяет в себе Почту, Диск, Календарь, Телемост, Мессенджер и Заметки. По сути, это виртуальное рабочее пространство, где можно работать с несколькими сервисами в одной программе: общаться, планировать встречи, выполнять различные действия с документами и прочими файлами. И всё это под единым интерфейсом.

Базовые возможности Почты 360 доступны бесплатно, а вот дополнительные опции можно получить только в платной версии (тарифы «Лайт», «Стандарт» или «Премиум»). Это могут быть расширенное хранилище на Яндекс.Диске, безлимитная загрузка видео и другие привилегии. Оформить подписку пользователи Android-устройств могут прямо в приложении уже сейчас, а владельцы iPhone — чуть позже. Мобильная Почта 360 синхронизируется с десктопной версией, поэтому сохранённые данные доступны как на смартфоне, так и на компьютере. Компания развёртывает свой новый сервис постепенно, и по умолчанию он доступен не всем пользователям. Чтобы попробовать Почту 360, нужно перейти по специальной ссылке.

Что касается чат-бота для Telegram, то он называется @YandexMail360_bot. С его помощью можно отправлять сообщения из мессенджера в Яндекс.Почту, чтобы не терять важную информацию, не упустить письмо и вовремя на него ответить.

Строим Telegram-бот в Яндекс.Облаке

Создание телеграм-бота

Сегодня из подручных материалов мы соберём в Яндекс.Облаке Telegram-бот с использованием Yandex Cloud Functions (или Яндекс-функции — для краткости) и Yandex Object Storage (или Объектное хранилище — для ясности). Код будет на Node.js. Однако, имеется одно пикантное обстоятельство — некая организация под названием, скажем так, РоссКомЦензур (цензура запрещена статьёй 29 Конституции РФ), не позволяет интернет-провайдерам России передавать запросы в Telegram API по адресу: https://api.telegram.org/ (UPD: В РФ уже снята блокировка Telegram API). Ну мы и не будем — нет так нет. Ведь в нашем саквояже имеются т.н. вебхуки — с их помощью мы не делаем запросы на конкретный адрес, а всего лишь шлём свой запрос в качестве ответа на любой запрос к нам. То есть, как в Одессе — отвечаем вопросом на вопрос. Поэтому Telegram API в нашем коде фигурировать не будет.

Итак, мы сделаем бота, который будет нас снабжать умными мыслями. Точно такого, как на картинке:

Телеграм бот Умные Мысли

Можете испытать его в деле — вот имя: @SmartThoughtsBot. Обратили внимание на кнопочку «Навык Алисы»? Это потому, что бот является своеобразным «компаньоном» для одноименного навыка Алисы, т.е. он выполняет те же функции, что и навык Алисы и, возможно, что они смогут мирно сосуществовать рекламируя друг-друга. О том как создать навык Умные Мысли рассказано в статье Алиса приобретает навык. Сейчас (после внесения некоторых изменений уже после публикации вышеупомянутой статьи) на смартфоне этот навык будет выглядеть примерно так:

Навык Алисы Умные Мысли

Создание бота

Мне бы хотелось, чтобы этот туториал был полезен всем, в т.ч. и начинающим «ботостроителям». Поэтому в этом разделе я довольно подробно опишу как вообще создавать в Telegram‘е ботов. Для тех кому эта информация не требуются — переходите к следующим разделам.

Открываем приложение Telegaram, зовём отца всех ботов (у них всё как у людей) — @BotFather — и для начала дадим ему команду /help, чтобы освежить в памяти, что мы можем делать. Сейчас нас будет интересовать команда /newbot.

Создание нового бота

Поскольку описываемый здесь бот уже создан, для демонстрационных целей я создам на короткое время другого бота (потом его удалю). Назову его DemoHabrBot. Имена (username) всех телеграм-ботов должны заканчиваться на слово bot, например: MyCoolBot или my_cool_bot — это для ботов. Но сначала даём боту название (name) — а это для людей. Название может быть на любом языке, содержать пробелы, не обязано заканчиваться на слово bot, и даже не обязано быть уникальным. В данном примере я назвал этот бот Демо Хабр.

Название бота

Теперь выбираем боту имя (username, то, которое для ботов). Назовём его DemoHabrBot. Всё что относилось к названию бота (name) совсем не относится к его имени — username (или относится, но с точностью до наоборот). После успешного создания уникального имени бота, нам надо скопировать и сохранить (в строжайшей тайне!) токен, показанный на скриншоте красной стрелкой. С его помощью мы чуть позже установим исходящий из Telegram‘а вебхук на нашу Яндекс-функцию.

Имя бота

А сейчас дадим команду отцу всех ботов: /mybots, и он покажет нами список всех созданных нами ботов. Давайте пока оставим в покое свежеиспечённый бот Демо Хабр (он был создан чтобы показать как создавать ботов, но мы ещё им сегодня воспользуемся для других демонстрационных целей), и рассмотрим бот Умные Мысли (@SmartThoughtsBot). Нажимаем в списке ботов кнопку с его именем.

Здесь мы можем настроить нашего бота. Нажав кнопку Edit. мы перейдём на редактирование той или иной опции. Например, нажав на кнопку Edit Name мы можем изменить название бота, скажем вместо Умные Мысли, написать Бредовые Идеи. Botpic — это аватар бота, должен быть не менее 150 x 150 px. Description — это краткое описание, который пользователь видит при первом запуске бота, в качестве ответа на вопрос: Что может делать этот бот? About — ещё более краткое описание, которое передаётся с ссылкой на бот ( https://t.me/SmartThoughtsBot ) или при просмотре информации о нём.

Бот: описание и краткая информация

Нам осталось только настроить команды. Для этого нажимаем кнопку Edit Commands. Для стандартизации пользовательской практики Telegram рекомендует всегда использовать две команды: /start и /help, а если боту необходимы настройки — дополнительную команду /settings. Наш бот прост как шар, поэтому настройки ему пока не нужны. Прописываем две первых команды, которые потом мы обработаем в коде. Теперь, если в поле ввода пользователь введёт слеш (знак косой черты: /), появится список команд для их быстрого выбора. Всё как на картинке: слева — устанавливаем команды через бота-отца; справа эти команды уже доступны пользователям в нашем боте.

Установка и использование в боте команд

Яндекс-функция

Теперь, когда наш бот создан, переходим в Яндекс.Облако, чтобы создать функцию, которая будет выполнять код нашего бота. Если вы ещё не работали с Яндекс.Облаком почитайте материал Алиса в стране Битрикс, а затем — Яндекс-функции рассылают почту. Я почти уверен, что двух этих относительно небольших статей вам вполне будет достаточно для базового понимания предмета.

Итак, в консоли Яндекс.Облака в левом навигационном меню выбираем пункт Cloud Functions, и затем нажимаем кнопку Создать функцию. Присваиваем ей имя, а для себя — краткое описание.

Создание Яндекс-функции

После нажатия кнопки Создать и прошествии пары секунд, новая функция появится в списке всех функций. Нажимаем на её имя — это приведёт нас на страницу Обзор нашей функции. Здесь надо включить (On) переключатель Публичная функция, чтобы она стала доступна из внешнего (для Яндекс.Облака) мира, а значение полей Ссылка для вызова и Идентификатор — хранить в глубокой тайне от всех кроме себя самого и Telegram’a, чтобы вашу функцию не могли вызывать различные аферисты.

Свойства Яндекс-функции

Теперь с помощью левого меню переходим в Редактор функции. Давайте пока отложим на короткое время в сторону наши Умные Мысли, и создадим минимальную функцию-шаблон для проверки работоспособности нашего бота… Впрочем, в данном контексте эта функция и есть наш бот… Короче говоря, сейчас и прямо вот здесь мы сделаем простейшего бота, который будет «зеркалить» (т.е. отправлять назад) запросы пользователей. Этот шаблон можно использовать всегда при создании новых телеграм-ботов, чтобы убедиться, что связь с Telegram’ом работает нормально. Нажимаем Создать файл, называем его index.js, и в он-лайн Редакторе кода вставляем в этот файл следующий код:

В консоли Яндекс.Облака это должно выглядеть примерно так:

Код простейшего бота на Яндекс-функциях

Далее чуть ниже указываем Точку входаindex.bot, где index это имя файла (index.js), а bot — имя функции (module.exports.bot). Все остальные поля оставляем «как есть», и в правом верхнем углу нажимаем кнопку Создать версию. Через несколько секунд эта версия функции будет создана. В скором времени, после тестирования вебхука, мы создадим новую версию — Умные Мысли.

Точка входа Яндекс-функции

Объектное хранилище

Теперь, когда у нас создана Яндекс-функция, давайте, пока мы находимся в консоли Яндекс.Облака, создадим т.н. бакет (bucket, т.е. ведро по-русски, отнюдь не букет) для хранения файлов изображений, которые будут использоваться в нашем боте Умные Мысли. В левом навигационном меню выбираем пункт Object Storage, нажимаем кнопку Создать бакет, придумываем ему название, например, img-bucket, и, главное, Доступ на чтение объектов делаем публичным — иначе Telegram’у наших картинок не видать. Все остальные поля оставляем без изменений. Нажимаем кнопку Создать бакет.

Создание бакета.

После этого список всех бакетов может выглядеть примерно так (если это ваш единственный бакет):

Список бакетов

Сейчас я предлагаю нажать на имя бакета, и внутри него создать папку, чтобы упорядочить хранение картинок для разных своих приложений. Например, для телеграм-бота Умные Мысли я создал папку под названием tg-bot-smart-thoughts (ничего, я пойму этот шифр). Создайте и вы какую-нибудь.

Создание папки внутри бакета

Теперь можно нажать на имя папки, зайти в неё и загружать файлы:

Загрузка файла в папку в бакете

А нажав на имя файла — получить его URL для использования в нашем боте, и вообще — где либо (но, не публикуйте этот URL без надобности, поскольку трафик с Объектного хранилища тарифицируется).

Получение адреса файла в Объектном хранилище

GeekBrains

Вот, собственно, и всё с Объектным хранилищем. Теперь вы будете знать, что делать, когда увидите призыв загрузить туда файлы.

Вебхук

Сейчас мы установим вебхук — т.е. когда бот получит обновление (например, сообщение от юзера), с сервера Telegram в нашу Яндекс-функцию будет отправлен запрос (request) с данными. Вот строка, которую можно просто вставить в адресное поле браузера, и затем обновить страницу (это надо сделать всего один раз): https://api.telegram.org/bot/setWebHook?url=
Только заменим на токен полученный нами от бота-отца при создании нашего бота, а — на URL нашей Яндекс-функции. Минутку! Но ведь РоссКомЦензур запрещает провайдерам в РФ обслуживать адрес https://api.telegram.org . Да, верно. Но вы придумайте что-нибудь. Ведь можно же, например, попросить об этом свою бабушку в Украине, Израиле или Канаде — там нет никаких «росскомцензур», и один бог ведает, как люди живут без этого (UPD: В РФ уже снята блокировка Telegram — поэтому просить бабушку теперь не обязательно). В итоге, запрос-ответ при установки вебхука должен выглядеть так:

Установка вебхука

Тестируем. Должно «зеркалить».

Первое тестирование бота

Так и есть. Наши поздравления — теперь Яндекс-функция стала Telegram-ботом!

Умные Мысли

А теперь делаем Умные Мысли. Код открыт и и лежит на GitHub. Он довольно хорошо прокомментирован, и в нём всего сотня строк. Читайте его как оперная дива либретто!

Код бота Умные Мысли

Склонируйте проект и установите зависимости:

Внесите необходимые вам изменения в файл index.js (опционально; можно ничего не менять). Создайте zip-архив, с файлом index.js и папкой node_modules внутри, например, под названием smart.zip.

ZIP архив бота Умные Мысли

Теперь перейдите в консоле к нашей Яндекс-функции, выберите вкладку ZIP-архив, нажмите кнопку Выбрать файл, и загрузите наш архив smart.zip. Наконец, в правом верхнем углу нажмите кнопку Создать версию.

Создание рабочей версии бота

Через несколько секунд, когда функция обновится, протестируем снова нашего бота. Теперь он уже не «зеркалит», а поставляет умные мысли!

Запускаем телеграм-бота на сервере

Тогда он будет работать круглые сутки, а вы — отдыхать.

Не так давно мы создали телеграм-бота на Python: можно было написать ему свой знак зодиака, а он в ответ давал предсказание о долгой счастливой жизни. Но у бота есть недостаток: он работает, пока запущена программа на нашем компьютере. Если мы её остановим или выключим компьютер, бот тоже перестанет отвечать на сообщения.

Вот что мы сделаем, чтобы бот работал независимо от всего:

  1. Выберем сервер.
  2. Подготовим программу для работы на нём.
  3. Зальём программу на сервер.
  4. Настроим сервер, чтобы он исполнял программу.

Выбираем сервер

Нам нужен сервер, который умеет работать с Python и запускать файлы программы автоматически. На самом деле он у нас уже есть — на нём крутится сайт mihailmaximov.ru. Если вы всё пропустили — держите подборку:

Тот хостинг, который мы выбрали для проектов, уже умеет запускать Python-файлы. Если вы пользуетесь другим сервисом, то проверьте, умеет ли он то же самое.

Готовим программу и отправляем её на сервер

Единственное, что нужно добавить в наш код телеграм-бота, — специальную команду интерпретатору, чтобы он знал, как работать с нашим файлом. Но перед этим нужно проверить, какая версия Python на нём установлена.

Чтобы это узнать, соединимся с сервером по протоколу SSH и спросим у него напрямую. Для этого используем программу Putty, а настройки подключения возьмём в личном кабинете хостинга:

Этих данных достаточно, чтобы управлять сервером по SSH.

Вставляем их в Putty и подключаемся. Помните, что для безопасности во время ввода пароля курсор стоит на месте, чтобы никто не смог выяснить, сколько символов вы набираете. Когда подключились, вводим команду python3.3 -V — она покажет, есть ли на сервере поддержка этой версии Python:

Сервер говорит, что у него установлена версия Python 3.3.5 — нам этого хватит. Теперь добавляем в самое начало нашего файла с программой такую строчку:

В статье о том, как опубликовать сайт в интернете, мы рассказывали, как залить файлы на сервер. Это умение нам сейчас пригодится: сохраняем нашу программу с гороскопом как файл с расширением .py и отправляем его на сервер в папку cgi-bin (то, что лежит в этой папке, никто не увидит):

Запускаем телеграм-бота на сервере

Настраиваем сервер

Теперь научим сервер понимать, как работать с нашей программой. Для этого в корне сайта находим файл .htaccess и добавляем в него такую строчку:

AddHandler cgi-script .py

Если у вас такого файла нет — создайте его и не забудьте про точку в самом начале названия.

Последнее, что осталось сделать, — настроить права доступа у файла с программой. Находим её среди файлов хостинга и выставляем права 755 или rwxrwxr-x:

Запускаем телеграм-бота на сервере

Теперь с помощью Putty снова подключаемся к серверу и настраиваем рабочее окружение. Это как будто виртуальная песочница, где мы сможем ставить нужные модули для Python, чтобы не мешать остальным пользователям сервера.

В SSH-терминале пишем по очереди такие команды (вместо .thecode можно написать название каталога, которое вам по душе):

virtualenv .thecode source .thecode/bin/activate

Эти две команды создадут виртуальное пространство для запуска Python-файлов.

Теперь установим Python-модуль для работы с Телеграмом:

pip install pytelegrambotapi

Когда установка закончится, пишем такую команду:

nohup python3 /home/t/thecode/osebe/public_html/cgi-bin/telegoroskop.py

/home/t/thecode/osebe/ — это наш путь к папке cgi-bin, а у вас он будет другим. Поменяйте путь на свой и запускайте.

Чтобы программа продолжала работать после того, как мы закроем SSH-клиент, в самом начале пишем команду nohup .

Результат проекта — бот @TheCode_Baboolya_bot.

Что дальше

Мы сделали самые базовые вещи — запустили скрипт на сервере и сделали так, чтобы он работал там постоянно. Но вот как можно это улучшить:

GeekBrains

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *