Telegram-бот с оплатой в криптовалюте — подробный гайд

Цель руководства: Создать Telegram-бота на Python, который принимает криптовалютные платежи через платежный сервис и автоматически отправляет пользователю цифровой товар (PDF, электронный документ, книгу) после подтверждения оплаты. Рассмотрим, как развернуть среду на удалённом сервере, выполнить все настройки через веб-консоль без использования локального терминала, и пошагово реализовать бота.

Что вы получите по итогу: Готовый Telegram-бот, запущенный на облачном сервере, с настройками приема платежей и функцией автоматической отправки цифрового файла пользователю после оплаты. Руководство структурировано таким образом, чтобы вы могли легко воспроизвести каждый шаг – от регистрации аккаунтов до написания кода и тестирования бота.

Необходимые компоненты:

  • Облачный сервер (VPS/VDS) с ОС Ubuntu 22.04.
  • Аккаунт Telegram: чтобы создать своего бота через BotFather и получить токен доступа.
  • Аккаунт для приёма платежей. Нужно зарегистрироваться в платежном сервисе и создать «мерчант» (торговый аккаунт) для интеграции платежей. Вы получите ID мерчанта и секретный ключ (пароль) для API.
  • Основы Python: Понимание базового синтаксиса Python. Мы будем писать скрипт на Python 3, так что потребуется минимальный опыт работы с кодом.
  • PDF-файл для отправки: Приготовьте тестовый PDF-документ, который бот будет отправлять пользователю после оплаты. Это может быть любой файл (например, “product.pdf” – замените на нужный вам файл).

Далее в руководстве мы последовательно пройдём следующие этапы:

  1. Настройка облачного сервера: регистрация и вход, создание сервера, установка Ubuntu 22.04 и подключение через встроенную веб-консоль.
  2. Подготовка окружения на сервере: базовые команды Linux, установка необходимых пакетов (Python, pip, библиотеки), загрузка файлов (бот-скрипт и PDF) и ориентирование в консоли (создание каталогов, редактирование файлов с помощью nano, горячие клавиши и пр.).
  3. Создание Telegram-бота: регистрация бота через BotFather и получение токена.
  4. Настройка платежного сервиса: создание мерчанта, получение API-ключей (ID и секрет), выбор криптовалюты для приёма платежей (в примере – USDT в сети TRON (TRC20) как популярный стабильный токен).
  5. Разработка кода бота на Python: написание скрипта с использованием библиотек для Telegram (pyTelegramBotAPI) и HTTP-запросов к API PayKassa. Логика бота: отправка счёта на оплату, проверка оплаты и отправка PDF.
  6. Тестирование работы бота: запуск скрипта, проверка в Telegram, имитация или проведение оплаты и получение файла. Советы по эксплуатации: как останавливать бот, как запустить бота в фоновом режиме на сервере для постоянной работы и т.д.

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

1. Настройка облачного сервера

Чтобы бот работал круглосуточно и был доступен в интернете, мы будем запускать его на облачном сервере (виртуальной машине). Рассмотрим провайдера Timeweb Cloud – он предоставляет удобную панель управления и встроенную веб-консоль, позволяющую выполнять все операции через браузер. Ниже – пошаговые действия от регистрации до готового сервера:

1.1 Регистрация и вход

  1. Регистрация аккаунта: Перейдите на сайт Timeweb Cloud и зарегистрируйтесь. Потребуется указать email и придумать пароль, либо воспользоваться быстрой регистрацией через соцсети. Подтвердите email, если потребуется.
  2. Вход в панель управления: После регистрации авторизуйтесь на платформе и войдите в панель управления. Здесь находятся все разделы для работы с сервисами – нас интересует раздел «Облачные серверы».
  3. Финансовый момент: Тарифы доступные, а для наших целей подойдёт самый базовый сервер. Пополните баланс.

1.2 Создание нового сервера (VPS/VDS) с Ubuntu 22.04

Теперь создадим виртуальный сервер с нужными параметрами:

  1. Выбор тарифа: В панели Timeweb Cloud перейдите в раздел «Облачные серверы» и нажмите кнопку «Создать сервер» (или «Добавить»). Появится мастер создания сервера. На Шаге 1 выберите операционную систему. В списке доступных образов найдите Ubuntu 22.04 LTS (64-bit) и выберите её. Ubuntu 22.04 – свежая и стабильная версия ОС, которая нам подходит. После выбора ОС можно перейти к следующему шагу настройки.
  2. Регион и зона: На Шаге 2 мастер предложит выбрать регион (локацию ЦОД). Выберите ближайший к вам или оставьте по умолчанию. Например, если доступны варианты «Санкт-Петербург», «Москва» и др., можно выбрать Санкт-Петербург. Зона доступности обычно можно оставить стандартную (если не требуется приватная сеть). Это не критично для нашего случая – выбирайте регион на своё усмотрение.
  3. Тариф и конфигурация: На Шаге 3 выберите подходящую конфигурацию сервера (CPU, RAM, диск). Для начала подойдет минимальный тариф из линейки Standard или Premium NVMe – обычно это ~1 vCPU, 1 ГБ RAM, 20 ГБ SSD. В интерфейсе можно либо выбрать фиксированный тариф, либо переключиться на «Произвольная» и задать ресурсы вручную. На скриншоте ниже показан выбор самого недорогого тарифа: 1 ядро CPU, 1 ГБ RAM, 15 ГБ диска. Обратите внимание на стоимость – она отобразится справа (например, ~300 рублей в месяц, может списываться поминутно). Пример выбора конфигурации при создании сервера: минимальный тариф с 1 CPU (3.3 ГГц), 1 ГБ RAM и 15 ГБ NVMe. Панель справа показывает примерную стоимость. Для учебных или тестовых целей этого достаточно. При необходимости позже ресурсы можно масштабировать.
  4. Сеть: На Шаге 4 убедитесь, что у сервера будет публичный IPv4 адрес. По умолчанию Timeweb предлагает добавить один внешний IP (обычно за отдельную небольшую плату, ~150 руб/мес). Публичный IP нужен, чтобы мы могли подключаться к серверу и чтобы наш бот имел доступ к интернету. Оставьте галочку «Публичный IPv4» включённой (либо выберите существующий IP, если уже есть). IPv6 не обязательен. Приватную сеть можно не настраивать.
  5. Проверка и создание: Проверьте ещё раз выбранные параметры и нажмите «Создать». Через несколько минут сервер будет развернут. Timeweb Cloud автоматически установит выбранную ОС (Ubuntu 22.04) и сгенерирует пароль администратора (root).
  6. Получение данных доступа: После успешного создания сервера в панели «Список серверов» появится ваш новый сервер. Выделите его – отобразится Дашборд с информацией. Запишите или скопируйте адрес вашего сервера (его IP) и пароль пользователя root. Как правило, Timeweb также высылает эти данные на email, указанного при регистрации. Важно: пароль root отображается в панели (и/или письме) только в первый раз; сохраните его в надёжном месте. 💡 Примечание: Убедитесь, что SSH-доступ на сервер включён (в Timeweb Cloud обычно SSH доступен по умолчанию). Мы будем использовать встроенную веб-консоль для подключения, но SSH-пароль (root) нам понадобится для входа. Если нужно, можно изменить пароль через опцию «Сброс пароля root» в панели, но для начала используйте сгенерированный пароль.

