Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
      • Разработка Telegram-бота с поддержкой AI-агента
      • Создание AI-агента с помощью Yandex Cloud Functions
      • ИИ-ревью пул-реквестов на GitHub с помощью Workflows и GitHub Actions
      • Создание AI-агента со стримингом ответа через веб-сокеты

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

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

Как создать бота в Telegram с поддержкой AI-агента с помощью Yandex Workflows

Статья создана
Yandex Cloud
Улучшена
Обновлена 26 марта 2026 г.
  • Перед началом работы
  • Необходимые платные ресурсы
  • Зарегистрируйте Telegram-бота
  • Создайте секрет
  • Создайте бакет
  • Создайте сервисный аккаунт
  • Создайте AI-агента
  • Настройте рабочий процесс
    • Подготовьте YaWL-спецификацию
    • Создайте рабочий процесс
    • Сделайте рабочий процесс публичным
  • Настройте вебхук для бота
    • Получите ссылку для запуска рабочего процесса
    • Настройте вебхук
  • Проверьте работу бота
  • Как удалить созданные ресурсы

С помощью serverless-технологий можно создать бота для Telegram с поддержкой модели генерации текста на базе сервиса Yandex AI Studio.

В этом руководстве вы создадите бота для подбора фильмов на основании предпочтений пользователя. Для этого вы создадите AI-агента, организуете хранение данных в Yandex Object Storage и Yandex Lockbox, настроите логику бота в Yandex Workflows и вебхук для запуска по ссылке.

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

  1. Подготовьте облако к работе.
  2. Зарегистрируйте Telegram-бота.
  3. Создайте секрет.
  4. Создайте бакет.
  5. Создайте сервисный аккаунт.
  6. Создайте AI-агента.
  7. Настройте рабочий процесс.
  8. Настройте вебхук для бота.
  9. Проверьте работу бота.
  10. Настройте агент под вашу задачу.

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

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

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

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

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

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

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

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

  • плата за генерацию текста (см. тарифы Yandex AI Studio);
  • плата за хранение секрета и запросы к нему (см. тарифы Yandex Lockbox);
  • плата за объем хранилища, занятый данными, количество операций с данными и исходящий трафик (см. тарифы Yandex Object Storage);
  • плата за получение и хранение логов (см. тарифы Yandex Cloud Logging).

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

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

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

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

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

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

Создайте секретСоздайте секрет

Создайте секрет, в котором будет храниться токен для доступа к API Telegram.

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог, в котором вы будете создавать инфраструктуру.
  2. Перейдите в сервис Lockbox.
  3. Нажмите Создать секрет.
  4. В поле Имя введите имя секрета.
  5. Выберите тип секрета Пользовательский.
  6. В поле Ключ введите token.
  7. В поле Значение укажите токен бота, полученный при его создании.
  8. Нажмите Создать.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  1. Посмотрите описание команды CLI для создания секрета:

    yc lockbox secret create --help
    
  2. Создайте секрет:

    yc lockbox secret create \
      --name tg-bot-token \
      --payload '[{"key":"token","text_value":"<токен_бота>"}]'
    

    Где:

    • --name — имя секрета.

    • --payload — содержимое секрета в виде массива формата YAML или JSON:

      • key — ключ секрета.
      • text_value — значение секрета. Укажите токен, полученный при создании бота.

    Результат:

    id: e6qf05v4ftms********
    folder_id: b1g681qpemb4********
    created_at: "2025-08-20T12:26:02.961Z"
    name: tg-bot-token
    status: ACTIVE
    current_version:
      id: e6q768pl3vrf********
      secret_id: e6qf05v4ftms********
      created_at: "2025-08-20T12:26:02.961Z"
      status: ACTIVE
      payload_entry_keys:
        - token
    

Чтобы создать секрет, воспользуйтесь методом REST API Create для ресурса Secret или вызовом gRPC API SecretService/Create.

Создайте бакетСоздайте бакет

Создайте бакет для хранения истории чата с ботом.

Консоль управления
Yandex Cloud CLI
AWS CLI
API
  1. Откройте консоль управления.
  2. Перейдите в сервис Object Storage.
  3. На панели сверху нажмите Создать бакет.
  4. Введите имя бакета в соответствии с правилами именования.
  5. Укажите максимальный размер бакета 5 ГБ.
  6. Нажмите Создать бакет.
  1. Посмотрите описание команды CLI для создания бакета:

    yc storage bucket create --help
    
  2. Создайте бакет в каталоге по умолчанию:

    yc storage bucket create \
      --name <имя_бакета> \
      --default-storage-class standard \
      --max-size 5368709120
    

    Где:

    • --name — имя бакета в соответствии с правилами именования.
    • --default-storage-class — класс хранилища.
    • --max-size — максимальный размер бакета в байтах.

    Результат:

    name: bot-history-storage
    folder_id: b1g681qpemb4********
    anonymous_access_flags: {}
    default_storage_class: STANDARD
    versioning: VERSIONING_DISABLED
    max_size: "5368709120"
    created_at: "2025-08-20T12:23:21.361186Z"
    resource_id: e3erbgk1qmih********
    

