Дейтинг в Telegram — растущая ниша 2026 года: конкуренция с Tinder, удобный логин через Telegram, нативные платежи в Stars, низкий CAC через каналы. За год в нише появилось десятки ботов с аудиторией от 100 тысяч до 5 миллионов юзеров. Разберём, как собрать такой сервис технически и что критично для запуска.
Базовый функционал
Минимум для жизнеспособного MVP:
- Анкета (фото + текст + базовые поля).
- Лента кандидатов с like/dislike.
- Матч и личный чат через бота (или редирект в Telegram-чат).
- Гео-фильтр.
- Платная подписка с лимитом лайков для бесплатных юзеров.
- Модерация фото и текстов.
Это уровень Tinder 2014 года. Для MVP достаточно, дальше расширяем.
Архитектура
[Mini App] ←→ [Backend API] ←→ [PostgreSQL + PostGIS]
↘ [Redis] (matchmaking, rate-limit)
↘ [S3] (фото)
↘ [ML-сервис] (модерация фото)
↘ [Telegram Bot API] (push, чаты)
Mini App на Next.js или Vue даёт нативный UX (свайпы, анимации). Бот — для пушей, платежей и админки.
Анкета и хранение
Базовая схема:
CREATE TABLE profiles (
user_id BIGINT PRIMARY KEY,
name TEXT NOT NULL,
age INT NOT NULL CHECK (age >= 18),
gender TEXT CHECK (gender IN ('m', 'f', 'nb')),
target_gender TEXT[],
bio TEXT,
location GEOGRAPHY(POINT) NOT NULL,
city TEXT,
photos TEXT[], -- s3 keys
interests TEXT[],
last_active TIMESTAMPTZ,
is_premium BOOLEAN DEFAULT FALSE,
is_banned BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_profile_geo ON profiles USING GIST (location);
CREATE INDEX idx_profile_active ON profiles (last_active DESC) WHERE NOT is_banned;
PostGIS даёт быстрый поиск по геораспределению (ST_DWithin).
Алгоритм матчинга
Простой и эффективный:
SELECT user_id, ST_Distance(location, $user_loc) AS distance_m
FROM profiles
WHERE NOT is_banned
AND user_id != $self
AND age BETWEEN $age_min AND $age_max
AND gender = ANY($target_genders)
AND $self_gender = ANY(target_gender)
AND ST_DWithin(location, $user_loc, $radius_m)
AND user_id NOT IN (SELECT target FROM swipes WHERE user_id = $self)
ORDER BY last_active DESC, distance_m
LIMIT 50;
Редис-кеш на 5 минут уменьшает нагрузку. Перед выдачей применяем буст премиум-юзеров.
Свайпы и матчи
async def swipe(user_id: int, target_id: int, action: str):
await db.execute(
"INSERT INTO swipes(user_id, target, action, ts) VALUES($1,$2,$3,now())",
user_id, target_id, action,
)
if action != "like":
return None
reciprocal = await db.fetchrow(
"SELECT 1 FROM swipes WHERE user_id=$1 AND target=$2 AND action='like'",
target_id, user_id,
)
if reciprocal:
match_id = await create_match(user_id, target_id)
await notify_match(user_id, target_id, match_id)
return match_id
return None
При матче — push в обоих ботов с кнопкой «Открыть чат». Чат можно реализовать внутри Mini App или редиректом в обычный Telegram-чат через tg://user?id=.
Антифрод
Главные проблемы дейтинг-сервиса:
- Фейковые анкеты (девушки-боты для развода).
- Скам-схемы («переведи на карту»).
- NSFW-контент в фото.
- Многоаккаунтинг (один юзер — десять профилей).
Меры:
| Угроза | Решение |
|---|---|
| Фейки | KYC через Telegram Passport, верифицированный значок |
| Скам | NLP-модель на текстах сообщений + жалобы юзеров |
| NSFW | модель типа NudeNet или AWS Rekognition на загрузке |
| Multi-acc | fingerprint по tg_id, device_id, IP, телефон |
Для каждого профиля считаем фрод-скор; >0.7 → теневой бан (показывается только себе и таким же).
Модерация фото
Фото пропускаем через CV-модель перед публикацией:
async def moderate_photo(s3_key: str) -> dict:
image = await s3.get(s3_key)
result = await aws_rekognition.detect_moderation(image)
nsfw = max((l["Confidence"] for l in result["ModerationLabels"]
if l["Name"] in ("Explicit Nudity", "Sexual Activity")), default=0)
has_face = bool(await aws_rekognition.detect_faces(image))
return {
"approved": nsfw < 60 and has_face,
"nsfw_score": nsfw,
"has_face": has_face,
}
NSFW score выше 60 — отклоняем. Без лица — отклоняем (фото машины/собаки в анкете не работают).
Монетизация
Стандартная free-mium модель:
| Тариф | Цена | Что входит |
|---|---|---|
| Free | 0 | 10 лайков/день, без буста |
| Premium | 250 Stars / мес | безлимит, 5 супер-лайков, буст 1× в день |
| Gold | 500 Stars / мес | + видеть кто лайкнул, режим инкогнито |
Подписка — Star subscriptions (subscription_period: 2592000). Разовые буст-покупки — sendInvoice за 50–150 Stars.
CR free → premium в дейтинге обычно 4–8%, что выше других ниш — мотивация платить высокая.
UX-фишки
- Daily picks — 5 кандидатов в 12:00 каждый день, push «Сегодняшние совпадения».
- Question of the day — общий вопрос, ответы видят матчи. Снимает барьер «о чём писать».
- Видео-кружочки в анкете — нативная фича Telegram, конверсия в матч х1.5.
- Голосовые приветствия — записал голосовую, она прикреплена к анкете.
Юридика
- 18+, обязательная проверка возраста (Telegram Passport или ручная модерация документов).
- 152-ФЗ: согласие на обработку ПД, политика и правила сервиса.
- Запрет интим-сервисов, фильтр коммерческих анкет.
- В РФ — ОКВЭД 63.99 или 96.09 + кассовое решение для оплат через российский эквайер (Stars обходят это).
Топ-5 ошибок
- Не модерируют фото — каталог захламляется NSFW и эскорт-анкетами.
- Запускают без 18+ — попадают под законодательство о защите детей.
- Не борются с многоаккаунтингом — отзывы заполняются «накручено лайков».
- Делают чат внутри Mini App, теряя нативность Telegram.
- Ставят лимит 5 лайков free — слишком жадно, новые юзеры не успевают понять ценность.
Итого
Дейтинг-бот — нишa с понятной архитектурой и зрелыми инструментами в Telegram: Mini App для свайпов, Bot API для пушей и платежей, PostGIS для гео, Stars для подписок. Главный челлендж — не технический, а контентный: модерация, антифрод и UX. С грамотной командой MVP запускается за 8–10 недель и за полгода вырастает до 100+ тысяч активных юзеров при бюджете на маркетинг от $20k.
Частые вопросы
Использовать Mini App или обычный бот?
Для дейтинга — обязательно Mini App. Свайпы, анимации, лента карточек — без нативного UI выглядит топорно. Бот используется только как «сервисный»: пуши о матчах, платежи, поддержка. Ядро — Mini App на React или Vue.
Как защититься от ботов-фейков?
Многоуровнево: 1) Telegram Passport для верификации; 2) обязательное селфи с жестом (поднять руку, моргнуть) при загрузке; 3) проверка фотографий на дубликаты в базе и в reverse image search; 4) ML-модель на тексте сообщений (детектит скам); 5) динамические лимиты — новые анкеты могут лайкать ограниченно первые 24 часа. Каждый уровень режет 30–60% бот-трафика.
Сколько стоит запуск дейтинга в Telegram?
MVP с командой из 3 человек (бекенд, фронт-Mini App, дизайнер) — 8–12 недель, $25–40k. Это анкета, свайпы, матчинг, базовые платежи. Каждая дополнительная фича (видеокружки, голосовые, daily picks, премиум-фильтры) добавляет 1–3 недели. Сервера на старте — $200/мес, до 50k DAU вырастает до $1500/мес.
Как делать чат: внутри Mini App или нативный?
Чаще берут гибрид: список совпадений и приветственный месседж — внутри Mini App, дальше юзеры переходят в обычный личный чат Telegram через tg://user?id=. Это даёт нативный UX (стикеры, голосовые, видео), а вы экономите на собственной инфре чатов. Минус — теряете контроль над контентом и не можете применить свою модерацию.
Что показывать в качестве main metric?
DAU, retention 7d, и главное — match rate (доля свайпов, которые приводят к матчу). Норма для здорового сервиса: 3–8%. Ниже 3% — анкеты слишком разбалансированы по полу или геораспределению. Выше 10% — у вас слишком мало юзеров и они «выгребают» друг друга.
Какая средняя выручка на юзера?
ARPU в дейтинге выше большинства ниш: $1.5–4 в месяц на DAU при 5–8% конверсии в Premium. На 50k DAU это $75–200k/мес выручки. Stars даёт ~50% от этой суммы после комиссий Apple/Google и Telegram. Окупаемость рекламы 4–8 недель при CPL $0.5–1.5.
Что делать с пустыми городами?
Если в городе меньше 100 активных юзеров, лента «выгребается» за 1–2 дня. Решения: расширять радиус автоматически, показывать «звёздные» анкеты из других городов, агрессивно вкладываться в маркетинг в этих городах. Запускайтесь сразу с критмассой в 3–5 целевых городах, не размазывайтесь.