1.3 Подключение к серверу через веб-консоль

Timeweb Cloud предоставляет веб-интерфейс консоли, что позволяет управлять сервером прямо из браузера, без отдельного SSH-клиента. Для подключения выполните следующее:

  1. В панели управления откройте ваш сервер (кликните по его имени). Перейдите во вкладку «Консоль». Загрузится окно с консолью сервера (эмулируется экран, как будто вы напрямую подключены к серверу).
  2. Нажмите внутри черного окна консоли, чтобы активировать ввод. Должно появиться приглашение вида login: (если сервер уже запущен). Введите: root и нажмите Enter. Далее появится запрос Password: – скопируйте пароль root, полученный на предыдущем шаге, и вставьте его в консоль сочетанием Ctrl+V (встроенная консоль поддерживает вставку из буфера обмена). При вставке курсор может не двигаться и символы пароля не отображаются (это нормально из соображений безопасности). Нажмите Enter.
  3. Если всё сделано правильно, вы войдёте под root-пользователем. Консоль покажет приветственное сообщение Ubuntu и строку приглашения, оканчивающуюся символом # (решётка), указывающим, что вы работаете от имени суперпользователя root. Окно консоли доступно прямо в браузере, позволяя вводить команды, как в обычном терминале. В левой части панели – меню управления сервером, а в правой – интерактивная консоль. Теперь можно выполнять на сервере любые команды Linux.
  4. Настройка раскладки: Убедитесь, что при вводе команд используется английская раскладка клавиатуры. Если ваш компьютер настроен на другую языковую раскладку по умолчанию (например, русскую), переключитесь на ENG, иначе команды не будут корректно восприниматься. (В Windows обычно достаточно нажать Alt+Shift перед вводом в консоль, на Mac – Cmd+Space, либо переключиться ручным способом).
  5. Полноэкранный режим (опционально): Для удобства работы консоль можно развернуть во весь экран. Это по желанию – на весь экран будет легче читать вывод команд.
  6. Первый тест команды: Попробуйте ввести команду ls и нажмите Enter – она покажет список файлов в текущей директории. Сразу после установки ОС в домашней папке root может не быть файлов, и ls вернёт пустую строку или стандартные директории. Главное – убедиться, что ввод команд работает и вы получаете ответ от системы.

⚠️ Если консоль не реагирует или пароль не подходит: Проверьте, правильно ли скопирован пароль (лишние пробелы могут помешать). Учтите, что в веб-консоли некоторые сочетания клавиш могут не работать из-за конфликтов с горячими клавишами браузера. Например, Ctrl+W, Ctrl+T и другие (в Chrome/Firefox они могут закрывать вкладки и т.п.). Timeweb Cloud предупреждает, что часть комбинаций Nano/консоли не доступны через браузер. Мы обсудим ниже, как сохранять файлы без использования проблемных сочетаний.

1.4 Обновление системы и установка необходимых пакетов

После успешного входа на сервер рекомендуется обновить систему и установить инструменты, которые пригодятся для работы:

  1. Обновление списка пакетов: Выполните команду: apt update Эта команда обновит список доступных пакетов Ubuntu до актуального. В выводе вы увидите процесс опроса репозиториев и индексацию пакетов.
  2. Установка обновлений: (опционально) Вы можете сразу обновить предустановленные пакеты до актуальных версий командой: apt upgrade -y Опция -y автоматически подтвердит установку обновлений. Этот процесс может занять пару минут. Примечание: Шаг не обязательный, но желателен для безопасности и стабильности. Можно пропустить, если вы спешите, но желательно поддерживать сервер в актуальном состоянии.
  3. Установка Python и pip: Ubuntu 22.04 уже включает Python 3 (обычно версия Python 3.10). Проверьте, набрав python3 --version – консоль должна вывести версию Python. Чтобы облегчить установку Python-библиотек, установим менеджер пакетов pip: apt install -y python3-pip По завершении, проверьте командой pip3 --version – должна отобразиться версия pip. Установите python3-venv -y
    python3 -m venv venv
    source venv/bin/activate.
  4. Редактор Nano (если не установлен): В Ubuntu, как правило, текстовый редактор nano предустановлен. Проверьте командой nano --version. Если вдруг nano отсутствует, установите: apt install -y nano Nano – консольный редактор, с которым мы будем создавать и редактировать файлы прямо на сервере. Он прост в использовании и отлично подходит новичкам.
  5. Дополнительные утилиты: Возможно, вам пригодятся утилиты wget и curl для скачивания файлов. Они часто уже есть в системе. Проверьте wget --version и curl --version. Если чего-то нет – установите (через apt install wget или apt install curl).

В итоге на сервере должны быть доступны: Python 3, pip, nano, и стандартные UNIX-команды. Подготовка окружения завершена, можно переходить к работе над самим проектом бота.

2. Работа на сервере: файлы, каталоги и горячие клавиши

Прежде чем писать код бота, настроим рабочую директорию на сервере и разберёмся с базовыми операциями: как создавать и редактировать файлы, куда загрузить PDF, как перемещаться по каталогам и какие сочетания клавиш использовать в консоли. Если вы опытны в Linux, многое из этого вам знакомо – можете пролистать раздел. Но для начинающих приводим краткий ликбез:

2.1 Создание каталога проекта и навигация

  1. Каталог для бота: Вы сейчас находитесь в домашней директории пользователя root (по умолчанию это /root). Можно работать прямо в ней, но лучше создать отдельную папку для проекта бота. Например, создадим каталог /root/telegram-bot: mkdir telegram-bot cd telegram-bot Теперь текущая директория – /root/telegram-bot. Команда pwd покажет полный путь (print working directory), а ls – содержимое (пока пусто).
  2. Подкаталоги (опционально): Для порядка можно внутри создать подпапки, например, mkdir logs (для логов, если будут) или mkdir data (для данных). В нашем случае нам нужно разместить PDF-файл, его можно положить прямо в telegram-bot или в отдельную папку files. Создадим, к примеру: mkdir files Тогда PDF будем хранить в telegram-bot/files/.
  3. Навигация: Несколько полезных команд:
    • ls -la – детальный список файлов (включая скрытые). Полезно убедиться, что файл появился или просмотреть права.
    • cd .. – подняться на уровень вверх (в родительский каталог).
    • mv и cp – переместить или копировать файлы (синтаксис: mv источник назначение).
    • rm – удалить файл (для папки с содержимым – rm -r каталог осторожно!).
    • Стрелки ↑/↓ – пролистать историю введённых команд, чтобы не набирать заново.
    • Tab – автодополнение имён файлов/папок при вводе (очень упрощает жизнь).

2.2 Загрузка PDF-файла на сервер

Для того чтобы бот мог отправлять PDF-файл, этот файл должен находиться на сервере. Есть несколько способов перенести файл с вашего локального компьютера на сервер:

  • Через интернет-ссылку (wget/curl): Если PDF уже доступен по прямой ссылке (например, вы его временно загрузили куда-то), можно скачивать напрямую. Например: cd ~/telegram-bot/files wget http://example.com/path/to/yourfile.pdf -O guide.pdf Эта команда скачает файл по URL и сохранит под именем guide.pdf (используйте нужный URL и имя). Убедитесь, что ссылка ведёт непосредственно на файл.
  • Через SFTP/SCP: Можно воспользоваться программами типа WinSCP (Windows) или командой scp (Linux/Mac). Например, на локальном компьютере: scp ./myfile.pdf root@<IP-сервера>:/root/telegram-bot/files/ После ввода пароля файл загрузится по SSH на сервер в указанный путь. WinSCP предоставляет графический интерфейс – достаточно ввести IP, логин (root) и пароль, затем перетащить файл в нужную папку на сервере.
  • Через веб-консоль с буфером обмена: Для небольших текстовых файлов можно копировать содержимое и создавать файл через редактор nano. Но для бинарного PDF это не подходит.

Выберите удобный способ. В результате, в каталоге telegram-bot/files должен появиться ваш PDF. Для примера предположим, что файл называется product.pdf. Проверьте командой ls files – он должен отображаться.

💡 Совет: Название файла лучше сделать без пробелов и спецсимволов. Используйте латиницу или цифры. Например, guide.pdf или book1.pdf. Это упростит обращение к нему в коде.

2.3 Редактирование файлов на сервере (nano)

Теперь нам понадобится создать и редактировать файлы – прежде всего, Python-скрипт бота. Мы будем использовать редактор nano. Основные операции в nano:

  • Начать редактирование (или создать новый файл) – командой nano <имя_файла>. Если файла нет, он откроется пустым.
  • Ввести или вставить текст – просто печатайте или вставляйте из буфера (в веб-консоли вставка работает через Ctrl+V).
  • Сохранить изменения – сочетание Ctrl+O (буква «O», от Output). Однако в браузерной консоли Ctrl+O может перехватываться (в Chrome это открытие файла). Альтернативный надёжный способ: нажать Ctrl+X для выхода, и редактор сам спросит про сохранение.
  • Выйти из редактора – Ctrl+X. Если были изменения, nano запросит «Save modified buffer? (Y/N)». Нажмите Y (yes – да) чтобы сохранить, или N чтобы выйти без сохранения. Далее будет предложено подтвердить имя файла (нажмите Enter, если имя правильное, либо введите новое имя файла перед Enter).

При работе с nano, ориентируйтесь по подсказкам внизу экрана. Там указаны комбинации: ^X означает Ctrl+X (выход), ^O – Ctrl+O (сохранить), ^K – вырезать строку, ^U – вставить, etc. Пример: на изображении ниже показаны строки статуса и команд nano:

Нижняя часть окна редактора Nano с подсказками по управлению: ^G – справка, ^O – сохранить, ^X – выход, и т.д. Символ ^ обозначает клавишу Ctrl. В веб-консоли не все сочетания могут работать, но основные (выход, подтверждение сохранения) – доступны. Пользуйтесь этой шпаргалкой при редактировании.

Когда вы нажимаете Ctrl+X для выхода после правок, nano выведет запрос на сохранение. Нажмите Y, затем Enter для подтверждения имени. Вот как выглядит этот процесс:

Пример диалога выхода из nano с сохранением: редактор спрашивает «Save modified buffer?» – нужно нажать Y (Yes), после чего предложит ввести имя файла. Можно сразу нажать Enter, если хотите сохранить под тем же именем (в примере имя bot.py). После этого nano сохранит файл и закроется.

Обратите внимание: в веб-консоли браузера некоторые сочетания могут не срабатывать. Если, к примеру, Ctrl+S (обычно сохранение) не работает, используйте описанную выше последовательность (Ctrl+X затем Y) для надёжного сохранения изменений.

Горячие клавиши консоли (для управления):

  • Копирование/вставка текста: Если нужно скопировать из консоли текст (например, фрагмент вывода или ошибки), можно попробовать выделить мышью – иногда это работает, но веб-консоль может мешать копированию. Для вставки в консоль используйте Ctrl+V, как упоминалось ранее.
  • Отмена/прерывание процесса: Если вы запустили длительный процесс или бот завис, остановить выполнение можно комбинацией Ctrl+C. Это прервет текущую работу приложения и вернёт вас к вводу команд. Будьте аккуратны: Ctrl+C в консоли – не копирование, а именно сигнал прерывания.
  • Очистка экрана: Команда clear очистит текущий вывод терминала (удобно для визуального порядка).
  • Выход из терминала: Команда exit завершает сессию. Однако при работе через веб-консоль это не особенно нужно, можно просто закрыть вкладку. Если запущен бот, выход из консоли его остановит (так как сессия прервётся). О том, как запустить бота так, чтобы он работал даже после закрытия консоли, поговорим в конце (раздел про фоновые процессы).

