← All work NINJA VPN ←05 / 07→RU

Writes to
customers,
but waits for
permission

A subscription VPN with payments and a customer account. Around it, a set of assistants: some write to customers and wait for the owner’s permission, another answers support and acts inside the customer’s account, and watchdogs guard the servers, the ads and the hosting bills.

10:00◾◾◾ ⌁
📋 Assistantwaiting for your decision
Message customers whose subscription has expired
For whom
692 people
Currently paying
none
Recently contacted
48 excluded
Offer
30% off for 3 days
Send Different text
Tomorrow Cancel
Until you press — nothing is sent. Two days later a report arrives: did the mailing bring in money.

How the assistant asks for permission · sample figures

For whom

My subscription VPN service, three thousand customers

What was done

Assistants: mailings and personal messages wait for the owner’s button, AI answers support and acts in the account, watchdogs guard the servers

Result

21 reasons to write to a customer run by themselves, support answers in 2 seconds, five watchdogs fix things without a human

Three thousand
people
nobody had
time for

The service had built up a base of three thousand customers. Some stopped paying, some paid and never connected, some brought friends. They were written to rarely, by hand, between other things.

The obvious fix is scheduled automatic mailings. It is also the fastest way to lose the base: after the third unwanted message a person blocks the bot, and there is no way to win them back.

What makes it hard

Writing a “one-button mailing” is easy. Making one you can trust is hard.

01 · Trigger12 scenariossubscription expired, paid but never connected…
→
02 · Assistant preparessegment, text, image
→
03 · Checksnight hours, contact limits, already paying?
→
04 · Card to the ownersend · different text · tomorrow · cancel
→
05 · Report after 48 hoursdid the mailing bring in money
01

Four reasons to stay silent

The assistant never writes at night. To any one person — no more than a few times a month and never two days running. And if people start blocking the bot more often, it writes less by itself. Any of these rules can stop a mailing that is already prepared.

02

Discounts only for those who left

The “not seen for a while” list turned out to include up to 40% of people who are paying right now. Sending them “come back, here’s a discount” means gifting a discount to people already paying full price. The assistant checks the list before sending and blocks such mailings.

03

The last word is human

The assistant prepares everything — text, image, recipient list — and stops. The owner sees a card and decides: send, rewrite, postpone or cancel. Until the owner presses the button, nothing goes to anyone.

Nine personal
reasons
to write

Mass mailings go through the owner’s card. But some messages concern one person and depend on their calendar: the first subscription is ending, the trial is over, no friend has been invited yet. A separate retention service prepares those — once per person, and only between 10:00 and 21:00 Moscow time.

Survey answers are collected in a table, and on Mondays the owner gets a digest: who renewed, who left and why, how many discounts were claimed.

Ninja VPNthird day after the subscription ended
Your subscription ended a couple of days ago.
Could you tell us with one tap why you didn’t renew? It really helps us get better.
💸 Too expensive🛠 Worked badly🙅 No longer needed🔀 Another VPN⏰ Slipped my mind

Exit survey · one tap instead of a question

Trial · two hours in
Still hasn’t connecteda hint with instructions; whether they connected is read from the panel, not the bot’s counter
Trial · end
Liked it — 30% off for two dayshalf the people get no discount: that is the control group, more below
Trial · three days later
Didn’t buy — a “what got in the way” surveytoo expensive, slow, another VPN, not enough time, just looking
Payment · three days later
A request to link an emaila backup way into the account if Telegram stops opening
Four days before renewal
First renewal: how was it?reminds about auto-renewal and works out how much a year saves
A week before renewal
One week leftfor those paying for 90 days or more at once
The day after renewal
Invite a frienda ready-made text and a “Send to a friend” button; no more than once in 90 days
Before renewal
A plan hintif the plan plus extra devices costs more than the next plan up
Third day after the end
Exit surveybetween the bot’s discount waves; no more than once in 60 days

We test,
not argue

Any change to prices or discounts is a test with rules written down before it starts: the goal, the key metric, the date and the decision rule. While the test runs, the variants stay fixed, and the interim figures in the Monday digest are for monitoring only.

01 · verdict on 16 November

Plans 1 / 3 / 5 instead of 1 / 2 / 3 / 5

The price ladder was crooked: “1 device” plus an extra device cost 339 ₽, while “2 devices” cost 349 ₽. The two-device plan is hidden from new customers and “3 devices” is highlighted. The key metric is the average first purchase per month, previously 283 ₽. The safety catch: if the share of new customers who pay drops below 18%, one script brings the plan back.

02 · verdict on 15 January

Post-trial discount: half go without

A 30% discount after the trial lifts conversions, but each person pays less. To learn whether it pays for itself, half the people get no discount — split by customer number, never changed. We count revenue per person over 14 days: with the discount at least 36% must pay, against 25% without it.

