Pixar напрягся
Будни офиса Miro
Бонобо Канзи
Рабочее место для кота
Протесты против Маска
«Офису» — 20 лет
Ламба из картона
Дорожка для аквабега
Jaguar Type 00 в Париже
Xiaomi SU7 Ultra
Полёт над Луной
Автопилот Tesla на бездорожье
«Игровые» Google Maps

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Рассказываем, как с помощью бессерверных вычислений сделать своего чат-бота в Telegram с нуля. Он сможет отвечать на запросы простыми сообщениями и отправлять картинки. Подойдет для организации процессов разработки, поддержки и продаж.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Мы напишем простого бота-заготовку, которого можно использовать для написания полноценного приложения, добавив нужную вам функциональность.

Такого бота можно написать с использованием serverless-подхода в крупных облаках, например, с помощью AWS Lambda или Google Cloud Functions. Мы напишем функцию на Yandex Cloud Function, сделаем Object Storage, чтобы хранить файлы, и спрячем нашу serverless-архитектуру от пользователя с помощью сервиса Yandex API Gateway, который позволяет выступить фронтом для пользователя.

Шаг 1. Создайте бота с помощью BotFather

Прежде всего нужно зарегистрировать наше приложение в Telegram. Найдите в мессенджере главного бота BotFather и наберите команду /newbot. Для этого достаточно написать его имя user name и account name. В нашем случае account name — Serverless Hello Telegram Bot, username — ServerlessHelloTelegramBot. В результате вы получите token, запомните его, он потребуется на следующих этапах.

С помощью команды /setuserpic установите иконку для вашего бота. В нашем случае это картинка с именем sayhello.png.

На этом этапе у нас уже есть заготовка для бота. Дальше переходим в Yandex.Cloud и начинаем создавать инфраструктуру для бота.

Шаг 2. Создайте сервисный аккаунт

Войдите в ваш рабочий каталог.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Создайте новый сервисный аккаунт для работы telegram-бота. Например, serverless-telegram. Задайте роли для него: serverless.functions.invoker и editor. Роль serverless.functions.invoker необходима для запуска функций.

Обратите внимание: editor перекрывает роль serverless.function.invoker.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Запомните идентификатор созданного сервисного аккаунта.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Шаг 3. Создайте Object Storage

Нам нужно где-то хранить файлы для бота. Перейдите в каталог и выберете сервис Object Storage. Нажмите кнопку Создать бакет.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Введите имя бакета: for-serverless-hello-telegram-bot. Затем задайте максимальный размер в 1 ГБ и установите параметр Доступ на чтение объектов — Публичный.

Когда мы размещаем объект, есть возможность поместить его в два разных хранилища: стандартное с быстрым доступом или холодное. Холодное — это долговременное хранилище, оно отдельно тарифицируется и чаще всего используется для бэкапов. В нашем случае выбираем стандартное.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Загрузите картинку в созданный бакет. В нашем случае это тот же самый файл, который мы установили аватаром для бота: sayhello.png. Получите ссылку на загруженную картинку и проверьте её доступность по ссылке в браузере.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Шаг 4. Опубликуйте картинку через API Gateway

Давайте опубликуем нашу картинку через сервис API Gateway. Таким образом мы создадим заготовку, чтобы пользователь мог работать с нашим telegram-ботом, но не видел, что находится внутри. Перейдите в каталог и выберете сервис API Gateway. Нажмите кнопку Создать API-шлюз:

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Введите имя for-serverless-hello-telegram-bot и вставьте спецификацию:

openapi: 3.0.0 info: title: for-serverless-hello-telegram-bot version: 1.0.0 paths: /sayhello.png: get: x-yc-apigateway-integration: type: object-storage bucket: for-serverless-hello-telegram-bot object: sayhello.png presigned_redirect: false service_account: IDYOURACCOUNT operationId: static

Обязательно замените:

· sayhello.png — на имя вашей картинки (два раза).

· for-serverless-hello-telegram-bot — на имя вашего бакета.

· IDYOURACCOUNT— на id вашего сервисного аккаунта, созданного ранее.

После опубликования API-шлюза в спецификации появится секция servers с адресом url. Через этот адресом вы сможете обратиться к ранее опубликованной картинке. В нашем случае к sayhello.png.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Проверяем, все работает. Отлично! Мы соединили два сервиса. У нас, с одной стороны, есть Object Storage, в котором что-то хранится. И есть API Gateway, который публично предоставляет доступ к каким-то ресурсам.

Шаг 5. Создадим Cloud Function