Теперь, освоив базовые операции, переходим непосредственно к созданию нашего Telegram-бота и его интеграции с PayKassa.

3. Создание Telegram-бота и получение токена

Прежде чем писать код, нужно зарегистрировать самого бота через сервис BotFather в Telegram и получить уникальный токен. Если вы уже имеете токен, можете пропустить этот раздел.

Шаги для регистрации бота в Telegram:

  1. Запустите BotFather: Откройте приложение Telegram (на телефоне или ПК) и найдите контакт @BotFather (это официальный бот для управления ботами). Нажмите Start или введите команду /start, чтобы начать взаимодействие.
  2. Создайте нового бота: Отправьте команду /newbot. BotFather попросит вас ввести:
    • Имя бота – отображаемое имя (можно на русском или английском, например: «Мой Магазин Бот»).
    • Username бота – уникальное имя пользователя, оканчивающееся на bot. Например: MyShopBot или my_shop_bot (обязательно чтобы в конце было bot, и имя было уникальным в рамках Telegram).
    Если выбранное имя пользователя занято, BotFather сообщит об этом – придётся попробовать другой вариант. После удачного ввода BotFather создаст бота.
  3. Получите токен: После успешного создания BotFather пришлет сообщение с API-token вашего бота – длинная строка символов, что-то вроде: 123456789:AAFF-1y2b3C4D5E6f7G8H9Ij0KlMnOpQrstuVW Этот токен – секретный ключ для управления ботом через Telegram API. Скопируйте его (он понадобится в коде). Не показывайте токен посторонним – обладая им, можно контролировать вашего бота.
  4. Настройте описание (опционально): Вы можете настроить для бота описание, картинку, команды меню и пр. Но это не обязательно для работы. Главное – иметь токен.
  5. Проверьте бота: Найдите вашего бота в Telegram (по username) и отправьте ему команду /start. Пока бот не запущен на вашем сервере, он не ответит, но это активирует с вашей стороны чат с ботом (важно для дальнейшего тестирования).

Теперь у вас есть бот в Telegram и токен. Далее – настроим PayKassa для приёма платежей.

4. Настройка мерчанта PayKassa для приёма платежей

Цель этого этапа: получить реквизиты для интеграции – ID мерчанта и секретный ключ, а также подготовить мерчант-аккаунт к приёму платежей в нужной криптовалюте.

Шаги:

  1. Регистрация: Создайте аккаунт на paykassa.pro и войдите в личный кабинет. Интерфейс может быть на английском по умолчанию – переключите язык на русский (в меню или настройках профиля).
  2. Создание мерчанта: В кабинете найдите раздел «Мерчанты» (Merchants). Нажмите кнопку «Добавить мерчант». Появится форма создания:
    • Укажите название мерчанта (произвольно, например «TelegramShop»).
    • Можете добавить комментарий (для себя, опционально).
    • URL обработчика: это URL для уведомлений о платежах (IPN) – если бы у нас был свой веб-сервер для получения уведомлений. Так как наш бот не имеет публичного URL, на этом этапе можно указать заглушку. Например, https://example.com/paykassa_callback или свой собственный сайт, если он есть. Либо оставьте поле пустым/по умолчанию, если разрешается.
    • Остальные настройки оставьте по умолчанию или как предлагает PayKassa. Нажмите «Добавить».
  3. Получение ID и пароля мерчанта: После добавления вернитесь на вкладку «Мерчанты». Вы увидите список мерчантов, в том числе свежесозданный. Обратите внимание на его параметры:ID (номер) мерчанта: уникальный числовой идентификатор, например 12345. Его нужно скопировать.Пароль мерчанта (секретный ключ): строка или набор символов, который служит для подписывания запросов. Его также скопируйте. Обычно отображается сразу после создания мерчанта. Если не видно – зайдите в настройки мерчанта, должна быть опция показать/скопировать пароль.Эти два значения (ID и пароль) будут использоваться в нашем Python-скрипте для запросов к API PayKassa, чтобы выставлять счёт и проверять оплату от имени вашего мерчанта. Пример: ID = 1234, ключ = abcd1234efgh5678... (не настоящий, ваш будет иной). Не публикуйте секретный ключ в открытом виде. После создания мерчанту присваивается ID. Посмотреть его можно на вкладке «Мерчанты». Там же находится секретный ключ (пароль). Запишите эти данные – они понадобятся для интеграции.
  4. Выбор платежных систем: PayKassa поддерживает множество криптовалют. По умолчанию все основные включены. Вы можете отключить ненужные (в настройках мерчанта есть список платежных систем и переключатели). Для нашего примера мы будем принимать USDT (Tether) в сети TRON (TRC20) – это одна из популярных стейблкоин-технологий с низкими комиссиями и быстрыми транзакциями. Убедитесь, что в вашем мерчанте активны TRON TRC20 как система и USDT как валюта. Если хотите принимать другую криптовалюту – можно, просто придётся подставить её в параметры (например, BTC, ETH и т.д.). Список доступных обозначений есть на странице тарифов PayKassa и в документации. Для простоты остаёмся на USDT/TRC20.
  5. Тестовый режим: сервис предоставляет возможность тестирования без реальных транзакций. Test Mode можно включить при интеграции через API. В нашем коде мы будем использовать флаг test=1 (или “true”), чтобы сначала убедиться в работоспособности цепочки без настоящей оплаты. Обратите внимание: в личном кабинете мерчанта может быть настройка «принимать любые суммы» или «режим тестирования». Проверьте технические настройки мерчанта: иногда нужно разрешить тестовые платежи или принимать 0 суммы. Мы на уровне API укажем test, поэтому этого достаточно.

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

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

5. Разработка кода бота (Python + API PayKassa)

Ниже мы приведём полный код нашего Telegram-бота и объясним каждый фрагмент. Код пишется на Python 3. Он будет выполнять следующие функции:

  • Обрабатывать команду /start (приветствие пользователя).
  • Обрабатывать команду (или сообщение) для начала покупки, например, /buy – бот сгенерирует счёт на оплату (криптовалютный адрес или ссылку через PayKassa) и отправит пользователю инструкции по оплате.
  • Проверять оплату и, при подтверждении, отсылать PDF-файл в чат.

Мы используем библиотеку pyTelegramBotAPI (также известна как TeleBot) для взаимодействия с Telegram Bot API – она удобна и проста. Для запросов к PayKassa API будем использовать встроенную библиотеку requests (HTTP-клиент). Альтернативой было бы использование официального SDK от PayKassa, но для наглядности покажем «ручной» метод через HTTP.

