Legan Studio
Все статьи
~ 5 мин чтения

Бот для P2P-услуг и обмена в Telegram

Как собрать P2P-маркетплейс услуг в Telegram: рейтинги, эскроу, антифрод, споры и монетизация. Архитектура и риски запуска.

  • Telegram
  • P2P
  • маркетплейс
  • услуги

P2P-маркетплейсы услуг — Profi.ru, YouDo, TaskRabbit — выросли в миллиардные бизнесы на простой механике: исполнители показывают навыки, заказчики ставят задачи, платформа берёт комиссию и гарантирует сделку. Telegram — естественная среда для такого продукта: миллиарды юзеров, нативные платежи в Stars, лёгкая авторизация.

Разберём, как собрать P2P-сервис в Telegram, как реализовать эскроу, рейтинги и разрешение споров, и какие юридические риски ждут владельца платформы.

Базовая модель

Игроки:

  • Заказчик — публикует задачу.
  • Исполнитель — откликается и выполняет.
  • Платформа — соединяет, принимает оплату, разруливает споры.

Деньги:

  • Заказчик платит платформе при создании заказа (эскроу).
  • Платформа удерживает 10–25% комиссии и переводит остаток исполнителю после подтверждения работы.

Архитектура

[Mini App: каталог + чат + сделки]
        ↓
[Backend: Postgres + Redis + S3]
        ↘ Платежи: ЮKassa (карта) или TON (крипта)
        ↘ Антифрод: ML на текстах + правила
        ↘ Spotter: модерация контента
        ↘ Bot API: пуши, поддержка

Ядро — таблицы users, offers, orders, messages, payments, disputes.

Профиль исполнителя

Минимум для доверия:

  • Имя, фото, верификация телефона.
  • Описание услуг, портфолио (5–10 работ).
  • Цена (фикс или от/до).
  • Гео (Mini App с PostGIS).
  • Рейтинг, число отзывов.
  • Telegram Passport — опциональная KYC.

Чем подробнее заполнен профиль, тем выше CR в заказ.

CREATE TABLE specialists (
    user_id BIGINT PRIMARY KEY,
    name TEXT, avatar_url TEXT,
    bio TEXT,
    services TEXT[],          -- ['ремонт', 'плитка']
    price_from INT, price_to INT,
    location GEOGRAPHY(POINT),
    rating NUMERIC(3,2) DEFAULT 0,
    reviews_count INT DEFAULT 0,
    is_verified BOOLEAN DEFAULT FALSE,
    is_premium BOOLEAN DEFAULT FALSE
);

Размещение задачи

Заказчик в боте описывает задачу: категория → описание → бюджет → срок → гео. Mini App-форма даёт лучший UX, чем диалог в чате.

class CreateOrder(BaseModel):
    category: str
    title: str
    description: str
    budget_min: int
    budget_max: int
    location: tuple[float, float] | None
    deadline: date

@api.post("/orders")
async def create_order(order: CreateOrder, user=Depends(auth)):
    o = await db.create_order(user.id, **order.dict())
    await match_specialists(o.id)
    return o

Матчинг и отклики

После публикации бот рассылает уведомления подходящим исполнителям (по категории + гео + цене). Исполнители оставляют отклики с предложением и ценой.

SELECT s.user_id, s.rating, s.reviews_count
FROM specialists s
WHERE s.services && ARRAY[$category]
  AND ST_DWithin(s.location, $loc, $radius)
  AND s.is_verified
  AND $budget BETWEEN s.price_from AND s.price_to
ORDER BY s.rating DESC, s.reviews_count DESC
LIMIT 30;

Заказчик видит первых 5–10 откликов в Mini App, выбирает одного.

Эскроу

Логика: заказчик платит при выборе исполнителя, деньги «зависают» на платформе, исполнитель видит пометку «оплачено» и приступает. После подтверждения работы (или истечения срока без споров) — выплата исполнителю.

async def confirm_order(order_id: int, customer_id: int):
    o = await orders.get(order_id)
    if o.customer_id != customer_id:
        raise HTTPException(403)
    if o.status != "in_progress":
        raise HTTPException(400, "wrong status")
    fee = int(o.amount * COMMISSION_RATE)
    payout = o.amount - fee
    await payouts.queue(specialist_id=o.specialist_id, amount=payout)
    await orders.set_status(order_id, "completed")
    await reviews.request(order_id)

Выплаты в РФ — через ЮKassa выплаты или СБП P2P. За границу — TON или USDT TRC-20 (но это уже зона серого).

Споры

Если стороны не договорились, заказчик нажимает «Открыть спор». Алгоритм:

  1. Заказ замораживается (никаких выплат).
  2. Обе стороны прикладывают доказательства (фото, переписка, документы).
  3. Модератор платформы изучает (SLA 24 часа).
  4. Решение: возврат заказчику / выплата исполнителю / частичный возврат.
@router.callback_query(F.data.startswith("dispute:open:"))
async def open_dispute(cb: CallbackQuery):
    order_id = int(cb.data.split(":")[2])
    dispute = await disputes.create(order_id=order_id, opened_by=cb.from_user.id)
    await notify_moderators(dispute.id)
    await cb.answer("Спор открыт. Соберите доказательства в течение 48 часов.")