Идем дальше. Теперь нам нужно сделать функцию. Перейдите в каталог и выберете сервис Cloud Functions. Нажмите кнопку Создать функцию. Задайте имя. В нашем случае: fshtb-function.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Мы создали объект, но сама функция еще не создана. Нам необходимо выбрать среду выполнения. Внутри Yandex.Cloud несколько разных сред. Мы выберем nodejs, у нас есть там python.

Выберете среду выполнения node12js-preview.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Создайте два файла: index.js и package.json. Здесь мы используем известный в JavaScript-комьюнити фреймфорк Telegraf.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Для файла index.js скопируйте следующий код:

const { Telegraf } = require('telegraf'); const bot = new Telegraf(process.env.BOT_TOKEN); bot.start((ctx) => ctx.reply(`Hello. \nMy name Serverless Hello Teleram Bot \nI'm working on Cloud Function in the Yandex.Cloud.`)) bot.help((ctx) => ctx.reply(`Hello, ${ctx.message.from.username}.\nI can say Hello and nothing more`)) bot.on('text', (ctx) => { ctx.reply(`Hello, ${ctx.message.from.username}`); }); module.exports.handler = async function (event, context) { const message = JSON.parse(event.body); await bot.handleUpdate(message); return { statusCode: 200, body: '', }; };

Этим мы научили нашего бота отвечать на команды /start, /help, а также на любой написанный текст. Но давайте сразу изменим функцию так, чтобы она на любой текст отправляла картинку. Для этого внесите изменение в файл index.js.

bot.on('text', (ctx) => { ctx.replyWithPhoto('YOURAPIGWURL/sayhello.png'); ctx.reply(`Hello, ${ctx.message.from.username}`);

Важно: не забудьте заменить YOURAPIGWURL на url из секции servers вашего API-шлюза. После создания версии функции, ваш telegram-бот будет отправлять вам картинку из Object Storage, опубликованную через API-шлюз.

Для файла package.json введите следующий код:

{ "name": "ycf-telegram-example", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "MIT", "dependencies": { "telegraf": "^3.38.0" } }

Укажите точку входа index.handler. Увеличьте таймаут до 5 секунд. В переменные окружения добавьте переменную BOT_TOKEN со значением токена вашего telegram-бота, полученного ранее.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Обязательно нажмите кнопку — Создать версию. После создания функции сделайте ее публичной. Запомните идентификатор вашей функции.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Шаг 6. Свяжем функцию и бота в Telegram

Теперь нам нужно соединить нашу функцию с ботом в Telegram. Для этого вернитесь в сервис API Gateway и выберете ранее созданный API-шлюз с именем for-serverless-hello-telegram-bot. Измените его спецификацию — в конце добавьте в нее секцию fshtb-function:

/fshtb-function: post: x-yc-apigateway-integration: type: cloud-functions function_id: IDYOURFUNCTION operationId: fshtb-function

ЗаменитеIDYOURFUNCTION на id вашей функции, созданной ранее. Сохраните изменения.

Делаем чат-бот в Telegram на функциях: пошаговая инструкция

Теперь для создания связи между ранее созданным телеграм-ботом и вашей функцией нужно запустить команду в терминале (командной строке).

curl --request POST --url https://api.telegram.org/botYOURTOKEN/setWebhook --header 'content-type: application/json' --data '{"url": "YOURAPIGWURL/fshtb-function"}'

Замените YOURTOKEN на токен вашего telegram-бота и YOURAPIGWURL на url из секции servers вашего API-шлюза. Нажмите Enter. После положительного ответа связь создана, и вы сможете поговорить со своим ботом. Если не вылезать из лимитов Free tier, ваш бот обойдется вам в 0 рублей.

Оставляем полезные ссылки на каналы и сообщества Serverless в мире и в России, где вы сможете найти еще больше полезных примеров использования функций:

Подписывайтесь на блог Yandex.Cloud, чтобы узнавать еще больше новостей и историй об IT и бизнесе.

Другие истории, которые активно читают наши подписчики:

3535
реклама
разместить
25 комментариев

  мы используем известный в java-комьюнити фреймфорк Telegraf

Кажется, вы хотели написать «JavaScript-комьюнити»

12

Спасибо! Поправили и объяснили нашему копирайтеру:) 

7

Слишком много движений лишних.. а под капотом все равно интерпретаторы питона и ещё там чего то. Не проще ли получить API Key и самому поднять сервер бота если надо, дома либо арендовать вм у провайдера? И бота умного сделать можно, а не вот эти ваши картинки или единообразные ответы) Учите ЯП, иначе всегда будете в таких ситуациях зависимы от тех, кто их когда то освоил + платить им за пустяковых ботов.