Если у вас еще нет интерфейса командной строки AWS CLI, установите и сконфигурируйте его.

Чтобы создать бакет, назначьте сервисному аккаунту, через который работает AWS CLI, роль storage.editor.

В терминале выполните команду:

aws s3api create-bucket \
  --endpoint-url=https://storage.yandexcloud.net \
  --bucket <имя_бакета>

Где:

  • --endpoint-url — эндпоинт Object Storage.
  • --bucket — имя бакета в соответствии с правилами именования.

Чтобы создать бакет, воспользуйтесь методом REST API Create для ресурса Bucket, вызовом gRPC API BucketService/Create или методом S3 API create.

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

Создайте сервисный аккаунт sa-workflows — от его имени будут выполняться шаги рабочего процесса.

Консоль управления
Yandex Cloud CLI
API
  1. Откройте консоль управления.

  2. Перейдите в сервис Identity and Access Management.

  3. Нажмите Создать сервисный аккаунт.

  4. Введите имя сервисного аккаунта sa-workflows.

  5. Нажмите Добавить роль и назначьте роли:

    • storage.uploader
    • storage.viewer
    • lockbox.payloadViewer
    • ai.languageModels.user
    • ai.assistants.editor
  6. Нажмите Создать.

  1. Если у вас еще нет jq, установите его.

  2. Посмотрите описание команды CLI для создания сервисного аккаунта:

    yc iam service-account create --help
    
  3. Создайте сервисный аккаунт:

    yc iam service-account create --name sa-workflows
    

    Где --name — имя сервисного аккаунта.

    Результат:

    id: ajersnus6rb2********
    folder_id: b1g681qpemb4********
    created_at: "2025-08-20T12:18:41.869376672Z"
    name: sa-workflows
    
  4. Сохраните идентификатор сервисного аккаунта и идентификатор каталога в переменные:

    WF_SA=$(yc iam service-account get --name sa-workflows --format json | jq -r .id)
    FOLDER_ID=$(yc config get folder-id)
    
  5. Посмотрите описание команды CLI для назначения роли на каталог:

    yc resource-manager folder add-access-binding --help
    
  6. Назначьте сервисному аккаунту роли на каталог:

    yc resource-manager folder add-access-binding \
      --id $FOLDER_ID \
      --role storage.uploader \
      --subject serviceAccount:$WF_SA
    
    yc resource-manager folder add-access-binding \
      --id $FOLDER_ID \
      --role storage.viewer \
      --subject serviceAccount:$WF_SA
    
    yc resource-manager folder add-access-binding \
      --id $FOLDER_ID \
      --role lockbox.payloadViewer \
      --subject serviceAccount:$WF_SA
    
    yc resource-manager folder add-access-binding \
      --id $FOLDER_ID \
      --role ai.languageModels.user \
      --subject serviceAccount:$WF_SA
    
    yc resource-manager folder add-access-binding \
      --id $FOLDER_ID \
      --role ai.assistants.editor \
      --subject serviceAccount:$WF_SA
    

    Где:

    • --id — идентификатор каталога.
    • --role — роль.
    • --subject — идентификатор сервисного аккаунта.

    Результат:

    effective_deltas:
      - action: ADD
        access_binding:
          role_id: ai.languageModels.user
          subject:
            id: ajersnus6rb2********
            type: serviceAccount
    

Создайте сервисный аккаунт sa-workflows с ролями:

  • storage.uploader
  • storage.viewer
  • lockbox.payloadViewer
  • ai.languageModels.user
  • ai.assistants.editor

Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API Create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.

Чтобы назначить роль сервисному аккаунту, воспользуйтесь методом REST API updateAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/UpdateAccessBindings.

Создайте AI-агентаСоздайте AI-агента

Создайте текстового агента в AI Studio для обработки запросов пользователей.

Консоль управления
  1. Откройте интерфейс AI Studio.

  2. Нажмите Создать AI-агента → Создать агента.

  3. В поле Имя введите имя агента, например Агент-киноман.

  4. В поле Инструкция введите инструкцию агента:

    Ты — консультант по подбору фильмов
    
    Цель — помочь пользователю выбрать фильм по его предпочтениям.
    При первом обращении попроси несколько любимых фильмов (по одному в строке).
    Дальше используй их для рекомендаций и задавай уточняющие вопросы.
    
    Предыдущая история общения: {{backstory}}
    

    Примечание

    Переменная {{backstory}} используется для передачи истории диалога в агента. Это позволяет агенту учитывать предыдущие сообщения пользователя при формировании ответа.

  5. Нажмите Создать.

  6. Скопируйте идентификатор созданного агента — слева вверху нажмите ID . Сохраните его. Идентификатор потребуется при настройке рабочего процесса.

