Программирование

Как настроить Telegram бота для личных сообщений

Пошаговая настройка Telegram бота на Python для ответа на команды в личных сообщениях. Примеры кода для aiogram, pyTelegramBotAPI, python-telegram-bot. Регистрация в BotFather, токен, фильтры chat.type == 'private'. Безопасность и отладка.

1 ответ 1 просмотр

Как настроить Telegram-бота для ответа на команды в личных сообщениях с любым пользователем?

Настроить telegram бот для ответа на команды в личных сообщениях (команды боту telegram) можно за несколько шагов: зарегистрируйте бота в BotFather, сохраните токен и в коде отфильтруйте обновления по chat.type == ‘private’. На практике для telegram бот на python достаточно в обработчиках задать chat_type/filters.ChatType.PRIVATE или явно проверять message.chat.type и запускать polling или webhook — ниже приведены готовые примеры (aiogram, pyTelegramBotAPI, python-telegram-bot) и рекомендации по безопасности.


Содержание


Быстрая инструкция — ответ в личных сообщениях

Кратко — что нужно сделать:

  • Создать бота в BotFather (/newbot) и получить токен.
  • Сохранить токен в безопасном месте (переменная окружения или .env).
  • Выбрать библиотеку для Python: aiogram, python-telegram-bot или pyTelegramBotAPI.
  • В коде фильтровать личные сообщения: проверять message.chat.type == ‘private’ или использовать chat_type / filters.ChatType.PRIVATE в декораторах/обработчиках.
  • Запустить polling для разработки или настроить webhook для продакшна.

Зачем фильтровать? В личных чатах бот по умолчанию получает все сообщения, но если вы хотите, чтобы он реагировал только на команды/текст в личке, явно отсекайте групповые и канал-обновления. Примеры ниже показывают рабочую реализацию в трёх популярных библиотеках.


Регистрация бота и получение токена (BotFather)

  1. Откройте Telegram, найдите @BotFather и отправьте команду /newbot.
  2. Следуйте подсказкам: введите имя и username (должен оканчиваться на bot).
  3. BotFather вернёт токен вида 123456:ABC-DEF… — сохраните его в переменную окружения или .env.
  4. Команды можно задать через BotFather (/setcommands), но удобнее обновлять набор команд программно (см. раздел про setMyCommands и ссылку на Bot API).

Важно: для личных чатов бот получает сообщения по умолчанию — не нужно отключать какие-то дополнительные режимы для приватного общения. Подробно про поведение API и методы (getUpdates, sendMessage, setMyCommands) см. в официальной документации Telegram Bot API: https://core.telegram.org/bots/api.


Настройка telegram бота на Python: aiogram (пример)

Ниже — минимальный пример на aiogram (v2-style), который отвечает только в личных сообщениях:

python
from aiogram import Bot, Dispatcher, executor, types
import os

API_TOKEN = os.getenv("TOKEN") # токен храните в env

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

@dp.message_handler(commands=['start'], chat_type=types.ChatType.PRIVATE)
async def send_welcome(message: types.Message):
 await message.reply("Привет! Я отвечаю только в личных сообщениях.")

@dp.message_handler(chat_type=types.ChatType.PRIVATE)
async def echo(message: types.Message):
 await message.answer(message.text)

if __name__ == '__main__':
 executor.start_polling(dp, skip_updates=True)

Пояснения:


Пример: pyTelegramBotAPI (TeleBot)

Пример с библиотекой pyTelegramBotAPI (telebot):

python
import os
from telebot import TeleBot
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv("TOKEN")
bot = TeleBot(TOKEN)

def is_private(message):
 return message.chat.type == 'private'

@bot.message_handler(commands=['start'])
def send_welcome(message):
 if not is_private(message):
 return
 bot.send_message(message.chat.id, "Привет! Пишу только в личку.")

@bot.message_handler(func=lambda m: m.chat.type == 'private')
def echo(message):
 bot.send_message(message.chat.id, message.text)

bot.polling(none_stop=True)

