Боты и автоматизация2026-07-289 минРедакция Submarine School

Как сделать бота приватным в Telegram: доступ только своим 2026

Как сделать бота приватным в Telegram: доступ только своим 2026

В Telegram нет кнопки «сделать бота приватным»: написать боту может любой, кто знает его имя. Приватность собирается из трёх вещей: настроек в BotFather, проверки пользователя внутри самого бота и аккуратного обращения с токеном. Ниже по шагам: что закрыть в BotFather, как пустить только своих по ID или коду приглашения, как привязать бота к одной группе или к подписчикам канала и что делать, если токен утёк.

Почему бот по умолчанию открыт всем

Личный чат с ботом устроен как чат с человеком: имя вида @my_bot публичное, и Telegram не спрашивает, от кого вы готовы принимать сообщения. По документации Telegram бот получает все сообщения из личных чатов независимо от настроек. Значит, фильтровать людей будет ваш код, а не платформа.

Полезно сразу разделить три разных вопроса, их часто путают:

  • Кто пишет боту в личку. Настройками не закрывается, решается проверкой в коде.
  • Что бот видит и делает в группах. Закрывается настройками BotFather (Allow Groups и Group Privacy).
  • Кто управляет ботом и его данными: токен, админские команды, доступ к серверу.

Дальше идём по этим слоям. Если бота ещё нет, сначала пройдите базовый путь: его мы разбирали в инструкции о том, как создать бота в Telegram.

Настройки BotFather: что выключить первым делом

Две настройки закрывают самые заметные дыры, обе живут в меню бота у @BotFather. Откройте /mybots, выберите бота и зайдите в «Bot Settings».

  1. «Allow Groups?» переведите в Off, если бот нужен только в личке. Эта настройка (команда /setjoingroups) определяет, можно ли вообще добавить бота в группу: пока она включена, это может сделать любой.
  2. «Group Privacy» оставьте включённым (команда /setprivacy). В этом режиме бот в группе видит только адресованные ему команды вида /start@my_bot, ответы на свои сообщения и служебные события, а не всю переписку.
  3. Если вы меняли режим приватности, удалите бота из группы и добавьте заново: новая настройка применяется к боту при следующем входе в чат.

Оговорка про группы: если бот назначен администратором чата, он видит все сообщения независимо от режима приватности, это прямо описано в разделе про privacy mode. Поэтому админские права боту выдают только тогда, когда они нужны для работы. Права и роли в групповом сценарии разбирали в статье о том, как настроить бота для группы.

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

Занять место

Белый список: пускаем только своих по ID

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

Узнать ID своих людей проще всего так: попросите их написать боту любое сообщение и выведите message.from_user.id в лог. Записали цифры, добавили в список, лог убрали.

ALLOWED = {123456789, 987654321}  # ID своих людей

@bot.message_handler(func=lambda m: True)
def handle(m):
    if m.from_user.id not in ALLOWED:
        bot.reply_to(m, 'Этот бот закрытый.')
        return
    bot.reply_to(m, 'Привет! Чем помочь?')

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

  • Проверку выносите в одну функцию или middleware, а не копируйте в каждый обработчик: забытый обработчик это открытая дверь.
  • Список храните не в коде, а в файле или базе рядом с ботом: добавить человека тогда можно без правки программы и перезапуска.
  • Чужим отвечайте нейтрально, без подсказок вроде «нужен код доступа» и без имени владельца.

По теме: Как создать команду боту в Telegram в 2026: меню и обработчик

Код приглашения и ссылка с параметром

Белый список неудобен, когда людей десятки и состав меняется. Тогда работает схема с приглашением: человек приходит по специальной ссылке или вводит код, бот один раз проверяет его и запоминает ID. Дальше он уже «свой».

Telegram умеет передавать параметр прямо в ссылке: адрес вида https://t.me/my_bot?start=team2026 присылает боту сообщение /start team2026. По документации в параметре допустимы латинские буквы, цифры, подчёркивание и дефис, длина до 64 символов. Как оформить такую ссылку, разбирали в материале про ссылку на бота в Telegram.

INVITE_CODES = {'team2026', 'family-x7'}

@bot.message_handler(commands=['start'])
def start(m):
    parts = m.text.split(maxsplit=1)
    code = parts[1].strip() if len(parts) > 1 else ''
    if code in INVITE_CODES:
        save_allowed(m.from_user.id)   # записать в базу
        bot.reply_to(m, 'Доступ открыт.')
    else:
        bot.reply_to(m, 'Этот бот закрытый.')

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

Проверку доступа пишите раньше логики. Соблазн «сначала запущу, потом закрою» заканчивается тем, что бота находят по случайному имени, а вы узнаёте об этом по счёту за API нейросети.

