Три пропущенных символа в адресе — и бот отвечает 404

Автор: Алексей Пасечник (Arhellist). Канонический адрес: https://arhellist.ru/blog/tri-propuschennyh-simvola-v-adrese-i-bot-otvechaet-404/.

Опубликовано: 2026-10-27.

Это тот самый «феерический провал на тривиальной вещи», о котором я писал во вступлении.

Предыстория. Мы подняли локальный стенд — полную копию платформы на одной машине: кабинет, база, почта, боты. Агенты общаются с нейросетью через шлюз — промежуточный сервис с OpenAI-совместимым API, который принимает запросы и отправляет их нужной модели. У каждого рабочего пространства свой адрес шлюза.

Ожидание: всё поднялось, значит работает. Кабинет открылся, регистрация прошла, бот Элис создан. Пишу «привет». Индикатор «печатает» крутится и гаснет. Ответа нет.

Захожу в логи — 404, «не найдено». Начинается классика: перепроверяю ключ доступа — верный. Перезапускаю контейнеры — то же самое. Подозреваю сеть внутри стенда — запросы доходят. Подозреваю модель — с другой машины она отвечает. Всё по отдельности работает, а вместе — нет.

Перелом случился, когда я перестал смотреть на ответ и посмотрел на сам запрос, полностью, с адресом. У OpenAI-совместимых API базовый адрес принято указывать вместе с версией — с /v1 на конце, а клиент сам дописывает к нему путь вроде /chat/completions. В настройках рабочего пространства базовый адрес был записан без /v1. Клиент добросовестно склеивал адрес, запрос уходил на несуществующий путь, и шлюз честно отвечал 404.

Почему это вообще стало возможно? Потому что формат базового адреса нигде не был зафиксирован и не проверялся при сохранении: в одних местах его писали с версией, в других — без. Ошибка не кричала, она тихо превращала каждого бота в молчуна.

Что доработали. Базовый адрес шлюза рабочего пространства теперь формируется в одном месте и всегда с /v1, а не задаётся вручную в нескольких. И всё это записали в инструкцию по разворачиванию стенда — как собрать, поднять и где искать интерфейс, — чтобы следующему человеку не пришлось повторять мои полдня.

Урок: когда «всё работает по отдельности, но не вместе», смотрите на стыки. Самые долгие поиски — у самых коротких ошибок.

Какая самая короткая ошибка отняла у вас больше всего времени?

#Элис #ЭлисAI #факапы

О чём пишем

  • Архитектура и эксплуатация веб-продуктов
  • AI-агенты, RAG и практические контуры
  • Кейсы LMS, маркетплейсов и защищённых коммуникаций
  • Заметки по Next.js, Node.js, PostgreSQL и realtime