Telegraft

Bot type

Ask the five questions before a salesperson spends an hour finding out

A Telegram lead qualification bot runs a short structured conversation, scores the answers against rules you set, and routes qualified enquiries straight to a salesperson while filing the rest. It protects expensive sales time. It cannot create demand, and it will not rescue a weak offer.

Lead qualification bots: price, timeline and limits

Fixed price
$3,400 USD
Delivery
16 calendar days from kickoff
Callback data
64 bytes per inline keyboard button
Deep-link payload
64 characters, [A-Za-z0-9_-] only
Contact details
Phone and email only when the user explicitly shares them
CRM write ceiling
Commonly a few requests/second per account

As of 2025-10-01, Telegram Bot API 13.4

The problem this solves

Every sales team that handles inbound has the same arithmetic problem. A salesperson costs somewhere north of two hundred dirhams an hour fully loaded, and a first call takes twenty minutes. If two thirds of enquiries were never going to buy — wrong budget, wrong country, wrong timeline, a student doing research — then two thirds of that time is spent discovering something five questions would have revealed.

The usual fix is a longer web form, and it reliably makes things worse. Every additional field cuts completion, and the fields that qualify hardest are exactly the ones people abandon at: budget, timeline, decision authority. You end up with fewer leads and no better information, which is the worst available trade.

A conversation behaves differently. The same five questions asked one at a time, with the reason for asking made obvious, get answered at far higher rates than the same five as form fields. Partly it is momentum, partly it is that a chat can explain itself. And crucially a bot can stop early: if the second answer disqualifies, there is no point asking the remaining three, and the person is told honestly rather than led through a form that was never going to end in a sale.

How the build runs

  1. The lead arrives with its source already attached

    A deep link from an ad, a landing page or a QR code carries a short identifier, and the server holds the full campaign detail against it. The salesperson sees where the lead came from without anyone typing it.

    deep-link
  2. The bot explains why it is asking before it asks

    One sentence: these five questions decide whether we are a fit, and you get a straight answer either way. Completion rates move sharply on this sentence, which is a strange thing to be true and is reliably true.

    commands
  3. Questions are asked one at a time, hardest first

    Budget and timeline come early rather than late. A form buries them at the end to protect completion; a conversation asks them while attention is highest, because a disqualified lead costs nothing to lose at question two.

    inline-keyboard
  4. The flow terminates as soon as the outcome is known

    A disqualifying answer ends the sequence and says so, with a genuinely useful alternative where one exists. Continuing to ask questions after the answer is decided wastes the lead's time and teaches them the process is theatre.

    inline-keyboard
  5. Qualified leads reach a human within seconds

    The card lands in the sales channel with the answers, the score, the source and the full page journey, and a Take button that assigns it. Speed to first response is the strongest single predictor of conversion in inbound sales, and this is the part that moves it.

    forum-topics
  6. Everything else is filed rather than discarded

    Unqualified does not mean uninteresting — a lead with the right problem and the wrong timing is worth revisiting. They go to a separate queue with the reason recorded, not into a void.

    webhook

What Telegram will and will not let you do

Inline keyboard callback data is capped at 64 bytes.

Answer options cannot encode question, branch and value as readable text. Buttons carry a short token resolved server-side, which also means a stale keyboard from yesterday cannot be replayed into today's flow.

A `start` deep-link payload is limited to 64 characters from `[A-Za-z0-9_-]`.

A full UTM string does not fit. The link carries a short session id and the server holds source, medium, campaign, landing page and journey — which is how attribution stays complete rather than truncated.

Telegram does not expose a user's phone number or email unless they explicitly share it.

You get a Telegram user id and a display name by default. If your CRM keys on phone or email, the bot has to ask, and that ask is itself a qualification signal worth scoring.

A bot cannot re-open a conversation with a user who has blocked it.

Follow-up sequences degrade silently. The API reports the block, so the CRM records it rather than a salesperson concluding the lead is ignoring them.

CRM APIs commonly rate-limit to a few requests per second per account.

A traffic spike from a campaign launch will outpace the CRM long before it outpaces Telegram. Writes queue and retry, and a CRM outage never costs the lead because it is recorded locally first.

When not to build this

  • Your sales cycle starts with a demo rather than a conversation. Qualifying before a demo you were going to give anyway just adds a step people drop out of.
  • You get fewer than about twenty inbound enquiries a week. At that volume a salesperson can qualify everything personally and will do it better.
  • Your qualification criteria are genuinely subjective. If experienced salespeople disagree about what qualified means, encoding it in rules will encode the disagreement.
  • Your offer is undifferentiated and you are hoping the bot will help. Qualification exposes a weak offer faster; it does not compensate for one.

What it runs on

ComponentVersionWhy
grammY1.45Bot framework, with conversation state held server-side rather than in message history.
Cloudflare WorkerscurrentRuntime. Campaign traffic is spiky and this absorbs it without provisioning.
Cloudflare D1currentSessions, answers, scores and the attribution record.
Zod4.4Validation at the CRM boundary, where the schema is someone else's to change.
TypeScript5.9Strict mode. Branching flows are where untyped state machines rot.

Questions people ask before committing

How many questions is the right number?

Five is the usual ceiling before drop-off becomes noticeable, and three is often enough. The discipline is deciding which answers would actually change what a salesperson does. Questions whose answers change nothing are the ones to cut.

Can we change the scoring without paying for a change request?

Yes. Thresholds, weights and routing rules live in configuration your team edits. The question flow itself is a code change, because reordering branches has consequences that a settings screen would hide.

What does a disqualified person actually see?

A straight answer and, where one exists, a useful pointer elsewhere. Pretending to hand them to a salesperson who will never call is worse for your reputation than saying no, and people remember being told the truth quickly.

Does it work if we do not have a CRM?

Yes. Qualified leads land as a card in a Telegram group with Take and Qualify buttons, which for a team of under ten is often better than a CRM nobody updates. The handover is built so a CRM can be added later without redoing the flow.

How fast does a qualified lead reach a salesperson?

Seconds. The card posts as soon as the last answer is given, and the assignment button means the first person free takes it. That immediacy is most of the commercial value; a lead routed perfectly four hours later has usually gone cold.

Can it run in Arabic?

Yes, and for GCC inbound it usually should. Language is chosen at the first message and can switch mid-flow without losing answers already given. Scoring rules are language-independent because they operate on values, not on the text of the reply.

What stops someone gaming the questions to reach a salesperson?

Nothing, and that is fine. Somebody motivated enough to fake a budget to get a call is a lead worth taking. The bot filters casual enquiries, not determined ones, and confusing those two goals produces a bot that annoys everybody.