Здесь мы вручную проверяем message.chat.type == ‘private’ — простой и надёжный способ в TeleBot. Полная пошаговая инструкция по pyTelegramBotAPI и хранению токена есть в обзоре: https://cloud.ru/blog/telegram-bot-na-python.


Пример: python-telegram-bot (официальная библиотека)

Пример для python-telegram-bot (v20+):

python
import os
from telegram.ext import Application, CommandHandler, MessageHandler, filters

TOKEN = os.getenv("TOKEN")
app = Application.builder().token(TOKEN).build()

async def start(update, context):
 await update.message.reply_text("Привет! Я работаю только в личке.")

async def echo(update, context):
 # обработчик срабатывает только для личных чатов благодаря фильтру ниже
 await update.message.reply_text(update.message.text)

app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND & filters.ChatType.PRIVATE, echo))

app.run_polling()

Обратите внимание на использование filters.ChatType.PRIVATE — это встроенный способ ограничить обработчик личными сообщениями. Официальные примеры и разъяснения по работе с обработчиками и фильтрами — в документации и справках, например: https://developers.sber.ru/help/salutebot/adding-to-telegram и https://core.telegram.org/bots/api.


Команды боту telegram: регистрация и отображение

  • В личном чате команды отображаются в подсказках автоматически, если вы задали их через BotFather (/setcommands) или программно через метод setMyCommands.
  • Пример программной регистрации команд (через Bot API): POST https://api.telegram.org/bot/setMyCommands с массивом команд в JSON.
  • В aiogram можно вызвать метод установки команд: например, через BotCommand из aiogram.types — либо использовать API напрямую.

Нужны разные наборы команд для лички и групп? Bot API поддерживает области видимости команд (scopes), так что можно определить отдельные команды для личных чатов. Подробности по методам и scopes — в официальной документации: https://core.telegram.org/bots/api.


Хранение токена, безопасность и рекомендации

  • Никогда не храните токен в публичных репозиториях. Используйте переменные окружения или .env с gitignore.
  • При утечке токена сразу используйте BotFather для /revoke или создайте нового бота.
  • В продакшне предпочтительнее webhook с HTTPS и валидным сертификатом; для разработки — polling.
  • Логи: не выводите токен и чувствительные данные в логах.
  • Если бот должен отвечать только в личке — это дополнительный уровень безопасности: он не будет реагировать на сообщения в группах и каналах, где правила и доступы сложнее.

Практический совет: включите подробное логирование исключений и используйте skip_updates=True при перезапуске, чтобы не упасть на старых запросах.


Отладка и распространённые ошибки

Если бот не отвечает в личке — проверьте по порядку:

  • Правильность токена. Попробуйте curl https://api.telegram.org/bot/getMe и проверьте ответ.
  • Пользователь действительно пишет боту в личку (нужно нажать «Start» или отправить сообщение). Бот не может писать первым — пользователь должен инициировать диалог.
  • В обработчиках корректно ли задан фильтр chat.type (равно ‘private’ или filters.ChatType.PRIVATE).
  • Запущен ли polling или корректно ли настроен webhook; проверьте getUpdates и getWebhookInfo в API: https://core.telegram.org/bots/api#getupdates.
  • Ошибки в коде: смотрите стек-трейс, включите логирование, используйте skip_updates=True при отладке.
  • Бот мог быть заблокирован пользователем — тогда сообщения не доходят.

Пример команды для быстрой проверки обновлений:
curl “https://api.telegram.org/bot/getUpdates”

Это покажет, какие апдейты получает бот — удобно для диагностики.


Источники


Заключение

Кратко: создайте бота в BotFather, храните токен безопасно и в коде явно фильтруйте личные сообщения (chat.type == ‘private’ или filters.ChatType.PRIVATE). Для telegram бот на python это удобно реализовать в aiogram, python-telegram-bot или pyTelegramBotAPI — примеры выше позволят быстро запустить бота, который реагирует только в личной переписке и отвечает на команды боту telegram.

Авторы
Проверено модерацией
Модерация
Как настроить Telegram бота для личных сообщений