Настройте рабочий процессНастройте рабочий процесс

Настройте рабочий процесс, который обеспечит чтение и сохранение истории чата, вызов AI-агента и отправку ответов в Telegram.

Совет

В этом руководстве описано создание рабочего процесса с помощью YaWL-спецификации, но его также можно создать и редактировать с помощью конструктора.

telegram-ai-bot-workflows-workflow

Подготовьте YaWL-спецификациюПодготовьте YaWL-спецификацию

Сохраните YaWL-спецификацию рабочего процесса в YAML-файле, например yawl-spec.yaml:

yawl: '0.1'
start: do_work
steps:
  do_work:
    parallel:
      branches:

        # Ветка, отправляющая «typing», чтобы чат ожил быстрее
        send_typing_action:
          start: send_typing_action
          steps:
            send_typing_action:
              httpCall:
                url: >-
                  https://api.telegram.org/bot\(lockboxPayload("<идентификатор_секрета>"; "token"))/sendChatAction
                method: POST
                headers:
                  Content-Type: application/json
                body: |
                  \({
                    chat_id: .input.message.chat.id,
                    action: "typing"
                  })

        # Основная логика
        handle_update:
          start: get_history
          steps:
            get_history:
              objectStorage:
                bucket: <имя_бакета>
                object: history/\(.input.message.chat.id).json
                get:
                  contentType: JSON
                output: '\({history: .Content})'
                next: call_ai
                catch:
                  - errorList:
                      - STEP_INVALID_ARGUMENT # файла нет или не JSON -> инициализируем
                    errorListMode: INCLUDE
                    output: '\({history: []})'
                    next: call_ai

            call_ai:
              aiStudioAgent:
                promptTemplateId: <идентификатор_агента>
                message: \(.input.message.text)
                variables:
                  backstory: >-
                    История предыдущего общения (формат: JSON-массив объектов)
                    {role,message}): "\(.history)"
                output: '\({reply: .Result})'
                next: send_reply

            send_reply:
              telegramBot:
                token: \(lockboxPayload("<идентификатор_секрета>"; "token"))
                sendMessage:
                  chatId: \(.input.message.chat.id)
                  text: \(.reply)
                  replyTo: \(.input.message.message_id)
                  parseMode: MARKDOWN
                next: save_history

            save_history:
              objectStorage:
                bucket: <имя_бакета>
                object: history/\(.input.message.chat.id).json
                put:
                  contentType: JSON
                  content: >-
                    \(
                      .history +
                      [
                        {role:"user", message:.input.message.text},
                        {role:"assistant", message:.reply}
                      ]
                    )

Где:

  • <имя_бакета> — имя бакета, созданного ранее.
  • <идентификатор_секрета> — идентификатор секрета, созданного ранее.
  • <идентификатор_агента> — идентификатор агента, созданного ранее.

Создайте рабочий процессСоздайте рабочий процесс

Консоль управления
Yandex Cloud CLI
API
  1. Откройте консоль управления.

  2. Перейдите в сервис Serverless Integrations.

  3. На панели слева нажмите Workflows.

  4. В правом верхнем углу нажмите Создать рабочий процесс.

  5. Выберите способ YaML-спецификация.

  6. В редакторе кода вставьте текст подготовленной ранее YaWL-спецификации рабочего процесса.

  7. Раскройте блок Дополнительные параметры:

    1. Введите имя рабочего процесса. Требования к имени:

      • длина — от 3 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.
    2. Выберите сервисный аккаунт sa-workflows.

    3. В блоке Логирование отключите опцию Запись логов, если не хотите платить за хранение логов.

  8. Нажмите Создать.

  1. Посмотрите описание команды CLI для создания рабочего процесса:

    yc serverless workflow create --help
    
  2. Создайте рабочий процесс:

    yc serverless workflow create \
      --yaml-spec <файл_спецификации> \
      --name <имя_рабочего_процесса> \
      --service-account-id $WF_SA
    

    Где:

    • --yaml-spec — путь к файлу с YaWL-спецификацией рабочего процесса, подготовленной ранее. Например: ./yawl-spec.yaml.

    • --name — имя рабочего процесса. Требования к имени:

      • длина — от 3 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.
    • --service-account-id — идентификатор сервисного аккаунта sa-workflows.

    Результат:

    id: dfqjl5hh5p90********
    folder_id: b1g681qpemb4********
    specification:
      spec_yaml: "yawl: ..."
    created_at: "2025-03-11T09:27:51.691990Z"
    name: my-workflow
    status: ACTIVE
    log_options: {}
    service_account_id: aje4tpd9coa********
    execution_url: https://serverless-workflows.api.cloud.yandex.net/workflows/v1/execution/dfq0eod50iol********/start
    

