globall.dev — студия Telegram-ботов globall.dev
AI-боты

AI-агент для скрининга кандидатов: первичный диалог ведёт бот, а менеджеру падают готовые карточки с решением

Telegram UserBot с LLM-оркестратором ведёт переписку с кандидатами от живого аккаунта, собирает анкету из свободного текста и отдаёт менеджеру готовую карточку с кнопками Одобрить / Отказать / Дозапрос. Человек подключается только к финальному решению.

Ниша: Рекрутинг / модельное агентство Тип: AI-агент (UserBot + AdminBot) Стек: Python · Telethon · Aiogram · LLM
2
Бота в связке: UserBot ведёт диалог, AdminBot доставляет карточки решений
12
Статусов FSM с жёсткими guards в движке — часть действий заблокирована на уровне кода
JSON
LLM-оркестратор принимает структурированные решения со своей логикой рассуждения
8ч / 2д
Автоматические follow-up кандидатам без ответа — фоновая задача
Проблема

Первичный отбор съедал часы ручной переписки

В модельном агентстве воронка входящих кандидатов широкая, а первое касание — всегда переписка в Telegram. И вся эта переписка одинаковая: поздороваться, задать одни и те же вопросы, попросить фото, уточнить параметры, аккуратно довести человека до анкеты. Менеджер тратит часы в день на разговоры, 80% которых сводятся к одному и тому же скрипту.

Проблема не только в объёме. Кандидаты отвечают свободным текстом и вразнобой: кто-то сразу присылает всё, кто-то — половину и пропадает, кто-то отвечает голосовым или присылает кружок. Менеджеру приходится вычитывать диалог, выуживать из него рост, возраст, город и собирать это в анкету руками. Часть кандидатов теряется просто потому, что им не успели ответить в первые минуты, пока они тёплые.

Ещё одна тонкость: переписка должна идти от живого аккаунта, а не от «бота с кнопками». Кандидат должен чувствовать, что общается с человеком из агентства, иначе доверие к диалогу падает и конверсия в анкету проседает.

Задача формулировалась так: снять с менеджера весь первичный диалог, но не потерять «человечность» общения и оставить за людьми только финальное решение — одобрить кандидата, отказать или дозапросить материалы.

Подход

AI ведёт диалог, человек принимает решение

Мы сразу развели две роли: разговор с кандидатом — это работа для AI, а решение по кандидату — работа для человека. AI не должен ничего «решать» о судьбе кандидата; его задача — довести диалог до полной анкеты и передать её менеджеру в удобном виде. Это и снимает рутину, и убирает риск, что модель «сама кого-то взяла или отказала».

Из этого выросла двухуровневая архитектура:

  1. UserBot — ведёт переписку от имени живого Telegram-аккаунта агентства. Это он здоровается, задаёт вопросы, реагирует на сообщения, собирает анкету.
  2. AdminBot — отдельный бот, который доставляет менеджеру готовую карточку кандидата с кнопками Одобрить / Отказать / Дозапрос и позволяет планировать созвон.

Сердце системы — LLM-оркестратор. Вместо жёсткого дерева «вопрос → ответ» модель на каждом шаге принимает структурированное решение в формате JSON: какой шаблон отправить, нужно ли генерировать свободный ответ, обновлять ли статус кандидата, уведомлять ли админа — и при каждом решении прикладывает свою логику рассуждения. Это даёт живой диалог, который не ломается от нестандартного ответа.

Но «живой» не значит «бесконтрольный». Поверх AI мы поставили детерминированный движок с FSM и жёсткими guards: некоторые действия запрещены на уровне кода вне зависимости от того, что решила модель. Например, условия сотрудничества физически нельзя отправить, пока кандидат не одобрен человеком. AI предлагает — код проверяет и разрешает.

Решение

Что в итоге работает

Получился AI-агент, который полностью ведёт первичный контакт — от приветствия до передачи готового кандидата менеджеру — и при этом неотличим в переписке от живого человека.

Диалог от живого аккаунта, как у человека

UserBot переписывается с кандидатом от имени реального Telegram-аккаунта. Чтобы это читалось как живое общение, в боте заложена имитация поведения человека: реакции 🤍 на сообщения, индикатор «печатает», задержка набора примерно 0,05 секунды на символ с разбросом ±30%, отметка сообщений как прочитанных и маскировка под iOS-клиент. Кандидат видит обычную переписку с менеджером, а не «бота с кнопками».

Анкета собирается из свободного текста

Кандидаты отвечают как угодно — AI-парсер с отдельным extraction-промптом вытаскивает анкетные поля прямо из свободного текста и сам дозапрашивает то, чего не хватает. Не нужно гнать человека по жёсткой форме: он пишет естественно, а структурированная анкета собирается под капотом.

Карточка кандидата с кнопками решения

Когда анкета собрана, AdminBot присылает менеджеру готовую карточку кандидата с тремя кнопками: Одобрить, Отказать, Дозапрос. Менеджер не читает простыню переписки — он смотрит на собранные данные и одним нажатием двигает кандидата дальше. Это и есть тот самый «только финальное решение за человеком».

