Skip to content
SemCue

Horror Cinema · MORPHEUS · Telegram and VK

Discounts only where time sits empty.One price in every channel.

A horror cinema sells sessions on its website and through Telegram and VK bots. Promo codes handed a discount to anyone, while empty weekday slots stayed empty. We replaced promo codes with a personal bonus wallet, taught the system to find sessions that usually don’t sell, and made the website and the bots work out the price in one place.

Live · wallet and bots since summer 2026, hot sessions since 11 July 2026

Horror Cinema · Telegrambonuses instead of a promo code
  1. 🎁 My bonuses

  2. Your balance: 700 bonuses
    200 expire on 24 October
    500 expire on 3 November

    1 bonus = 1 RUB. Bonuses can pay for up to 30% of a session.

    🎬 Book👥 Invite a friend
Horror Cinema · VKa hot session
  1. 🎬 Book

  2. Tuesday 21 October, up to 4 guests:
    • 13:00 — 3,390 RUB
    • 🔥 15:00 — 2,712 RUB · hot session −20%

    13:00🔥 15:00
  3. 🔥 15:00

  4. Discounted price: 2,712 RUB.
    Bonuses can cover another 339 RUB — 30% together with the discount.
    A 1,000 RUB prepayment holds the time.

    Use 339 bonusesNo bonusesthe server works out the discount, bonuses and cap

A promo code works for everyone. A bonus works for one person

A promo code has a life of its own: it gets forwarded and posted in coupon groups, and anyone who finds it gets the discount. Working out who it brought in and what it cost is close to impossible.

Instead, every customer got a personal balance in the bot. Bonuses are earned for specific actions: connecting the bot, a VK welcome after joining the community, subscribing to the channel, inviting a friend, finishing a quiz. Each award has its own expiry, and the same action never pays twice.

The spending rules are simple and the same everywhere. 1 bonus = 1 RUB, and bonuses can pay for no more than 30% of a session. Bonuses closest to expiry go first, so customers don’t lose what is about to run out.

Horror Cinema · Telegrambonuses instead of a promo code
  1. 🎁 My bonuses

  2. Your balance: 700 bonuses
    200 expire on 24 October
    500 expire on 3 November

    1 bonus = 1 RUB. Bonuses can pay for up to 30% of a session.

    🎬 Book👥 Invite a friend
Message typeset in the bot’s format for a fictional customer. Award amounts and the 30% rule are the live settings.
  • Telegram

    200 bonuses

    for connecting the bot, expire after 21 days

  • VK

    500 bonuses

    a welcome once community membership is confirmed

  • Friends

    200 / 100 / 50

    for the first, second and each further friend, valid 30 days

Hot sessions: a discount only where time sits empty

A blanket discount also cuts revenue in hours that sell anyway. We needed a discount only on time that would otherwise stay empty.

The system looks at calendar history and picks up to three sessions in the next 7 days, no more than one per day: an empty weekday, a time next to a popular one, or a weak but sellable slot. These get 20% off, 15% in the morning. Customers see the same “hot session” badge on the website, in Telegram and in VK.

Discount and bonuses combine, but never beyond 30%: bonuses only fill the gap. If a 3,390 RUB session already has 678 RUB off, bonuses can cover another 339 RUB.

Horror Cinema · VKa hot session
  1. 🎬 Book

  2. Tuesday 21 October, up to 4 guests:
    • 13:00 — 3,390 RUB
    • 🔥 15:00 — 2,712 RUB · hot session −20%

    13:00🔥 15:00
  3. 🔥 15:00

  4. Discounted price: 2,712 RUB.
    Bonuses can cover another 339 RUB — 30% together with the discount.
    A 1,000 RUB prepayment holds the time.

    Use 339 bonusesNo bonusesthe server works out the discount, bonuses and cap
Fictional customer and date. The weekday rate, discount and cap are as in the live system.
  • 11hot-session bookings11 July – 9 October 2026
  • 10 of 11on time that usually doesn’t sellby calendar history
  • 3,059 RUBaverage session price after the discount
We are still measuring how many of these bookings are extra: the revenue effect isn’t proven. But such slots used to average 0.13 bookings per slot a week.

The discount got lost on its way to the server

In August, a review of one booking showed something unpleasant. The customer saw 2,712 RUB with the hot-session discount on the website, but 3,390 RUB went to the calendar and the CRM. Only the browser knew about the discount; the server recorded the full price.

