Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex API Gateway
  • Начало работы
    • Все практические руководства
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка навыка Алисы и сайта с авторизацией
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка Telegram-бота для распознавания текста и аудио
    • Разработка пользовательской интеграции
    • Разработка CRUD API для сервиса фильмов
    • Работа с API-шлюзом по протоколу WebSocket
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Построение пайплайна CI/CD в GitLab с использованием serverless-продуктов
    • Интерактивная отладка функций Cloud Functions
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Канареечный релиз функции Cloud Functions
    • Использование API Gateway для настройки синтеза речи в Yandex SpeechKit
    • Запуск контейнерного приложения в Yandex Serverless Containers
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Защита API Gateway при помощи Smart Web Security
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте ресурсы
  • Зарегистрируйте Telegram-бота
  • Опубликуйте изображение для бота
  • Создайте бакет в Object Storage
  • Загрузите изображение в бакет
  • Получите ссылку на загруженное изображение
  • Создайте API-шлюз
  • Создайте функцию
  • Настройте связь между функцией и Telegram-ботом
  • Проверьте работу Telegram-бота
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Разработка Telegram-бота

Как создать бота в Telegram

Статья создана
Yandex Cloud
Улучшена
Anton P.
Обновлена 10 марта 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Подготовьте ресурсы
  • Зарегистрируйте Telegram-бота
  • Опубликуйте изображение для бота
    • Создайте бакет в Object Storage
    • Загрузите изображение в бакет
    • Получите ссылку на загруженное изображение
  • Создайте API-шлюз
  • Создайте функцию
  • Настройте связь между функцией и Telegram-ботом
  • Проверьте работу Telegram-бота
  • Как удалить созданные ресурсы

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

Смотреть видео на YouTube.

Чтобы создать бота:

  1. Подготовьте окружение.
  2. Подготовьте ресурсы.
  3. Зарегистрируйте Telegram-бота.
  4. Опубликуйте изображение для бота.
  5. Создайте API-шлюз.
  6. Создайте функцию.
  7. Настройте связь между функцией и Telegram-ботом.
  8. Проверьте работу Telegram-бота.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работыПеред началом работы

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

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

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки Telegram-бота входят:

  • плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Cloud Functions);
  • плата за объем хранилища, занятый данными, количество операций с данными и исходящий трафик (см. тарифы Object Storage);
  • плата за количество запросов к созданному API-шлюзу и исходящий трафик (см. тарифы Yandex API Gateway).

Подготовьте ресурсыПодготовьте ресурсы

  1. Скачайте архив с файлами, необходимыми для создания бота.
  2. Создайте сервисный аккаунт и назначьте ему роли editor и functions.functionInvoker на ваш каталог.

Зарегистрируйте Telegram-ботаЗарегистрируйте Telegram-бота

Зарегистрируйте вашего бота в Telegram и получите токен.

  1. Для регистрации нового бота запустите бота BotFather и отправьте команду:

    /newbot
    
  2. В поле name укажите имя создаваемого бота, например Serverless Hello Telegram Bot. Это имя увидят пользователи при общении с ботом.

  3. В поле username укажите имя пользователя создаваемого бота, например ServerlessHelloTelegramBot. По имени пользователя можно будет найти бота в Telegram. Имя пользователя должно оканчиваться на ...Bot или ..._bot.

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

  4. Установите иконку для бота — файл sayhello.png из сохраненного архива. Отправьте боту BotFather команду:

    /setuserpic
    

Опубликуйте изображение для ботаОпубликуйте изображение для бота

Чтобы бот отправлял изображение в ответ на сообщения пользователя, создайте бакет в Object Storage и загрузите в него файл sayhello.png из сохраненного архива.

Создайте бакет в Object StorageСоздайте бакет в Object Storage

Консоль управления
  1. В консоли управления выберите каталог, в котором хотите создать бакет.

  2. Выберите сервис Object Storage.

  3. Нажмите кнопку Создать бакет.

  4. На странице создания бакета:

    1. Введите имя бакета. Сохраните имя бакета, оно потребуется в дальнейшем.

    2. Укажите настройки бакета:

      • Макс. размер — 1 ГБ;
      • Доступ на чтение объектов — Публичный;
      • Класс хранилища — Стандартное.
    3. Нажмите кнопку Создать бакет.

Загрузите изображение в бакетЗагрузите изображение в бакет

Консоль управления
  1. В консоли управления выберите каталог, в котором находится ранее созданный бакет.
  2. Выберите сервис Object Storage.
  3. Выберите ранее созданный бакет.
  4. Нажмите Загрузить.
  5. В появившемся окне выберите файл sayhello.png из сохраненного архива. Консоль управления отобразит файл, выбранный для загрузки.
  6. Нажмите Загрузить.

Получите ссылку на загруженное изображениеПолучите ссылку на загруженное изображение

Консоль управления
  1. В консоли управления выберите каталог, в котором находится ранее созданный бакет.
  2. Выберите сервис Object Storage.
  3. Выберите ранее созданный бакет.
  4. Выберите файл sayhello.png.
  5. Нажмите кнопку Получить ссылку.
  6. Проверьте доступность изображения по ссылке в браузере.