Установка зависимостей: Вернитесь к консоли сервера (в каталоге проекта) и выполните:
pip3 install pyTelegramBotAPI requests

Эта команда установит две необходимые библиотеки:

  • pyTelegramBotAPI – Python-библиотека для Telegram Bot API (версии 4.x). Она позволит нам легко получать сообщения и отправлять ответы.
  • requests – популярная библиотека для выполнения HTTP-запросов (используем её для REST API PayKassa).

Установите dotenv:
pip install python-doten

Создайте файл .env на сервере:
cd ~/telegram-bot
nano .env

В открывшемся редакторе вставьте содержимое (см. пример ниже):

TELEGRAM_TOKEN=1234567890:AAGmgGP23EH13e7E-tqGYfBqr9jPE_uSbvU
MERCHANT_ID=12345
API_PASSWORD=pu4veKL73pHQhbez0z07CVD3O3ELoijF

После успешной установки можно приступать к написанию скрипта бота.

5.1 Создание файла бота

Откройте редактор nano для нового файла, например bot.py:
nano bot.py

В открывшемся редакторе впишите (или вставьте) следующий код:

import os
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import FSInputFile
from paykassa.merchant import MerchantApi
from paykassa.dto import GetPaymentUrlRequest, CheckPaymentRequest, Currency, System, CommissionPayer
from dotenv import load_dotenv

load_dotenv()

TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
MERCHANT_ID = os.getenv("MERCHANT_ID")
API_PASSWORD = os.getenv("API_PASSWORD")
PDF_PATH = "files/Ваш_Файл.pdf"

bot = Bot(token=TELEGRAM_TOKEN)
dp = Dispatcher()
merchant = MerchantApi(str(MERCHANT_ID), API_PASSWORD)
orders = {}

@dp.message(Command("start"))
@dp.message(Command("help"))
async def send_welcome(message: types.Message):
    await message.answer(
        "Привет! 👋\n"
        "Я продаю PDF-гайд 'Как_Стать_Успешным'.\n"
        "Нажмите /buy чтобы купить файл за USDT (TRC20)."
    )

@dp.message(Command("buy"))
async def buy_pdf(message: types.Message):
    user_id = message.from_user.id
    order_id = f"{user_id}-{message.message_id}"

    request = (
        GetPaymentUrlRequest()
        .set_order_id(order_id)
        .set_amount("1")
        .set_currency(Currency.USDT)
        .set_system(System.TRON_TRC20)
        .set_comment("Покупка PDF-гайда")
        .set_paid_commission(CommissionPayer.SHOP)
    )

    response = merchant.get_payment_url(request)
    if not response._error:
        pay_url = response._data["url"]
        orders[user_id] = order_id
        await message.answer(
            f"🔗 Ваша ссылка для оплаты:\n{pay_url}\n\n"
            "После оплаты напишите /check"
        )
    else:
        await message.answer(f"Ошибка создания счёта: {response._message}")

@dp.message(Command("check"))
async def check_payment(message: types.Message):
    user_id = message.from_user.id
    order_id = orders.get(user_id)
    if not order_id:
        await message.answer("Вы ещё не создавали заказ. Используйте /buy.")
        return

    req = CheckPaymentRequest()
    req.order_id = order_id
    result = merchant.check_payment(req)

    if not getattr(result, "_error", True) and getattr(result, "_data", {}).get("status") == "paid":
        pdf = FSInputFile(PDF_PATH)
        await message.answer_document(pdf)
        await message.answer("Спасибо за покупку! Если будут вопросы — пишите.")
        del orders[user_id]
    else:
        await message.answer("Платёж ещё не найден или не оплачен. Попробуйте позже.")

if __name__ == "__main__":
    print("Бот запущен!")
    import asyncio
    asyncio.run(dp.start_polling(bot))

После вставки кода, замените название вашего файла, название и описание продукта, стоимость (.set_amount(«1«)).

Проверьте остальные настройки: TEST_MODE = True (на время отладки пусть будет включён тестовый режим), AMOUNT = "1" означает запрос 1 USDT. При необходимости можете изменить сумму или валюту, но тогда учтите, что пользователь должен ровно столько заплатить.

Когда все данные вставлены, нажмите Ctrl+X, затем Y, и Enter, чтобы сохранить и выйти из nano.

5.2 Разбор логики кода