Проверки доступа это буквально одна страница кода, и писать её вручную не обязательно: ИИ собирает такие куски по описанию задачи. На бесплатном вебинаре показываем весь путь, от идеи до работающего бота, и отдаём гайд в подарок.

Записаться на вебинар

Бот только для одной группы или для подписчиков канала

Бывает и так, что бот должен работать в одном рабочем чате и молчать везде, куда его утащили. Здесь проверяют не человека, а чат: у группы тоже есть числовой ID.

ALLOWED_CHAT = -1001234567890  # ID вашей группы

@bot.message_handler(func=lambda m: True)
def handle(m):
    if m.chat.type != 'private' and m.chat.id != ALLOWED_CHAT:
        bot.leave_chat(m.chat.id)   # выйти из чужого чата
        return

Третий вариант, когда людей много и вести список руками нереально: пускать в бота только подписчиков вашего канала. Метод getChatMember возвращает статус человека в чате, среди значений есть creator, administrator, member, left и kicked. Первые три означают, что человек на месте.

CHANNEL = '@my_channel'
OK = ('creator', 'administrator', 'member')

def is_subscriber(user_id):
    st = bot.get_chat_member(CHANNEL, user_id).status
    return st in OK

Условие одно: бот должен быть администратором этого канала, иначе Telegram не обязан отдавать ему статус чужих участников и проверка начнёт врать. И заложите обработку ошибки: если запрос не прошёл, безопаснее отказать в доступе, чем пропустить всех.

По теме: Как сделать рассылку в боте Telegram в 2026: база, лимиты, код

Админские команды держите отдельно

Даже в закрытом боте есть команды другого уровня: рассылка, выгрузка базы, добавление людей. Их проверяют отдельно, потому что «свой» и «владелец» это не одно и то же.

  • Список админов держите отдельной константой или переменной окружения, а не той же, что и белый список пользователей.
  • Не показывайте админские команды в меню бота: список команд через BotFather виден всем, кто открыл бота.
  • Логируйте, кто и какую админскую команду вызвал, с датой.

Токен в открытом коде: самая дорогая ошибка

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

Классическая утечка выглядит так: токен вписали строкой прямо в файл и выложили проект на GitHub, где его нашли автоматические сканеры. GitHub и сам проверяет утёкшие токены Telegram на работоспособность. Правильный вариант занимает две строки: токен лежит в переменной окружения, а файл с секретами не попадает в репозиторий.

import os
import telebot

TOKEN = os.environ['BOT_TOKEN']
bot = telebot.TeleBot(TOKEN)

Сам BOT_TOKEN кладут в файл .env или в настройки сервера, а .env первым делом добавляют в .gitignore. Проверьте это отдельно, если код писал за вас ИИ: в сгенерированном примере токен часто стоит прямо в строке. Где держать запущенного бота, разбирали в статье о том, как сделать, чтобы бот работал круглосуточно.

По теме: Как сделать бот-приложение в Telegram: мини-приложение с ИИ 2026

Если бот всё-таки утёк: смена токена

Признаки простые: бот пишет то, чего вы не отправляли, кто-то посторонний получает от него сообщения, или в логах появляются незнакомые ID. Порядок действий такой.

  1. Отзовите токен. В @BotFather откройте /mybots, выберите бота, «API Token» и «Revoke current token». Старый токен перестаёт работать сразу, вы получаете новый.
  2. Пропишите новый токен везде, где крутится бот: на сервере, в настройках хостинга, в сервисе автоматизации. Пока этого не сделали, бот лежит.
  3. Проверьте, куда утекло. Просмотрите репозиторий и историю коммитов: удалить файл мало, старый коммит остаётся в истории, и токен из него всё ещё виден.
  4. Смените коды приглашений и проверьте, не появилось ли в группе лишних людей с правами.

Частые вопросы

Можно ли настройками Telegram запретить писать боту всем, кроме моих людей?

Нет. Ни BotFather, ни настройки самого Telegram такой возможности не дают: бот получает все сообщения из личных чатов. Отсечь посторонних можно только проверкой внутри бота, по ID или по коду приглашения.

Приватный бот и анонимный бот это одно и то же?

Нет. Приватный бот ограничивает, кто им пользуется. Анонимный скрывает, кто именно написал сообщение внутри бота. Их можно совмещать, но настраиваются они по-разному.

Можно ли спрятать бота из поиска Telegram?

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

Нужны ли платные сервисы, чтобы закрыть бота?

Нет. Проверка ID, коды приглашения и проверка подписки на канал доступны в обычном Bot API и ничего не стоят. Платить придётся только за хостинг, где бот работает постоянно, и за нейросеть, если бот на неё опирается.

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

Записаться на вебинар
Разборы, кейсы и фишки вайбкодинга каждую неделю в телеграм-канале «Яков вайбкодит».
Первый проект с ИИ: живой разбор, бесплатно Занять место