Друкарня від WE.UA

Архітектура Telegram-ботів: Як відійти від спагеті-коду до скінченних автоматів (FSM)

Написати найпростішого Telegram-бота під силу навіть джуніору в перший день знайомства з API. Проблеми починаються тоді, коли бот виходить за межі функції «відлуння» і починає запитувати в користувача дані, обробляти кроки авторизації, приймати оплату або інтегруватися з внутрішніми базами даних.

Якщо писати таку логіку лінійно, проєкт миттєво перетворюється на нескінченний ланцюжок конструкцій if/else або вкладених switch. Код починає залежати сам від себе, найменша зміна в одному кроці ламає сусідню гілку, а дебаг перетворюється на пошук голки в стозі сіна. Найгірше те, що такий «дикий» бот падає або плутає сесії, як тільки навантаження зростає хоча б до сотні одночасних користувачів.

Ми зіткнулися з цією архітектурною задачею на повну силу, коли проєктували стійке до відмов ядро для нашої платформи автоматизації та CRM-ботів. Рішення тут давно придумане в класичній теорії обчислювальних систем — це патерн FSM (Finite State Machine), або скінченний автомат.

Як «думає» правильний бот

Суть FSM максимально проста: користувач у кожен конкретний момент часу може перебувати лише в одному чітко визначеному стані. Бот не намагається вгадати контекст за текстом повідомлення — він дивиться на поточний статус юзера в базі.

Типовий ланцюжок станів для оформлення замовлення виглядає так: IDLE (очікування) → GREETING (привітання) → COLLECT_NAME (введення імені) → COLLECT_PHONE (введення телефону) → CONFIRM (підтвердження) → DONE (завершено).

Кожному стану відповідає суворо своя ізольована функція-обробник. Перехід на наступний етап можливий лише за умови виконання конкретного тригера (наприклад, юзер ввів валідний номер телефону — автомат перемкнув його на крок CONFIRM).

У чому головні плюси такого підходу для розробника?

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

  2. Масштабованість без болю. Потрібно додати крок із вибором міста між введенням імені та телефону? Ви просто реєструєте новий стан і змінюєте вектор переходу у двох функціях. Решта коду навіть не «дізнається» про зміни.

  3. Стабільність під навантаженням. Стани користувачів не потрібно зберігати в оперативній пам'яті інстансу бота (це перша причина падіння процесів). Вони легко виносяться у зовнішнє швидке сховище — наприклад, у Redis або легковаговий SQLite. Бот стає stateless: йому все одно, обробляти 10 людей чи 10 000. Якщо сервер перезавантажиться, користувач продовжить спілкування рівно з того символу, на якому зупинився.

Висновок

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

Якщо ви зараз проєктуєте складні сценарії автоматизації, інтеграції з CRM або кастомні воронки, одразу закладайте під капот FSM — це збереже ваші нерви та бюджет на підтримку.

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

Статті про вітчизняний бізнес та цікавих людей:

  • Чохли для iPhone 15: повний гід по кольорах, матеріалах і виробниках

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

    Теми цього довгочиту:

    Чохли Для Iphone
  • Як побудована програма Meest China Academy

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

    Теми цього довгочиту:

    Meest
  • Які технології використані в Айфон 17

    Айфон 17 поєднує OLED-дисплей із частотою до 120 Гц, чип A19, дві камери Fusion 48 Мп і швидке заряджання через USB-C. У COMFY можна купити Айфон 17 з накопичувачем на 256 або 512 ГБ, вибравши конфігурацію відповідно до обсягу фото, відео та застосунків

    Теми цього довгочиту:

    Iphone 17
  • Як вибрати вживаний iPhone: коротке керівництво для розумної покупки

    Вторинний ринок смартфонів Apple активно зростає, і питання, як вибрати вживаний iPhone, стає актуальним для дедалі більшої кількості користувачів. Правильний підхід дозволяє отримати бу iPhone з актуальною iOS і доброю камерою за помітно нижчу ціну, ніж у нових пристроїв.

    Теми цього довгочиту:

    Iphone
  • Як подолати жіночу безплідність за допомогою донорських яйцеклітин

    Діагноз "безпліддя" рідко звучить як вирок одразу. Для багатьох жінок саме в цей момент вперше звучить словосполучення "донорські яйцеклітини" — і це часто не кінець шляху до материнства, а якраз новий, реальний шанс.

    Теми цього довгочиту:

    Донорство
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Володимир
Володимир@VGRB_EXPERT

IT-рішення для бізнесу

19Довгочити
179Перегляди
На Друкарні з 27 травня

Більше від автора

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: