Найти в Дзене
Закреплено автором
Покупайте СтеллыИ дарите их за контент
3 недели назад
 • Вы подписаны

Кнопка “Спам” в дашборде — и бот больше никогда не пропустит мусор. В Commety v5.4 нет ручных регулярных выражений и сложных ML-классификаторов. Есть одна кнопка, которая учит бота за 2 секунды. Рассказываю, как устроен самообучающийся фильтр спама изнутри. Проблема: почему обычные фильтры не работают В Telegram-каналах спам мутирует быстрее, чем вы успеваете писать правила. Вчера это было «купить подписчиков», сегодня — «заработок на крипте без вложений», завтра — эмодзи + ссылка в био. Регулярки устаревают за день. ML-классификатор требует разметки тысяч примеров и переобучения. А админ канала хочет просто нажать кнопку и забыть о проблеме навсегда. Решение: `$addToSet` + мгновенный кэш Вместо сложного ML я сделал умную базу правил, которая обновляется в реальном времени. Механизм работает так: 1. Админ видит мусорный лид в дашборде. 2. Нажимает кнопку «☠️ Спам». 3. Система извлекает слова из текста лида (токенизация + стоп-слова). 4. Добавляет их в массив `stopWords` через оператор `$addToSet` (игнорирует дубликаты автоматически). 5. Принудительно перезагружает RAM-кэш каналов (`loadChannelsToCache()`). 6. Удаляет лид из БД. Результат: Через 2 секунды бот игнорирует *любое* сообщение, содержащее эти слова. Без перезапуска сервера. Без деплоя. Без инженера. Код роута /mark-spam (Node.js + Mongoose) router.post('/mark-spam', authMiddleware, async (req, res) => {  const { leadId, channelId } = req.body;  // 1. Извлекаем текст лида  const lead = await Lead.findById(leadId);  if (!lead) return res.status(404).json({ error: 'Lead not found' });  // 2. Токенизация: убираем пунктуацию, приводим к lowerCase, фильтруем стоп-слова  const words = tokenize(lead.text);  // 3. Атомарное обновление: $addToSet добавляет только уникальные значения  await Channel.updateOne(   { _id: channelId },   { $addToSet: { stopWords: { $each: words } } }  );  // 4. Мгновенное обновление RAM-кэша (железное правило #25)  await loadChannelsToCache();  // 5. Удаляем лид  await Lead.deleteOne({ _id: leadId });  res.json({ success: true, addedWords: words.length }); }); Почему именно $addToSet, а не $push? -  $push добавляет элемент даже если он уже есть → массив раздувается, проверка замедляется. -  $addToSet проверяет наличие перед добавлением → O(1) для уникальных значений, никаких дубликатов. -  При 10 000+ стоп-слов разница в производительности критична. Железное правило #25 В документации Commety v5.4 есть правило, которое нельзя нарушать: Любое изменение `stopWords` через интерфейс обязано завершаться принудительным вызовом loadChannelsToCache(). Иначе бот продолжит использовать старый кэш и пропустит спам. Это не рекомендация. Это хардкод. Если вы забудете этот вызов — фильтр не заработает до следующего перезапуска сервера. Результат в цифрах - Время обучения: 2 секунды (от клика до защиты) - Ложные срабатывания: < 0.3% (благодаря токенизации и контекстной проверке) - Нагрузка на БД: минимальная (один updateOne + один deleteOne) - Затраты на ML-инженера: 0 ₽ Что дальше? В следующем посте расскажу честную историю факапа: как я чуть не получил вечный бан Telegram из-за ошибки в очереди ответов. Спойлер: OOM Killer был не самой страшной проблемой. А пока вопрос к вам: Как вы фильтруете спам в своих каналах? Регулярки, модераторы, сторонние боты или вообще не паритесь? Пишите в комментариях — отвечу каждому и поделюсь опытом. 👇 #telegram #автоматизация #разработка #nodejs #mongodb #saas #индиразработчик

1 месяц назад
 • Вы подписаны

Почему я больше не использую API для ИИ в Telegram-ботах (и как это сэкономило 98% бюджета). При 500+ лидах в день счёт за OpenAI/Anthropic API достигал 30 000 ₽/мес. Задержки ответов — до 3 секунд. Данные улетают на чужие серверы. White-Label невозможен: клиенты не хотят видеть сторонние API в логах. Решение: локальная LLM на собственном VPS. Ноль затрат на запросы, полный контроль, независимость. Стек и железо 🔹 Ollama — запуск LLM двумя командами. 🔹 Mistral 7B (q4_K_M) — баланс скорости и качества. Потребление RAM: 2.2 ГБ. 🔹 VPS Hetzner CX21 — 2 vCPU, 4 GiB RAM, 40 ГБ SSD. Стоимость: ~500 ₽/мес. Архитектура в Commety v5.4 1. RAM-кэш для памяти тредов. Без кэша каждый запрос к ИИ был бы изолированным. Кэш склеивает историю диалога и отправляет ИИ контекст, а не одиночный вопрос. channelsCache[channelId] = {  lastReplyTime: Date.now(),  callbackText: "Сейчас подумаю...",  threadHistory: [] // последние 3 сообщения юзера и бота } 2. Гибридная очередь ответов Минимальная задержка между ответами — 12 сек (lastReplyTimeByChannel). Бот не висит при долгой генерации, запросы ставятся в очередь. Защита от банов Telegram и перегрузки сервера. 3. Управление через .env LOCAL_AI_URL=http://localhost:11434/api/generate LOCAL_AI_MODEL=mistral:7b Смена модели или эндпоинта — без redeploy. Результат 🔹 Стоимость генерации: 0 ₽/запрос 🔹 Среднее время ответа: 1.8 сек (было 2.7 сек на API) 🔹 Полная независимость от внешних провайдеров В следующем посте разберу White-Label архитектуру: почему ctx.reply() не работает с чужими токенами и как делать прямой fetch к Telegram API. Вы пробовали запускать локальные нейросети в продакшене? Какая модель и сервер? Или всё ещё на API? Пишите в комментариях — отвечу каждому. 👇

1 месяц назад
 • Вы подписаны

Против всех: почему я делаю SaaS-продукты в одиночку, а не ищу миллионы инвестиций. Привет! Меня зовут Евгений Костантинович, мне 52, и я — Индустрия одного разработчика. В мире, где для запуска стартапа принято нанимать команду из 20 человек, искать инвесторов и снимать офис в Москва-Сити, я пошёл по другому пути. Я строю цифровые продукты **в одиночку**: от архитектуры и кода до маркетинга и техподдержки. Почему «Индустрия одного»? Потому что сегодня один разработчик с ноутбуком, нейросетями и правильной архитектурой способен заменить целый IT-отдел. И я доказываю это на практике каждый день. 🚀 Что я строю прямо сейчас? Мой флагманский проект на сегодня — **Commety**. Это B2B SaaS-платформа для интеллектуального захвата лидов из Telegram. Внутри работает локальный ИИ (да, без дорогих API и облаков), который ведёт диалог с пользователями как живой менеджер: помнит контекст переписки, сам учится отличать спам от реальных клиентов и может работать под чужим брендом (White-Label). Но Commety — это только вершина айсберга. В моей «индустрии» постоянно рождаются новые инструменты, скрипты и микросервисы, которые я создаю для себя и для клиентов. 📂 Что будет на этом канале? Я не буду выкладывать сюда корпоративные пресс-релизы и скучные презентации. Здесь будет **внутренняя кухня соло-фаундера** без прикрас: 🔹 Цех разработки: Разборы архитектуры. Как я запускаю локальные нейросети (Ollama) на VPS за 500 рублей и борюсь с OOM Killer, когда оперативка кончается на самом интересном месте. 🔹 Отдел продаж: Как я продвигаю свои проекты без бюджета на рекламу. Какие каналы работают, а какие сливают время в трубу. 🔹 Совет директоров: Честные цифры. Юнит-экономика, стоимость серверов, ошибки в ценообразовании и первые реальные деньги от клиентов. 🔹 Факапы: Истории о том, как я случайно ронял продакшн, терял данные или тратил две недели на фичу, которая никому не оказалась нужна. 🤝 Для кого этот канал? Если вы: - Разработчик, который мечтает уйти из найма и делать свои продукты - Фаундер, который строит бизнес без инвесторов (bootstrapping) - Маркетолог или владелец Telegram-канала, которому интересна автоматизация и ИИ - Просто любите читать истории про «внутрянку» IT-проектов Тогда устраивайтесь поудобнее. Здесь не будет успешного успеха и мотивационных цитат из пабликов. Здесь будет код, серверы, метрики и реальность соло-разработчика. Подписывайтесь, чтобы не пропустить первый большой разбор архитектуры Commety и рассказ о том, как я заставил нейросеть работать бесплатно и без облаков. А пока напишите в комментариях: вы работаете в найме или уже пробовали делать свой проект? Мне правда интересно, кого здесь больше. 👇

Покупайте СтеллыИ дарите их за контент