Пройдёмся по ключевым моментам скрипта, чтобы понять, как он работает:

  • Импорт модулей: Мы подключаем telebot (Telegram API) и requests (HTTP запросы). Также импортируем time, который у нас используется (например, можно задействовать для пауз, но в текущем коде напрямую не применён).
  • Конфигурация: Блок переменных позволяет легко настроить бота:
    • API_TOKEN – токен Telegram бота.
    • MERCHANT_ID и MERCHANT_PASSWORD – идентификатор и секрет PayKassa мерчанта.
    • TEST_MODE – флаг, управляющий режимом (в тестовом режиме PayKassa не требует реальной транзакции).
    • CRYPTO_SYSTEM и CRYPTO_CURRENCY – какие система и валюта используются (TRON_TRC20 + USDT).
    • AMOUNT – сумма платежа (тип строки, так требует API).
    • ORDER_COMMENT – комментарий (необязательно, но можно указать, например, название продукта).
  • Инициализация бота: bot = telebot.TeleBot(API_TOKEN, parse_mode="HTML") – создаём объект бота. parse_mode="HTML" позволяет форматировать сообщения в HTML (жирный текст, ссылки и т.п. при желании).
  • Хранение счетов: pending_invoices – словарь, куда мы будем сохранять информацию о неоплаченных счётах, привязанных к пользователю (по chat_id). Это необходимо, чтобы потом проверить оплату конкретного счёта. В реальной реализации можно использовать базу данных, но для простоты берём словарь в памяти.
  • Обработчик /start: При команде /start бот отправляет приветствие с инструкцией обратиться к /buy для начала покупки. Используется bot.reply_to – он отвечает в тот же чат упоминанием пользователя.
  • Обработчик /buy: Это основной обработчик, запускающий процесс платежа.
    1. Бот формирует payload – словарь данных для запроса sci_create_order в PayKassa. В нём мы передаём все необходимые параметры: ID мерчанта, ключ, сумму, валюту, систему, уникальный order_id (мы используем chat_id как номер заказа, это допустимо, либо можно сгенерировать свой), комментарий и флаг test. Также можно передать поле domain – домен вашего сайта для IPN, но в данном случае IPN (Instant Payment Notification) мы не используем, поэтому domain опустили или оставили пустым. Параметр phone необязателен (для некоторых платёжных систем может требоваться телефон, но для криптовалют не нужен, мы отправляем пустую строку). Обратите внимание: URL для запросов – https://paykassa.pro/sci/0.4/index.php. Эта точка входа актуальна для SCI (Shopping Cart Interface) версии 0.4. Если PayKassa обновит API, URL может измениться (проверьте документацию). На 2025 год версия 0.4 актуальна.
    2. Мы отправляем POST-запрос с помощью requests.post и получаем ответ. Используем response.json() для парсинга JSON-ответа в словарь Python.
    3. Проверяем поле "error" в ответе. Если error: True, значит, возникла ошибка при создании счёта. Мы отправляем пользователю сообщение об ошибке (текст ошибки доступен в "message"). Возможные причины: неверные реквизиты мерчанта, некорректные параметры (например, неподдерживаемая валюта) или технические неполадки на стороне PayKassa.
    4. Если ошибки нет (error: False), то PayKassa вернула нам данные счёта. В result["data"] содержится:
      • invoice – ID счёта в системе PayKassa.
      • wallet – криптовалютный адрес (куда пользователь должен отправить деньги).
      • url – ссылка на платёжную страницу (при test_mode=true или для некоторых платёжных методов).
      • Возможно, tag и tag_name – для некоторых криптовалют (например, XRP, BNB) требуется тег/мемо. В нашем случае (USDT TRC20) таких нет (поле is_tag скорее всего False).
      Мы сохраняем эту информацию в pending_invoices под ключом chat_id. Таким образом, знаем, что конкретному пользователю выдан такой-то счёт.
    5. Далее бот отправляет пользователю инструкцию:
      • В тестовом режиме (TEST_MODE == True): PayKassa обычно предоставляет url – это тестовая страница, имитирующая оплату. Мы сообщаем пользователю, что это тест, и предлагаем перейти по ссылке для имитации платежа. После чего просим нажать /check. (Фактически, на тестовой странице PayKassa можно нажать «Оплатить», система сразу вызовет успех).
      • В боевом режиме (TEST_MODE == False): Пользователю отправляется адрес кошелька (wallet) и сумма. Мы указываем: «Отправьте ровно X USDT на адрес … (сеть TRON TRC20). После отправки нажмите /check.» Пользователь должен самостоятельно совершить перевод со своего криптокошелька. Тут важно подчеркнуть, что сумма должна совпадать до последнего знака после запятой, и сеть должна быть именно та, что указана (TRC20 в данном примере). Иначе PayKassa не засчитает платёж.
  • Обработчик /check: Этот обработчик вызывается, когда пользователь сообщает боту «я оплатил, проверь». Здесь реализована логика подтверждения платежа.
    1. Бот проверяет, есть ли в pending_invoices запись для этого chat_id. Если нет – значит, либо /buy не вызывался, либо счёт уже проверен/удалён. В таком случае бот отвечает: «Нет активного счета, сначала нажмите /buy».
    2. Если запись есть, извлекаем invoice_id. Теперь, по идее, нужно обратиться к PayKassa, чтобы узнать, пришёл ли платёж на этот счёт. В идеальной реализации это делается через Instant Payment Notification (IPN): PayKassa сама отправила бы запрос на ваш URL обработчика с параметром private_hash, и тогда вы могли бы вызвать sci_confirm_order с этим хэшем для проверки. Поскольку у нас нет возможности получить такой callback на бот (у бота нет публичного адреса), мы должны проверить вручную. PayKassa не предоставляет прямого метода «узнать статус счёта по invoice_id» в SCI API. Однако, можно использовать Merchant API (не SCI) – для этого нужен ещё один ключ (API ID/Password), который выдаётся отдельно. В рамках упрощения мы не стали интегрировать Merchant API. Вместо этого:
      • В тестовом режиме: будем считать, что оплата прошла сразу (поскольку user нажал ссылку, можно условно засчитать).
      • В боевом режиме: Тут стоит хотя бы проверить фактически (например, зайти в кабинет PayKassa и убедиться, что платеж пришёл). В коде, чтобы не тормозить процесс, мы эмулируем подтверждение, выставляя paid = True. Это, конечно, упрощение: в реальном боте необходимо реализовать проверку – либо настроить callback и иметь веб-сервер, либо периодически опрашивать PayKassa через их API (например, используя метод получения списка транзакций). Для учебной цели предполагаем, что раз пользователь нажал /check, то он уже отправил платёж и мы сразу подтверждаем.
    3. Если paid оказался True, бот:
      • Отправляет сообщение «✅ Оплата получена! Отправляю файл…».
      • Затем отправляет PDF-документ командой bot.send_document. Мы указываем путь к файлу. Убедитесь, что путь верный: в коде указан files/product.pdf – если ваш файл называется иначе или лежит не в files, поправьте путь. (В Python важно, чтобы путь был правильный относительно текущей директории, либо полный путь /root/telegram-bot/files/название.pdf).
      • Отправка файла может занять время (особенно если файл большой). Мы делаем это в блоке try/except на случай ошибок (например, файл не найден). Если ошибка – сообщаем пользователю.
      • После успешной отправки удаляем запись счета из pending_invoices, чтобы не было повторных выдач того же файла по одному платежу.
    4. Если paid оказался False, бот сообщает: «Оплата пока не поступила, подождите и попробуйте еще». Пользователь может по-прежнему повторно отправлять /check позже.
    🔧 Заметка для продвинутых: Для полностью автоматической проверки без user-ввода можно было бы запустить отдельный поток, который, после отправки счёта, периодически опрашивает API PayKassa (например, раз в 30 секунд проверяет поступление по invoice_id) и при обнаружении – отправляет файл. Однако, подобная фоновая задача усложняет код (нужно учитывать многопоточность). В целях упрощения нашего руководства, мы оставили схему «пользователь подтверждает платеж командой /check». В реальных условиях, настоятельно рекомендуем реализовать IPN: сделать небольшой веб-сервер (можно на Flask) принимающий POST от PayKassa и взаимодействующий с ботом (например, через Bot API sendMessage). Это выходит за рамки данного гайда, но имейте в виду.
  • Запуск бота: В самом конце bot.polling(none_stop=True) запускает бесконечный цикл, который слушает обновления от Telegram и вызывает соответствующие обработчики. Мы также вывели print("Bot is running...") – при запуске скрипта в консоли вы это увидите. Polling с none_stop=True означает, что бот будет стараться восстанавливаться после возможных сбоев подключения и не остановится сам по себе.