03 · advertising

Telegram ads on autopilot

A budget of 5,000 Stars. Every three hours a watchdog reads the statistics: an ad with no bot starts after 3,000 views, or costing over 40 Stars per start, is paused; a cheap winner gets more budget; when views fall short, the bid climbs in 20% steps. In the evening the owner gets a report.

Ads · watchdog21:00
📣 Ads, 19.10
Today: 525 ⭐ · views 8,400 · clicks 96 · bot starts 5
Since launch: 1,310 ⭐ · views 21,700 · clicks 260 · bot starts 14
New untagged customers who paid: 9 (≈6 on an ordinary day)
⏸ AI1 paused: 3,000 views and not one bot start
▶️ VPNALL2 passed moderation and is showing

How the watchdog reports · sample figures

Part two

Support
that answers
by itself

VPN customers write at any hour: it won’t connect, can’t find the link, how to set it up on a TV. Most questions repeat. I installed an AI assistant: it answers on Telegram and in the website chat, and hands the question to a human operator when one is needed.

01 Trained on real conversations The assistant’s instructions were written from 263 real Telegram support conversations and 43 from the website, then extended after every review: “don’t repeat steps”, “payment without needless questions”. Over 6,000 words: tone of voice, step-by-step diagnostics, hand-over rules and prohibitions.
02 Acts by itself The assistant finds an account by email or username, shows the subscription and devices, sends the link, removes and renames devices, adds a slot for a new device — for 48 hours, or for good with the customer’s consent — switches off auto-renewal and, once every 30 days, extends the subscription by two days. Every action has its own limits.
03 Knows when to call a human Payment, refund, complaint, “no answer in the instructions” — the question goes to an operator with a summary: who the customer is, what has been tried. It asks only what this particular question needs. At night it says honestly that an operator will reply in the morning.
21:14◾◾◾ ⌁
N NINJA VPN Supportassistant · replies instantly
Won’t connect, says too many devices
Checking subscription 3 of 3 connected:
1 · iPhone 15 today 2 · Redmi Note 3 weeks ago 3 · Windows yesterday
Which one do you no longer need?
The second, old phone
⚙ action: remove device #2
Done, freed up a slot. Reconnect using the link below.
Subscription link
Message… ↑

Sample conversation · before removing, the assistant confirms which device

A review of 65 conversations from two weeks of October

35 of 58 requests were confusion, not breakage. “It doesn’t work” almost always meant “the wrong link is in the app”. The answer is a step-by-step connection page instead of a list of links: it opens even on old iPhones, and a TV receives the subscription by code.

01DeviceiPhone, Android, Windows, Mac, TV
→
02Appa store link for the chosen device
→
03Subscriptionone “Add” button, no copying of links
→
04Donepick “Auto-select” and connect

The step-by-step subscription page · first shown by a separate link, then made the default

DetailsThree more sections: how the model was chosen and what it may not do, how support learns, the upgrade of four systemsExpand ↓Collapse ↑

The model was chosen
by the numbers

Before launch I ran the same instructions through several models on 60 real customer requests: Claude Haiku and Sonnet, DeepSeek Chat, Flash and V4 Pro.

I chose DeepSeek Flash: it answers in one and a half to two seconds, keeps to the rules and costs about a dollar and a half a month. Claude Sonnet made no mistakes at all but costs around fourteen. DeepSeek’s pricier model was no better than the cheap one: in one case it invented a rule that does not exist.

What the assistant may not do

01 Invent Facts, dates, prices, discounts, promotions and promo codes. When unsure, it hands over to an operator.
02 Promise money Refunds, compensation and free days are promised only by a human.
03 Take payment outside the account No card transfers or payments by phone number: paying is possible only in the customer account.
04 Pretend to be human If asked whether it is a bot or a person, it answers honestly: “I am an AI assistant, not a live operator.” And it calls an operator if the customer insists.

Keeps working
and keeps
learning

Support that is launched and forgotten goes stale fast: apps, plans and typical faults all change. So the assistant has an improvement loop.

01 A log of every conversation The customer’s messages, the assistant’s replies and operator interventions are stored in full — for review and training.
02 Operators correct right in the chat Spot an inaccurate answer, type a correction as a command, and it goes into a review queue and then into the instructions.
03 The assistant knows about outages An operator records a line about a current fault with an expiry, and answers take it into account while it is in effect.
04 A Monday summary At ten in the morning the support group gets the week’s numbers: how many conversations, how many the assistant closed itself, how many it passed to people.
05 Follows up after an hour If a customer goes quiet after being helped, an hour later the assistant asks “did it work?” and, once, suggests linking a second sign-in: email, VK, Yandex or Google. Daytime only, and only if no operator was called.
06 Keeps its patience If an operator has taken the conversation and stays silent for five minutes, the assistant tells the customer once: “please wait, the operator will reply”. More than 30 messages in 10 minutes means a half-hour pause: real people don’t write that much.
07 Temporary slots return by themselves A 48-hour slot for a new device is removed by itself; a slot added for good but left unused for two days also reverts to the plan. The device disconnected is the one unused longest, not the newest.

