Telegram game bot: lead qualification instead of an intro call · Belarus
“One Day as the Owner”
A game instead of a “leave your number” form: the brief builds itself along the way
The task
The intro call is the most expensive part of the funnel: a manager spends an hour on someone who has not yet worked out why they need automation. We needed a format that does this job itself: in five to seven minutes it walks a business owner through a simulation of their own working day, shows where the day leaks away, lets them try AI right inside the chat — and asks for contact details only at the end, once the value is already visible. On top of that, one engine had to serve different niches, copywriters had to edit the texts without a developer, and a request from the game had to land in the same funnel as requests from the website.
Problems we solved
A cold visitor never makes it to a call, and a “leave your number” form at the entrance scares them off.
A working-day simulator: five situations, three meters — revenue, time, reputation — and a visible consequence for every decision. Contact details are requested at the end, once the losses have been counted on the player’s own example.
Talking about AI does not convince anyone: the work has to be shown, not described.
Two live demos inside the chat: a post generated for the player’s niche and city, and an incoming “client message” parsed into a card — summary, notes, urgency, a ready reply. Limits and cooldowns are stored in the database, any model failure is replaced by a prepared example, and the run is never interrupted.
Every new niche threatened to turn into a rewrite of the bot.
The whole scenario — texts, buttons, scores, pain flags — lives in JSON, while the engine stays an interpreter of a node graph and knows nothing about “a salon” or “move three”. A new niche is added as a file; a validator catches broken links, dead ends and unreachable nodes at startup.
The manager receives a contact with no context and starts the conversation from scratch.
The answers in the game are the brief: pains are marked with flags, and how often a flag comes up sets its severity. The closing “growth map” assembles the level, the priorities and a suitable package, and all of it goes to the manager in Telegram and into Google Sheets together with the contact and a link to the business.
A request from the game would live separately from website requests — two funnels that never meet.
Booking a call happens inside the bot: free slots and the booking itself go through the website API, so the meeting lands in the same CRM funnel, Google Calendar and Meet. After booking, the player is flagged in the “Players” sheet, so the “played but did not book” segment can be picked up for a mailing.
A failure in an external service must not cost a lead or break the game.
A fallback at every layer: no model key — the demos serve prepared examples; Sheets unavailable — the lead is still in the database and with the manager; broken markup in a reply — the message is sent as plain text. Buttons are idempotent by node id, there is flood protection, and progress survives a restart of the bot.
What we did
- A working-day simulator: four niches — salon, cafe, shop, car service — with situations, scores and consequences for decisions
- Two live AI demos inside the chat: a post generated for the niche and a client message parsed into a card
- A closing “growth map”: the level, priorities based on the pains found and a suitable service package
- Lead capture with a ready brief: the contact and a link to the business go to the manager in Telegram and into Google Sheets
- Booking a call from the bot: free slots, the booking, Google Calendar and Meet through the website API — into the shared CRM funnel
- Scenario in JSON plus a content validator: a niche is added as a file, broken links and dead ends are caught before launch
- Branded images generated on the fly: a niche cover at the start and a result card that players forward to friends
- Funnel analytics as events: start, deep-link entry point, demos, finish and lead — metrics are read with a single database query
- Docker deployment on a VPS with auto-restart and a switchable LLM provider