5

Всё правильно!
А то ишь, понапишут микросервисов бессерверных своих, и давай по подъездам докером через кубернетис долбиться

9

Спасибо за инструкцию. Статью в закладки. Попробую повторить на досуге. Затем отпишусь... 👨🏻‍💻

4

Если не вылезать из лимитов Free tier, ваш бот обойдется вам в 0 рублей.

До 16 октября как я понимаю. После этой даты лимиты могут урезать, а потом ещё и ещё.

4
Раскрывать всегда
Сбой у Системы быстрых платежей — СБП-переводы не работают у крупнейших банков

Среди них «Яндекс», «Т-Банк», «Альфа-банк», ВТБ и другие.

Сбой у Системы быстрых платежей — СБП-переводы не работают у крупнейших банков
200
88
11
реклама
разместить
День 1127: дилеры начали предлагать скидки до 1 млн рублей на китайские машины из-за затоваривания складов

Собираем новости, события и мнения о рынках, банках и реакциях компаний.

Фото ТАСС
2525
33
Какая скидка... В здравом уме это г@вно никто не возьмет. Если б ввели акцию "миллион тому, кто заберет машину со склада", тогда еще можно было бы подумать.
[Кейс] 97 миллионов показов и 237% ROAS: разбор рекламной кампании для игры на ПК

Когда стоит задача вернуть игроков и привлечь новых, важно не просто сфокусироваться на одном канале. В этой кампании для battle royale игры на ПК мы использовали подход, который сочетает лучшие традиции performance-рекламы и практики работы с программатик-трафиком. Через точную настройку таргетинга и правильную работу с креативами удалось не тольк…

[Кейс] 97 миллионов показов и 237% ROAS: разбор рекламной кампании для игры на ПК
Ненавидеть свою работу в IT я начал на третий год

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

Ненавидеть свою работу в IT я начал на третий год
1515
11
11
Переехал в Израиль и открыл там агентство по репатриации. 2,5 млн рублей на русских мигрантах

Захотелось в жизни перемен, всё бросил и уехал в Израиль. Открыл бизнес, теперь помогаю переезжать таким же непоседам.

Переехал в Израиль и открыл там агентство по репатриации. 2,5 млн рублей на русских мигрантах
66
66
11
Пассивный доход за февраль — всего 29 806 рублей. Худший месяц за весь год

Продолжаю подсчитывать пассивный доход — зарплату, которая капает с акций, облигаций и депозита. Февраль и март — самые скупые месяцы на дивиденды по акциям, но что поделать. Считаю и грущу.

Пассивный доход за февраль — всего 29 806 рублей. Худший месяц за весь год
1313
11
Как использовать новую функцию Elements в Kling AI

В этой статье мы рассмотрим, как использовать новую функцию Elements в Kling AI создавать для создания ярких и оригинальных видеороликов из обычных фотографий, основываясь на примере сервиса YES AI. Создание оригинального контента поможет вам успешно выделяться среди множества цифровых проектов и привлечь внимание аудитории.

Как использовать новую функцию Elements в Kling AI
11
Власти Киото утвердили новые ставки налога на размещение туристов в гостиницах — максимум 10 тысяч иен за ночь

Его начнут взимать с 1 марта 2026 года.

Источник фото: David Edelstein / Unsplash
44
22
OpenAI добавила в GPT‑4o «свой самый продвинутый» генератор изображений

Пользователи смогут создавать не только красивые, но и «практичные» картинки вроде графиков и плакатов, считает компания.

Источник здесь и далее: OpenAI
1919
44
11
реклама
разместить
Госдума приняла законопроект о запрете рекламы на «нежелательных» и «запрещённых» сайтах — например, в Instagram* и Facebook*

За нарушение грозят штрафы.

4242
2323
33
22
11
"Порой даже не задумываясь, они переводят деньги тем, кто намеренно вредит нашей стране" Да вроде бы эти деньги не депутатам Госдумы уходят.
Google выпустила «рассуждающую» ИИ-модель Gemini 2.5

Она превзошла модели от OpenAI, Anthropic и DeepSeek в тестах.

1919
66
Ждем осуждающие модели
Китайская DeepSeek обновила модель V3: в соцсетях заметили, что она «лучше» рассуждающей R1 в программировании

Компания заявила, что новая версия сравнима с Claude 3.7 Sonnet и превосходит GPT-4.5.

2626
33
22
11
11
[]