The cause wasn’t a single bug but the fact that the price was worked out in several places. We kept one: the server calculates the price, discount and bonuses, and the website and bots only display the result. The server no longer accepts an amount from the website.

Rate

Session priceDay, time and group size. The server does the maths: the website and bots never send their own amount.

Hot session

−20% on empty timeChosen from calendar history. The same discount on the website, in Telegram and in VK.

Bonuses

Top up to 30%Discount plus bonuses never exceed 30%. Bonuses closest to expiry are spent first.

Monitor

Checked every minuteEvery free hot session gets its discount, and the total adds up.
  • price = rate − discount
  • free times match the calendar
  • three failures in a row alert Telegram
One calculation chain for the website and both bots. The monitor only reads: it never creates bookings, deals or calendar events.

Then came the monitor. Every minute it checks the whole chain: the calendar is fresh, free sessions match the calendar, every hot session gets its discount, and the total equals the rate minus the discount. Three failures in a row send an alert to Telegram.

The bot reminds and refunds on its own

A booking without prepayment is held for 30 minutes, then the time is released. So customers don’t lose a session by forgetting, the bot reminds them to pay. Four such scenarios are switched on, all only for bookings no older than 48 hours: there is no point messaging someone about a week-old booking.

When a booking is cancelled, bonuses come back, but exactly those spent on that booking and with the original expiry. Since 17 October the same applies to a booking that wasn’t paid in time: we added this case after a customer got in touch, and the bot sends one message about the refund.

Horror Cinema · Telegrampayment reminder
  1. Your booking for 21 October at 15:00 is waiting for the prepayment. Without it the time is released 30 minutes after booking.

    💳 Pay 1,000 RUBthe bot writes first, only about recent bookings
Horror Cinema · VKa cancelled booking
  1. Your booking for 21 October is cancelled.
    339 bonuses are back on your balance, with the same expiry date.

    🎬 Pick another timeexactly what was spent on this booking comes back
Fictional customer. Message format and rules are from the live bots.

Two brands, three bots, one core

The cinema’s Telegram and VK bots and the MORPHEUS immersive theatre’s Telegram bot share one core: menu, wallet, choosing a time, booking and payment. Only what really differs is different: the theatre has its own shows, day and evening rates, up to 4 guests in the price and +1,000 RUB for each additional one, 6 at most, and a 2,000 RUB prepayment.

The VK bot wasn’t about adding a channel for its own sake. People arriving from VK ads weren’t making it to Telegram, and since February Telegram has been restricted in Russia. The shared core opened a second channel without a second system: bookings from both bots and the website land in one calendar and one CRM.

How it was built

How we built it

The company decided how many bonuses each action earns, which campaigns to run and how deep a discount it could afford. We built the wallet, the single price calculation, hot-session selection, the monitor and the reminders.

Awards are protected by a key: one action, one award, even if the request arrives twice.

  • The companyBonus amounts and expiry, campaigns, acceptable discount, message copy.
  • SemCueThe wallet and spending rules, server-side pricing, hot sessions, the monitor, reminders and refunds.
  • ManagersTake over the conversation when a customer types in their own words instead of tapping buttons.

For technical readers

Under the hood

Wallet
A ledger of awards and spends; each award has an expiry and a duplicate-protection key. Spending goes by nearest expiry, and each booking records how much was spent and refunded.
Price
One server-side calculation for the website, Telegram and VK. A hot-session discount and a promo code don’t stack — the better one wins; bonuses fill the gap up to 30%.
Hot sessions
Chosen from calendar history: up to 3 sessions in 7 days, at most one a day, 20%, 15% in the morning.
Monitor
A read-only check of the “calendar → free time → discounted price” chain every minute. Three failures in a row alert Telegram.
Reminders
A scenario engine: 4 switched on, only for bookings under 48 hours old, with short tracked links.
Channels
Telegram and VK adapters over one core, plus a theatre profile with its own rates. One calendar and one CRM.

Where the numbers come from

Where the numbers come from

Next system

Cash Flow and payroll →

SemCue / Let’s talk

What would you like to work on?

Tell us about your project and what you need. A rough idea is enough.

Get in touch on Telegram

We’ll discuss your goals, where things stand and the right next step.

Discuss your project on Telegram
In developmentThis site is still being built, so things may change.