products in one bot
Tours, excursions, eSIM, FX, insurance plus seven more.
A bot for people who holiday in Thailand: tour picker, excursions, eSIM, currency exchange, insurance, bonuses and giveaways. The business gets a separate CRM admin to manage content, segments, broadcasts and the partner program. Plus a lead-gen channel: a parser listens to public TG chats and a neural net picks travel questions and turns them into prospects.



Tours, excursions, eSIM, FX, insurance plus seven more.
Content, broadcasts, segments, giveaways, partners — all by the operator.
The bot, broadcasts and AI parser work around the clock.
AI finds travel questions in open TG chats and surfaces them to the operator.
12+ products in one bot — tours, excursions, eSIM, FX, insurance, hotels, transfers, guides, giveaways.
Step-by-step resort and trip-format selection, personalised quote from the operator.
Bot content, message templates with media, broadcasts by segment, user labels, send log, giveaways and partner program — all through the UI without a developer.
Unique blogger links, automatic sales attribution and payout calculation.
User labels (Phuket, Pattaya, buyers) — surgical broadcasts.
An active-giveaway builder, automatic entry collection and winner recording.
Listens to public chats, AI picks travel questions, operator works with a ready lead.
We’ll build a bot with a CRM admin and a Telegram lead-gen channel for your business. Tell us the problem — we come back with an architecture and an estimate within a couple of days.
Three connected products in one system: a travel bot on node-telegram-bot-api (polling), a CRM admin for content and operations, and a real-time MTProto parser of public TG chats on gramjs with a background LLM worker (Gemini 2.0-flash, plus a stand-by local Qwen 2.5 1.5B on FastAPI). PostgreSQL holds a 13-table schema — from users and sales to segments, templates and logs. The AI lead-gen channel was an idea we proposed ourselves and baked into the architecture together with the bot.



A dedicated Next.js + React web UI: bot content management, broadcasts, user labels, giveaways and the partner program.
A polling bot with no server-side sessions: instead of Telegraf scenes we track «message blocks» (primary + related message_ids), clean them up on navigation, and mark persistent messages that survive a return to the menu.
A listener subscribes to UpdateNewChannelMessage / UpdateNewMessage, matches chats by chatId / username / title, filters texts that contain «?», extracts authors via InputUserFromMessage and writes into parsed(chat_id, message_id, text).
Parser chat sources live in an external Web App; the parser refreshes them at most once every 10 minutes per chat — to avoid Telegram FloodWait.
First the parsed table is populated by the parser. Every 60 seconds categoryWorker grabs an unprocessed row, sends it to Gemini 2.0-flash with a Russian prompt («pharmacy, tours, excursions, FX, other») and saves category + model into parsed.
Gemini in the cloud for classification quality, plus a stand-by local Qwen 2.5 1.5B-Instruct via llama-cpp (FastAPI with an OpenAI-compatible /v1/chat/completions). Switchable without touching the worker.
users.referral_code + bloggers with a unique slug, sales.referred_by → bloggers_leads with automatic payout calculation. No manual Excel rolls.
user_labels(user_id, label) — composite PK that powers precise broadcasts: «everyone who looked at Phuket», «March buyers», «inactive 30 days».
message_templates.media_files holds a set of Telegram file_ids in JSONB; the bot resolves them without re-uploading — saves traffic and keeps one content edit point.
postgres, bot, parser, worker and (optionally) llm — each in its own container. The worker scales horizontally without restarting the bot.
No webhooks, no server sessions — state via MessageFlowService + chat-id maps.
A separate Next.js + React web UI. All bot copy, media and buttons editable through the UI — no release. Access via ADMIN_IDS.
message_templates.media_files JSONB — Telegram file_id reuse for heavy content, a single edit point.
Draft mode, media groups, label filters, send stats.
user_labels with a composite PK, broadcasts by any combination of tags.
bloggers, bloggers_leads, sales — automatic sales tracking and payouts with per-blogger overrides.
giveaways + giveaway_winners, slug-routed participation via callback_data.
gramjs listens to public chats, filters questions, writes into the parsed table with chat_id and message_id.
The worker calls Gemini 2.0-flash and saves category + model into parsed for downstream lead selection.
A FastAPI service on Qwen 2.5 1.5B-Instruct, OpenAI-compatible — switchable without touching the worker.
Parser chat sources and CRM exports go through a Google Apps Script Web App.
A logs table with level/context — no separate observability stack at launch.
We’ll build a bot with a CRM admin and a Telegram lead-gen channel for your business. Tell us the problem — we come back with an architecture and an estimate within a couple of days.