globall.dev - Telegram bot studio globall.dev
AI bots

AI handles the first conversation. Your team receives candidate profiles ready for review

Telegram UserBot with an LLM orchestrator corresponds with candidates from a live account, collects a questionnaire from free text and gives the manager a ready-made card with the Approve / Deny / Follow-up buttons. A person is connected only to the final decision.

Niche: Recruiting / modeling agency Type: AI agent (UserBot + AdminBot) Stack: Python · Telethon · Aiogram · LLM
2
Bot in conjunction: UserBot conducts the dialogue, AdminBot delivers decision cards
12
FSM statuses with hard guards in the engine - some actions are blocked at the code level
JSON
The LLM orchestrator makes structured decisions with his own reasoning logic
8h / 2d
Automatic follow-ups to candidates without a response - background task
Problem

Primary selection consumed hours of manual correspondence

In a modeling agency, the funnel of incoming candidates is wide, and the first touch is always a correspondence on Telegram. And all this correspondence is the same: say hello, ask the same questions, ask for a photo, clarify parameters, carefully guide the person to the questionnaire. Manager spends hours a day to conversations, 80% of which come down to the same script.

The problem is not only one of volume. Candidates answer free text and randomly: someone sends everything at once, someone sends half and disappears, someone answers by voice or sends a circle. The manager has to read the dialogue, extract height, age, city from it and collect it into a questionnaire by hand. Some candidates are lost simply because they did not have time to answer in the first minutes, while they are warm.

Another subtlety: correspondence must go from a live account, and not from a “bot with buttons”. The candidate must feel that he is communicating with a person from the agency, otherwise trust in the dialogue drops and the conversion to the application drops.

The task was formulated as follows: remove the entire initial dialogue from the manager, but do not lose the “humanity” of communication and leave only the final decision to people — approve the candidate, refuse or additionally request materials.

Approach

AI conducts a dialogue, a person makes a decision

We immediately separated two roles: conversation with a candidate is a job for AI, and a decision on a candidate is a job for a person. The AI ​​should not “decide” anything about the candidate’s fate; his task is to bring the dialogue to a complete questionnaire and transfer it to the manager in a convenient form. This removes the routine and removes the risk that the model “either accepted or rejected someone.”

Grew from this two-tier architecture:

  1. UserBot — conducts correspondence on behalf of the agency’s live Telegram account. He is the one who says hello, asks questions, responds to messages, and collects the questionnaire.
  2. AdminBot — a separate bot that delivers a ready-made candidate card with buttons to the manager Approve / Deny / Request and allows you to schedule a call.

The heart of the system is LLM-orchestrator. Instead of a rigid “question → answer” tree, the model makes a structured decision at each step in the format JSON: which template to send, whether to generate a free response, whether to update the candidate’s status, whether to notify the admin - and applies its own logic of reasoning to each decision. This provides a lively dialogue that does not break down from a non-standard answer.

But “alive” does not mean “uncontrolled.” On top of AI we put deterministic engine with FSM and hard guards: Some actions are prohibited at the code level, regardless of what the model decides. For example, terms of cooperation cannot physically be sent until the candidate is approved by a person. AI suggests - the code checks and allows.

Solution

What ultimately works

The result is an AI agent that completely handles the initial contact - from greeting to transferring the finished candidate to the manager - and at the same time is indistinguishable in correspondence from a living person.

Dialogue from a live account, like a person

UserBot corresponds with the candidate on behalf of a real Telegram account. In order for this to be read as a live communication, the bot contains imitation of human behavior: reactions 🤍 to messages, “printing” indicator, typing delay approx. 0.05 seconds per symbol with ±30% spread, marking messages as read and disguising them as an iOS client. The candidate sees regular correspondence with the manager, and not a “bot with buttons.”

The questionnaire is collected from free text

Candidates answer as they please - AI parser with a separate extraction prompt pulls out questionnaire fields directly from free text and myself asks for what is missing. There is no need to force a person into a rigid form: he writes naturally, and a structured questionnaire is assembled under the hood.

Candidate card with solution buttons

When the questionnaire is collected, AdminBot sends the manager ready candidate card with three buttons: Approve, Refuse, Additional request. The manager does not read the correspondence sheet - he looks at the collected data and with one click moves the candidate further. This is the very “only the final decision is up to the person.”