Модераторам нужно отдельное mini-app или дашборд для разбора споров.

Рейтинги и отзывы

После завершения сделки — взаимные отзывы заказчик ↔ исполнитель. Двусторонний рейтинг защищает от хамских заказчиков:

async def submit_review(order_id: int, from_id: int, to_id: int, rating: int, text: str):
    await reviews.insert(order_id, from_id, to_id, rating, text)
    await update_aggregate(to_id)

Рейтинг считается как взвешенное среднее последних 50 отзывов (свежие весомее).

Антифрод

Главные угрозы:

  • Развод на «оплати вне платформы» — исполнитель просит деньги в обход эскроу.
  • Фейковые заказы для накрутки рейтинга.
  • Кардинг — оплата ворованной картой и моментальный отзыв.

Защита:

УгрозаРешение
Обход эскроуавтодетект упоминания карт/счетов в чате, бан
Накруткатот же IP/устройство у заказчика и исполнителя — блок
Кардингhold 7 дней до выплаты
Multi-accKYC через Passport, лимит профилей на телефон

Юридика

P2P-сервис — самая сложная юридическая модель в Telegram:

  • 115-ФЗ: при обороте >600 тыс. ₽ — обязательный финмониторинг.
  • Платформа — не сторона сделки, а агент. Но удержание комиссии = доход с НДС.
  • Самозанятые исполнители: автоматический чек через API ФНС после выплаты.
  • Ст. 9 152-ФЗ: согласие обеих сторон на передачу контактов.
  • Защита прав потребителей: спор может уйти в Роспотребнадзор.

Лучше с самого начала закладывать в комиссию юриста-эскалатора.

Топ-5 ошибок

  1. Не делают эскроу → процветает обход в личке, платформа теряет комиссию.
  2. Запускают без модераторов → споры не разрешаются, NPS падает.
  3. Не верифицируют исполнителей → много кидков → отрицательный reputation.
  4. Не считают экономику с учётом возвратов и споров (10–15% сделок) → планируют маржу 25%, получают 10%.
  5. Игнорируют 115-ФЗ → блокировка счёта банком при первой проверке.

Итого

P2P-маркетплейс в Telegram — амбициозный проект на 8–12 месяцев и 5–15 млн рублей до окупаемости. Технически собирается из стандартных кубиков (Mini App + бот + эскроу + споры), но 80% сложности — операционные (модерация, антифрод, юрлица). Ниша работает в категориях с высоким чеком (ремонт, услуги фрилансеров от 10к ₽) и плохо масштабируется на дешёвые задачи (комиссия не покрывает расходов на поддержку).

Частые вопросы

Какая комиссия оптимальна?

В Profi.ru — 25–35%, в YouDo — 10%, в нишевых b2b — 15–20%. Слишком высокая комиссия мотивирует уходить мимо платформы, слишком низкая не покрывает поддержку и модерацию. Оптимум — 15–20% с возможностью уменьшения для топ-исполнителей (динамическая комиссия).

Как удержать сделки от ухода мимо платформы?

Эскроу + ценность платформы (рейтинг, гарантии, споры). В чате блокируйте упоминания карт, телефонов, мессенджеров — детектор регулярками + ML. Делайте удобные инструменты внутри (счета, документы, уведомления), чтобы вне платформы было хуже. Полностью предотвратить нельзя — закладывайте 15–20% утечек в финмодель.

Нужна ли лицензия на P2P-платежи?

В РФ агрегатор платежей нуждается в банковской лицензии или партнёрстве с лицензированным провайдером (ЮKassa, ЮМани, CloudPayments). Прямые P2P-переводы между юзерами без банка — серая зона. Большинство платформ работает через юрлицо: «вы переводите нам, мы переводим исполнителю».

Как защититься от негативных отзывов конкурентов?

Привязка отзыва к завершённой сделке (нет сделки = нет отзыва). Модерация подозрительных отзывов: если у исполнителя 30 положительных и вдруг 5 негативных за день, это аномалия. Жалобы исполнителя на отзыв — отдельный workflow с проверкой переписки в платформе.

Можно ли запустить нишевый P2P (только репетиторы или только клининг)?

Да, и часто это выгоднее, чем универсальный. В нише проще таргетировать, дешевле CAC, выше LTV (повторные заказы). Минус — потолок рынка ниже. Хороший тест: ниша должна давать минимум 100 тысяч заказов в год в выбранном гео — иначе не окупится.

Какие сервера нужны на старте?

Один VPS на 4 vCPU / 8 GB / 100 GB SSD ($40/мес) выдерживает до 5000 DAU. Postgres + Redis + Bot API + Mini App backend в Docker. Дальше — отдельные машины под Postgres (managed: Yandex Cloud, Selectel) и автоскейлинг для API. До 50k DAU — $300–500/мес.

Сколько модераторов нужно?

На 10 000 активных сделок в месяц нужен 1 модератор full-time + 1 саппорт. На спорах не экономьте — это критичный пользовательский опыт. SLA на спор должен быть < 48 часов, иначе репутация платформы рушится.