Код можно адаптировать под свои нужды – например, поменять команды или добавить обработку случаев, когда пользователь отправил что-то не то. Но даже в представленном виде, это уже готовый минимально необходимый функционал.

6. Тестирование бота

Настало время проверить, что наш бот работает, и отладить весь процесс от начала до конца.

6.1 Запуск бота на сервере

Убедитесь, что вы сохранили файл bot.py с кодом и находитесь в директории проекта. Выполните команду:

python3 bot.py

Если всё настроено правильно, в консоли вы увидите сообщение Bot is running... Press Ctrl+C to stop. (это мы предусмотрительно добавили в код для наглядности). Это означает, что бот запущен и сейчас находится в режиме опроса сообщений.

💡 Примечание: Убедитесь, что при запуске нет ошибок. Если в коде допущена опечатка или, например, не хватает кавычек, Python укажет на синтаксическую ошибку и прекратит выполнение. Исправьте по указанной подсказке и запустите снова. Наиболее частые ошибки: неправильный отступ (Python чувствителен к отступам), незакрытая кавычка или скобка, или неимпортированная библиотека (если забыли pip install). Если ошибка связана с подключением к Telegram (например, Network error), проверьте доступ в интернет с сервера (ping google.com) и попробуйте перезапустить.

Наш бот запущен в текущей консоли. В таком состоянии он будет работать, пока вы не остановите его (Ctrl+C) или не закроете консоль/сессию. Пока оставим окно консоли открытым и переключимся в Telegram для теста.

6.2 Проверка функциональности в Telegram (тестовый режим)

  1. Команда /start: Откройте чат с вашим ботом в Telegram (найдите его по username, если не сделали раньше). Отправьте команду /start. Бот должен мгновенно ответить приветственным сообщением, которое мы задали (с предложением ввести /buy). Если ответа нет – перепроверьте, запущен ли скрипт, правильный ли токен, и нет ли ошибок в консоли.
  2. Команда /buy: Отправьте боту команду /buy. Что должно произойти:
    • В консоли сервера вы, возможно, увидите лог запросов (по умолчанию TeleBot выводит некоторые логи). Главное – не должно быть никаких Traceback (ошибок). Если, например, вы увидели ошибку про requests – возможно, забыли pip install requests.
    • Бот должен ответить вам сообщением с платёжными инструкциями. В тестовом режиме (TEST_MODE=True) вы получите сообщение со ссылкой вида https://paykassa.pro/..../index?invoice=<число>&token=<...> – это тестовая ссылка оплаты.
    • Нажмите на эту ссылку (Telegram обычно формирует гиперссылку, вы можете ее открыть в браузере). Откроется тестовая страница PayKassa: будет указано, что это эмуляция платежа, название вашей криптовалюты/системы, сумма и кнопка «Оплатить» (или «Провести тестовый платёж»). Нажмите эту кнопку. PayKassa имитирует успешную оплату и, возможно, перенаправит на какой-то адрес (который мы указывали как callback, либо просто покажет сообщение об успехе).
    • Поскольку у нас нет реального обработчика, результат этой имитации никак бота не уведомит напрямую (если бы был callback, PayKassa отправила бы POST). Поэтому вернитесь в чат с ботом.
  3. Команда /check: Теперь, после «оплаты», отправьте команду /check. Бот должен обработать её. В нашем упрощённом коде, для тестового режима, мы сразу считаем платёж успешным. Поэтому бот должен ответить примерно так: «✅ Оплата получена! Отправляю ваш файл…» и чуть ниже вы должны увидеть, что бот отправил PDF-документ. Если PDF небольшой, он придёт быстро; если большой, может занять несколько секунд. Убедитесь, что файл открылся и это действительно тот PDF, который вы загрузили. Поздравляю, покупка совершена, бот выполнил свою основную задачу! После этого бот удаляет информацию о счёте из памяти. Если снова ввести /check, он ответит, что нет активного счёта (поскольку мы уже завершили транзакцию). Для новой покупки сценарий повторится через /buy.
  4. Проверка разных путей:
    • Попробуйте ввести /check до оплаты (например, сразу после /buy, не переходя по ссылке). Бот должен сказать, что оплата не поступила (в нашем коде он всё равно отправит файл, т.к. мы не реально проверяем – но в боевом режиме по логике он бы этого не сделал). Можно доработать логику, чтобы в тестовом режиме он, например, ждал перехода по ссылке. Но для наших целей достаточно.
    • Если указать неверный токен или мерчант данные, что будет? Можно, например, временно испортить MERCHANT_PASSWORD и перезапустить /buy – вы получите сообщение об ошибке от PayKassa (что ключ неверный). Это показывает, что ошибки обрабатываются.
  5. Боевой тест (опционально): Если вы готовы потратить небольшое количество криптовалюты, можете протестировать в реальной сети:
    • Отключите TEST_MODE (поставьте False, сохраните и перезапустите бота).
    • В /buy бот теперь даст настоящий адрес кошелька. Вы можете отправить на него, скажем, 1 USDT (или ту сумму, что указали) из своего кошелька. Внимание: убедитесь, что вводите правильную сумму и через нужную сеть, иначе платёж может не засчитаться или уйти не туда.
    • После отправки транзакции, дождитесь её подтверждений (в сети TRC20 обычно мгновенно). PayKassa зачислит сумму на ваш мерчант. Теперь, когда вы отправите /check, в нашем коде он всё равно автоматически отправит файл (потому что мы не проверяем фактически). Но вы можете проверить: в кабинете PayKassa у мерчанта баланс USDT увеличится на эту сумму.
    • Учтите, что PayKassa берёт комиссию (около 4% по умолчанию). На маленьких суммах это копейки, но учесть стоит.
    • Для production-режима доработайте код проверки оплаты как говорилось (либо вручную убирайте test_flag и убеждайтесь по кабинету).
  6. Просмотр логов и отладка: В консоли, где запущен бот, вы можете видеть различные сообщения. TeleBot может ругаться, если, например, отправка файла занимает долго (оно может попытаться повторно получить апдейты). Не пугайтесь ворнингов. Главное – бот должен не «падать» (т.е. процесс python3 bot.py должен продолжать работать). Если бот вдруг прекратил работу (произошел необработанный exception и скрипт завершился), посмотрите текст ошибки. Например:
    • Ошибка File not found при отправке PDF – значит, указанный путь неверный или файла нет. Проверьте имя файла и путь.
    • Ошибка Unauthorized от TeleBot – значит неверный Telegram токен.
    • Ошибка при запросе к PayKassa – может быть {'error': True, 'message': '... merchant not found'} и т.п., значит ID или ключ не подошли.
    • Если бот не отвечает на команды, убедитесь, что он не упал и что вы написали именно команду (с слешем). TeleBot по умолчанию может не обрабатывать сообщения без слеша, если не задан хендлер. Можно кстати добавить хендлер на текст, который тоже запускает покупку, но это факультативно.

