Шаг 5. Первый запуск
Запустим всё локально. После этого шага у вас на машине будет работающий AI-продавец, с которым можно поговорить через WebSocket или Telegram.
1. Проверьте, что Docker-сервисы поднялись
docker compose ps
Должны быть две строки healthy — Postgres и Redis. Если нет — поднимите:
docker compose up -d postgres redis
2. Запустите сервер
Из корня проекта:
poetry run uvicorn app.api.main:app --reload --port 8070
В логах вы увидите примерно это:
INFO Initializing database...
INFO Loading niches and chat mappings from DB...
INFO Static MD bulk-load: wrote _core=42, etl-ua=8
INFO Building sales agent...
INFO Enabled channels: web (/ws/{user_id}), telegram (/webhook/telegram)
INFO Heartbeat loop scheduled
INFO Digest loop scheduled
INFO Application startup complete.
INFO Uvicorn running on http://0.0.0.0:8070
Если видите этот вывод — агент работает.
3. Проверьте healthcheck
В новом терминале (старый не закрывайте):
curl http://localhost:8070/health
Ответ:
{"status":"ok"}
4. Поговорите с агентом
Через WebSocket (web-канал)
Самый быстрый способ — через утилиту websocat:
# macOS
brew install websocat
# Подключение
websocat ws://localhost:8070/ws/test-user-1
После подключения отправьте:
{"text": "Привет"}
Anna ответит за 2–4 секунды.
Можно использовать piesocket.com/websocket-tester — браузерный WS-клиент. URL: ws://localhost:8070/ws/test-user-1.
Через Telegram
Если в .env заполнен TELEGRAM_BOT_TOKEN — найдите бота по username (тот, что выдал BotFather) и напишите /start.
Anna представится, начнёт диалог со стадии 1 (знакомство) и будет вести по воронке.
5. Загрузите тестовый каталог
Чтобы Anna могла отвечать на вопросы про конкретные товары — нужно залить каталог в RAG. В репо есть демо-каталог:
poetry run python scripts/ingest_catalog.py scripts/demo_catalog.json
Должен вывести:
Loaded 5 products from scripts/demo_catalog.json
Ingested 5 products into pgvector ✓
Теперь спросите у Anna "сколько стоит ваш товар" — она достанет из каталога и назовёт цену.
6. Прогоните воронку
Чтобы убедиться, что все 7 стадий работают, проведите тестовый диалог:
- "Привет" → стадия 1, знакомство
- "Я ищу решение для бизнеса" → стадия 2, квалификация
- "А что вы предлагаете?" → стадия 3, ценностное предложение
- "А под мою задачу подойдёт?" → стадия 4, выявление потребностей
- "Сколько стоит?" → стадия 5, презентация (вызов RAG)
- "Дорого" → стадия 6, работа с возражениями
- "Хорошо, беру" → стадия 7, закрытие
В логах сервера видно переключение стадий:
INFO Stage analyzer -> 5 (solution_presentation)
INFO Stage analyzer -> 6 (objection_handling)
INFO Stage analyzer -> 7 (close)
7. Посмотрите данные в БД
Подключитесь к Postgres и посмотрите, что записалось:
docker compose exec postgres psql -U sales -d sales_agent -c "SELECT id, current_stage, name, phone FROM leads ORDER BY id DESC LIMIT 5;"
А также:
# Все сообщения
docker compose exec postgres psql -U sales -d sales_agent -c "SELECT direction, channel, LEFT(text, 60) FROM message_log ORDER BY id DESC LIMIT 10;"
# История переходов стадий
docker compose exec postgres psql -U sales -d sales_agent -c "SELECT from_stage, to_stage, timestamp FROM lead_stage_events ORDER BY id DESC LIMIT 10;"
Если вы дочитали досюда и всё работает — у вас на машине крутится production-grade AI-продавец. Дальше — обучаем его под вашу нишу.
Если что-то не так
- Ошибка
OperationalError: connection refused— Postgres не поднят. Сделайтеdocker compose up -d postgres redis InvalidTokenот Anthropic — проверьте, что в.envправильныйANTHROPIC_API_KEYи баланс не нулевой- Telegram бот молчит — нужно настроить webhook, в локальной разработке это требует
ngrokили туннель Cloudflare. Для теста используйте polling-режим (см.app/channels/telegram.py) или сразу деплойте на VPS — это шаг 7 module 'numpy' has no attribute— устаревшая версия numpy, выполнитеpoetry update numpy- RAG возвращает пустоту — каталог не залит. Сделайте
poetry run python scripts/ingest_catalog.py scripts/demo_catalog.json