| documents | taskrelay | |
| modules | taskrelay | |
| ssl | taskrelay | |
| templates | taskrelay | |
| voices | taskrelay | |
| .gitignore | taskrelay | |
| config.example.yaml | taskrelay | |
| go.mod | taskrelay | |
| go.sum | taskrelay | |
| main.go | taskrelay | |
| Makefile | taskrelay | |
| README.md | taskrelay | |
Taskrelay
Корпоративная система управления задачами с AI-ассистентом для мессенджера MAX. Сотрудники работают через чат-бот; администраторы - через веб-панель. Backend - монолит на Go, данные хранятся в PostgreSQL с расширением pgvector.
Требования
Системные зависимости
| Зависимость | Назначение |
|---|---|
| Go ≥ 1.24 | сборка приложения |
| PostgreSQL + pgvector | хранение данных, векторный поиск |
poppler-utils (pdftotext) |
извлечение текста из PDF |
| antiword | извлечение текста из .doc |
| ffmpeg | обработка голосовых сообщений перед распознаванием |
DOCX и XLSX обрабатываются без внешних утилит (парсинг на Go).
Внешние сервисы
- MAX Bot API - приём сообщений через webhook
- Yandex Cloud - Yandex GPT (NLP, эмбеддинги), SpeechKit (STT), IAM-токен для распознавания речи
- OpenAI API - эмбеддинги документов (
text-embedding-3-small); при необходимости запросы идут через HTTP-прокси - DeepSeek API - RAG-ответы, классификация запросов, аналитика по табличным данным
Запуск
1. База данных
Создайте PostgreSQL-базу. Расширение vector создаётся автоматически при миграции.
2. Конфигурация
Скопируйте пример конфигурации рядом с исполняемым файлом:
cp config.example.yaml config.yaml
Отредактируйте config.yaml:
| Параметр | Описание |
|---|---|
domain |
Домен для HTTPS и ссылок на файлы (Let's Encrypt) |
port |
HTTPS-порт (по умолчанию 443) |
login, password |
Учётные данные веб-админки |
max_token |
Токен бота MAX |
db_* |
Подключение к PostgreSQL |
yandex_api_key, yandex_oauth_token, yandex_catalog_id |
Yandex Cloud |
openai_api_key |
OpenAI |
proxy_url, proxy_user, proxy_password |
Прокси для OpenAI (опционально) |
deepseek_api_key |
DeepSeek |
Конфигурация читается из каталога, где лежит исполняемый файл (config.yaml).
3. Сборка и миграции
make build
make migrate
Миграции создают таблицы, HNSW-индексы для pgvector и начальные статусы задач.
4. Запуск
make run
При старте поднимаются:
- HTTPS-сервер на Echo (порт из конфига) с автоматическим TLS через Let's Encrypt (
golang.org/x/crypto/acme/autocert); HTTP :80 используется для ACME-challenge - Webhook MAX на
POST /bot/max/webhook - Фоновая индексация документов (каждые 10 с)
- Мониторинг IAM-токена Yandex (каждые 10 мин)
5. Настройка MAX
В панели бота MAX укажите webhook:
https://<domain>/bot/max/webhook
Домен должен быть доступен из интернета - это нужно и для Let's Encrypt.
Функциональность
Управление задачами в чат-боте
Реализовано через MAX Bot API (max-bot-api-client-go): inline-кнопки, многошаговые сценарии, state machine по полю active_command пользователя в GORM-модели.
- Постановка задач естественным языком (исполнитель, дедлайн, описание, соисполнители, приоритет) - парсинг через Yandex GPT с JSON Schema по настраиваемым промптам
- Поиск исполнителей по ФИО - векторный поиск (эмбеддинги Yandex, индекс HNSW в pgvector)
- Жизненный цикл: принятие, промежуточные/финальные отчёты, перенос дедлайна, перенаправление, завершение/отклонение
- Роли: постановщик, исполнитель, соисполнитель
AI и работа с документами
- Автоанализ отчётов для постановщика (Yandex GPT)
- RAG по PDF/DOC/DOCX: извлечение текста → чанки → эмбеддинги OpenAI → ответы DeepSeek
- Аналитика по Excel (закупки/цены): разброс цен, отклонения от рынка, аномалии, оптимальный бюджет, лидеры по категориям - SQL-агрегации по структурированным данным из XLSX
- Диалог с ИИ по прикреплённым файлам; проверка по корпоративным регламентам (индексируются через
POST /api/regulation) - Голосовые сообщения: ffmpeg → Yandex SpeechKit (IAM-токен обновляется автоматически)
Фоновый воркер в main.go каждые 10 секунд индексирует новые вложения из documents/.
Операционная автоматизация
Планировщик в modules/max/notification_scheduler.go (часовой пояс Europe/Moscow, без уведомлений по воскресеньям):
- напоминания о просроченных задачах и неотправленных отчётах
- ежедневное меню в 09:00
- ночная очистка чата (00:00)
Веб-админка
Сервер на Echo v4, HTML-шаблоны в templates/, авторизация по cookie-сессиям (SessionManager).
| Маршрут | Описание |
|---|---|
/, /login |
Вход в админку |
/users, /users/:id |
Пользователи: просмотр, бан, удаление |
/tasks, /tasks/:id |
Задачи: фильтры, редактирование, удаление |
/tasks/csv, /tasks/xlsx |
Экспорт (excelize, CSV с кодировкой Windows-1251) |
/yandex/prompts |
Редактирование промптов Yandex GPT |
/api/reports/document/:filename |
Скачивание файлов отчётов |
/api/regulation |
Загрузка регламентов для индексации |
/bot/max/webhook |
Webhook бота MAX |
TLS - Let's Encrypt через autocert; сертификаты кэшируются в ssl/.
Архитектура
main.go
modules/
config/ - YAML-конфиг (cleanenv)
database/ - GORM, PostgreSQL, pgvector, репозиторий
max/ - бот MAX: handlers, buttons, webhook, планировщик
web/ - Echo, controllers, middlewares, HTML-шаблоны
yandex/ - Yandex GPT, SpeechKit, IAM-тokens
openai/ - эмбеддинги документов
deepseek/ - RAG, классификация запросов, аналитика
docs/ - парсинг PDF/DOC/DOCX/XLSX, чанки, индексация
helper/ - утилиты (ffmpeg, экспорт, ссылки на документы)
logger/ - slog