Создайте API-шлюзСоздайте API-шлюз

Создайте и сконфигурируйте API-шлюз.

Консоль управления
  1. В консоли управления выберите каталог, в котором хотите создать API-шлюз.

  2. Выберите сервис API Gateway.

  3. Нажмите кнопку Создать API-шлюз.

  4. Введите имя шлюза — for-serverless-hello-telegram-bot.

  5. Очистите содержимое поля Спецификация и вставьте в него следующий код:

    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: <имя_бакета>
            object: sayhello.png
            presigned_redirect: false
            service_account_id: <идентификатор_сервисного_аккаунта>
          operationId: static
    

    Где:

    • bucket — имя бакета;
    • service_account_id — идентификатор сервисного аккаунта, созданного ранее при подготовке ресурсов.
  6. Нажмите кнопку Создать.

  7. Выберите созданный API-шлюз. Сохраните значение поля Служебный домен, оно потребуется в дальнейшем.

Создайте функциюСоздайте функцию

Чтобы Telegram-бот отвечал на команды /start, /help и отправлял изображение в ответ на любой другой текст, создайте функцию.

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

  2. Выберите сервис Cloud Functions.

  3. Нажмите кнопку Создать функцию.

  4. Введите имя функции — fshtb-function.

  5. Нажмите кнопку Создать.

  6. В блоке Редактор выберите среду выполнения Node.js и нажмите Продолжить.

  7. В блоке Код функции очистите содержимое файла index.js и вставьте в него следующий код. Вместо <домен_API-шлюза> укажите служебный домен API-шлюза.

    const { Telegraf } = require('telegraf');
    
    const bot = new Telegraf(process.env.BOT_TOKEN);
    bot.start((ctx) => ctx.reply(`Hello. \nMy name Serverless Hello Telegram 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.replyWithPhoto({url: '<домен_API-шлюза>/sayhello.png'});
        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: '',
        };
    };
    
  8. В блоке Код функции создайте файл 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": "^4.12.0"
      }
    }
    
  9. Укажите следующие параметры:

    • Среда выполнения — nodejs16;
    • Точка входа — index.handler;
    • Таймаут — 5.
  10. Добавьте переменную окружения BOT_TOKEN. В поле Значение укажите токен Telegram-бота.

  11. Нажмите Сохранить изменения.

  12. Убедитесь, что функция публичная. Для этого на странице Обзор, в разделе Общая информация, переведите переключатель Публичная функция в активное состояние.

  13. Сохраните идентификатор вашей функции, он потребуется в дальнейшем.

Настройте связь между функцией и Telegram-ботомНастройте связь между функцией и Telegram-ботом

Консоль управления
  1. В консоли управления выберите каталог.

  2. Выберите сервис API Gateway.

  3. Выберите API-шлюз for-serverless-hello-telegram-bot.

  4. Измените спецификацию API-шлюза — после имеющихся строчек кода добавьте секцию fshtb-function:

      /fshtb-function:
        post:
          x-yc-apigateway-integration:
            type: cloud_functions
            function_id: <идентификатор_функции>
          operationId: fshtb-function
    

    Где function_id — идентификатор функции fshtb-function.

  5. Нажмите кнопку Сохранить.

  6. Выполните запрос в терминале:

    • Linux, macOS:

      curl \
        --request POST \
        --url https://api.telegram.org/bot<токен_бота>/setWebhook \
        --header 'content-type: application/json' \
        --data '{"url": "<домен_API-шлюза>/fshtb-function"}'
      
    • Windows (cmd):

      curl ^
        --request POST ^
        --url https://api.telegram.org/bot<токен_бота>/setWebhook ^
        --header "content-type: application/json" ^
        --data "{\"url\": \"<домен_API-шлюза>/fshtb-function\"}"
      
    • Windows (PowerShell):

      curl.exe `
        --request POST `
        --url https://api.telegram.org/bot<токен_бота>/setWebhook `
        --header '"content-type: application/json"' `
        --data '"{ \"url\": \"<домен_API-шлюза>/fshtb-function\" }"'
      

    Где:

    • <токен_бота> — токен Telegram-бота.
    • <домен_API-шлюза> — служебный домен API-шлюза.

    Результат:

    {"ok":true,"result":true,"description":"Webhook was set"}
    

Проверьте работу Telegram-ботаПроверьте работу Telegram-бота

Поговорите с ботом:

  1. Откройте Telegram и найдите бота по имени пользователя username, созданному ранее.

  2. Отправьте в чат сообщение /start.

    Бот должен ответить:

    Hello.
    My name Serverless Hello Telegram Bot
    I'm working on Cloud Function in the Yandex Cloud.
    
  3. Отправьте в чат сообщение /help.

    Бот должен ответить:

    Hello, <username>.
    I can say Hello and nothing more
    
  4. Отправьте в чат любое текстовое сообщение. Бот должен в ответ прислать изображение и сообщение: Hello, <username>.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  • удалите функцию;
  • удалите API-шлюз;
  • удалите бакет.

Была ли статья полезна?

Предыдущая
Разработка Slack-бота
Следующая
Разработка Telegram-бота для распознавания текста и аудио
Проект Яндекса
© 2025 ООО «Яндекс.Облако»