Кейси·8 жовтня 2026 р.·5 хв читання

Кейс: антиспам-бот для Telegram-групи

Як ми зробили бота, що прибирає вербування, крипту і ставки з груп на тисячі людей: формула з відкритими вагами, довіра до автора, захист від обходу і навчання.


Велика спортивна чи районна група в Telegram рано чи пізно стає мішенню: «дохід від 50 000 грн, пиши @нік», крипта, ставки, інтим. Адмін щоранку чистить стрічку руками, а спамери змінюють літери на латинські двійники і обходять прості фільтри. Ми зробили антиспам-бота, який вирішує цю задачу формулою, пояснює кожне своє рішення і не чіпає нормальних оголошень. Перша група, на якій він працює, спортивна спільнота Києва майже на пʼять тисяч учасників, друга падел-група зі своїм ботом.

Задача

  • Прибирати вербування, крипту, ставки, інтим і масові розсилки одразу після публікації.
  • Не чіпати звичайні оголошення групи, навіть якщо в них є гроші, нік і заклик написати в приватні.
  • Пояснювати кожне рішення адміну.
  • Давати можливість повернути людину одним натиском, якщо бот помилився.
  • Працювати в кількох групах одночасно.

Рішення

Формула з відкритими вагами

Вердикт рахує формула. Кожен сигнал має вагу: слова вербування, згадка крипти, підміна літер, заклик у приватні, відбиток розсилки. Сума множиться на довіру до автора, і рішення показується адміну рядком «за що саме». Модель тут свідомо не використовується: рішення про бан має бути однаковим на однакових даних і таким, що його можна пояснити і виправити.

Довіра важливіша за текст

Нормальне оголошення «шукаю двох гравців, зал 200 грн, пиши в лс @nick» за складом ознак майже не відрізняється від вербування: гроші, нік, заклик у приватні. Розводить їх історія автора. Новачок має множник 1, постійний учасник 0,3, старожил 0,15, адмін і білий список не перевіряються. Для зламаних акаунтів зі стажем є обмеження: коли спрацювала жорстка ознака, знижка за стаж не може бути більшою за певну межу.

Жорсткі ознаки як умова видалення

На живому потоці ми побачили, що реальне оголошення падел-групи «шукаю четвертого на завтра о 20:00, 900 грн з пари, пишіть в лс» набирало достатньо балів для видалення з баном. Сума грошей, нік, заклик у приватні і перше повідомлення описують будь-яке нормальне оголошення спортивного чату. Тепер без жодної жорсткої ознаки (вербування, крипта, інтим, підміна літер, розсилка) повідомлення ніколи не переходить у смугу видалення. Обійти це дописуванням слів неможливо: справжнє вербування завжди чіпляє жорстку ознаку, інакше воно нічого не пропонує.

Мова групи як стеля

Лексика самої групи, наприклад зал, гравці, турнір, корт, ракетка, у поєднанні з пошуком людей і без комерції ніколи не йде у видалення. Словник ведеться під кожну групу окремо. Після випадку, коли бот прибрав людину, яка шукала гравців у команду, ця стеля стала жорстким правилом, а бан перестав стирати історію акаунтів, у яких вона є.

Три смуги

  • Від 45 балів з жорсткою ознакою повідомлення видаляється, автор блокується, а тиха зачистка без картки лише від 70 балів.
  • Від 25 балів нічого не видаляється: адмін отримує картку з трьома кнопками: повернути як нормальне, видалити, забанити.
  • Нижче 25 балів повідомлення лишається.

Помилково прибране оголошення коштує групі дорожче, ніж спам, що прожив зайву хвилину, тому смуги несиметричні.

Захист від обходу

Спамери пишуть «д0х0д», ставлять латинську «а» замість кириличної, додають невидимі символи і розтягують слова пробілами. Нормалізація тексту прибирає ці трюки, а сам факт підміни стає окремим сигналом. Фрази перевіряються у двох нормалізаціях, бо повна заміна цифр на літери ламала правила з сумами. Правила пишуться основами слів, бо українська відмінюється: шаблон на «дохід» не ловить «доходу».

Навчання на рішеннях адміна

Кнопка «видалити» запамʼятовує відбиток тексту і набір слів. Та сама розсилка з переставленими реченнями ловиться за схожістю. Кнопка повернення ставить автора в білий список, знімає обмеження, повертає текст у групу окремим повідомленням і забуває вивчене, щоб помилка не повторювалась. Пересланий боту в особисті спам банить автора в усіх групах.

Кілька груп в одному процесі

