Selected work
01— AI Agent · Telegram Outreach CRM

TGAIProfile.

A Telegram outreach CRM driven by an LLM tool-calling agent. It finds and ranks channels, discovers their admins, drafts outreach and runs campaigns — and every high-risk action waits for a human to approve it.

Role
Sole developer · Backend · AI agent
Period
2025 — 2026
Type
Internal product
Case study
Problem01

Manual Telegram outreach was slow and hard to manage. Finding relevant channels, working out who ran them, remembering who had already been contacted and writing every message by hand did not scale past a handful of prospects. Handing that work to an AI raised the opposite problem: nothing should reach a real person without someone approving it.

System02

An operator writes requests to a Telegram control bot. An OpenAI function-calling agent chooses from 34 tools — search, rank, join, fetch admins, save contacts, draft, send, organise folders, launch campaigns — runs them through a Telethon worker and reads each result before deciding the next step. Campaigns run as a database-backed state machine on Celery. High-risk actions pause the agent for approval, and a first message can only be sent once a human has approved the draft.

Engineering03
  • Python · Django · DRF
  • PostgreSQL
  • Celery + Redis
  • Telethon · aiogram
  • OpenAI tool calling
  • 34-tool agent loop
  • Human approval gates
  • Execution tracing
Result04

Deployed on a VPS and used in a pilot, the system discovered 52 channels and 82 admins and routed 366 outreach drafts through the approval gate: 17 were sent after a human approved them, 10 were rejected. The agent made 90 traced tool calls. Search, discovery, drafting and sending now run as one workflow instead of ad-hoc chats.

Flow— How the system runs

Seven stages,one workflow.

System flow
  1. 01

    Search

    The agent turns an operator's request into a channel search. The Telethon worker queries Telegram's public search and scores the results for relevance.

    in →
    operator request
    out →
    candidate channels
  2. 02

    Rank

    New channels are sent to the LLM in batches as a Celery job. A structured-output schema returns a quality score and category, and flags duplicates.

    in →
    candidate channels
    out →
    ranked shortlist
  3. 03

    Join

    Channels are joined through the operator's own Telegram session. Outbound actions are held to a daily cap, working hours and randomised pacing, and freeze during Telegram flood penalties.

    in →
    ranked shortlist
    out →
    joined channels
  4. 04

    Discover Admins

    Admin lists are fetched through the Telegram API, de-duplicated across channels and saved as contacts.

    in →
    joined channels
    out →
    contacts
  5. 05

    CRM

    Leads move through a status pipeline — from admin found to message sent, replied, negotiation and follow-up — with a full status history.

    in →
    contacts
    out →
    outreach-ready leads
  6. 06

    Approve

    The LLM drafts each message. Sending, launching a campaign or deleting data pauses the agent; the operator approves or rejects in Telegram, and the database only releases approved drafts.

    in →
    drafts · high-risk actions
    out →
    approved sends
  7. 07

    Send & Monitor

    Approved messages go out through the worker. Replies are classified and summarised by the LLM, follow-ups are scheduled, and a watchdog flags campaigns that stall.

    in →
    approved sends · replies
    out →
    tracked conversations
Next case study02

Caravan Dispatcher

Telegram Logistics Automation Platform