Шаг 6. Настройте свою нишу
Нужно дать Anna три вещи: persona (кто она и от чьего имени говорит), каталог (что продаёт) и скрипты (как закрывает возражения).
Что такое «ниша»
Ниша — это изолированная конфигурация продавца под конкретный бизнес. На одном сервере можно держать десятки ниш одновременно — каждая со своей persona, своим каталогом и своей памятью клиентов. Именно это позволяет агентству продавать «AI-продавцов под ключ» сразу нескольким клиентам.
Способ 1. Авто-онбординг по сайту (магия)
Самый быстрый способ. Anna сама прочитает сайт клиента, разберёт PDF-прайсы, извлечёт стиль и сгенерирует persona. Подходит, когда у клиента есть нормальный сайт.
В Telegram (от админа) напишите боту:
/setdemo https://client-website.com
За 1–3 минуты Anna:
- Скраулит сайт через trafilatura
- Извлечёт PDF-файлы (прайсы, спецификации)
- Прогонит изображения через Claude Vision
- Сгенерирует
TenantPersonaчерез Haiku - Загрузит чанки в pgvector
- Привяжет текущий чат к новой нише
Готово. Дальше можно сразу диалог: "Привет" — она представится от имени бренда клиента.
Способ 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 представляется от имени вашего бренда и достаёт реальные товары