Кілька ботів працюють в одному процесі зі спільним сховищем і спільним навчанням: текст, підтверджений у одній групі, одразу ловиться в іншій. Кожен бот знає свої картки і свої права, а збій токена одного бота не зупиняє модерацію в інших групах.

Керування

Бот стартує в режимі спостереження: нічого не видаляє, лише показує, що зробив би. Адмін вмикає активний режим, коли переконався в точності. Команди в особистих повідомленнях: статистика, перевірка тексту, режим, і перелік останніх десяти дій з кнопкою «повернути людину».

Як підключити бота

Адмін додає бота в групу з правами видаляти повідомлення і блокувати учасників і пише йому в особисті команду підтвердження. Бот упізнає адмінів групи, і керувати ним можуть лише ті, хто його додав, адміни групи або власник, заданий у налаштуваннях. Новому боту треба один раз натиснути Start в особистих повідомленнях: Telegram не дозволяє боту писати першим, тому до цього картки чекають у черзі і приходять одразу після старту.

Буває, що бота додають адміном ще до першого запуску сервера, і подія про додавання губиться. На цей випадок картки теж лягають у чергу до пʼятдесяти штук і приходять після підтвердження. Якщо бот ще не бачив жодної групи, він чесно просить написати будь-що в групу, щоб її впізнати.

Перші тижні роботи

Режим спостереження показав, що більшість карток влучні, і після доби власник групи ввімкнув активний режим з баном. Далі найцінніші правки прийшли з реального потоку: короткі наживки на кшталт «швидкі гроші, допоможу заробити» спершу набирали нуль балів, бо правила були написані під довгий текст із сумою і ніком, і для них додались окремі родини ознак. Свіже вербування з формулюваннями про навчання новачків і щотижневі виплати набирало лише смугу перегляду, і словник поповнився цими фразами.

Стек

Node.js 22 без зовнішніх залежностей, довге опитування Telegram Bot API замість вебхука, тому не потрібні ні домен, ні сертифікат. Дані в окремому томі Docker, токени лише в налаштуваннях сервера. 59 тестів без мережі на кожну зміну, і половина тестового корпусу це нормальні повідомлення групи: саме на них ловляться хибні спрацювання після правки ваг. Окремий тест стежить, щоб у кожного спаму була жорстка ознака, а в жодної норми її не було.

Що отримує адмін групи

  • Чисту стрічку без щоденного ручного прибирання.
  • Пояснення кожного рішення.
  • Повернення людини одним натиском.
  • Одну групу безкоштовно, кілька груп за підпискою. Деталі на сторінці антиспам для Telegram.

Уроки

Пояснюваність важливіша за розумність. Адмін довіряє боту, який каже, за що видалив.

Норма буває дорожчою за спам. Числовий запас між ними не працює, працює умова жорсткої ознаки.

Українська мова вимагає окремої уваги. Межі слів і класи символів у регулярних виразах JavaScript за замовчуванням знають лише латиницю, і на цьому правила кілька разів ставали сліпими.

Для яких груп підходить

Бот зроблений для відкритих спільнот на сотні і тисячі учасників, куди може зайти будь-хто: спортивні і районні чати, професійні спільноти, групи покупців і продавців. Словник групи налаштовується під її тему, тому оголошення, типові для конкретної спільноти, лишаються на місці.

Потрібен бот для вашої спільноти чи бізнесу

Робимо ботів для модерації, запису, замовлень і сповіщень у напрямах Telegram-боти і розробка чат-ботів.

Опишіть задачу у формі заявки. Оцінку дамо після брифу за робочий день.

Часті запитання

Чому бот працює без штучного інтелекту?+

Бо рішення про видалення і бан має бути пояснюваним і однаковим на однакових даних. Формула з відкритими вагами показує, за що саме прибрано повідомлення, і її легко виправити, якщо вона помилилась.

Чи видалить бот звичайне оголошення в групі?+

Бот видаляє лише повідомлення, у яких спрацювала хоча б одна жорстка ознака спаму, наприклад вербування чи крипта. Оголошення з грошима, ніком і закликом у приватні без жорсткої ознаки лишається в групі, а у спірних випадках адмін отримує картку з кнопками.

Чи чистить бот старі повідомлення?+

Telegram не дає ботам читати історію групи, тому бот перевіряє нові повідомлення. Пересланий адміну старий спам бот запамʼятовує і банить автора в усіх групах.

Потрібен такий агент у вашому бізнесі?

Проєктуємо, будуємо і запускаємо AI-агентів під ваш процес, зазвичай за 3-5 тижнів.