Рассказываю, как создать чат‑бота в Телеграме на основе ИИ для интернет-магазина. Нам понадобятся арендованны�� сервер, API-ключи от нейросетей и базовые знания Python. По итогу у вас будет работающий Телеграм-бот, который 24/7 отвечает на вопросы о доставке, оплате и помогает с выбором товаров. Материал ориентирован на админов уровня джун и на технически подкованных маркетологов.
Как устроен чат-бот
Прежде чем разворачивать сервер и писать код, нужно понять логику работы бота. В нашем примере бот для интернет-магазина с простым сценарием — FAQ. Например, если юзер спрашивает: «Сколько стоит доставка?», бот отвечает «Доставка курьером 300₽, при заказе от 3000₽ — бесплатно. Доставка в пункты выдачи 200₽».
Команды бота
/start — запуск бота и приветственное сообщение;
/help — список доступных команд и подсказки;
/info — информация о магазине.
Все остальные сообщения — вопросы к нейросети.
Что подготовить перед арендой VPS
Получить API-ключи от нейросетей.
Chat GPT:
Регистрируемся на platform.openai.com
Переходим в раздел API keys.
Создаем ключ в разделе Create API key.
DeepSeek:
Регистрируемся на platform.deepseek.com
Подтверждаем email.
Получаем ключ в личном кабинете.
Grok:
Для начала нам понадобится активный аккаунт X* с подпиской Premium.
Доступ к API открывается через x.ai*.
Получаем ключ в разделе Developer.
Создать Телеграм-бота.
Создать бота в Телеграме занимает 2 минуты. Вбиваем в поиск @BotFather. Отправляем команду /newbot. Придумываем имя и юзернейм, который должен заканчиваться на bot, например, myshop_assistant_bot. Сохраняем токен. Это длинная строка вроде 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz.
Опционально зарегистрировать домен, если планируете webhook вместо polling.
Webhook и polling — два способа, с помощью которых бот на сервере узнает о новых сообщениях, которые пользователи пишут в Телеграм.
Параметр |
Polling |
Webhook |
Как работает |
Ваш сервер постоянно спрашивает у серверов Телеграм: «Есть новые сообщения для моего бота?» |
Серверы Телеграм отправляют сообщения на ваш сервер через HTTP-запрос, как только пользователь пишет боту |
Нагрузка на сервер |
Запросы идут каждые 1-2 секунды, даже если никто ничего не пишет |
Работает только при наличии сообщений |
Требования |
Только VPS с Python |
VPS + домен + SSL-сертификат |
Сложность настройки |
Простая, 1 строка кода bot.polling() |
Средняя, нужен веб-сервер, nginx/apache |
В каких случаях подходит |
Тесты, малые проекты (около 1000 сообщений в сутки) |
Продакшн, высокая нагрузка (более 5000 сообщений в сутки) |
Для старта рекомендуем использовать режим polling. Он банально прост в настройке. Когда бот соберет большую аудиторию, можно перейти на webhook.
*Запрещен в РФ.
Шаг 1. Аренда и настройка VPS
Для аренды виртуального сервера под чат-бот на основе ИИ рекомендуем минимальную конфигурацию: 1-2 vCPU, 2-4 ГБ RAM, 20-40 ГБ SSD. Ее хватит для обработки 100-200 запросов в час.
Что конкретно нужно сделать на сервере, чтобы чат-бот вообще мог работать? После аренды VPS вы получаете чистый сервер. На нем нет Python, нет зависимостей, нет папки под проект. Поэтому нужно выполнить следующие шаги:
Подключаемся к серверу
ssh root@your_server_ip
Замените your_server_ip на IP-адрес VPS из панели Cloud4box.
2) Обновляем чистый сервер
sudo apt update && sudo apt upgrade -y
3) Настраиваем безопасный доступ по SSH
По умолчанию VPS доступен по паролю, что небезопасно. Настроим доступ по SSH-ключам и отключим вход по паролю. На вашем локальном компьютере (не на сервере) сгенерируйте SSH-ключ, если его еще нет:
ssh-keygen -t ed25519 -C "your_email@example.com"
Скопируйте публичный ключ на сервер:
ssh-copy-id root@your_server_ip
Теперь подключитесь к серверу и отключите вход по паролю:
sudo nano /etc/ssh/sshd_config
Найдите строку PasswordAuthentication yes и замените на: PasswordAuthentication no
Сохраните файл и перезапустите SSH:
sudo systemctl restart sshd
Теперь подключиться к серверу можно только с вашего компьютера чер��з SSH-ключ.
4) Скачиваем и устанавливаем интерпретатор Python на сервер. После этого сервер сможет понимать и выполнять команды Python. А мы сможем запускать скрипты бота, подключать библиотеки и работать с API.
sudo apt install -y python3 python3-venv python3-pip git
Что устанавливаем:
python3 — интерпретатор Python версии 3.x.
python3-venv — инструмент для создания виртуальных окружений (изолированных «песочниц» для зависимостей проекта).
python3-pip — менеджер пакетов для установки библиотек Python.
git — система контроля версий (пригодится для обновления кода).
После установки проверьте версию:
python3 --version
Должно вывести что-то вроде Python 3.10.12..
5) Создаем отдельную папку на сервере, где будут храниться все файлы вашего чат-бота.
mkdir ~/shop-bot && cd ~/shop-bot
6) Создаем «песочницу», чтобы библиотеки для бота не конфликтовали с системными.
python3 -m venv venv
source venv/bin/activate
После активации в начале командной строки появится (venv). Это значит, что все работает.
7) Устанавливаем библиотеки, которые помогут подключить чат-бота к Телеграм и API нейросети, а также обработать HTTP-запросы.
pip install pyTelegramBotAPI openai requests python-dotenv
Что устанавливаем:
pyTelegramBotAPI — библиотека для работы с Телеграм Bot API.
openai — официальная библиотека для работы с API OpenAI (Chat GPT). Эту библиотеку можно использовать и для DeepSeek, так как он совместим с форматом OpenAI API.
requests — универсальная библиотека для HTTP-запросов.
python-dotenv — для безопасного хранения API-ключей в файле .env
Почему библиотека openai подходит для нескольких нейросетей?
DeepSeek намеренно сделал свой API совместимым с форматом OpenAI. Это значит, что можно использовать библиотеку openai, просто изменив два параметра:
base_url — указываете адрес API DeepSeek вместо OpenAI.
api_key — вставляете ключ от DeepSeek.
Пример для Chat GPT:
from openai import OpenAI
client = OpenAI(api_key="ваш-ключ-openai")
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Привет!"}]
)
Тот же код для DeepSeek:
from openai import OpenAI
client = OpenAI(
api_key="ваш-ключ-deepseek",
base_url="https://api.deepseek.com" # Меняем только адрес
)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "Привет!"}]
)
Grok API пока не полностью совместим с форматом OpenAI, поэтому для него пишем запросы через requests:
import requests
response = requests.post(
"https://api.x.ai/v1/chat/completions",
headers={"Authorization": f"Bearer {ваш_ключ_grok}"},
json={
"model": "grok-beta",
"messages": [{"role": "user", "content": "Привет!"}]
}
)
Установка занимает 1-2 минуты. После завершения создайте файл с помощью команды requirements.txt:
pip freeze > requirements.txt
Этот файл зафиксирует точные версии всех установленных библиотек. Пригодится при переносе проекта на другой сервер.
Шаг 2. Написание кода бота
Сейчас мы создадим Python-файл с кодом бота на вашем сервере. Все действия выполняем в том же SSH, где настраивали сервер на предыдущих шагах.
Чат-бот на основе ChatGpt 5.1
Сначала убедитесь, что вы находитесь в папке проекта и виртуальное окружение активно.
cd ~/shop-bot
source venv/bin/activate
В начале командной строки должно быть (venv)
Создаем файл bot_gpt.py на сервере:
nano bot_gpt.py
После выполнения этой команды откроется текстовый редактор nano прямо в терминале. Вы увидите пустой экран с курсором сверху. Это редактор, в который нужно вставить следующий код:
Пояснение: в коде вы увидите строки в тройных кавычках """...""". Это docstring — документационные строки. Они описывают, что делает функция, какие параметры принимает и что возвращает. Python не выполняет их как код, но они помогают понять логику работы.
import os
import telebot
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN')
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
bot = telebot.TeleBot(TELEGRAM_TOKEN)
client = OpenAI(api_key=OPENAI_API_KEY)
SYSTEM_PROMPT = """
Ты консультант интернет-магазина электроники. Отвечай вежливо, по делу и на русском языке.
Помогай клиентам с вопросами об общих рекомендациях по выбору техники. Если клиент спрашивает про конкретные модели товаров, цены или наличие, отвечай: (вариант ответа).
Не придумывай информацию. Если не знаешь ответ, предложи связаться с оператором.
"""
@bot.message_handler(commands=['start'])
def send_welcome(message):
"""Отправляет приветственное сообщение при запуске бота"""
bot.reply_to(message,
"Привет! Я консультант магазина \n\n"
"Помогу с выбором нужной техники"
"Команды:\n"
"/help — список команд\n"
"/info — контакты магазина"
)
@bot.message_handler(commands=['help'])
def send_help(message):
"""Показывает список доступных команд"""
bot.reply_to(message,
"Доступные команды:\n\n"
"/start — начать диалог заново\n"
"/help — показать это сообщение\n"
"/info — контакты и график работы магазина\n\n"
"Просто напишите свой вопрос, и я постараюсь помочь!"
)
@bot.message_handler(commands=['info'])
def send_info(message):
"""Показывает контактную информацию магазина"""
bot.reply_to(message,
"Магазин \n\n"
"Сайт: ru\n"
"Email: \n"
"Телефон:\n"
"Режим работы:\n"
"Пн-Пт: 9:00-20:00\n"
"Сб-Вс: 10:00-18:00"
)
def get_gpt_response(user_message):
"""
Отправляет запрос в ChatGPT и возвращает ответ
Параметры:
user_message (str): текст сообщения от пользователя
Возвращает:
str: ответ от нейросети или сообщение об ошибке
"""
try:
response = client.chat.completions.create(
model="gpt-5.1",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_message}
],
max_tokens=500,
temperature=0.7
)
return response.choices[0].message.content
except Exception as e:
print(f"Ошибка при обращении к GPT: {e}")
return (
"Извините, произошла ошибка при обработке запроса."
"Попробуйте позже или свяжитесь с оператором: +7 (495) 123-45-67"
)
@bot.message_handler(func=lambda message: True)
def handle_message(message):
"""Обрабатывает все текстовые сообщения от пользователя"""
user_text = message.text
bot.send_chat_action(message.chat.id, 'typing')
response_text = get_gpt_response(user_text)
bot.send_message(message.chat.id, response_text)
if name == '__main__':
print('Бот с ChatGPT запущен и ожидает сообщений...')
print('Для остановки нажмите Ctrl+C')
bot.polling(none_stop=True)
После вставки кода сохраните файл:
Нажмите Ctrl+O, появится строка File Name to Write.
Нажмите Enter.
Нажмите Ctrl+X.
Проверьте, что файл создан:
ls -lh bot_gpt.py
```
Должно вывести что-то вроде:
```
-rw-r--r-- 1 root root 2.8K Dec 8 15:30 bot_gpt.py
Теперь мы знаем, как работает бот на основе ChatGPT 5.1. Далее в статье, как создать чат-бот на основе ИИ DeepSeek и Grok вместо или в дополнение к ChatGPT. Напоминаем, в статье разбираются полноценные примеры с кодом, эндпоинтами, ключами и рекомендациями по настройке, чтобы читатель мог просто скопировать код и запустить.
Чат-бот на основе DeepSeek
DeepSeek реализован в формате, полностью совместимом с OpenAI API — тот же Python-клиент openai и структура запросов chat.completions.create. Отличаются только base_url и название модели.
import os
import telebot
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
bot = telebot.TeleBot(TELEGRAM_TOKEN)
client = OpenAI(
api_key=DEEPSEEK_API_KEY,
base_url="https://api.deepseek.com"
)
SYSTEM_PROMPT = """
Ты консультант интернет-магазина электроники. Отвечай вежливо, по делу и на русском языке.
Помогай клиентам с вопросами об общих рекомендациях по выбору техники. Если клиент спрашивает про конкретные модели товаров, цены или наличие, отвечай: (вариант ответа).
Не придумывай информацию. Если не знаешь ответ, предложи связаться с оператором
"""
def ask_deepseek(message_text):
try:
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": message_text}
],
max_tokens=500,
temperature=0.7
)
return response.choices[0].message.content
except Exception as e:
print("Ошибка DeepSeek:", e)
return "Не удалось получить ответ от DeepSeek. Попробуйте позже."
@bot.message_handler(func=lambda m: True)
def handle(m):
bot.send_chat_action(m.chat.id, "typing")
answer = ask_deepseek(m.text)
bot.send_message(m.chat.id, answer)
if name == "__main__":
print("Бот с DeepSeek запущен")
bot.polling()
Чат-бот на основе Grok
API Grok работает через классический HTTP-запрос POST. Формат JSON похож на OpenAI, но эндпоинт другой: POST https://api.x.ai/v1/chat/completions. Подробности и примеры можно найти в официальной документации Grok.
import os
import telebot
import requests
from dotenv import load_dotenv
load_dotenv()
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
GROK_API_KEY = os.getenv("GROK_API_KEY")
bot = telebot.TeleBot(TELEGRAM_TOKEN)
SYSTEM_PROMPT = """
Ты консультант интернет-магазина электроники. Отвечай вежливо, по делу и на русском языке.
Помогай клиентам с вопросами об общих рекомендациях по выбору техники. Если клиент спрашивает про конкретные модели товаров, цены или наличие, отвечай: (вариант ответа).
Не придумывай информацию. Если не знаешь ответ, предложи связаться с оператором
"""
def ask_grok(message_text):
try:
response = requests.post(
"https://api.x.ai/v1/chat/completions",
headers={
"Authorization": f"Bearer {GROK_API_KEY}",
"Content-Type": "application/json"
},
json={
"model": "grok-beta",
"messages": [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": message_text}
],
"max_tokens": 500,
"temperature": 0.7
},
timeout=20
)
data = response.json()
return data["choices"][0]["message"]["content"]
except Exception as e:
print("Ошибка Grok:", e)
return "Не удалось получить ответ от Grok. Попробуйте позже."
@bot.message_handler(func=lambda m: True)
def handle(m):
bot.send_chat_action(m.chat.id, "typing")
answer = ask_grok(m.text)
bot.send_message(m.chat.id, answer)
if name == "__main__":
print("Бот с Grok запущен")
bot.polling()
Шаг 3. Запуск и тестирование
Теперь, когда код готов, осталось запустить бота и проверить, что он корректно отвечает на сообщения в Телеграме.
Проверяем файл .env
В папке проекта должен быть файл .env со всеми токенами:
TELEGRAM_TOKEN=1234567890:ABCdef...
OPENAI_API_KEY=...
DEEPSEEK_API_KEY=...
GROK_API_KEY=...
Если у вас несколько ботов под разные модели, можно держать токены в одном .env и подключать только те переменные, которые нужны конкретному файлу.
Запускаем любой бот
Примеры команд (все выполняются в папке проекта и в активированном venv):
GPT: python3 bot_gpt.py
DeepSeek: python3 bot_deepseek.py
Grok: python3 bot_grok.py
Если всё настроено корректно, вы увидите сообщение:
Бот запущен и ожидает сообщений...
Для остановки нажмите Ctrl+C
Теперь можно открыть Телеграм, написать боту команду /start и проверить работу команд.
Шаг 4. Запуск чат-бота в фоновом режиме
Если вы закроете SSH, процесс с ботом остановится. Чтобы запустить его так, чтобы он работал 24/7, нужен один из вариантов.
Screen
Устанавливаем:
sudo apt install screen
Запускаем сессию:
screen -S bot
Запускаем бота:
python3 bot_gpt.py
Отключаемся от сессии, не останавливая процесс:
Ctrl+A, затем D
Возвращаемся обратно:
screen -r bot
Systemd, более сложный
Создаем сервис:
sudo nano /etc/systemd/system/shopbot.service
Вставляем:
[Unit]
Description=AI Shop Bot
After=network.target
[Service]
WorkingDirectory=/root/shop-bot
ExecStart=/root/shop-bot/venv/bin/python3 bot_gpt.py
Restart=always
Environment="TELEGRAM_TOKEN=..."
Environment="OPENAI_API_KEY=..."
[Install]
WantedBy=multi-user.target
Сохраняем, запускаем сервис:
sudo systemctl daemon-reload
sudo systemctl start shopbot
sudo systemctl enable shopbot
Проверяем статус:
sudo systemctl status shopbot
Теперь бот автоматически поднимается после перезагрузки сервера.
Почему systemd лучше screen для production? На Cloud4box пользователи чаще используют systemd, так как он автоматически перезапускает бота при сбоях, логирует работу через journalctl и интегрируется с системным мониторингом.
Если вы арендуете виртуальный сервер на Cloud4box, в панели управления доступен мониторинг нагрузки. Для выделенных серверов эта функция пока недоступна, но можно настроить собственный мониторинг через Prometheus + Grafana.
Шаг 5. Варианты масштабирования
Когда количество запросов увеличивается, появляются новые требования к скорости и оптимизации. Говоря про скорость, стоит перейти с polling на webhook.
Домен можно зарегистрировать через Cloud4box за пару кликов. Что касается SSL, самый простой вариант — использовать бесплатный сертификат от Let’s Encrypt, через certbot:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.ru
Сертификат автоматически продлевается каждые 90 дней. Если вы не хотите настраивать сертификаты вручную, то можно заказать установку у технической поддержки Cloud4box, это дело 5-10 минут.
Далее нужно настроить веб-сервер nginx.
Установите nginx:
sudo apt install nginx
Создайте конфигурацию для бота:
sudo nano /etc/nginx/sites-available/bot
Вставьте:
server {
listen 443 ssl;
server_name yourdomain.ru;
ssl_certificate /etc/letsencrypt/live/yourdomain.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.ru/privkey.pem;
location /webhook {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Активируйте конфигурацию:
sudo ln -s /etc/nginx/sites-available/bot /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Вместо bot.polling() используйте Flask/FastAPI для приёма webhook:
from flask import Flask, request
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
update = telebot.types.Update.de_json(request.stream.read().decode("utf-8"))
bot.process_new_updates([update])
return '', 200
if name == '__main__':
bot.remove_webhook()
bot.set_webhook(url="https://yourdomain.ru/webhook")
app.run(host='127.0.0.1', port=8000)
Выполните команду (замените <TELEGRAM_TOKEN> на ваш токен):
curl -F "url=https://yourdomain.ru/webhook" https://api.telegram.org/bot<TELEGRAM_TOKEN>/setWebhook
Проверьте статус:
curl https://api.telegram.org/bot<TELEGRAM_TOKEN>/getWebhookInfo
Так Телеграм будет напрямую отправлять сообщения на ваш сервер.
Далее, в контексте FAQ-бота, очевидно, что ему часто будут задавать одинаковые вопросы. В таком случае, лучше сохранять готовые ответы в Redis или SQLite, чтобы снизить нагрузку на API нейросети. Если бот обрабатывает больше 5-10 тысяч сообщений в сутки, рекомендуем перейти на выделенный сервер, он стабильнее при нагрузке и не делит ресурсы с соседями.
Пример в Redis:
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
key = f"faq:{user_message.lower()}"
cached = r.get(key)
if cached:
return cached.decode()
answer = ask_llm(user_message)
r.set(key, answer, ex=86400) # сутки
Также важно понимать: когда проект растет, поддерживать один большой файл становится сложно. Лучше разделить структуру:
bot/
handlers/
llm/
utils/
Вывод
В статье описан путь от аренды VPS до запуска чат-бота на основе ChatGPT, DeepSeek и Grok через API. Вы узнали, как подготовить сервер, установить Python и зависимости, подключить Телеграм-бота, реализовать обработку сообщений и интегрировать внешние нейросети через API. Благодаря примерам кода даже технически подкованный маркетолог или начинающий админ сможет самостоятельно развернуть бота за 20-40 минут.
K0Jlya9
Есть же сайт магазина, зачем еще какой то бот в запрещенной соцсети?
yacute
ну тг не запрещен в России. А на счет бота, лучше иметь чем не иметь, удобно