Four systems
in one night

In October the panel, the bot, the account area and the subscription page moved to new major versions. Three thousand subscriptions had to be linked to the new panel so that nobody lost their VPN. The upgrade was rehearsed first, then run at night by a thirteen-phase script.

01 · Two weeks beforeA rehearsal on a test bench2 account conflicts out of 3,028 subscriptions found — resolved before the night
→
02 · Before the windowBackups and rollback imagesdatabases, settings, images; the old versions stay within reach
→
03 · Night, 15–25 minutesThirteen scripted phaseschecks → snapshot → stop → panel → bot → account area → audit
→
04 · By 04:30Decision: keep or roll backrolling all four back together takes about 10 minutes

What customers got

What customers got out of it: the new panel unlocked features people had been waiting for, and the servers got support for old apps so that nobody was cut off.

01 Two days of grace When a subscription ends, the VPN is not cut off at once: two more days and up to 10 GB of traffic, with a “renew” banner at the top of the server list. Does not apply to the trial.
02 New servers and payments Finland and Estonia in the list and in “Auto-select”, payment in cryptocurrency, an “Account” button right in the bot’s menu.
03 A referral programme that grows 10% of a friend’s top-ups always, 15% from five friends, 20% from fifteen. The bot wrote to the programme’s leaders personally, and an invitation contest is set for November.
04 Old apps kept working The servers’ new core cuts off old clients by default. The setting was tested on three core versions and a third-party client before the first server was upgraded.

Watchdogs
that write
only when it matters

Eight servers in six countries, the panel, the bot, the account area, mailings, hosting bills. All of it has to work at night and on weekends, when nobody is watching. So each piece has its own small program watching it, and silence is its normal state: a message comes only when something is wrong, and one more when it is fine again.

Server watchdog03:12
⚠️ Server “Lithuania” has not answered for 3 min — removed it from the subscription. I’ll bring it back myself when it works.
03:21 · ✅ Server “Lithuania” is working again — returned it to the subscription.
Server bills09:00
Germany — renews in 3 days, the balance covers two months.
Lithuania — in 5 days, top up 1,200 ₽.
Traffic on “USA” — 81% of the monthly quota.

Sample messages

01 Server watchdog Once a minute it connects to every server the way a customer’s app does. Three minutes of silence and the server is removed from the subscription and from “Auto-select”; five minutes of answers and it is back. If more than two go down at once, it switches nothing off and calls a human: most likely the watchdog’s own network is the problem.
02 Whitelist-bypass watchdog Once a minute it checks the servers the bypass route runs through, with the same request the route itself sends. A dead server is switched off, otherwise every connection would wait five seconds for it; a live one is switched back on. Other people’s manual settings are left alone.
03 Hosting-bill watchdog Once a day it visits five hosting providers’ accounts and works out whether the balance covers the renewals of the next 35 days. It reminds a week, three days and a day ahead and on the day, watches traffic, and shows it all on a page with an “I’ve paid” button.
04 A watchdog for the watchdogs Once an hour it checks that the others have done their job: logs, timers, nine services, disk space, settings that must survive an update, and one-off dated tasks — the plan test verdict, the contest final. It depends on none of them, so it can report when they break.
05 A check for signs of a break-in One script per server: keys and users, scheduled jobs, ports, processes, files changed since last time. The normal state is written down next to it, so differences stand out at once.

The outcome

Working with customers and servers no longer depends on whether anyone got round to it. Mailings and personal messages prepare themselves and go out only with the owner’s knowledge, support answers in seconds, and the watchdogs fix what can be fixed without a human and call one when it can’t.

21 reasons to write to a customer run by themselves: 12 mass scenarios and 9 personal messages; the mass ones go out only after the owner presses the button
9 actions in a customer’s account the assistant performs itself: from finding the account to a two-day extension
5 watchdogs guard the servers, the bypass route, the hosting bills, the ads and each other
3 tests run by rules written down before they started: plans, the post-trial discount, advertising
2 s to answer a customer’s question, on Telegram and in the website chat
60 real requests it took to pick the model on quality and price

Built with: Python, React, PostgreSQL, Docker, Nginx, n8n, systemd, Telegram Ads API, language models.
Bot, customer account, payments, website chat, mailing assistant, retention service, AI support and watchdogs · the service runs every day · my role: infrastructure, the account area, automation, rolling out AI support, running the tests.

Message me on Telegram → ← All work Next project · 06 / 07Self-Reflection Journal →
Message