После покупки модуля sendev.inozapret в маркетплейсе 1С-Битрикс вы получаете не только проверку контента в админке, но и возможность сделать публичный сервис: проверка текста, загруженных файлов и проверка ссылок (страниц по URL). Такой сервис легко монетизировать — брать оплату за символы, размер файла, количество проверок и т.д.
Для ускорения запуска мы подготовили несколько прикладных скриптов (под разные сценарии: тексты / файлы / ссылки), которые помогают реализовать эту идею «под ключ» — от формы до отчёта.

Важно: прикладные скрипты для публичной части не публикуются в статье, потому что они распространяются на коммерческой основе (для клиентов, которые уже приобрели модуль). Передача возможна по договору (как отдельный пакет материалов) и/или в формате доп.услуги — например, размещение и настройка скриптов на вашем сайте также по договору. Ниже — архитектура, сценарии, рекомендации и «обвязка», которая превращает проверки в полноценный сервис.
1) Зачем вообще делать публичный сервис проверки
Проверка на иностранные слова и спорные заимствования — типовая боль для:
- редакций и контент-команд (много текстов, нужно быстро и массово);
- маркетинговых агентств (выпуск материалов под требования заказчика/политики бренда);
- гос/окологос проектов (повышенное внимание к нормативной лексике);
- маркетплейсов контента (проверка материалов до публикации);
- корпоративных порталов и обучающих платформ (контроль материалов).
Публичный сервис превращает внутренний инструмент админки в продукт:
- вы даёте пользователям страницу проверки (или API),
- снимаете нагрузку с менеджеров/редакторов,
- и можете продавать проверки как услугу.
2) Что даёт модуль sendev.inozapret как «движок» сервиса
Если описывать модуль языком разработчика — это ядро, которое:
- работает с нормативными словарями и настройками проверки;
- умеет искать “подозрительные” слова и отдавать список нарушений с контекстом;
- поддерживает белые списки (whitelist) и пользовательские исключения;
- может учитывать словоформы (когда доступна морфология);
- позволяет использовать одну и ту же логику и в админке, и в публичной части.
Главная мысль для бизнеса: вы покупаете модуль один раз, а затем на его основе можете построить сервис с оплатой “за объём”, “за документ”, “за пакет проверок” — и масштабировать это под требования 168-ФЗ, 53-ФЗ, 38-ФЗ (в зависимости от ваших внутренних регламентов, политики редакции и правил публикации).
3) Три инструмента сервиса: текст / файл / URL — и что в них ценного
3.1. Проверка текстов (самый быстрый и массовый сценарий)
Пользователь вставляет текст → получает список “подозрительных” слов → видит контекст → при необходимости добавляет слова в свои исключения (локально для этой проверки).
Где это монетизируется лучше всего:
- “проверка по символам” (например, 10 000 символов = 1 кредит),
- пакеты “100 проверок в месяц”,
- корпоративный тариф “неограниченно” + лимит по длине текста.
3.2. Проверка загруженных файлов (самый “денежный” сценарий)
Пользователь загружает документ → сервис извлекает текст → проверяет → показывает отчёт.
Ценность для клиентов:
- можно проверять документы “как есть” (без копирования текста),
- удобно для юристов/редакторов/методистов,
- понятная тарификация: за размер файла, за тип документа, за объём извлечённого текста.
Что важно в продакшене (и это учтено в хорошем решении):
- безопасная загрузка (валидация расширений, MIME, размер, одноразовое хранение),
- очистка временных файлов,
- ограничение объёма анализируемого текста,
- понятные сообщения об ошибках: “в PDF нет текста” и т.п.
3.3. Проверка ссылки (страницы по URL) (самый “вау-эффект” сценарий)
Пользователь вводит URL → сервис скачивает HTML → извлекает текст → проверяет → отдаёт отчёт.
Где применяется:
- быстрый аудит лендингов и статей,
- проверка сайта заказчика “до сдачи”,
- контроль публикаций (особенно, когда редакция работает в нескольких системах).
Критически важно: защита от SSRF и ограничение доменов/портов/редиректов. Если это не учесть — публичный URL-проверяльщик превращается в дыру. Поэтому в “боевой” реализации должны быть:
- ограничения на схемы (http/https),
- разрешённые порты,
- лимит редиректов,
- лимит размера ответа,
- запрет локальных/служебных адресов,
- (опционально) allowlist доменов.
4) Как правильно “упаковать” проверку в сервис на Битрикс
Самая практичная схема:
- Публичные страницы (UI):
/tools/text-check/— проверка текстов/tools/file-check/— проверка файлов/tools/link-check/— проверка ссылок (страниц по URL)
- Правила доступа:
- анонимным — демо-режим (маленькие лимиты),
- авторизованным — расширенные лимиты,
- клиентам с оплатой — большие лимиты и API.
- Монетизация:
- кредиты / баланс,
- подписки,
- платные пакеты,
- корпоративный доступ по ключу (API token).
- Техническая “обвязка” (вот её как раз часто нет — и именно она превращает скрипты в продукт):
- тарификация и списание,
- лимиты и анти-спам,
- журналирование факта проверки,
- админ-страница отчётов (кому, сколько, когда).
Ниже — готовые примеры такой обвязки (без раскрытия коммерческих скриптов проверки).
5) Пример №1. Раздача доступа: закрываем инструменты через .access.php
Сценарий: “проверка текстов” доступна всем, а “проверка файлов” и “проверка ссылок” — только группе “Платные пользователи”.
Файл: /tools/.access.php
<?php
/* Доступ к каталогу инструментов проверки */
$PERM["text-check"]["*"] = "R"; // всем чтение (публичная страница)
$PERM["file-check"]["*"] = "D"; // по умолчанию запрет
$PERM["link-check"]["*"] = "D"; // по умолчанию запрет
// Группа "Платные пользователи" (пример: ID=7) — чтение страниц
$PERM["file-check"]["7"] = "R";
$PERM["link-check"]["7"] = "R";
Что это даёт:
- вы моментально получаете “демо-режим” и “платный режим” без переписывания логики,
- дальше можно заменить группы на динамические проверки баланса/подписок.
6) Пример №2. Анти-спам и лимиты без капчи: троттлинг по IP + сессии
Даже хороший инструмент “убьют” боты, если публичную форму оставить без ограничений. Простой и рабочий вариант — лимит запросов в минуту.
Файл: /local/php_interface/lib/MyInozapret/Throttle.php
<?php
namespace MyInozapret;
use Bitrix\Main\Application;
final class Throttle
{
/**
* Простой лимитер: N запросов за T секунд.
* Хранилище: файловый кеш Битрикса (не требует БД).
*/
public static function check(string $key, int $limit, int $periodSec): bool
{
$key = trim($key);
if ($key === '' || $limit <= 0 || $periodSec <= 0) {
return true;
}
$cacheTtl = $periodSec;
$cacheId = 'inozapret_throttle_' . md5($key);
$cacheDir = '/my_inozapret/throttle';
$cache = Application::getInstance()->getCache();
$now = time();
if ($cache->initCache($cacheTtl, $cacheId, $cacheDir)) {
$data = $cache->getVars();
$hits = is_array($data) && isset($data['hits']) && is_array($data['hits']) ? $data['hits'] : [];
} else {
$hits = [];
}
// выкидываем старые отметки
$from = $now - $periodSec;
$hits = array_values(array_filter($hits, static fn($ts) => is_int($ts) && $ts >= $from));
if (count($hits) >= $limit) {
return false;
}
$hits[] = $now;
$cache->startDataCache();
$cache->endDataCache(['hits' => $hits]);
return true;
}
}
Подключение автозагрузки (если у вас нет composer-autoload):
Файл: /local/php_interface/init.php
<?php
// ... ваш код ...
\Bitrix\Main\Loader::registerAutoLoadClasses(null, [
'MyInozapret\\Throttle' => '/local/php_interface/lib/MyInozapret/Throttle.php',
]);
Как использовать в публичной форме (идея):
- ключ =
IP + тип проверки, - лимит, например: 10 проверок за 60 секунд для гостей, 60/60 для авторизованных.
7) Пример №3. Монетизация “кредитами”: списываем баланс за символы/файлы/URL
Модель “кредиты” часто продаётся лучше всего:
- пользователю проще понять “у меня 100 кредитов”,
- вам проще гибко менять тарифы,
- удобно делать пакетные продажи.
Ниже — минимальная таблица и код списания. Это не платёжка, а учёт потребления.
7.1. Создаём таблицу балансов
Файл: /local/php_interface/lib/MyInozapret/BalanceStorage.php
<?php
namespace MyInozapret;
use Bitrix\Main\Application;
use Bitrix\Main\DB\Connection;
final class BalanceStorage
{
private static function conn(): Connection
{
return Application::getConnection();
}
public static function ensureSchema(): void
{
$c = self::conn();
// простая схема: пользователь -> кредиты
$c->queryExecute("
CREATE TABLE IF NOT EXISTS my_inozapret_balance (
USER_ID INT NOT NULL PRIMARY KEY,
CREDITS INT NOT NULL DEFAULT 0,
UPDATED_AT DATETIME NULL
)
");
// журнал списаний (аудит)
$c->queryExecute("
CREATE TABLE IF NOT EXISTS my_inozapret_ledger (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
USER_ID INT NOT NULL,
ACTION VARCHAR(32) NOT NULL,
UNITS INT NOT NULL,
CREDITS_DELTA INT NOT NULL,
META TEXT NULL,
CREATED_AT DATETIME NOT NULL
)
");
}
public static function getCredits(int $userId): int
{
$userId = (int)$userId;
if ($userId <= 0) return 0;
$row = self::conn()->query("
SELECT CREDITS
FROM my_inozapret_balance
WHERE USER_ID = {$userId}
")->fetch();
return $row ? (int)$row['CREDITS'] : 0;
}
public static function addCredits(int $userId, int $credits, string $meta = ''): void
{
$userId = (int)$userId;
$credits = (int)$credits;
if ($userId <= 0 || $credits === 0) return;
$metaEsc = self::conn()->getSqlHelper()->forSql($meta);
self::conn()->queryExecute("
INSERT INTO my_inozapret_balance (USER_ID, CREDITS, UPDATED_AT)
VALUES ({$userId}, {$credits}, NOW())
ON DUPLICATE KEY UPDATE
CREDITS = CREDITS + {$credits},
UPDATED_AT = NOW()
");
self::conn()->queryExecute("
INSERT INTO my_inozapret_ledger (USER_ID, ACTION, UNITS, CREDITS_DELTA, META, CREATED_AT)
VALUES ({$userId}, 'topup', 0, {$credits}, '{$metaEsc}', NOW())
");
}
/**
* Списывает кредиты атомарно: либо списали, либо нет.
*/
public static function charge(int $userId, string $action, int $units, int $creditsToCharge, array $meta = []): bool
{
$userId = (int)$userId;
$units = (int)$units;
$creditsToCharge = (int)$creditsToCharge;
if ($userId <= 0 || $creditsToCharge <= 0) return false;
$action = preg_replace('/[^a-z0-9_\-]/i', '', $action);
if ($action === '') $action = 'charge';
$metaJson = json_encode($meta, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
if (!is_string($metaJson)) $metaJson = '{}';
$metaEsc = self::conn()->getSqlHelper()->forSql($metaJson);
$c = self::conn();
$c->startTransaction();
try {
// гарантируем запись
$c->queryExecute("
INSERT INTO my_inozapret_balance (USER_ID, CREDITS, UPDATED_AT)
VALUES ({$userId}, 0, NOW())
ON DUPLICATE KEY UPDATE UPDATED_AT = NOW()
");
// списание только если хватает
$res = $c->queryExecute("
UPDATE my_inozapret_balance
SET CREDITS = CREDITS - {$creditsToCharge},
UPDATED_AT = NOW()
WHERE USER_ID = {$userId} AND CREDITS >= {$creditsToCharge}
");
// для разных драйверов проверка “затронутых строк” может отличаться,
// но в Битриксе это обычно работает:
$affected = method_exists($res, 'getAffectedRowsCount') ? (int)$res->getAffectedRowsCount() : 0;
if ($affected <= 0) {
$c->rollbackTransaction();
return false;
}
$c->queryExecute("
INSERT INTO my_inozapret_ledger (USER_ID, ACTION, UNITS, CREDITS_DELTA, META, CREATED_AT)
VALUES ({$userId}, '{$action}', {$units}, -" . $creditsToCharge . ", '{$metaEsc}', NOW())
");
$c->commitTransaction();
return true;
} catch (\Throwable $e) {
$c->rollbackTransaction();
return false;
}
}
}
Автозагрузка:
<?php
\Bitrix\Main\Loader::registerAutoLoadClasses(null, [
'MyInozapret\\BalanceStorage' => '/local/php_interface/lib/MyInozapret/BalanceStorage.php',
]);
Инициализация схемы (один раз, например в /bitrix/admin/ через ваш служебный скрипт, либо временно в init.php):
<?php
\MyInozapret\BalanceStorage::ensureSchema();
7.2. Тарифы: как считать стоимость проверки
Пример логики:
- Текст: 1 кредит за каждые 1 000 символов (округление вверх)
- Файл: 1 кредит за каждые 200 KB (или за 1 страницу, если вы считаете страницы)
- URL: фикс 2 кредита (дороже, потому что сеть + парсинг)
Файл: /local/php_interface/lib/MyInozapret/Tariff.php
<?php
namespace MyInozapret;
final class Tariff
{
public static function costForText(string $text): array
{
$len = function_exists('mb_strlen') ? mb_strlen($text, 'UTF-8') : strlen($text);
$units = (int)$len;
$credits = (int)ceil($units / 1000);
return ['units' => $units, 'credits' => max(1, $credits)];
}
public static function costForFileBytes(int $bytes): array
{
$units = max(0, (int)$bytes);
$credits = (int)ceil($units / (200 * 1024)); // 200 KB
return ['units' => $units, 'credits' => max(1, $credits)];
}
public static function costForUrl(string $url): array
{
$units = 1;
$credits = 2;
return ['units' => $units, 'credits' => $credits];
}
}
8) Пример №4. Подключаем монетизацию к вашим страницам проверки (идея без раскрытия скриптов)
Поскольку прикладные скрипты публичной проверки — коммерческая часть, в реальном проекте вы делаете так:
- Пользователь отправляет форму.
- До запуска проверки вы:
- проверяете лимиты (Throttle),
- считаете стоимость (Tariff),
- пытаетесь списать кредиты (BalanceStorage::charge).
- Если списание успешно — запускаете проверку (ваш сценарный скрипт).
- Если нет — показываете “пополните баланс”.
Мини-пример вставки в публичную страницу (фрагмент):
<?php
use Bitrix\Main\Context;
$userId = (int)$USER->GetID();
$request = Context::getCurrent()->getRequest();
if ($request->isPost()) {
// 1) анти-спам
$ip = (string)($_SERVER['REMOTE_ADDR'] ?? '');
$key = $ip . '|text';
if (!\MyInozapret\Throttle::check($key, 10, 60)) {
$error = 'Слишком много запросов. Попробуйте позже.';
}
// 2) тарификация
if (!$error) {
$text = (string)$request->getPost('text');
$cost = \MyInozapret\Tariff::costForText($text);
// 3) списание
$ok = \MyInozapret\BalanceStorage::charge(
$userId,
'text_check',
(int)$cost['units'],
(int)$cost['credits'],
['ip' => $ip]
);
if (!$ok) {
$error = 'Недостаточно кредитов. Пополните баланс.';
}
}
// 4) запуск проверки — здесь вызывается ваш коммерческий скрипт проверки текста
if (!$error) {
// include $_SERVER['DOCUMENT_ROOT'].'/tools/text-check/check.php';
// (путь условный — у покупателя будет свой)
}
}
Так вы не ломаете готовую логику проверки, а добавляете коммерческую логику сверху.
9) Примеры упаковки продукта: что именно продавать
Чтобы сервис покупали охотнее, обычно делают 3 уровня:
A) Демо (для всех)
- лимит текста 1–2 тыс. символов,
- без файлов и URL,
- результат показываем, но без экспорта,
- троттлинг жёсткий.
B) Стандарт (для копирайтеров/маркетологов)
- текст до 20–50 тыс. символов,
- файлы до 2–10 MB,
- проверка ссылок включена,
- экспорт отчёта (CSV/XLSX),
- личный кабинет с историей проверок.
C) Профи/Корп
- API-ключ,
- white-label страница проверки на вашем домене,
- большие лимиты,
- отдельные правила allowlist доменов для URL,
- приоритетная очередь на тяжёлые файлы.
10) Почему “несколько прикладных скриптов” — это не “просто формы”, а ускоритель запуска
Если вы делали публичные инструменты на Битрикс, вы знаете: “написать форму” — мелочь. Дорого обходятся нюансы:
- корректная работа с белыми списками и пользовательскими исключениями;
- морфология (чтобы исключение “геймификация” покрывало “геймификацией/геймификации…”);
- безопасная загрузка файлов и уборка временных данных;
- извлечение текста из разных форматов (и корректные сообщения, когда в PDF нет текста);
- SSRF-защита для проверки ссылок;
- экспорт отчётов так, чтобы это не ломало страницу и не создавало уязвимости (включая защиту от “формульных” CSV/XLSX инъекций).
Именно поэтому покупателю модуля выгоднее получить готовые сценарные скрипты на коммерческой основе (по договору и/или как дополнительную услугу с размещением и настройкой на сайте) и потратить время на то, что реально приносит деньги:
- дизайн,
- тарифы,
- ограничение доступа,
- кабинет пользователя,
- продажи и продвижение.
Финал: как начать быстро
- Покупаете и устанавливаете модуль sendev.inozapret.
- Получаете (по договору / в рамках доп.услуги) несколько прикладных скриптов под нужные сценарии: проверка текстов, проверка файлов, проверка ссылок (страниц по URL).
- Подключаете их как публичные инструменты на сайте:
/tools/text-check/— проверка текстов/tools/file-check/— проверка файлов/tools/link-check/— проверка ссылок
- Добавляете монетизацию (кредиты/подписки), лимиты и доступ (примеры выше).
- Запускаете сервис и продаёте проверки “за объём” — в логике 168-ФЗ, 53-ФЗ, 38-ФЗ и ваших внутренних требований.
Пример реализации сервиса проверки текстов, файлов и URL по 168-ФЗ с модулем sendev.inozapret
Ниже — готовая схема разделов, UX-поток и набор тарифов для сервиса проверки текстов / файлов / ссылок (URL) на 1С-Битрикс на базе sendev.inozapret.
1) Карта разделов сайта (структура страниц)
Публичная часть
- Лендинг сервиса
/inozapret/- Цель: объяснить пользу, показать демо, собрать регистрацию/оплату.
- Блоки: что проверяем, как работает, примеры отчётов, тарифы, FAQ.
- Инструменты
/tools/text-check/— проверка текстов/tools/file-check/— проверка файлов/tools/link-check/— проверка ссылок (страниц по URL)
- Тарифы
/inozapret/prices/- Таблица планов + калькулятор “сколько стоит проверка”.
- FAQ / Документация
/inozapret/help/- Пример: “почему PDF не распознался”, “как работают исключения”, “что такое словоформы”.
- Публичный статус / ограничения (опционально)
/inozapret/status/- Лимиты, состояние сервиса, рекомендации.
Личный кабинет пользователя
- Главная кабинета (дашборд)
/cabinet/inozapret/- Баланс/пакет, быстрые кнопки “Проверить текст/файл/ссылку”, последние проверки.
- Пополнение / планы
/cabinet/inozapret/billing/- Выбор плана, покупка пакета, история платежей.
- История проверок
/cabinet/inozapret/history/- Фильтры: период, тип проверки, статус, количество “срабатываний”.
- Отчёт по проверке (детальная страница)
/cabinet/inozapret/history/<ID>/- Таблица нарушений, контексты, экспорт (CSV/XLSX), метаданные.
- Профиль / настройки
/cabinet/inozapret/settings/- Персональные лимиты (если нужно), whitelist пользователя (если вы решите хранить его глобально), API-ключ (для тарифа PRO).
Админ-панель (для владельца сервиса)
- “Тарифы и лимиты”
- “Пользователи и балансы”
- “Журнал проверок”
- “Ошибки извлечения/парсинга”
- “Разрешённые домены для URL (allowlist)”
- “Статистика (выручка/конверсия/нагрузка)”
2) UX-поток: как пользователь проходит путь
Поток А: Гость (демо → регистрация)
- Попадает на
/inozapret/ - Нажимает “Попробовать бесплатно”
- Переходит на
/tools/text-check/(демо) - После проверки видит:
- результат + ограничение (“демо: до N символов”)
- CTA: “Снять ограничения” / “Проверять файлы и ссылки”
- Регистрация → кабинет
/cabinet/inozapret/ - Выбор плана → пополнение → повторная проверка без демо-ограничений
Поток B: Авторизованный без оплаты (фремиум)
/cabinet/inozapret/показывает “бесплатный лимит” (например, 30 кредитов/мес)- Проверки работают, но:
- ниже лимиты
- нет экспорта или экспорт ограничен
- При попытке проверить большой файл/URL → “Недостаточно лимита” → upsell на
/cabinet/inozapret/billing/
Поток C: Платный пользователь (кредиты/подписка)
- Оплачивает пакет/подписку
- Проверяет тексты/файлы/ссылки
- Сохраняет отчёты в “Истории”
- Делится ссылкой на отчёт внутри организации (опционально)
Поток D: PRO/API (если будете делать интеграции)
- В кабинете генерирует API-ключ
- Дёргает API-методы проверки (текст/URL/файл)
- Получает отчёт JSON + возможность экспортов
3) Коммерческая модель (как считать и продавать)
Самая удобная модель для таких сервисов — кредиты (или “проверочные единицы”), потому что:
- легко считать и списывать
- легко продавать пакетами
- гибко менять коэффициенты
Что считать “юнитами”
- Текст: количество символов (или токенов/слов — но символы проще)
- Файл: размер файла + (опционально) длина извлечённого текста
- Ссылка (URL): фикс + (опционально) доплата за объём скачанного/извлечённого текста
4) Готовые тарифные планы (пример, который хорошо конвертит)
Ниже — “скелет”, который обычно работает для B2C/малого B2B.
A) Демо (без регистрации)
- Текст: до 2 000 символов/проверка
- Файлы/ссылки: выключены
- Очередь: обычная
- Срок хранения отчёта: не сохраняется
B) Старт (для копирайтера)
- Цена: низкая (входной билет)
- Включено: 5 000 кредитов/мес
- Текст: до 50 000 символов/проверка
- Файл: до 5 MB
- Ссылка: включена (лимит на 1–2MB ответа)
- История: 30 дней
- Экспорт: CSV (XLSX можно оставить для следующего тарифа)
C) Профи (маркетинг/агентства)
- Включено: 30 000 кредитов/мес
- Файл: до 15 MB
- Ссылка: включена + расширенные лимиты
- Экспорт: CSV + XLSX
- История: 180 дней
- Приоритет: средний
D) Корп (команды/порталы)
- Включено: 100 000+ кредитов/мес (или безлимит с fair use)
- API-ключ
- Allowlist доменов для URL под клиента
- История: 1–2 года
- Приоритет: высокий
- Договор/акты/закрывающие — если нужно
5) Тарифная математика (конкретные правила списания)
Вот “понятные” и коммерчески удобные правила (можете копировать как есть):
Текст
- 1 кредит = 1 000 символов (округление вверх)
- Минимум 1 кредит за проверку
Пример:
- 1 250 символов → 2 кредита
- 10 001 символ → 11 кредитов
Файл
Два варианта, выбирайте один:
Вариант 1 (самый простой): по размеру файла
- 1 кредит = 200 KB
- Минимум 2 кредита (чтобы покрыть извлечение)
Вариант 2 (честнее): по объёму извлечённого текста
- списание после извлечения
- 1 кредит = 1 000 символов извлечённого текста
- минимально 3 кредита (сложнее, но честнее)
Ссылка (URL)
- фиксированно 2 кредита за сам факт проверки
- + 1 кредит за каждые 2 000 символов извлечённого текста (или за каждые 200 KB ответа)
6) Что показывать на лендинге, чтобы покупали (контент-блоки)
- Три сценария в один сервис
- “Проверка текстов”
- “Проверка файлов”
- “Проверка ссылок (URL)”
- Понятная тарифная логика
- “Оплата за объём” (символы/MB/кредиты)
- “Пакеты и подписки”
- Примеры отчётов
- скрин “найдено N нарушений”
- контекст + подсветка
- экспорт в CSV/XLSX (для платных)
- Безопасность URL-проверки
- 3–4 пункта простым языком: allowlist, запрет локальных адресов, лимит редиректов, лимит размера ответа
- FAQ
- PDF-сканы без OCR
- почему словоформы важны
- как работает “Мои исключения”
7) Мини-ТЗ на личный кабинет (чтобы быстро внедрить)
Дашборд /cabinet/inozapret/
- Баланс кредитов
- Кнопки: “Текст / Файл / Ссылка”
- Последние 10 проверок (тип, дата, списание, результат)
История /cabinet/inozapret/history/
- фильтры (тип, период)
- статус (успешно/ошибка извлечения/отказ по лимитам)
- кнопка “повторить проверку” (удобно для агентств)
Отчёт /cabinet/inozapret/history/<ID>/
- таблица: слово/тип/контекст
- экспорт (CSV/XLSX)
- метаданные: дата, тип, объём, списание, URL/имя файла (без хранения файла)
8) Рекомендации по запуску “в 2 итерации”
Итерация 1 (быстрый запуск, минимум)
- лендинг
/tools/text-check/демо + анти-спам- регистрация
- кабинет: баланс + история
- пополнение (пакеты кредитов)
- платные лимиты
Итерация 2 (рост продаж)
- файлы + ссылки (URL)
- экспорт CSV/XLSX
- подписки
- корпоративные настройки allowlist доменов
- API (если есть запрос)
9) Шаблоны тарифных CTA (готовые формулировки)
- “Снять лимит на символы”
- “Включить проверку файлов и ссылок”
- “Получить экспорт отчёта”
- “Проверять сайт по URL в один клик”
- “Пакет для агентства: 30 000 кредитов”