05.10.2020       Выпуск 355 (05.10.2020 - 11.10.2020)       Статьи

Serverless телеграм бот с использованием Яндекс облака

Для студентов мы стараемся внедрить в учебный процесс новейшие технологии и «Serverless» боты являются одним из таких направлений.

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

Читать>>




Экспериментальная функция:

Ниже вы видите текст статьи по ссылке. По нему можно быстро понять ссылка достойна прочтения или нет

Просим обратить внимание, что текст по ссылке и здесь может не совпадать.

Всем привет! Меня зовут Павлов Виктор, я являюсь практикантом-преподавателем информатики в одном из колледжей России. Так вот, для студентов мы стараемся внедрить в учебный процесс новейшие технологии и «Serverless» боты являются одним из таких направлений.

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

P.S. Также статья навеяна отсутствием туториала на языке Python, на Nodejs есть

хороший туториал

.

Ссылка на документацию Yandex Cloud Functions Ссылка на документацию Telegram API

.


Шаг 1

: Регистрация и вход в платформу

Яндекс облако
Примечание

Вы можете активировать

пробный период

на небольшое время. Его скорее всего хватит на несколько проектов, но Serverless боты для обучения выйдут вам определенно дешевле VPS. На месяц использования хватит закинутой «сотки» на счет после истечения пробного периода.

Шаг 2

: Вход в Functions. Здесь нужно в левой панели «Консоли управления» выбрать «Cloud Functions»

imageШаг 3

: Жмем кнопку

image

. После чего задаем осмысленное имя функции и описание.

Совет

Мы используем названием функций в формате <целевая платформа>-<действие>-<определение>.

Например telegram-study-bot, weather-get-api и т.д.

В описании же можно указать технологии. Например language=python3.7, lib=telebot





Шаг 4

: Выбираем вкладку «Редактор»

image

После чего у нас откроется окно управления кодом нашей функции. Здесь мы можем выбрать:

1) «Среду выполнения», в нашем случае это python3.7

По поводу зависимостей

я выбираю preview версию, так как в только ней можно устанавливать различные зависимости (На состояние 02.10.2020 года)

2) «Способы» отвечают за то, как будет передан код в функцию. В данной статье мы будет использовать прямой «Редактор код» в качестве наипростейшего примера.

3) «Точка входа» отвечает на то, какая функция будет принимать запрос и будет является стартом действия нашей функции, укажем её чуть позже.

4) Далее идут «Параметры», предлагаю их оставить как есть.

Если захотите использовать авторизации

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

Шаг 5

: Убеждаемся, что у нас выставлены нужные «Среда выполнения» и «Способ»

image

Затем кликаем на «Создать файл», назовем его 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, словарь с нужными нам данными.

ВНИМАНИЕ!!!

В «Точке входа» нужно указать данную функцию как начало работы скрипта. Пишем

main.handler

. Должно быть так:

image

После чего кликаем «Создать версию» и ждем, пока нас перекинет на вкладку «Обзор».

Шаг 7

: Тут нас интересует «Ссылка для вызова» и переключатель «Публичная функция». Жмем переключатель и

запоминаем

где лежит ссылка для вызова.

imageШаг 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

Спасибо за внимание! Если вы дочитали данную статью, то я буду рад различным предложением по улучшению/дополнению/замечаниям данной статьи.






Разместим вашу рекламу

Пиши: mail@pythondigest.ru

Нашли опечатку?

Выделите фрагмент и отправьте нажатием Ctrl+Enter.

Система Orphus