Этот проект представляет собой ботов для Telegram и VKontakte. Боты анализируют полученные от пользователей сообщения и отвечают в соответствии с их запросом. Если бот не понимает вопрос - он не отвечает пользователю, вместо бота должен ответить оператор. Боты в своей работе используют Dialogflow (искусственный интеллект от Google).
- Telegram - интерактивный бот в telegram, который автоматически обрабатывает сообщения пользователей. ссылка на рабочего демонстративного бота
- VK - интерактивный бот для сообществ Вконтакте, который общается с пользователями в личных сообщениях. ссылка на сообщество, где настроен такой бот
- DialogFlow - сервис от Google, анализирует поступающие от ботов вопросы и передает им подходящие ответы(если такие имеются в базе).
- Логирование проекта - в проекте настроено ведение логов в терминале, в файле, а критические ошибки отправляются администратору в telegram(если это настроено, об этом ниже).
- Боты могут быть размещены на сервер и работать 24/7.
- Скачать и распаковать файлы проекта в любой удобное место.
- Python версии 3.10.11 (на версиях ниже или выше проект не тестировался).
- Аккаунт Google и настроенный в нем проект.
- Аккаунт Telegram и созданный в нем бот через @BotFather, есть подробный гайд по настройке ботов в Telegram. Вам потребуется узнать токен Вашего бота.
- Настроенный агент в DialogFlow.
- Создайте проект в Google Cloud
- Перейдите на https://console.cloud.google.com/
- Войдите в свой аккаунт google
- Создайте новый проект, можно дать стандартное название
support-bot - Запомните ID проекта, он понадобится позже, будет примерно такой
support-bot-123456
- Включите Dialogflow API
- На главной странице проекта введите в поиске
Dialogflow API:
- Выберите его и включите, нажав на кнопку
Enable.
- Создайте агента Dialogflow
- Перейдите на сайт https://dialogflow.cloud.google.com/
- Создайте нового агента указав:
- Имя -
support_agentили любое другое - Язык
Default language- обязательно выберитеRussian - ru, иначе бот не будет распознавать русскую речь. - Часовой пояс
Default time zone- стандартный(GMT+3:00) Europe/Moscowили выберите любой подходящий. - В
Google projectвыберите Ваш только что созданный проект.
- Имя -
- Создайте ключ доступа к сервису Google
- Вернитесь на страницу Вашего проекта Google по ссылке https://console.cloud.google.com/
- В меню справа откройте раздел
APIs & Services->Credentials - Нажмите на кнопку
Create credentialsи создайте сервисный аккаунт:
- Зайдите в созданный сервисный аккаунт, перейдите в раздел
Keysи нажмите кнопкуAdd key, выберите параметрjsonи нажмитеCreate:
-
Начнется загрузка json ключа, сохраните его в надежном месте и никому не передайте, благодаря этому файлу боты смогут получить доступ к Dialogflow.
-
Также сервисному аккаунту нужно расширить права, переходим в раздел
Permissions->Manage access-> дать рольDialogflow API Admin
- Создайте группу (если её ещё нет)
- Зайдите в
Управление:
- В разделе
Сообщениявключите сообщения сообщества, настройте приветственное сообщение:
- Затем перейдите в этом же разделе в подраздел
Настройки для ботаи включите бота в сообществе:
- Перейдите в раздел
Дополнительно->Работа с API - Создай ключ доступа в разделе
Ключи доступаи запомните его:
- Перейдите в раздел
Long Poll APIи включите long poll запросы:
- В
Типы событийвыберите только входящие и исходящие сообщения:
В папке с проектом лежит файл .env_template, поменяйте его название на .env, откройте его блокнотом и заполните необходимые данные в соответствии с нижеуказанной информацией:
TG_BOT_TOKEN='токен_от_Telegram_бота'
VK_BOT_TOKEN='токен_от_VK_бота'
PROJECT_ID='ID_вашего_Google_проекта'
GOOGLE_APPLICATION_CREDENTIALS='путь_до_json_ключа_от_сервиса_Google'
ERROR_BOT_TOKEN='токе_бота_для_отправки_ошибок'
ADMIN_CHAT_ID='id_админа_для_отправки_ошибок_ботов'
Значения указывайте в кавычка без пробелов рядом с =.
Если json с ключом от Google сервисов лежит не в папке с проектом лучше указать полный путь до файла
- У Вас уже должен быть установлен python версии 3.10.11
- Открываете консоль и вводите следующую команду:
cd путь_до_папки_с_проектом
- Устанавливаем виртуальное окружение, введя в консоли команду:
python -m venv venv
- Активируем виртуальное окружение:
venv\Scripts\activate # для Windows
source bin/activate # для Linux
- Устанавливаем зависимости
pip install -r requirements.txt
Осталось наполнить базу Dialogflow вопросами и ответами на них, чтобы Вашим ботам было что отвечать пользователям.
- В проекте лежит шаблон базы данных вопросов и ответов -
db_questions_and_answer.json, откройте его. - Добавьте свои вопросы и ответы в соответствии с шаблоном, например:
{
"Как изменить пароль": {
"questions": [
"как сменить пароль?",
"забыл пароль, что делать",
"хочу изменить пароль"
],
"answer": "Чтобы изменить пароль, зайдите в настройки профиля и нажмите 'Сменить пароль'"
},
"Как восстановить доступ": {
"questions": [
"не могу войти",
"потерял доступ",
"заблокировали аккаунт"
],
"answer": "Напишите в поддержку на почту support@glagoly.ru"
}
}Правила заполнения:
- Название интента (например,
"Как изменить пароль") - должно быть уникальным - Вопросы - укажите несколько формулировок одного и того же вопроса. Лучше больше, т.к. чем больше будет формулировок указано, тем в большем количестве различных сообщений боты смогут уловить суть вопроса
- Ответ - один конкретный и четкий ответ
- Теперь данные из файла необходимо подгрузить в Dialogflow. Для этого был создан скрипт -
upload_intent.py, чтобы не делать это руками. Для подгрузки вопросов и ответа в Dialogflow, введите в консоли команду:
python upload_intent.py -i "Название_вашего_интента"
Чтобы загрузить несколько интентов, выполните данную команду для каждого из них отдельно.
Если файл лежит в другой директории, вы можете указать скрипту на расположение нужного файла написав команду в следующем виде:
python upload_intent.py -i "Название_вашего_интента" -f "полный_путь_к_файлу"
Больше подробностей о вызове скрипта через консоль, можете узнать введя команду:
python upload_intent.py --help
Ботов необходимо запускать в отдельных терминалах, так как работают они независимо друг от друга.
- Запустим Telegram бота. Откройте первую консоль и введите следующие команды по порядку:
cd путь_до_папки_с_проектом
venv\Scripts\activate # для Windows
source bin/activate # для Linux
python tg_bot.py
Если запуск прошел успешно, Вы должны увидеть сообщение:
Бот запущен. Для его отключения нажмите Ctrl+C
Не закрывайте консоль, иначе бот перестанет работать.
- Запусти VK бота. Откройте новую консоль и введите эти команды по порядку:
cd путь_до_папки_с_проектом
venv\Scripts\activate # для Windows
source bin/activate # для Linux
python vk_bot.py
Скрипт сначала попробует авторизоваться в VK с помощью указанного Вами ключа, вы увидите сообщение
Авторизация в VK.... Если авторизация пройдет успешно, Вы увидите сообщениеАвторизация прошла успешно, ожидание новых сообщений, значит бот работает.
Не закрывайте консоль, иначе бот перестанет работать.
Проверка Telegram бота:
- Найдите своего бота в Telegram по имени или ID
- Отправьте ему команду
/start- бот должен поздороваться - Отправьте ему вопрос из базы - бот должен дать ответ в соответствии с Вашим вопросом.
Проверка VK бота:
- Зайдите в Вашу группу VK
- Напишите группе любое сообщение от своего лица
- Бот должен ответить, если знает ответ. Если он не знает ответ на вопрос, он должен промолчать
В проекте настроено автоматическое логирование. Это помогает отлаживать ошибки, отслеживать действия ботов и контролировать работу. Если что-то сломается или Вам нужно будет узнать, что происходило в определенный момент времени, Вы всегда сможете обратиться к логам.
Логи выводятся в терминал, а также автоматически сохраняются в файл, файл сохраняется по пути: папка_с_проектом/logs/logs.log.
Если вы ещё не запускали проект данной папки не будет, но как только Вы запустите одного из ботов создастся папка и файл с логами.
Какие логи настроены:
- В терминале - логи выводятся в терминал
- В файл - логи сохраняются в папку
logs/logs.logс ротацией (5Mb на файл, хранится 3 файла) - В telegram - критические ошибки отправляются администратору
Пример лога:
INFO:vk_bot: 2026-05-02 21:00:47,443 | Новое сообщение для меня от пользователя 49558646: хочу работать
Расшифровка:
INFO- уровень важностиvk_bot- от какого бота запись (скриптupload_intent.pyтакже записывает логи)2026-05-02 21:00:47,443- дата и время событияНовое сообщение для меня от...- само сообщение
Как настраивать логирование:
- Уровень логирования можно изменить при создании логгера в каждом скрипте:
logger = setup_logger(level=logging.ERROR)
logger = setup_logger(level=logging.WARNING)
logger = setup_logger(level=logging.DEBUG)- При создании логгера можно настроить логгирование только в нужные места(стандартно включено логгирование в консоль и файл):
# Только консоль (без файла)
logger = setup_logger(console_logging=True, file_logging=False)
# Только файл (без консоли)
logger = setup_logger(console_logging=False, file_logging=True)
# С отправкой ошибок в Telegram, логов в консоль и в файл
logger = setup_logger(tg_logging=True, bot_token='токен_вашего_бота', chat_id='id_администратора_в_telegram')Настройка отправки ошибок в telegram:
- В .env обязательно должны быть указаны ключ бота, через которого будет отправляться ошибка(отдельный бот) -
ERROR_BOT_TOKENи id пользователя, которому будут отправляться ошибки -ADMIN_CHAT_ID, иначе отправка ошибок не будет настроена. - При создании логгера включите логгер для телеграма и передайте указанные выше параметры:
logger = setup_logger(tg_logging=True, bot_token='токен_вашего_бота', chat_id='id_администратора_в_telegram')Если параметры в .env не указаны, тогда логгирование в telegram не подключится.
tg_bot.py- бот для Telegramvk_bot.py- бот для VKontakteupload_intent.py- скрипт для загрузки вопросов в Dialogflowlogger_conf.py- скрипт с настройкой логирования проектаdb_questions_and_answer.json- база данных с вопросами и ответами (шаблон).env_template- файл с ключами и чувствительными данными (шаблон)requirements.txt- список зависимостей необходимых для работоспособности проекта
Проект написан в учебных целях