6.3 Фоновый режим и постоянная работа

После испытаний убеждаемся, что функциональность работает. Однако, сейчас бот запущен в консоли и привязан к нашей сессии. Если вы закроете браузер или SSH-соединение, процесс скорее всего прервётся и бот остановится. Чтобы этого избежать в реальной эксплуатации, нужно запустить бота в фоновом режиме или как сервис:

  • Способ 1: tmux или screen: Эти утилиты позволяют создать постоянную сессию в терминале. Вы можете запустить screen, внутри него выполнить python3 bot.py, а затем «отсоединиться» от сессии (Ctrl+A, D в screen). Бот останется работать на сервере, даже если вы выйдете. В любой момент можно подключиться обратно к screen (screen -r) и видеть лог. Если бот уже хорошо протестирован, этот способ надёжен.
  • Способ 2: Сервис systemd: Для продвинутых – можно создать unit-файл systemd, чтобы бот запускался как служба (и даже автоматически при перезагрузке сервера). Тогда управление будет через systemctl start bot и т.д. Это удобнее для долгосрочной поддержки.
  • Способ 3: nohup: Можно запустить команду с nohup и амперсандом, чтобы отвязать от терминала: nohup python3 bot.py > bot.log 2>&1 & Эта команда запустит бота в фоне, вывод будет записываться в bot.log. Сессия не зависает. Минус – контролировать немного сложнее (придётся читать лог или прибивать процесс вручную при обновлениях).

Выберите любой подходящий метод, чтобы ваш бот работал постоянно.

Также, не забудьте о безопасности:

  • Так как бот работает под root (мы запускали от root), будьте особенно осторожны с кодом бота. Не выполняйте в коде никаких недоверенных команд, т.к. злоумышленник мог бы попытаться через бота заставить выполнить на сервере команду (у нас такого нет, но в принципе).
  • Храните токен и ключи PayKassa в секрете. Желательно не светить их в логах. Если будете выкладывать код, удаляйте эти данные.
  • Следите за обновлениями библиотек: Telegram API иногда обновляется, и старые методы могут устаревать. Но pyTelegramBotAPI достаточно стабильна.

Заключение

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

  • Timeweb Cloud упростил управление сервером: через веб-интерфейс мы создали VPS, установили Ubuntu 22.04 и выполнили все команды в браузере. Это избавило от необходимости настройки локального окружения – весь процесс происходит на удалённой машине, которая постоянно онлайн. Мы рассмотрели базовые команды Linux, редактор nano и методы копирования файлов, что позволяет даже новичку уверенно работать на сервере.
  • Telegram Bot API: мы зарегистрировали бота через BotFather и с помощью библиотеки TeleBot написали логику обработки команд. Код получился относительно простым и модульным. При желании, вы можете улучшать его – например, добавить более дружелюбные сообщения, кнопку для проверки оплаты вместо команды, многоязычность, и т.д.
  • Интеграция PayKassa: познакомились с основами работы API PayKassa. Настроили мерчант, получили API-ключи. В коде реализовали создание счёта на оплату (выдачу уникального адреса криптовалюты) и, в упрощённом виде, подтверждение платежа. Мы работали с криптовалютой USDT, но вы легко можете переключиться на любую другую, поддерживаемую PayKassa – достаточно изменить параметры CRYPTO_SYSTEM и CRYPTO_CURRENCY (например, BTC и Bitcoin, или ETH и Ethereum, см. документацию PayKassa).
  • Отправка цифрового товара: бот автоматически отправляет PDF-файл после оплаты. Это может быть не только PDF – send_document позволяет отправлять любые файлы (до 50 MB через Bot API, больше – через File ID). Таким образом, бот можно применять для продажи электронных книг, изображений, архивов с софтом и т.п.

Возможные улучшения и следующиe шаги:

  • Реализовать полноценную проверку оплаты. Самый надёжный способ – настроить webhooks (IPN) от PayKassa. Для этого пришлось бы на сервере поднять простой веб-сервер (на Flask, FastAPI или даже PHP) и открыть порт, чтобы PayKassa могла достучаться. Затем, при получении уведомления, бот бы отправлял файл без необходимости команды /check. Альтернативно, можно через API-ключ опрашивать PayKassa раз в некоторое время. Если вы планируете коммерческое использование, уделите этому внимание.
  • Обработка нескольких товаров: Сейчас бот «продаёт» один фиксированный PDF. Можно расширить, чтобы было несколько команд или клавиатура с выбором товара (и соответственно разные цены, файлы, возможно разные криптовалюты).
  • Logging и monitoring: Добавить логирование действий бота (в файл) и отслеживать ошибки. Возможно, настроить оповещение админу (вам) через Telegram, если что-то пошло не так.
  • Безопасность: Если бот будет публичным, подумайте о защите от спама/флуда (например, ограничение на частоту команд). Наш бот в целом реагирует только на известные команды, поэтому относительно безопасен. Но всегда есть шанс, что кто-то будет пытаться подобные боты эксплуатировать.
  • Docker-развёртывание: Для удобства можно завернуть бота в Docker-контейнер, что упростит миграцию между серверами. Но на Timeweb Cloud это не обязательно – у нас и так изолированная VM.

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

Надеемся, данное руководство было для вас полезным и понятным. Вы научились разворачивать сервер в облаке, освоили работу в консоли, познакомились с Telegram Bot API и сервисом PayKassa. Теперь вы способны не только повторить этот путь, но и на основе этого примера создавать более сложных ботов для автоматизации продаж и других задач. Успехов в ваших разработках!