Telegram-бот для малого автосервиса / СТО, который принимает текст, голос, фото и PDF/документы, анализирует обращение через OpenAI и формирует:
- короткий ответ клиенту;
- структурированную заявку для администратора.
Проект собран как отдельное standalone-приложение в корне репозитория.
Когда клиент пишет в сервис в свободной форме, присылает голос, фото повреждения или документы, администратору приходится вручную разбирать обращение и собирать заявку из неструктурированного ввода.
Этот бот нужен, чтобы превратить мультимодальное обращение в понятный результат для двух сторон:
- клиент получает короткий осмысленный ответ;
- администратор получает структурированную заявку для дальнейшей обработки.
- принимает текст, голос, фото и документы;
- использует STT для голосовых сообщений;
- использует vision-анализ для фото и документов;
- классифицирует тип обращения;
- формирует ответ клиенту и внутреннюю заявку для сервиса.
- меньше ручной рутины на первичном разборе обращений;
- более структурированные заявки от клиентов;
- единый intake-канал для типовых сервисных сценариев;
- базу для дальнейшего расширения в CRM, календарь или web-интерфейс.
client message / voice / photo / PDF
-> Telegram bot
-> STT or vision analysis when needed
-> fact extraction
-> service classification
-> ticket assembly
-> safety cleanup and missing-data check
-> short client reply + structured admin ticket
-
Голосовое сообщение про плохой запуск и
Check Engine- ожидаемый тип обращения:
диагностика - missing data: марка, модель, год, VIN, удобное время визита
- ожидаемый тип обращения:
-
Фото поврежденного бампера после ДТП
- ожидаемый тип обращения:
кузовной ремонт - в ответе не обещается точная стоимость до осмотра
- ожидаемый тип обращения:
-
Фото VIN и запрос на тормозные колодки
- ожидаемый тип обращения:
подбор запчастей - бот уточняет оригинал или аналог
- ожидаемый тип обращения:
- принимать текстовую заявку;
- принимать голосовые сообщения и делать STT;
- принимать фото повреждения, VIN, приборной панели, детали или документа;
- принимать PDF/документ, если клиент прикладывает материалы;
- классифицировать тип обращения:
- диагностика
- ремонт
- кузовной ремонт
- мойка
- подбор запчастей
- гарантия
- другое
- формировать заявку администратору и ответ клиенту.
.
|- main.py
|- config.py
|- openai_client.py
|- handlers/
|- services/
|- utils/
|- tests/
|- docs/
|- Dockerfile
|- compose.yml
|- .dockerignore
|- .env.example
\- requirements.txt
Скопируйте .env.example в .env и заполните:
TELEGRAM_BOT_TOKENOPENAI_API_KEYADMIN_CHAT_ID
Опционально:
OPENAI_API_BASEOPENAI_GPT_MODELOPENAI_VISION_MODELOPENAI_STT_MODELOPENAI_TTS_MODELOPENAI_TTS_VOICELOG_LEVELENABLE_TTS
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python main.pyТребования:
- установлен Docker;
- установлен Docker Compose plugin;
- рядом с
compose.ymlесть заполненный.env.
Сборка и запуск:
docker build -t sto-as-bot .
docker compose up --buildПроверка статуса и логов:
docker compose ps
docker compose logs botОстановка:
docker compose down- имя compose project:
sto-as - имя контейнера:
sto-as-bot - image tag:
sto-as-bot
Все Docker-сущности, которые задаются проектом явно, должны начинаться с sto-as.
При LOG_LEVEL=DEBUG полезно смотреть такие этапы:
- startup приложения:
[main.main] - валидация env:
[config.validate_required_settings] - STT / Vision / ticket / reply вызовы:
[openai_client.*] - orchestration intake:
[intake_service.*] - нормализация и safety:
[safety_service.*] - отправка клиенту и администратору:
[handlers.*]
- Голос: клиент говорит, что машина плохо заводится и горит
Check Engine. - Фото повреждения: клиент отправляет фото бампера после ДТП.
- VIN + запчасти: клиент отправляет фото VIN и пишет про тормозные колодки.
- Текст: клиент просит записать на мойку или диагностику.
- без БД;
- без CRM;
- без календаря и оплат;
- без web-интерфейса;
- TTS опционален и включается только через
ENABLE_TTS=true.