Perplexity API + Telegram Bot: бот, который гуглит за вас и делает это умнее.
Timur Gilmanov
732 Words Ты потратишь: 3 Minutes, 19 Seconds
2025-10-27 04:20 +0000
Если вы когда-нибудь хотели создать Telegram-бота, который не просто отвечает, а действительно думает, шутит и общается без формальностей — эта статья для вас.
Здесь подробно разобран пошаговый процесс создания полноценного ИИ-ассистента на базе Python 3.12, Perplexity API с Pro-подпиской и современного фреймворка aiogram 3.
Perplexity AI — это движок поиска в реальном времени, который объединяет возможности модели LLM с доступом к актуальной информации из интернета. Версия Pro предоставляет более мощную модель (sonar-pro, которая сильнее, но и дороже обычного sonar), а также значительно повышенную скорость отклика.
К тому же, без подписки Pro API Perplexity работать не будет, то есть доступ к расширенным возможностям через API возможен только при активной Pro-учетке.
Официальная подписка Pro стоит 20 долларов в месяц, однако есть площадки, где годовую подписку можно приобрести за ~500 рублей. Такой вариант, конечно, может нести риск блокировки, но у меня пока всё работает.
И только с этой подпиской вам ежемесячно предоставляются несуммируемые $5 бесплатного кредита на использование API, которых хватает на сотни запросов.
1. Подготовка: окружение и зависимости
sudo apt update
sudo apt install python3.12 python3.12-venv python3-pip
mkdir ~/perplexity-bot && cd ~/perplexity-bot
python3.12 -m venv venv
source venv/bin/activate
pip install aiogram httpx
2. Получаем доступ к Perplexity Pro API
Перейдите на страницу https://www.perplexity.ai/account/api/keys.
Нажмите Generate API Key — сохраните ключ.
Эндпоинт для запросов: https://api.perplexity.ai/chat/completions
3. Ваш файл config.py
Создаем файл в корне бота:
nano config.py
В него добавляем:
TOKEN = "ТОКЕН_ВАШЕГО_БОТА_ОТ_BOTFATHER"
API = "ВАШ_PERPLEXITY_API_KEY"
API_URL = "https://api.perplexity.ai/chat/completions"
admins = [123456789] # Telegram ID админа
banlist = [] #ID пользователей, если потребуется их банить
4. Обращение к Perplexity API
nano main.py
Основная магия происходит в асинхронной функции ask_perplexity():
import httpx, logging
from config import API, API_URL
async def ask_perplexity(question: str) -> str:
headers = {
"Authorization": f"Bearer {API}",
"Content-Type": "application/json"
}
json_data = {
"model": "sonar-pro",
"messages": [
{
"role": "system",
"content": "Без * и ссылок. Я — дружелюбный сосед, человек-паук. Отвечаю коротко, по делу."
},
{"role": "user", "content": question}
],
"max_tokens": 300,
"temperature": 0.9,
"frequency_penalty": 0.6
}
async with httpx.AsyncClient(timeout=60.0) as client:
try:
r = await client.post(API_URL, headers=headers, json=json_data)
data = r.json()
return data.get("choices", [{}])[0].get("message", {}).get("content", "Ответ не получен.")
except Exception as e:
logging.error(f"Ошибка при обращении к API: {e}")
return "Что-то пошло не так, но я скоро починюсь."
Можно выбрать "model": "sonar" - она потребляет меньше кредитов, но мне интереснее использовать sonar pro, ведь она чаще понимает юмор и выдаёт более живые ответы.
5. Основная логика бота
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import Message
import asyncio, logging
from config import TOKEN, admins, banlist
from ai import ask_perplexity
bot = Bot(token=TOKEN)
dp = Dispatcher()
logging.basicConfig(level=logging.INFO)
@dp.message(Command("start"))
async def start(message: Message):
if message.from_user.id in banlist:
return
await message.answer("Привет! Спрашивай — разберём быстро! ")
@dp.message()
async def chat(message: Message):
if message.from_user.id in banlist:
return
await message.chat.do("typing")
reply = await ask_perplexity(message.text.strip())
await message.answer(reply)
6. Админские инструменты: /ban, /unban и /banlist, если нужны
У тебя уже подготовлено место хранения banlist=[] в config.py.
Добавляем несколько команд для админов:
@dp.message(Command("ban"))
async def ban_user(message: Message):
if message.from_user.id not in admins:
return
try:
user_id = int(message.text.split()[1])
if user_id not in banlist:
banlist.append(user_id)
# Записываем изменения
save_banlist(banlist)
await message.answer(f"Пользователь {user_id} заблокирован.")
except Exception:
await message.answer("Используй: /ban <user_id>")
7. Запуск бота локально
source venv/bin/activate
python main.py
Проверь, что бот отвечает в Telegram без задержек.
Если всё работает — переходим к боевой развёртке.
8. Запуск как сервис (systemd)
sudo nano /etc/systemd/system/telegram-bot.service
[Unit]
Description=Telegram AI Assistant
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/telegram-bot
ExecStart=/opt/telegram-bot/venv/bin/python /opt/telegram-bot/main.py
Restart=always
RestartSec=5
Environment="PYTHONUNBUFFERED=1"
[Install]
WantedBy=multi-user.target
Активируем:
sudo systemctl daemon-reload
sudo systemctl enable telegram-bot
sudo systemctl start telegram-bot
sudo systemctl status telegram-bot
Теперь бот запускается автоматически при перезагрузке и работает в фоне 24/7.
9. Советы по улучшению
Температура temperature: влияет на креативность, 0.7 – спокойный тон, 1.2 – импровизация, но с риском ухода от темы. Значения от 0 - 2.0.
Параметр frequency_penalty регулирует штраф за повторение одних и тех же слов или фраз в ответе. Значение в 0.6, уменьшает вероятность повторов слов, которые уже были использованы, что делает текст менее повторяющимся и более разнообразным. Значения -2.0 - 2.0
Параллельность: Aiogram 3 поддерживает асинхронные вызовы Perplexity, поэтому бот сохраняет скорость даже при высокой нагрузке.
Стиль: content определяет характер бота.
Например: «Без формальностей, говори коротко и по простому, как обычный парень».
10. Результат
Вы создали персонального ИИ ассистента, который работает на серверe, использует Perplexity Pro для анализа и отвечает в Telegram в реальном времени.
Он надежен, реагирует мгновенно и при желании может стать бренд помощником, чат агентом или шутливым ботом другом.