Чтобы создать рабочий процесс, воспользуйтесь методом REST API Create для ресурса Workflows или вызовом gRPC API Workflow/Create.

Сделайте рабочий процесс публичнымСделайте рабочий процесс публичным

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

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления перейдите в каталог, в котором находится рабочий процесс.
  2. Перейдите в сервис Serverless Integrations.
  3. На панели слева нажмите Workflows.
  4. Выберите нужный рабочий процесс.
  5. Включите опцию Публичный рабочий процесс.
  6. Нажмите Сохранить.
  1. Посмотрите описание команды CLI для изменения рабочего процесса:

    yc serverless workflow update --help
    
  2. Сделайте рабочий процесс публичным:

    yc serverless workflow update \
      --name <имя_рабочего_процесса> \
      --set-is-public
    

    Результат:

    id: dfqjl5hh5p90********
    ...
    is_public: true
    execution_url: https://serverless-workflows.api.cloud.yandex.net/workflows/v1/execution/dfq0eod50iol********/start
    

Чтобы сделать рабочий процесс публичным, воспользуйтесь методом REST API Update для ресурса Workflows или вызовом gRPC API workflow/Update, установив параметр isPublic: true.

Примечание

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

Настройте вебхук для ботаНастройте вебхук для бота

Настройте вебхук для бота, чтобы он отправлял запросы на запуск рабочего процесса по ссылке.

Получите ссылку для запуска рабочего процессаПолучите ссылку для запуска рабочего процесса

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления перейдите в каталог, в котором находится рабочий процесс.
  2. Перейдите в сервис Serverless Integrations.
  3. На панели слева нажмите Workflows.
  4. Выберите рабочий процесс. Ссылка для запуска будет в поле Ссылка для запуска.

Чтобы получить ссылку для запуска, выполните команду:

yc serverless workflow get <имя_рабочего_процесса>

Результат:

id: dfqjl5hh5p90********
...
is_public: true
execution_url: https://serverless-workflows.api.cloud.yandex.net/workflows/v1/execution/dfq0eod50iol********/start

Сохраните значение поля execution_url.

Чтобы получить ссылку для запуска рабочего процесса, воспользуйтесь методом REST API get для ресурса Workflow или вызовом gRPC API WorkflowsService/Get. Ссылка для запуска будет в поле execution_url.

Настройте вебхукНастройте вебхук

Если у вас еще нет cURL, установите его.

Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.

Настройте вебхук для бота:

Bash

Выполните команду:

curl -s "https://api.telegram.org/bot<токен_бота>/setWebhook" \
  -d "url=<execution_url>"

Где:

  • <токен_бота> — токен, полученный при создании бота.
  • <execution_url> — ссылка для запуска рабочего процесса, полученная на предыдущем шаге.

Например:

curl -s "https://api.telegram.org/bot1357246809:AAFhSteLniAw71g8jx6K5kTErO3********/setWebhook" \
  -d "url=https://serverless-workflows.api.cloud.yandex.net/workflows/v1/execution/fd2g4pu20roc********/start"

Результат:

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

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

  1. Найдите бота в Telegram по имени пользователя бота, созданного ранее.

  2. Нажмите СТАРТ, чтобы начать чат.

  3. Отправьте боту список из нескольких фильмов — по одному названию в строке.

    Например:

    Фильм 1
    Фильм 2
    Фильм 3
    

    Ответ бота:

    Здравствуйте! Спасибо за ваши предпочтения. На основе ваших любимых фильмов я могу предложить вам следующие кинокартины:
    ...
    Какой из предложенных фильмов вас заинтересовал? Или, может быть, у вас есть ещё какие-то предпочтения, которые вы хотели бы учесть?
    

Что дальшеЧто дальше

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

Ты — консультант по подбору музыкальных исполнителей

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

Предыдущая история общения: {{backstory}}

Также вы можете:

  • Добавить текст или файлы в качестве источников информации для агента. Подробнее см. Текстовые агенты в AI Studio.
  • Настроить управление контекстом диалога. Подробнее см. Управление контекстом диалога.
  • Использовать другие инструменты агента, такие как поиск по файлам или веб-поиск.

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

Чтобы не платить за ресурсы, которые вам больше не нужны, удалите их:

  1. Удалите рабочий процесс.
  2. Удалите бакет.
  3. Удалите секрет.
  4. Удалите AI-агента в AI Studio.
  5. Если вы оставляли включенной опцию записи логов рабочего процесса, удалите лог-группу.

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

Предыдущая
Использование API Gateway для настройки синтеза речи в SpeechKit
Следующая
Создание AI-агента с помощью Yandex Cloud Functions
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»