Media: photos, mugs, voice, albums

It is critical for an agency to work with media, so the agent is fully processes photos, video circles, albums and voice messages — downloads and stores photos, recognizes attachment types, can send albums and voice messages through internal markers. The candidate can send materials in any convenient format.

The call is scheduled directly from the card

After approval, the manager schedules a call without leaving AdminBot: integration with Google Calendar pulls up free slots, creates an event with link to Google Meet and sets reminders. The candidate receives the meeting time, the manager receives the event on the calendar.

No one gets lost

Candidates who did not answer completely and disappeared, agent he catches up with follow-up after 8 hours and after 2 days — a separate background task checks who is stuck without responding. And when you restart the bot does catch-up of missed messages, so that no candidate is left without a response.

Technically

Under the hood

AI orchestration and control

LLM orchestrator using structured JSON
The model decides: which template to send, whether to generate a response, whether to change the status, whether to call the admin - with its own logic of reasoning in each decision.
FSM for 12 statuses with hard guards
Some actions are blocked at the code level, regardless of the AI’s decision - for example, conditions are sent strictly after approval.
AI parsing of questionnaires from free text
Extraction prompt extracts fields from custom responses and automatically queries for missing data.
Duplicate-protected templates
Each template is sent at most once, status-dependent submissions are checked before execution.

Two-tier bot architecture

UserBot on Telethon
Conducts a dialogue on behalf of a live Telegram account - greetings, questions, collecting questionnaires, reactions to messages.
AdminBot on Aiogram
Delivers candidate cards to the manager with Approve/Refuse/Follow-up buttons and call management.
Imitation of a living person
Reactions 🤍, typing action, printing delay ~0.05s/character ±30%, mark as read, disguise as an iOS client.
Media processing
Photos (downloading and storing), video circles, albums and voice through the [VOICE:...] and [MEDIA_ALBUM:...] markers.

Planning, reminders, reliability

Google Calendar API integration
Free slots, creating events with a link to Google Meet, reminders and scheduling calls directly from AdminBot.
Auto-reminders and follow-ups
The background task checks candidates without a response and sends a follow-up itself after 8 hours and after 2 days.
Catch-up and race protection
At startup, the bot retrieves missed messages, per-user asyncio.Lock excludes race conditions in parallel dialogs.
SQLite + SQLAlchemy async
Stores candidates, dialogue history, scheduled calls and a list of ignored users.
Python Telethon (UserBot) Aiogram (AdminBot) OpenRouter / LLM Google Calendar API SQLite · SQLAlchemy async
Result

The manager only sees ready-made cards

At the output there is an agent, where AI conducts a dialogue from a live account, collects a questionnaire and gives the manager only ready-made cards with solution buttons. The initial correspondence, which used to eat up hours, now happens on its own: the bot says hello, asks questions, responds to messages, accepts photos and voicemails, asks for anything missing and completes the candidate’s application form. A person connects at one point - click Approve, Refuse or Additional request — and upon approval, immediately sets up a call via Google Calendar.

Due to tough guards in the FSM system predictable: AI cannot send conditions “itself” or skip a stage—critical actions are only allowed by the code after a human decision. And follow-up after 8 hours and 2 days plus catch-up when restarting means that no candidate falls out of the funnel due to the fact that they did not answer him in time.

Specific figures for saving a manager’s time and the share of candidates who are brought to the questionnaire are private client data and are provided upon request for a specific project, without fictitious metrics.

If you need the same AI agent - so that it conducts the initial dialogue from a live account, collects structured data and gives ready-made solutions to the team - this is exactly the mechanics that we assemble on a turnkey basis. The logic is transferred to any niche with incoming correspondence: recruiting, sales, support, lead qualification.

Do you need an AI agent who will take over the initial dialogue?

Tell us about your correspondence funnel - we will send you a fixed estimate and deadlines the day before. AI orchestrator, dialogue from a live account, collection of questionnaires and decision cards - we collect turnkey, the source code is yours from day one.

For free. I will answer within an hour during business hours. No spam.

We take on a limited number of projects at the same time - this keeps deadlines realistic.

IP Geolocation by DB-IP