Уявіть ситуацію: ви створили бота з AI-функціоналом, підключили платні API, і раптом хтось сторонній отримує доступ до вашого бота. Результат? Ваші токени витрачаються, баланс тане, а ви навіть не розумієте, що сталося.
Раніше для захисту від таких ситуацій доводилося писати спеціальний код-обмежувач. Але з появою no-code платформ типу n8n все стало набагато простіше. Тепер можна легко обмежити доступ до бота по ID користувача, username або будь-яким іншим параметрам.
У цій статті розберемо, як створити систему контролю доступу для Telegram-бота буквально за кілька хвилин.
Чому це критично важливо
Коли ви створюєте бота, точка входу відкрита для всіх. Якщо немає перевірки на валідність користувача, будь-хто може отримати доступ до функціоналу. А якщо ваш бот використовує платні API або AI-сервіси — це прямий шлях до втрати коштів.
Наше завдання — поставити “охоронця біля дверей”, який перевірятиме, чи дійсно ця людина має право на доступ до інформації та функцій бота.
Архітектура системи контролю доступу
Робочий процес складається з п’яти ключових кроків:
- Отримання даних — користувач надсилає повідомлення в Telegram (може бути Slack, Gmail або будь-яка інша точка входу)
- База даних користувачів — зберігаємо список дозволених/заборонених користувачів
- Перевірка доступу — звіряємо користувача з базою
- Логіка розгалуження — визначаємо, що робити далі
- Відповідь користувачу — надсилаємо підтвердження або відмову
Базу даних можна вести у внутрішніх таблицях n8n або використовувати зовнішні рішення: Google Таблиці, Notion, Airtable, Supabase — будь-яка база даних підійде.
Крок 1: Створюємо Telegram-тригер
Починаємо з додавання тригера, який буде запускати весь workflow при надходженні повідомлення.
У n8n:
- Вибираємо Telegram
- Обираємо тип вузла: Trigger (не дії з повідомленнями чи файлами)
- Конкретно нам потрібен On Message — він спрацьовує при надходженні повідомлень у певний чат
Тепер створюємо самого бота через BotFather:
- Відкриваємо @BotFather у Telegram
- Команда
/createbot - Вводимо назву, наприклад: Test Permission
- Вводимо username: test_permission_bot
- Копіюємо токен авторизації
Важливо про безпеку: Не зберігайте відкриті токени безпосередньо у workflow — вони можуть бути доступні для парсингу. Найкращий варіант — створювати credentials (облікові дані) у n8n.
Додаємо токен у n8n як credential і тестуємо:
- Запускаємо Execute Workflow
- Переходимо в бота
- Надсилаємо команду
/start
Якщо все налаштовано правильно, побачите повідомлення “Workflow executed successfully” і всю інформацію про відправника: хто написав, в який чат, і який текст повідомлення.
Крок 2: Створюємо базу даних користувачів
Використовуємо стандартні таблиці n8n для зберігання списку дозволених користувачів.
Створюємо таблицю test_permission з двома полями:
- name (string) — username користувача
- access (string) — статус доступу
Заповнюємо тестовими даними:
- user_one → granted
- user_two → denied
- ваш_username → denied (для початку, щоб протестувати заборону)
Крок 3: Налаштовуємо перевірку доступу
Додаємо вузол Data Table з дією Get Rows:
- Вибираємо таблицю test_permission
- Встановлюємо ліміт на кількість результатів (наприклад, 50)
- Додаємо умову пошуку: поле name має дорівнювати username з Telegram
У полі пошуку вибираємо username користувача з попереднього вузла — він автоматично підтягнеться з даних тригера.
Тестуємо — якщо все налаштовано правильно, таблиця знайде ваш username і поверне відповідний статус доступу.
Крок 4: Додаємо логіку розгалуження (Switch)
Після отримання даних з таблиці потрібно визначити, що робити далі. Для цього використовуємо вузол Switch.
Налаштування:
- Перевіряємо поле access з таблиці
- Створюємо гілки для різних значень: granted (дозволено), denied (заборонено)
Важливо: Регістр має значення! “Granted” і “granted” — це різні значення. Будьте уважні під час налаштування.
Зручна фішка Switch: можна давати назви гілкам. Рекомендую використовувати ті самі назви, що й значення перевірки — так легше орієнтуватися.
Чому Switch, а не IF? Switch — найбільш універсальний вузол для розгалуження. Він дозволяє додавати необмежену кількість умов і зручно їх називати, що критично для складних workflow.
Крок 5: Надсилаємо відповідь користувачу
Для кожної гілки створюємо окремий вузол Telegram з дією Send Message.
Налаштування для гілки “denied”:
- Chat ID — беремо з тригера (саме chat ID, а не client ID)
- Text — текст повідомлення, наприклад: “Sorry, access denied”
Критична помилка: Коли створюєте новий вузол Telegram, n8n може автоматично присвоїти інший credential. Обов’язково перевірте, що використовується правильний токен бота.
Прибираємо attribution
За замовчуванням n8n додає до повідомлень текст про те, що воно згенероване через n8n. Щоб прибрати:
- Відкрийте налаштування вузла Telegram
- Знайдіть опцію Add files and attribution
- Вимкніть attribution
Тестуємо: надсилаємо “Привіт” боту → отримуємо “Sorry, access denied” без додаткового тексту.
Надаємо доступ дозволеному користувачу
Для гілки “granted” створюємо аналогічний вузол з повідомленням: “Супер, доступ дозволено!”
Щоб протестувати цю гілку:
- Заходимо в таблицю
- Змінюємо ваш статус з denied на granted
- Надсилаємо повідомлення боту
Результат: “Супер, доступ дозволено!” — і далі користувач може взаємодіяти з основним функціоналом бота.
Де використовувати цю систему
Ця проста, але потужна схема захисту критично важлива для:
- AI-ботів — захист токенів OpenAI, Anthropic, Google AI
- Ботів з платними API — обмеження доступу до коштовних інтеграцій
- Внутрішніх корпоративних ботів — доступ тільки для співробітників
- Beta-тестування — контроль списку тестувальників
- Клієнтських сервісів — доступ лише для активних підписників
Ключові висновки
Проста система контролю доступу вирішує критичну проблему — захищає ваші токени та бюджет від несанкціонованого використання.
Основні переваги підходу:
- Легко налаштувати без знання коду
- Гнучке управління доступом через базу даних
- Можна швидко додавати/видаляти користувачів
- Працює з будь-якою точкою входу (Telegram, Slack, Gmail)
- Підходить для різних баз даних (внутрішні таблиці, Google Sheets, Airtable, Supabase)
На що звернути увагу:
- Завжди використовуйте credentials замість відкритих токенів
- Перевіряйте регістр літер в умовах Switch
- Не забувайте вибирати правильний credential для кожного вузла
- Chat ID та Client ID — це різні значення
Ця базова система захисту має стати обов’язковою частиною будь-якого публічного бота, особливо якщо він використовує платні сервіси чи має доступ до конфіденційної інформації.



