Розробка AI Gateway для Telegram UserBots: Реальні проблеми та рішення

Досвід створення системи AI-асистентів для знайомств з інтеграцією Laravel + Node.js + Queue

Вступ

Під час розробки AI Gateway для Telegram UserBots ми зіткнулися з низкою специфічних проблем, які не описані в документації. Ця стаття розповідає про реальний досвід вирішення проблем синхронізації, queue механізмів та специфіки UserBot API.

Архітектура проекту

Стек технологій:

  • Frontend: React + TypeScript
  • Backend: Laravel (PHP 8.3)
  • AI Gateway: Node.js + TypeScript + Prisma
  • Queue: Laravel Database Queue
  • UserBots: MadelineProto + Docker
  • База даних: PostgreSQL (AI Gateway) + MySQL (Laravel)

Основний workflow:

Проблема 1: Ненадійна синхронізація між сервісами

Проблема

Коли користувач оновлював personality бота через фронтенд, дані зберігалися в Laravel, але синхронізація з AI Gateway часто не відбувалася. Фронтенд отримував success: true, але бот продовжував працювати зі старими налаштуваннями.

Код що НЕ працював:

Рішення: Queue + Retry механізм

Реалізували двоетапну синхронізацію:

  1. Immediate Sync – миттєва спроба
  2. Queue Fallback – додавання в чергу при невдачі

Job з exponential backoff:

Проблема 2: Queue Worker в Docker

Проблема

Laravel queue:work в Docker контейнері “завмирав” через 1-2 години роботи. Завдання накопичувалися, але не оброблялися.

Рішення: Окремий контейнер + Supervision

docker-compose.yml:

Також додали автоматичний retry через cron:

Проблема 3: UserBot Polling vs Real-time

Проблема

UserBots не мають webhook’ів як звичайні боти. Довелося реалізувати polling через MadelineProto, що призвело до затримок у відповідях.

Неефективний підхід:

Рішення: Розумний polling

Оптимізований cron job:

Проблема 4: Мовні налаштування ігноруються

Проблема

Бот зі встановленою мовою "language": "ru" відповідав українською, незалежно від налаштувань.

Рішення: Посилені мовні інструкції

Було (слабкі інструкції):

Стало (посилені інструкції):

Проблема 5: Гендерні особливості для знайомств

Проблема

Всі боти спілкувалися однаково, незалежно від гендеру та призначення (знайомства vs загальне спілкування).

Рішення: Адаптивні personality

Структура даних:

Генерація промптів:

Проблема 6: TypeScript типи не синхронізувалися

Проблема

При додаванні нових полів в Laravel API, TypeScript фронтенд видавав помилки про невідомі властивості.

Рішення: Синхронізація інтерфейсів

AIService.tsx:

Проблема 7: Персональна пам’ять не працювала

Проблема

personalFacts: 0 в логах, факти про користувачів не зберігалися.

Код з помилкою:

Рішення: Виправлення логіки пам’яті

Практичні висновки

Що працює добре:

  1. Queue система – надійно обробляє синхронізацію
  2. Docker контейнери – ізоляція процесів
  3. Exponential backoff – автоматичне відновлення
  4. Status tracking – завжди знаємо стан системи

Що потрібно покращити:

  1. Real-time polling – UserBot API обмежений
  2. Monitoring – потрібно більше метрик
  3. Scaling – при рості навантаження

Уроки для інших проектів:

  1. Завжди тестуйте повний workflow – не окремі компоненти
  2. Додавайте retry механізми відразу, не після проблем
  3. Логируйте все що стосується синхронізації між сервісами
  4. TypeScript типи повинні відповідати API структурам
  5. Docker queue workers потребують спеціального налаштування

Підсумок

Розробка AI Gateway для UserBots виявилася складнішою за очікування через специфіку Telegram API та необхідність надійної синхронізації між сервісами. Основні проблеми вирішилися через queue систему з retry механізмом та детальне логування всіх операцій.

Результат: стабільна система AI-ботів для знайомств з гендерними особливостями, яка обробляє 1000+ повідомлень на день з 99% uptime.

Опубліковано в Laravel

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *