Блог разработчика 1С-Битрикс

Как запустить сервис проверки текстов, файлов и URL по 168-ФЗ, 53-ФЗ, 38-ФЗ с модулем sendev.inozapret

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

Для ускорения запуска мы подготовили несколько прикладных скриптов (под разные сценарии: тексты / файлы / ссылки), которые помогают реализовать эту идею «под ключ» — от формы до отчёта.

Как запустить сервис проверки текстов, файлов и URL по 168-ФЗ, 53-ФЗ, 38-ФЗ с модулем sendev.inozapret

Важно: прикладные скрипты для публичной части не публикуются в статье, потому что они распространяются на коммерческой основе (для клиентов, которые уже приобрели модуль). Передача возможна по договору (как отдельный пакет материалов) и/или в формате доп.услуги — например, размещение и настройка скриптов на вашем сайте также по договору. Ниже — архитектура, сценарии, рекомендации и «обвязка», которая превращает проверки в полноценный сервис.

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) Как правильно “упаковать” проверку в сервис на Битрикс

Самая практичная схема:

  1. Публичные страницы (UI):
    • /tools/text-check/ — проверка текстов
    • /tools/file-check/ — проверка файлов
    • /tools/link-check/ — проверка ссылок (страниц по URL)
  2. Правила доступа:
    • анонимным — демо-режим (маленькие лимиты),
    • авторизованным — расширенные лимиты,
    • клиентам с оплатой — большие лимиты и API.
  3. Монетизация:
    • кредиты / баланс,
    • подписки,
    • платные пакеты,
    • корпоративный доступ по ключу (API token).
  4. Техническая “обвязка” (вот её как раз часто нет — и именно она превращает скрипты в продукт):
    • тарификация и списание,
    • лимиты и анти-спам,
    • журналирование факта проверки,
    • админ-страница отчётов (кому, сколько, когда).

Ниже — готовые примеры такой обвязки (без раскрытия коммерческих скриптов проверки).

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. Подключаем монетизацию к вашим страницам проверки (идея без раскрытия скриптов)

Поскольку прикладные скрипты публичной проверки — коммерческая часть, в реальном проекте вы делаете так:

  1. Пользователь отправляет форму.
  2. До запуска проверки вы:
    • проверяете лимиты (Throttle),
    • считаете стоимость (Tariff),
    • пытаетесь списать кредиты (BalanceStorage::charge).
  3. Если списание успешно — запускаете проверку (ваш сценарный скрипт).
  4. Если нет — показываете “пополните баланс”.

Мини-пример вставки в публичную страницу (фрагмент):

<?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 инъекций).

Именно поэтому покупателю модуля выгоднее получить готовые сценарные скрипты на коммерческой основе (по договору и/или как дополнительную услугу с размещением и настройкой на сайте) и потратить время на то, что реально приносит деньги:

  • дизайн,
  • тарифы,
  • ограничение доступа,
  • кабинет пользователя,
  • продажи и продвижение.

Финал: как начать быстро

  1. Покупаете и устанавливаете модуль sendev.inozapret.
  2. Получаете (по договору / в рамках доп.услуги) несколько прикладных скриптов под нужные сценарии: проверка текстов, проверка файлов, проверка ссылок (страниц по URL).
  3. Подключаете их как публичные инструменты на сайте:
    • /tools/text-check/ — проверка текстов
    • /tools/file-check/ — проверка файлов
    • /tools/link-check/ — проверка ссылок
  4. Добавляете монетизацию (кредиты/подписки), лимиты и доступ (примеры выше).
  5. Запускаете сервис и продаёте проверки “за объём” — в логике 168-ФЗ, 53-ФЗ, 38-ФЗ и ваших внутренних требований.

Пример реализации сервиса проверки текстов, файлов и URL по 168-ФЗ с модулем sendev.inozapret

Ниже — готовая схема разделов, UX-поток и набор тарифов для сервиса проверки текстов / файлов / ссылок (URL) на 1С-Битрикс на базе sendev.inozapret.

1) Карта разделов сайта (структура страниц)

Публичная часть

  1. Лендинг сервиса
    • /inozapret/
    • Цель: объяснить пользу, показать демо, собрать регистрацию/оплату.
    • Блоки: что проверяем, как работает, примеры отчётов, тарифы, FAQ.
  2. Инструменты
    • /tools/text-check/ — проверка текстов
    • /tools/file-check/ — проверка файлов
    • /tools/link-check/ — проверка ссылок (страниц по URL)
  3. Тарифы
    • /inozapret/prices/
    • Таблица планов + калькулятор “сколько стоит проверка”.
  4. FAQ / Документация
    • /inozapret/help/
    • Пример: “почему PDF не распознался”, “как работают исключения”, “что такое словоформы”.
  5. Публичный статус / ограничения (опционально)
    • /inozapret/status/
    • Лимиты, состояние сервиса, рекомендации.

Личный кабинет пользователя

  1. Главная кабинета (дашборд)
    • /cabinet/inozapret/
    • Баланс/пакет, быстрые кнопки “Проверить текст/файл/ссылку”, последние проверки.
  2. Пополнение / планы
    • /cabinet/inozapret/billing/
    • Выбор плана, покупка пакета, история платежей.
  3. История проверок
    • /cabinet/inozapret/history/
    • Фильтры: период, тип проверки, статус, количество “срабатываний”.
  4. Отчёт по проверке (детальная страница)
    • /cabinet/inozapret/history/<ID>/
    • Таблица нарушений, контексты, экспорт (CSV/XLSX), метаданные.
  5. Профиль / настройки
    • /cabinet/inozapret/settings/
    • Персональные лимиты (если нужно), whitelist пользователя (если вы решите хранить его глобально), API-ключ (для тарифа PRO).

Админ-панель (для владельца сервиса)

  • “Тарифы и лимиты”
  • “Пользователи и балансы”
  • “Журнал проверок”
  • “Ошибки извлечения/парсинга”
  • “Разрешённые домены для URL (allowlist)”
  • “Статистика (выручка/конверсия/нагрузка)”

2) UX-поток: как пользователь проходит путь

Поток А: Гость (демо → регистрация)

  1. Попадает на /inozapret/
  2. Нажимает “Попробовать бесплатно”
  3. Переходит на /tools/text-check/ (демо)
  4. После проверки видит:
    • результат + ограничение (“демо: до N символов”)
    • CTA: “Снять ограничения” / “Проверять файлы и ссылки”
  5. Регистрация → кабинет /cabinet/inozapret/
  6. Выбор плана → пополнение → повторная проверка без демо-ограничений

Поток B: Авторизованный без оплаты (фремиум)

  1. /cabinet/inozapret/ показывает “бесплатный лимит” (например, 30 кредитов/мес)
  2. Проверки работают, но:
    • ниже лимиты
    • нет экспорта или экспорт ограничен
  3. При попытке проверить большой файл/URL → “Недостаточно лимита” → upsell на /cabinet/inozapret/billing/

Поток C: Платный пользователь (кредиты/подписка)

  1. Оплачивает пакет/подписку
  2. Проверяет тексты/файлы/ссылки
  3. Сохраняет отчёты в “Истории”
  4. Делится ссылкой на отчёт внутри организации (опционально)

Поток D: PRO/API (если будете делать интеграции)

  1. В кабинете генерирует API-ключ
  2. Дёргает API-методы проверки (текст/URL/файл)
  3. Получает отчёт 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) Что показывать на лендинге, чтобы покупали (контент-блоки)

  1. Три сценария в один сервис
    • “Проверка текстов”
    • “Проверка файлов”
    • “Проверка ссылок (URL)”
  2. Понятная тарифная логика
    • “Оплата за объём” (символы/MB/кредиты)
    • “Пакеты и подписки”
  3. Примеры отчётов
    • скрин “найдено N нарушений”
    • контекст + подсветка
    • экспорт в CSV/XLSX (для платных)
  4. Безопасность URL-проверки
    • 3–4 пункта простым языком: allowlist, запрет локальных адресов, лимит редиректов, лимит размера ответа
  5. 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 кредитов”
Теги: 168-ФЗ, 53-ФЗ, 38-ФЗ, sendev.inozapret, проверка текстов, проверка файлов, проверка URL, 1С-Битрикс, монетизация сервиса, публичный сервис проверки, модуль проверки контента


Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

от 20 000 рублей
Разработка дополнительных модулей для 1С-Битрикс, расширение функционала, внедрение любых решений, требующихся для выполнения ваших бизнес-задач.

* стоимость зависит от конкретной задачи, ее объема и сложности выполняемых работ.

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная