Всем привет! Меня зовут Павлов Виктор, я являюсь практикантом-преподавателем информатики в одном из колледжей России. Так вот, для студентов мы стараемся внедрить в учебный процесс новейшие технологии и «Serverless» боты являются одним из таких направлений.
Эта статья навеяна популярностью ресурса среди студентов-программистов, но я постараюсь рассказать всё максимально просто для совсем начинающих программистов. В итоге создадим простого Эхо-бота, как заготовку для различных модификаций.
P.S. Также статья навеяна отсутствием туториала на языке Python, на Nodejs есть хороший туториал.
Ссылка на документацию Yandex Cloud Functions
Ссылка на документацию Telegram API.
Шаг 1: Регистрация и вход в платформу Яндекс облако
Шаг 2: Вход в Functions. Здесь нужно в левой панели «Консоли управления» выбрать «Cloud Functions»
![image](https://habrastorage.org/r/w780q1/webt/n0/cy/17/n0cy17sqinzx4f4lvurkphthk18.jpeg)
Шаг 3: Жмем кнопку
. После чего задаем осмысленное имя функции и описание.
Шаг 4: Выбираем вкладку «Редактор»
![image](https://habrastorage.org/r/w780q1/webt/mv/7y/oo/mv7yoocurlrctqypomif2v_fnwg.jpeg)
После чего у нас откроется окно управления кодом нашей функции. Здесь мы можем выбрать:
1) «Среду выполнения», в нашем случае это python3.7
2) «Способы» отвечают за то, как будет передан код в функцию. В данной статье мы будет использовать прямой «Редактор код» в качестве наипростейшего примера.
3) «Точка входа» отвечает на то, какая функция будет принимать запрос и будет является стартом действия нашей функции, укажем её чуть позже.
4) Далее идут «Параметры», предлагаю их оставить как есть.
Шаг 5: Убеждаемся, что у нас выставлены нужные «Среда выполнения» и «Способ»
![image](https://habrastorage.org/r/w780q1/webt/lu/8u/ho/lu8uhoo5wg7q46ecj6we7o90_rm.jpeg)
Затем кликаем на «Создать файл», назовем его main.py.
Шаг 6: У вас откроется редактор кода, где мы можем создать функцию-обработчик запроса. Назовем её handler и вставим данный код:
В «Точке входа» нужно указать данную функцию как начало работы скрипта. Пишем main.handler. Должно быть так:
![image](https://habrastorage.org/r/w780q1/webt/xx/tt/pc/xxttpcjfqxvxw6uwycsd-il_bjo.jpeg)
После чего кликаем «Создать версию» и ждем, пока нас перекинет на вкладку «Обзор».
Шаг 7: Тут нас интересует «Ссылка для вызова» и переключатель «Публичная функция». Жмем переключатель и запоминаем где лежит ссылка для вызова.
![image](https://habrastorage.org/r/w780q1/webt/f1/it/vi/f1itvi-6rcny-m5sje4yanqvgq0.jpeg)
Шаг 8: Создаем телеграм бота и копируем его токен. Вам нужно создать запрос типа:
Где bot_token — ваш токен бота из телеграма, а webhook_url это «Ссылка для вызова» из функций (шаг 7). Данный запрос следует собранным вставить в строку браузера.
Шаг 9: Отправим боту «привет» и посмотрим, что в итоге получили.
![image](https://habrastorage.org/r/w780q1/webt/ki/3s/fv/ki3sfvxk1vu4lqfa6f45qjiba6e.jpeg)
Спасибо за внимание! Если вы дочитали данную статью, то я буду рад различным предложением по улучшению/дополнению/замечаниям данной статьи.
Эта статья навеяна популярностью ресурса среди студентов-программистов, но я постараюсь рассказать всё максимально просто для совсем начинающих программистов. В итоге создадим простого Эхо-бота, как заготовку для различных модификаций.
P.S. Также статья навеяна отсутствием туториала на языке Python, на Nodejs есть хороший туториал.
Ссылка на документацию Yandex Cloud Functions
Ссылка на документацию Telegram API.
Шаг 1: Регистрация и вход в платформу Яндекс облако
Примечание
Вы можете активировать пробный период на небольшое время. Его скорее всего хватит на несколько проектов, но Serverless боты для обучения выйдут вам определенно дешевле VPS. На месяц использования хватит закинутой «сотки» на счет после истечения пробного периода.
Шаг 2: Вход в Functions. Здесь нужно в левой панели «Консоли управления» выбрать «Cloud Functions»
![image](https://habrastorage.org/webt/n0/cy/17/n0cy17sqinzx4f4lvurkphthk18.jpeg)
Шаг 3: Жмем кнопку
![image](https://habrastorage.org/webt/h8/g3/7w/h8g37wqf8ij-vltzzduyyqvymvi.jpeg)
Совет
Мы используем названием функций в формате <целевая платформа>-<действие>-<определение>.
Например telegram-study-bot, weather-get-api и т.д.
В описании же можно указать технологии. Например language=python3.7, lib=telebot
Например telegram-study-bot, weather-get-api и т.д.
В описании же можно указать технологии. Например language=python3.7, lib=telebot
Шаг 4: Выбираем вкладку «Редактор»
![image](https://habrastorage.org/webt/mv/7y/oo/mv7yoocurlrctqypomif2v_fnwg.jpeg)
После чего у нас откроется окно управления кодом нашей функции. Здесь мы можем выбрать:
1) «Среду выполнения», в нашем случае это python3.7
По поводу зависимостей
я выбираю preview версию, так как в только ней можно устанавливать различные зависимости (На состояние 02.10.2020 года)
2) «Способы» отвечают за то, как будет передан код в функцию. В данной статье мы будет использовать прямой «Редактор код» в качестве наипростейшего примера.
3) «Точка входа» отвечает на то, какая функция будет принимать запрос и будет является стартом действия нашей функции, укажем её чуть позже.
4) Далее идут «Параметры», предлагаю их оставить как есть.
Если захотите использовать авторизации
В самом последнем пункте можно выставить переменные окружения, например для различных токенов и другой информации, которую не следует показывать другим людям.
Шаг 5: Убеждаемся, что у нас выставлены нужные «Среда выполнения» и «Способ»
![image](https://habrastorage.org/webt/lu/8u/ho/lu8uhoo5wg7q46ecj6we7o90_rm.jpeg)
Затем кликаем на «Создать файл», назовем его main.py.
Шаг 6: У вас откроется редактор кода, где мы можем создать функцию-обработчик запроса. Назовем её handler и вставим данный код:
import json
def handler(event, context):
body = json.loads(event['body'])
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json'
},
'body': json.dumps({
'method': 'sendMessage',
'chat_id': body['message']['chat']['id'],
'text': body['message']['text']
}),
'isBase64Encoded': False
}
Разбираем код
Первой строкой мы импортируем модуль «json», он нам нужен чтобы перевести body запроса из json-строки в python dict.
Функция handler у нас принимает два аргумента, первое это данные запроса, второе данные функции. Про них можно прочитать тут.
Далее в переменную body мы заносим Python словарь преобразовывая его функцией json.loads из body запроса.
Далее, по документации webhook telegram мы возвращаем нужного формата ответ, упаковывая в body, с помощью json.dumps, словарь с нужными нам данными.
Функция handler у нас принимает два аргумента, первое это данные запроса, второе данные функции. Про них можно прочитать тут.
Далее в переменную body мы заносим Python словарь преобразовывая его функцией json.loads из body запроса.
Далее, по документации webhook telegram мы возвращаем нужного формата ответ, упаковывая в body, с помощью json.dumps, словарь с нужными нам данными.
ВНИМАНИЕ!!!
В «Точке входа» нужно указать данную функцию как начало работы скрипта. Пишем main.handler. Должно быть так:
![image](https://habrastorage.org/webt/xx/tt/pc/xxttpcjfqxvxw6uwycsd-il_bjo.jpeg)
После чего кликаем «Создать версию» и ждем, пока нас перекинет на вкладку «Обзор».
Шаг 7: Тут нас интересует «Ссылка для вызова» и переключатель «Публичная функция». Жмем переключатель и запоминаем где лежит ссылка для вызова.
![image](https://habrastorage.org/webt/f1/it/vi/f1itvi-6rcny-m5sje4yanqvgq0.jpeg)
Шаг 8: Создаем телеграм бота и копируем его токен. Вам нужно создать запрос типа:
https://api.telegram.org/bot<bot_token>/setWebHook?url=<webhook_url>
Где bot_token — ваш токен бота из телеграма, а webhook_url это «Ссылка для вызова» из функций (шаг 7). Данный запрос следует собранным вставить в строку браузера.
Пример запроса
https://api.telegram.org/bot1234567:AAAAAAAAAAAAAAA/setWebHook?url=https://functions.yandexcloud.net/asdjaskjdasdjasd
Шаг 9: Отправим боту «привет» и посмотрим, что в итоге получили.
![image](https://habrastorage.org/webt/ki/3s/fv/ki3sfvxk1vu4lqfa6f45qjiba6e.jpeg)
Спасибо за внимание! Если вы дочитали данную статью, то я буду рад различным предложением по улучшению/дополнению/замечаниям данной статьи.