Шаг 6 из 7

Шаг 6. Настройте свою нишу

Нужно дать Anna три вещи: persona (кто она и от чьего имени говорит), каталог (что продаёт) и скрипты (как закрывает возражения).

Что такое «ниша»

Ниша — это изолированная конфигурация продавца под конкретный бизнес. На одном сервере можно держать десятки ниш одновременно — каждая со своей persona, своим каталогом и своей памятью клиентов. Именно это позволяет агентству продавать «AI-продавцов под ключ» сразу нескольким клиентам.

Способ 1. Авто-онбординг по сайту (магия)

Самый быстрый способ. Anna сама прочитает сайт клиента, разберёт PDF-прайсы, извлечёт стиль и сгенерирует persona. Подходит, когда у клиента есть нормальный сайт.

В Telegram (от админа) напишите боту:

/setdemo https://client-website.com

За 1–3 минуты Anna:

  1. Скраулит сайт через trafilatura
  2. Извлечёт PDF-файлы (прайсы, спецификации)
  3. Прогонит изображения через Claude Vision
  4. Сгенерирует TenantPersona через Haiku
  5. Загрузит чанки в pgvector
  6. Привяжет текущий чат к новой нише

Готово. Дальше можно сразу диалог: "Привет" — она представится от имени бренда клиента.

Способ 2. Вручную через tenants.py

Если хотите полный контроль над persona — отредактируйте app/core/tenants.py:

TENANTS["my-niche"] = TenantPersona(
    slug="my-niche",
    salesperson_name="Олена",
    company_name="Ваша Компанія",
    company_business=(
        "Описание бизнеса в 2-4 предложениях. Что производите/продаёте, "
        "география, ключевые продукты, цены диапазон."
    ),
    company_values=(
        "Прозрачность, забота о результате, экспертность."
    ),
    conversation_purpose=(
        "Закрыть на покупку или хотя бы на бесплатную консультацию. "
        "Каждое сообщение — один CTA."
    ),
    default_language="uk",
    site_url="https://your-site.com",
    tone_notes=(
        "Дружелюбно, на 'ти'. Без эмодзи. Короткие сообщения. "
        "Используй живые сравнения и кейсы."
    ),
)

Чтобы привязать конкретный Telegram-чат к нише, добавьте в CHAT_TENANT_MAP:

CHAT_TENANT_MAP["123456789"] = "my-niche"

Перезапустите сервер — изменения подхватятся.

Способ 3. Через базу данных (production)

В проде ниши хранятся в таблице niches — переживают рестарты контейнера.

docker compose exec postgres psql -U sales -d sales_agent
INSERT INTO niches (
  slug, salesperson_name, company_name, company_business,
  company_values, conversation_purpose, default_language,
  tone_notes
) VALUES (
  'my-niche',
  'Олена',
  'Ваша Компанія',
  'Описание бизнеса...',
  'Ценности...',
  'Цель разговора...',
  'uk',
  'Стиль...'
);

INSERT INTO chat_niche_map (chat_id, slug)
VALUES ('123456789', 'my-niche');

Каталог товаров

Anna ищет товары через RAG. Подготовьте каталог в JSON или CSV.

Формат JSON

[
  {
    "id": "SKU-001",
    "name": "Модульний дім «Лофт-1»",
    "category": "Модульні будинки",
    "price": 1400000,
    "currency": "UAH",
    "description": "Каркасний модульний дім 18м² з повною оздобою. Готовність 35 днів.",
    "specs": {
      "area_m2": 18,
      "rooms": 1,
      "delivery_days": 35,
      "includes": ["вікна", "двері", "кондиціонер", "меблі"]
    }
  },
  {
    "id": "SKU-002",
    "name": "Сауна-Барн",
    "category": "Модульні будинки",
    "price": 1900000,
    "currency": "UAH",
    "description": "...",
    "specs": {...}
  }
]

Загрузка

poetry run python scripts/ingest_catalog.py path/to/your-catalog.json

Каталог автоматически разбивается на чанки, векторизуется через OpenAI и сохраняется в pgvector с привязкой к нише.

Скрипты продаж и возражения

Anna знает методологии SPIN и MEDDPICC из коробки — они уже залиты в Ниши/_core/. Но под вашу нишу полезно добавить:

Сложите всё в Markdown-файл — каждый смысловой блок отделяйте строкой ---:

# Возражение: "Дорого"

Признать: "Понимаю, цена важна — давай разберёмся, из чего она."

Декомпозировать стоимость:
- Производство: X
- Доставка: Y
- Установка: Z
- Гарантия 5 лет

Сравнить: "Аналог у конкурентов 1.5 млн без гарантии. У нас 1.4 млн с гарантией и доставкой."

CTA: "Если бюджет — главный вопрос, есть рассрочка от Mono на 12 мес. Подключим?"

---

# Возражение: "Подумаю"

Признать: "Конечно, такое решение не на минуту."

Узнать причину: "Что именно хочешь обдумать — конфигурацию, бюджет или что-то третье?"

[...]

---

# Кейс: Клиент Андрей, Киев

Задача: дача 80м² за 2 месяца...
Решение: Барн-365...
Результат: дом сдан за 35 дней, клиент привёл 2 знакомых...

Загрузка:

poetry run python scripts/bulk_train.py my-niche path/to/objections.md

Параметр my-niche — slug вашей ниши. Можно использовать _core чтобы залить факты во все ниши сразу.

Crawl сайта

Альтернативно — пусть Anna прочитает весь ваш сайт сама:

poetry run python scripts/ingest_site.py my-niche https://your-site.com

Скрипт пройдётся по всем внутренним ссылкам, извлечёт текст через trafilatura, разберёт PDF-файлы и зальёт в RAG.

Обучение «вживую» в Telegram

В чате с ботом, привязанном к вашей нише, админ может отдать команду:

/train

После этого каждое сообщение, которое вы отправите, превратится в факт в RAG. Удобно для быстрого добавления знаний — пишете «у нас гарантия 5 лет, при поломке заменяем бесплатно» и это сохраняется как обучающий чанк.

Закончили — отправьте /endtrain.

Незакрытые вопросы

Когда клиент спрашивает что-то, чего нет в базе, Anna выкручивается мягкой фразой и сохраняет вопрос в таблицу unknown_questions. Раз в сутки админу приходит сводка.

Чтобы научить Anna правильному ответу:

/answer 42 Гарантія 5 років, поломку відремонтуємо безкоштовно або замінимо на новий.

Где 42 — id вопроса. Ответ улетает в RAG как факт с весом «manual» (1.5×) — Anna будет его использовать с приоритетом.

Чек-пойнт
  • Создана ниша (через /setdemo, tenants.py или БД)
  • Каталог загружен через ingest_catalog.py
  • Скрипты продаж и возражения залиты через bulk_train.py
  • В тестовом диалоге Anna представляется от имени вашего бренда и достаёт реальные товары