TENDER — автономная система для поиска тендеров ООН: автоматический мониторинг тендеров ООН по 28 международным источникам с ИИ-отбором под профиль эксперта. Каждый день она обходит сайты агентств ООН, банков развития и порталы ЕС/ОБСЕ, собирает тысячи тендеров, закупок и конкурсов ООН, отсеивает мусор и просроченное, а остальное прогоняет через искусственный интеллект, который сверяет каждую возможность с полным резюме эксперта. Подходящие торги ООН попадают в Telegram-бот и в веб-админку. Всё на едином бэкенде и общей базе.
Зачем нужна система поиска тендеров ООН
Что такое тендеры ООН. Это конкурсные закупки и торги, которые проводят агентства ООН и банки развития: услуги консультантов, экспертизу, исследования. Объявления разбросаны по десяткам сайтов (UNGM, UNICEF, ПРООН, Всемирный банк и др.), и ручной мониторинг тендеров ООН занимает часы каждый день.
Как найти тендеры ООН. Вместо ручного обхода система собирает международные закупки со всех площадок автоматически, нормализует и дедуплицирует, отсекает нерелевантное по теме, региону, языку и сроку, а ИИ оценивает каждую вакансию по сути роли. Эксперт видит только подходящие тендеры ООН — там, где реально стоит подавать заявку.
Участие в тендерах ООН. Система не подменяет регистрацию в тендерах ООН и подачу заявок на стороне заказчика, но закрывает первый и самый трудоёмкий этап — поиск и отбор. По каждому тендеру видны требования, дедлайн, страна, вложения (ТЗ) и прямая ссылка для подачи заявки.
Заказать поиск тендеров ООН. Система настраивается под профиль конкретного эксперта или компании: своё резюме, свои ключевые слова, свой список стран. Стоимость поиска тендеров складывается из недорогого обслуживания (порядка единиц долларов в месяц на ИИ и прокси) — точная цена зависит от числа источников и частоты обходов.
Технологический стек
- Парсинг: Python 3.12 + httpx + BeautifulSoup + lxml; для JS-сайтов (Азиатский и Африканский банки) — Playwright через Bright Data Scraping Browser (реальный Chrome, удалённый рендеринг, без локального браузера).
- Антибот: Bright Data Web Unlocker (Cloudflare/JS) + Scraping Browser (полный JS-рендеринг).
- ИИ: DeepSeek через OpenAI-совместимый клиент; промпты на русском, редактируются из админки.
- Бэкенд / админка: Flask 3 + gunicorn, шаблоны Jinja2, авторский CSS (две темы, адаптив, мобайл).
- Бот: aiogram 3 (long-polling, без открытых портов).
- БД: SQLite (изолированная, без общего MySQL).
- Выгрузка: openpyxl (Excel), reportlab (PDF с кириллицей).
- Инфраструктура: nginx (собственный блок + basic auth), systemd (4 сервиса + таймеры), изолированный пользователь на сервере, не пересекается с другими проектами.
- Интеграции: API балансов DeepSeek и Bright Data, курс Нацбанка Казахстана.
Полный список реализованных функций
🤖 Парсеры и сбор
- 28 логических источников в 17 коннекторах с единым интерфейсом
Connector → Vacancy: агентства ООН (UNICEF, ООН-Женщины, ЮНФПА, МОМ, UNGM, ПРООН), банки (Всемирный, Азиатский, Исламский, Африканский, ЕБРР, ЕАБР, ЕФСР), ЕС/ОБСЕ (TED, ОБСЕ, МОТ). - 5 типов протоколов под одной абстракцией: серверный HTML, REST JSON-API, Oracle Recruiting Cloud (один движок на 3 агентства), POST + HTML-фрагмент, sitemap-XML.
- Рендеринг JS-сайтов реальным браузером (Scraping Browser) там, где список собирает клиентский скрипт.
- ИИ-контролёр восстановления: если вёрстка источника изменилась и парсер сбоит, ИИ восстанавливает поля карточки (с заземлением на HTML и лимитом против лавины).
- Устойчивость: падение одного источника не роняет прогон; антитроттл с паузами; дедупликация карточек внутри источника.
⚙️ Конвейер обработки (5+ фаз)
- Нормализация: даты из 6 несовместимых форматов → ISO; страны из NUTS-кодов, формата «город, страна» и официальных форм → название + регион (справочник 249 стран ISO 3166-1).
- Доопределение страны (фаза 2.5): строгая текстовая эвристика, с ИИ-фолбэком при нераспознавании.
- Кросс-источниковый дедуп: один тендер висит на нескольких порталах; система склеивает дубли, оставляя самую полную запись и обогащая её остальными.
- Двухуровневый предфильтр: STOP-слова (мусор), CORE-слова (тема), территориальный фильтр (allow-list 249 стран), язык (только EN/RU), нацконсультант, дедлайн. Все правила редактируются в админке; журнал показывает все сработавшие правила метками.
- Отсев просроченных в двух точках: на предфильтре и повторно после загрузки деталей (у банков дедлайн появляется только внутри).
🌍 Территориальный фильтр
- Справочник 249 стран (ISO 3166-1, RU/EN/коды + нормализация).
- Редактируемый allow-list стран с поиском по всем 249.
- Двойное применение: в предфильтре (страна вне списка → отсев) и после ИИ (страна от ИИ вне списка → no).
🧠 ИИ-матчинг
- Полное резюме в контексте: в ИИ уходит весь CV эксперта (69 проектов, публикации, образование, языки; ~34 000 знаков), а не выжимка.
- Суждение по сути роли, а не по названию: проект может называться «Управление госфинансами», но позиция внутри — эколог или местный консультант с обязательным языком. ИИ читает полное описание и отклоняет.
- Структурированный вердикт: да/нет + короткая причина (правило) + длинная причина (описание) + summary RU/EN + страна + флаг наличия ТЗ.
- Калибровка доказана на эталонах; полный лог диалога с ИИ по каждой возможности.
- Промпты и профиль редактируются из админки, с защитой от поломки.
🖥 Веб-админка (13 страниц)
- Дашборд: здоровье сервера в реальном времени (CPU/RAM/диск, статус сервисов и БД, авто-режим), графическая воронка всех фаз, статус каждого парсера.
- Финансы: балансы онлайн (DeepSeek, Bright Data) с кнопками пополнения, расход по балансу и по прогонам, прогноз на месяц по медиане, стоимость прогона и одной найденной заявки.
- Отобранные заявки + карточка заявки: полное описание, вложения (PDF/ToR), лог доставки; ручное отклонение с причиной + STOP-словом.
- Принятые, Отклонённые, Журнал всех заявок (лента + поиск + метки-правила с фильтром).
- Источники: карточка на каждый из 28 (что собирает, метод, антибот, расписание).
- Редактор STOP/SIGNAL + вкладка Территория, Логи, Алгоритм (с реальными промптами ИИ), Редактор промптов, Получатели, Настройки.
- Ручной override (отклонить/принять + слово), избранное, подсветка ключевых слов причины, сортировка по столбцам.
- Выгрузка списков в CSV/Excel/JSON/PDF (альбомный, кириллица), с учётом активного фильтра.
- Управление пользователями админки + вход по ссылке из Telegram (токен).
- Две темы (светлая/тёмная), адаптив, мобильная версия карточками.
🤖 Telegram-бот
- Меню с постоянными кнопками внизу: Все заявки · Источники · Статистика · Помощь.
- Автодоставка каждой новой подходящей заявки активным получателям.
- Управление из чата: кнопка «Не подходит» отклоняет заявку прямо в Telegram (синхронно с админкой).
- Файлы в чат: вложения (ТЗ/PDF) отправляются документами.
- Расширенная статистика (воронка, база, балансы, эффективность) и список источников с собранным.
- Вход в админку без пароля по личной ссылке, если оператор включил.
🚀 Автоматизация и продакшн
- Ежедневный конвейер по таймеру systemd (сбор → ИИ → доставка), с догоном пропущенных запусков.
- Планировщик отчётов — ежечасный таймер проверяет, кому пора: промежуточные отчёты в выбранный час и еженедельный по понедельникам, по часовому поясу каждого получателя.
- Ручной запуск кнопкой «Прогнать сейчас».
- 4 сервиса в продакшне (бот, админка, конвейер, отчёты), изолированы от других проектов сервера.
💳 Финансовый учёт
- Два взгляда на расход: по балансу (старт − текущий, реальный) и по прогонам (токены ИИ + трафик прокси/браузера).
- Эффективность: стоимость прогона и одной найденной заявки, прогноз на месяц.
- Балансы онлайн через API + кнопки пополнения.