Медиа: фото, кружки, голосовые, альбомы

Агентству критично работать с медиа, поэтому агент полноценно обрабатывает фото, видео-кружочки, альбомы и голосовые сообщения — скачивает и хранит фото, распознаёт типы вложений, умеет отправлять альбомы и голосовые через внутренние маркеры. Кандидат может прислать материалы в любом удобном формате.

Созвон планируется прямо из карточки

После одобрения менеджер планирует созвон, не выходя из AdminBot: интеграция с Google Calendar подтягивает свободные слоты, создаёт событие со ссылкой на Google Meet и ставит напоминания. Кандидат получает время встречи, менеджер — событие в календаре.

Никто не теряется

Кандидатов, которые ответили не до конца и пропали, агент сам догоняет follow-up'ом через 8 часов и через 2 дня — отдельная фоновая задача проверяет, кто завис без ответа. А при перезапуске бот делает catch-up пропущенных сообщений, так что ни один кандидат не остаётся без реакции.

Технически

Под капотом

AI-оркестрация и контроль

LLM-оркестратор на структурированном JSON
Модель решает: какой шаблон отправить, генерировать ли ответ, менять ли статус, звать ли админа — со своей логикой рассуждения в каждом решении.
FSM на 12 статусов с жёсткими guards
Часть действий заблокирована на уровне кода независимо от решения AI — например, условия отправляются строго после одобрения.
AI-парсинг анкеты из свободного текста
Extraction-промпт извлекает поля из произвольных ответов и автоматически дозапрашивает недостающие данные.
Шаблоны с защитой от дублей
Каждый шаблон отправляется максимум один раз, статус-зависимые отправки проверяются перед выполнением.

Двухуровневая архитектура ботов

UserBot на Telethon
Ведёт диалог от имени живого Telegram-аккаунта — приветствие, вопросы, сбор анкеты, реакции на сообщения.
AdminBot на Aiogram
Доставляет менеджеру карточки кандидатов с кнопками Одобрить / Отказать / Дозапрос и управление созвонами.
Имитация живого человека
Реакции 🤍, typing action, задержка печати ~0,05с/символ ±30%, mark as read, маскировка под iOS-клиент.
Обработка медиа
Фото (скачивание и хранение), видео-кружочки, альбомы и голосовые через маркеры [VOICE:...] и [MEDIA_ALBUM:...].

Планирование, напоминания, надёжность

Интеграция Google Calendar API
Свободные слоты, создание событий со ссылкой на Google Meet, ремайндеры и планирование созвонов прямо из AdminBot.
Авто-напоминания и follow-up
Фоновая задача проверяет кандидатов без ответа и сама отправляет follow-up через 8 часов и через 2 дня.
Catch-up и защита от гонок
При старте бот добирает пропущенные сообщения, per-user asyncio.Lock исключает race conditions в параллельных диалогах.
SQLite + SQLAlchemy async
Хранит кандидатов, историю диалогов, запланированные созвоны и список игнорируемых пользователей.
Python Telethon (UserBot) Aiogram (AdminBot) OpenRouter / LLM Google Calendar API SQLite · SQLAlchemy async
Результат

Менеджер видит только готовые карточки

На выходе — агент, где AI ведёт диалог от живого аккаунта, собирает анкету и отдаёт менеджеру только готовые карточки с кнопками решения. Первичная переписка, которая раньше съедала часы, теперь идёт сама: бот здоровается, задаёт вопросы, реагирует на сообщения, принимает фото и голосовые, дозапрашивает недостающее и доводит кандидата до полной анкеты. Человек подключается в одной точке — нажать Одобрить, Отказать или Дозапрос — и при одобрении тут же ставит созвон через Google Calendar.

За счёт жёстких guards в FSM система предсказуема: AI не может «сам» отправить условия или перескочить этап — критичные действия разрешает только код после решения человека. А follow-up через 8 часов и 2 дня плюс catch-up при перезапуске означают, что ни один кандидат не выпадает из воронки из-за того, что ему вовремя не ответили.

Конкретные цифры по экономии времени менеджера и доле кандидатов, доведённых до анкеты, — приватные данные клиента и предоставляются по запросу под конкретный проект, без выдуманных метрик.

Если вам нужен такой же AI-агент — чтобы он вёл первичный диалог от живого аккаунта, собирал структурированные данные и отдавал команде готовые решения, — это ровно та механика, которую мы собираем под ключ. Логика переносится на любую нишу с входящей перепиской: рекрутинг, продажи, поддержка, квалификация лидов.

Нужен AI-агент, который заберёт первичный диалог?

Расскажите про вашу воронку переписки — за день пришлём фиксированную смету и сроки. AI-оркестратор, диалог от живого аккаунта, сбор анкеты и карточки решений — собираем под ключ, исходники ваши с первого дня.

Бесплатно. Отвечу в течение часа в рабочее время. Без спама.

Берём в работу ограниченное число проектов одновременно — это держит сроки реальными.