Ошибка TargetType: почему нельзя заказывать подписчиков по ссылке на пост
Ошибка TargetType: Техническая валидация форматов ссылок
TargetType link validation — это базовый слой защиты (middleware) в архитектуре платформы Smmplan, который предотвращает отправку провайдерам невалидных или конфликтующих данных. Механизм TargetType строго регламентирует соответствие между категорией выбранной услуги и синтаксисом предоставленного URL-адреса. Ошибка возникает в момент, когда регулярное выражение (Regex), встроенное в систему серверной валидации (через Zod schemas), обнаруживает конфликт — например, попытку передать ссылку на публикацию (POST) в API-эндпоинт, ожидающий идентификатор канала (CHANNEL).
Архитектура механизма TargetType
На уровне базы данных (Prisma ORM) каждая услуга (`Service`) имеет жестко закрепленное поле `targetType`. Это поле определяет, какой конкретный парсер ссылок будет использоваться сервером (в Next.js Server Actions) при обработке заказа. Система использует специализированные утилиты маппинга (в частности `src/utils/target-type.ts`), которые классифицируют сервисы на структурные категории. При отсутствии прямого совпадения алгоритм использует fallback-логику, пытаясь вычислить ожидаемый тип по названию категории услуг (функция `inferTargetTypeFromCategory`), чтобы не допустить отправки неверных форматов к конечному провайдеру, у которого такие данные неминуемо вызовут аварийный сбой API (ошибка HTTP 400 Bad Request) и зависание средств пользователя.
В архитектуре базы данных и логики Smmplan каждая услуга имеет свой `targetType` — тип целевого объекта, с которым она работает. Это сделано для того, чтобы алгоритм точно понимал, куда именно направлять трафик.
Основные типы TargetType:
1. CHANNEL (Канал / Профиль): Используется для услуг, направленных на аккаунт в целом. Это Подписчики, Участники групп, Друзья, Бусты для каналов (в Telegram).
2. POST (Пост / Публикация): Применяется для услуг, взаимодействующих с конкретной единицей контента. Это Лайки, Просмотры постов, Комментарии, Репосты, Реакции.
3. STORY (История): Специфический тип для просмотров и реакций на временные публикации (Stories). Ожидает ссылку на профиль пользователя, у которого активна история.
4. CUSTOM (Пользовательский): Применяется для нестандартных услуг, например, отправки Telegram Stars, где формат ссылки может отличаться от стандартного паттерна URL.
Почему система не может "сама догадаться"?
Многие пользователи задают справедливый вопрос: *"Если я даю ссылку на пост `t.me/mychannel/123`, почему Smmplan просто не отбросит номер поста и не подпишет людей на сам канал `t.me/mychannel`?"*
Ответ кроется в архитектуре взаимодействия с API провайдеров и требованиях безопасности ваших средств:
- Следование стандартам API: Провайдеры (исполнители услуг) имеют жестко запрограммированные сценарии. Если API провайдера ожидает получить формат `@username` или `t.me/username` для подписчиков, отправка ему ссылки с номером поста вызовет ошибку на стороне провайдера. Заказ "зависнет" или будет отклонен, но деньги с вашего баланса могут временно заморозиться.
- Защита от случайных ошибок: Представьте, что вы скопировали ссылку на чужой вирусный пост-репост в вашем канале, чтобы накрутить на него лайки, но по ошибке выбрали услугу "Подписчики". Если бы система "обрезала" ссылку, вы бы накрутили подписчиков на чужой канал-источник. TargetType validation гарантирует, что вы получите ровно то, что заказали, и именно туда, куда хотели.
- Приватные ссылки: В закрытых группах ссылки приглашения (invite links) выглядят совершенно иначе, чем ссылки на посты в этих же группах. Автоматическая конвертация здесь физически невозможна без нарушения приватности.
Как работает валидация ссылок
Когда вы вставляете ссылку в поле и нажимаете кнопку заказа, система Smmplan мгновенно проверяет соответствие категории выбранной услуги и формата вашей ссылки.
Если вы выбрали услугу из категории `Подписчики / Участники / Бусты`, система ожидает `targetType: CHANNEL`. Если регулярное выражение обнаружит в вашей ссылке паттерн поста (например, наличие ID сообщения в конце ссылки), алгоритм немедленно заблокирует создание заказа и выдаст сообщение об ошибке.
Это не сбой платформы — это защитный механизм, который сохраняет ваши деньги и нервы. Если вы видите ошибку TargetType, значит, система спасла вас от некорректного заказа, который всё равно не был бы выполнен.
Примеры правильных и неправильных ссылок
Чтобы избежать ошибок, давайте рассмотрим, как должны выглядеть ссылки для разных задач на примере популярных социальных сетей.
Telegram
- Услуга: Подписчики на канал (`targetType: CHANNEL`)
- ❌ *Неправильно:* `https://t.me/durov/123` (Это ссылка на пост)
- ✅ *Правильно:* `https://t.me/durov` или `@durov`
- Услуга: Лайки, Просмотры, Реакции (`targetType: POST`)
- ❌ *Неправильно:* `https://t.me/durov` (Система не знает, какой именно пост лайкать)
- ✅ *Правильно:* `https://t.me/durov/123`
- Услуга: Подписчики (`targetType: CHANNEL`)
- ❌ *Неправильно:* `https://instagram.com/p/Cq123XYZ/` (Это ссылка на фото/рилс)
- ✅ *Правильно:* `https://instagram.com/username`
- Услуга: Лайки, Сохранения, Просмотры Reels (`targetType: POST`)
- ❌ *Неправильно:* `https://instagram.com/username`
- ✅ *Правильно:* `https://instagram.com/p/Cq123XYZ/` или `https://instagram.com/reel/Cq123XYZ/`
YouTube
- Услуга: Подписчики на канал (`targetType: CHANNEL`)
- ❌ *Неправильно:* `https://www.youtube.com/watch?v=dQw4w9WgXcQ` (Это ссылка на конкретное видео)
- ✅ *Правильно:* `https://www.youtube.com/channel/UC...` или `https://www.youtube.com/@username`
- Услуга: Просмотры, Лайки на видео (`targetType: POST`)
- ❌ *Неправильно:* `https://www.youtube.com/@username`
- ✅ *Правильно:* `https://www.youtube.com/watch?v=dQw4w9WgXcQ`
Что делать, если вы всё же сделали ошибку?
Благодаря валидатору TargetType, сделать такую ошибку в Smmplan сейчас практически невозможно — интерфейс просто не пропустит заказ. Однако, если из-за специфического формата ссылки (например, нестандартной мобильной сокращенной ссылки) заказ всё же прошел, но был направлен провайдеру с неверным типом:
1. Не паникуйте. Система мониторинга провайдеров (Background Workers) постоянно опрашивает статусы заказов.
2. Когда провайдер отклонит заказ из-за неверного формата, статус в вашей панели Smmplan автоматически изменится на `CANCELED` (Отменен).
3. Средства будут автоматически и в полном объеме возвращены на ваш внутренний баланс Smmplan.
4. После этого вам достаточно скопировать правильную ссылку в соответствии с правилами TargetType и оформить заказ заново.
Помните: правильная ссылка — это 90% успеха быстрого и качественного выполнения вашего заказа. Внимательно проверяйте тип выбранной услуги перед отправкой формы.