Статья

python-telegram-bot: настройка прокси в v13 и v20+

Библиотека python-telegram-bot — одна из самых популярных для написания ботов на Python.

Но API её прокси-настройки кардинально изменился между v13 и v20. Разберём оба варианта.

Версия 20+ (актуальная, async)

В v20 используется ApplicationBuilder и можно задать кастомный base_url.

Вариант А: API-прокси (рекомендуется)

Меняем сам endpoint — запросы идут через https://v0-telegram-proxy-api.vercel.app вместо api.telegram.org.

Работает даже если api.telegram.org заблокирован напрямую.

from telegram.ext import ApplicationBuilder

application = (
    ApplicationBuilder()
    .token("ВАШ_ТОКЕН")
    .base_url("https://v0-telegram-proxy-api.vercel.app/bot")
    .base_file_url("https://v0-telegram-proxy-api.vercel.app/file/bot")
    .build()
)

application.run_polling()

Вариант Б: SOCKS5/HTTP прокси

Если у вас есть SOCKS5 прокси:

from telegram.ext import ApplicationBuilder

application = (
    ApplicationBuilder()
    .token("ВАШ_ТОКЕН")
    .proxy("socks5://user:pass@host:port")
    .get_updates_proxy("socks5://user:pass@host:port")
    .build()
)

Версия 13.x (старая, sync)

import telegram
from telegram.ext import Updater
import urllib.request

# Вариант через SOCKS5
updater = Updater(
    token="ВАШ_ТОКЕН",
    request_kwargs={
        'proxy_url': 'socks5h://user:pass@host:port'
    }
)

# Вариант через HTTP прокси
updater = Updater(
    token="ВАШ_ТОКЕН",
    request_kwargs={
        'proxy_url': 'http://host:port',
        'urllib3_proxy_kwargs': {
            'username': 'user',
            'password': 'pass'
        }
    }
)

Как проверить, что прокси работает

import asyncio
from telegram import Bot
from telegram.request import HTTPXRequest

async def check():
    request = HTTPXRequest(proxy="https://v0-telegram-proxy-api.vercel.app")  # для httpx-based клиента
    bot = Bot(token="ВАШ_ТОКЕН", base_url="https://v0-telegram-proxy-api.vercel.app/bot")
    me = await bot.get_me()
    print(me)

asyncio.run(check())

Или через curl:

curl https://v0-telegram-proxy-api.vercel.app/botВАШ_ТОКЕН/getMe

Частые ошибки

`NetworkError: Proxy requires authorization`

Укажите логин и пароль в URL прокси: socks5://user:pass@host:port

`SSLError`

Попробуйте добавить .connect_timeout(30) и .read_timeout(30) в ApplicationBuilder.

`InvalidToken`

Скопируйте токен заново из @BotFather — никаких пробелов.

Итог

Для v20+ самый надёжный способ — подменить base_url на https://v0-telegram-proxy-api.vercel.app/bot.

Это работает без каких-либо дополнительных прокси-серверов и не требует SOCKS5.


Сделай собственный прокси за 5 минут

Большинство статей советуют PythonAnywhere или Cloudflare Pages — но оба сервиса уже заблокированы в России и СНГ. Vercel работает стабильно.

Этот сайт создан на v0.app — AI-инструменте от Vercel. На разработку ушло 3 доллара. При регистрации по реферальной ссылке вы получаете $5 на баланс — этого достаточно, чтобы задеплоить свой личный прокси и проверить всё самостоятельно.

Получить $5 и задеплоить свой прокси →

Этот сайт обошёлся в $3

Сделан на v0.app — AI-инструменте от Vercel. При регистрации по ссылке вы получаете $5 на баланс — достаточно, чтобы задеплоить свой личный прокси.

Получить $5 →