Telegram-бот (Python) — личный секретарь: принимает текст или голос, извлекает данные встречи и добавляет событие в Google Calendar.
- Текстовые сообщения -> создание события в Google Calendar
- Голосовые сообщения (audio/voice) -> распознавание речи -> создание события
- Извлечение структуры встречи (title / date+time / duration)
- OAuth авторизация Google Calendar:
- первый раз создаётся
token.json - далее используется сохранённый
token.json
- первый раз создаётся
- Windows/macOS/Linux
- Python 3.10+ (проект тестировался на Windows)
- Аккаунт Telegram (BotFather токен)
- Google Cloud Project с включенным Google Calendar API
- OpenAI API key (используется для извлечения структуры встречи из текста)
python -m venv .venv
.\.venv\Scripts\activate
python -m pip install -r requirements.txt- Скопируйте пример:
copy .env.example .env- Заполните
.envзначениями:
TELEGRAM_TOKEN— токен вашего ботаOPENAI_API_KEY— ключ OpenAIGOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET— OAuth Client (Desktop)GOOGLE_CALENDAR_ID— календарь (primaryпо умолчанию)TZ— часовой пояс, напримерEurope/Kyiv
- Все ключи/секреты хранятся только в
.env token.jsonне коммитится (в.gitignore)
- Включите API:
- Google Cloud Console -> APIs & Services -> Library -> Google Calendar API -> Enable
- OAuth consent screen:
- Если Publishing status = Testing, добавьте свой email в Test users
- Credentials:
- Создайте OAuth Client ID типа Desktop app
- Скопируйте
client_idиclient_secretв.env
.\.venv\Scripts\python.exe bot.pyПри первой попытке создать событие откроется OAuth-авторизация. После подтверждения будет создан token.json.
Примеры сообщений:
запиши меня к зубному на завтра в 12:00созвон с Петром в пятницу в 15:30 на 45 минут
Бот старается:
- корректно распознать дату/время
- если длительность не указана — ставит 60 минут
- улучшать заголовок (например, про стоматолога ->
Зубной врач)
Можно отправить в нескольких строках:
титул это - Зубной врач
дата - 13.02.26
время - 12-00
протяженность - 1 час
Голосовые сообщения распознаются и далее обрабатываются как обычный текст.
Выбор провайдера задаётся в .env:
WHISPER_PROVIDER=openai— распознавание через OpenAI (нужна оплаченная квота)WHISPER_PROVIDER=local— локальный Whisper
Для WHISPER_PROVIDER=local требуется установленный ffmpeg в PATH.
Проверка:
ffmpeg -versionbot.py— Telegram bot (text + voice)speech_service.py— распознавание речи (OpenAI или local Whisper)calendar_service.py— Google Calendar API + OAuth (token.json)config.py— загрузка конфигурации из.env
- Бот не отвечает
- проверьте, что процесс
bot.pyзапущен - проверьте
TELEGRAM_TOKEN
- проверьте, что процесс
- Google OAuth 403 access_denied
- проверьте OAuth consent screen (Testing -> Test users)
- убедитесь, что клиент типа Desktop
- Local Whisper WinError 2
- обычно нет
ffmpegвPATH
- обычно нет
Добавьте лицензию при необходимости.