<!--
  Copyright (c) 2024-2025 Тарабанов Александр Викторович
  All rights reserved.
  
  This software is proprietary and confidential.
  Unauthorized copying, modification, or distribution is prohibited.
  
  For licensing inquiries: info@hb3-accelerator.com
  Website: https://hb3-accelerator.com
  GitHub: https://github.com/HB3-ACCELERATOR
-->

# Интерактивный обмен веб-страницами с ИИ-ассистентом в корпоративном чате

## Описание задачи

Реализовать функционал, позволяющий пользователям создавать веб-страницы с данными о компании, продуктах или статьями (блог), делиться ими в корпоративном чате в виде интерактивных сообщений с кнопками, а также обеспечивать автоматическое добавление этих страниц в базу знаний (RAG) для поиска и генерации ответов ИИ-ассистентом. Страницы должны быть доступны для поиска в интернете по ключевым словам.

---

## Основные требования

1. **Создание веб-страниц**
    - Форма на странице `/content` для ввода информации (название, описание, текст, теги, изображения и т.д.).
    - Возможность предпросмотра и редактирования страницы до публикации.
    - Кнопка "Поделиться", после нажатия которой страница сохраняется и становится доступной для дальнейших действий.

2. **Публикация и доступность**
    - После публикации страница доступна по уникальному URL (например, `/content/page/123` или `/content/page/название`).
    - Страница оптимизирована для SEO (мета-теги, ЧПУ-адреса, sitemap.xml).
    - При необходимости — настройка индексации для поисковых систем (robots.txt).
    - **Оптимизация для ИИ-поиска**: страницы должны быть структурированы и открыты для индексации поисковыми ИИ (Perplexity, GPT, Gemini и др.). Рекомендуется:
        - Использовать семантическую разметку (schema.org, JSON-LD)
        - Добавлять структурированные данные (FAQ, Article, Product)
        - Открывать страницы для crawler-ботов ИИ (не блокировать их в robots.txt)
        - Обеспечивать чистый, легко читаемый HTML-код
        - Добавлять релевантные ключевые слова и теги

3. **Интеграция с корпоративным чатом**
    - После публикации пользователь может отправить страницу в чат с помощью кнопки "Поделиться в чат".
    - В чате появляется интерактивное сообщение (карточка) с краткой информацией о странице и кнопкой (например, "Показать содержимое").
    - При нажатии на кнопку ассистент отправляет содержимое страницы (или его резюме) в чат.
    - Возможность задать вопрос по содержимому страницы через чат (ассистент ищет ответ только в этой странице).
    - При публикации страницы в чатах пользователей (веб, Telegram, email) вместе с ответами на сообщения должно автоматически добавляться интерактивное сообщение с заголовком страницы и кнопкой "Подробнее". При нажатии на кнопку ИИ-ассистент отправляет содержимое веб-страницы в чат.

4. **Интеграция с RAG (Retrieval-Augmented Generation)**
    - После публикации страница автоматически разбивается на смысловые блоки (например, по абзацам).
    - Каждый блок векторизуется (создается embedding) и сохраняется в векторное хранилище (Qdrant, Pinecone и т.д.) с метаданными (id страницы, теги, автор, дата).
    - Ассистент использует эти данные для поиска и генерации ответов на вопросы пользователей.
    - В форме создания страницы добавить выпадающий список "Интегрировать с RAG" (Да/Нет). При выборе "Да" ИИ-ассистент анализирует содержимое страницы, автоматически предлагает список возможных вопросов и ответов (Q&A) по теме страницы. Пользователь может отредактировать эти вопросы и ответы, отметить чекбоксами нужные и нажать "Добавить" — выбранные Q&A будут сохранены в базу знаний для последующего поиска и генерации ответов.

5. **Поиск в интернете**
    - Страницы доступны для индексации поисковыми системами.
    - Поиск по ключевым словам приводит к отображению соответствующих страниц.

---

## Пользовательские сценарии

1. **Создание и публикация страницы**
    - Пользователь заполняет форму на `/content`, нажимает "Поделиться".
    - Страница сохраняется, появляется уникальный URL.

2. **Обмен в чате**
    - Пользователь нажимает "Поделиться в чат".
    - В чате появляется карточка с кнопкой "Показать содержимое".
    - Другой пользователь нажимает кнопку — ассистент отправляет содержимое страницы в чат.

3. **Поиск и ответы ассистента**
    - Пользователь задаёт вопрос по теме страницы.
    - Ассистент ищет ответ в RAG по содержимому страницы и формирует релевантный ответ.

4. **Поиск через интернет**
    - Внешний пользователь находит страницу через поисковик по ключевым словам.

---

## Техническая реализация

### Frontend
- Vue.js, локальные scoped-стили
- Форма создания/редактирования страницы
- Компонент карточки для чата с интерактивной кнопкой

### Backend
- Node.js/NestJS/Fastify/Express
- REST API для создания, публикации, получения страниц
- Векторизация и интеграция с векторным хранилищем (Qdrant, Pinecone)
- Генерация и отправка сообщений в чат

### Векторное хранилище (RAG)
- Сохранение embedding-блоков с метаданными
- Поиск по embedding для генерации ответов ассистентом

### SEO и индексация
- Генерация мета-тегов, sitemap.xml
- ЧПУ-адреса страниц
- Настройка robots.txt

---

## Диаграмма взаимодействия

```mermaid
sequenceDiagram
    participant User
    participant Frontend
    participant Backend
    participant VectorDB
    participant Chat
    participant SearchEngine

    User->>Frontend: Заполняет форму на /content
    Frontend->>Backend: POST /api/content (данные)
    Backend->>Backend: Создает страницу, сохраняет в БД
    Backend->>VectorDB: Векторизация, добавление в RAG
    Backend->>Frontend: Возвращает ссылку на страницу
    Frontend->>Chat: Отправляет карточку в чат
    Chat->>User: Показывает карточку + ответ ассистента
    SearchEngine->>Backend: Индексирует страницу (если разрешено)
```

---

## Примечания
- Все компоненты должны быть реализованы с учетом безопасности и приватности данных.
- Необходимо предусмотреть возможность удаления и редактирования страниц.
- Для интеграции с ИИ-ассистентом использовать современные RAG-фреймворки (LlamaIndex, LangChain и т.д.).
- Для векторизации использовать актуальные модели (OpenAI, Sentence Transformers и др.). 

---

## Автоматический выбор и добавление интерактивных сообщений ИИ-ассистентом

ИИ-ассистент может самостоятельно анализировать контекст диалога и принимать решение о добавлении интерактивных сообщений (карточек) в чат, чтобы повысить релевантность и удобство взаимодействия.

### Принцип работы

1. **Анализ контекста диалога**
    - Ассистент анализирует сообщения пользователя, определяет тему, намерение и ключевые слова.
    - Выполняет поиск по базе знаний (RAG) для нахождения релевантных страниц или блоков.

2. **Принятие решения о вставке интерактивного сообщения**
    - Если найден релевантный контент, ассистент решает, нужно ли добавить карточку с кнопкой (например, "Подробнее").
    - Решение зависит от:
        - Тематики и повторяемости вопросов
        - Новизны или важности контента
        - Явных триггеров в сообщениях пользователя (например, "покажи инструкцию", "расскажи подробнее" и т.д.)

3. **Формирование интерактивного сообщения**
    - Ассистент формирует карточку с заголовком, кратким описанием и кнопкой (например, "Подробнее").
    - При нажатии на кнопку пользователем ассистент отправляет содержимое страницы или выбранного блока в чат.

### Пример сценария

- Пользователь: "Как подключить наш продукт X?"
- Ассистент:
    1. Находит в RAG инструкцию по подключению продукта X.
    2. Отвечает кратко и автоматически добавляет интерактивную карточку с кнопкой "Показать инструкцию".
    3. При нажатии на кнопку отправляет подробную инструкцию в чат.

### Преимущества
- Пользователь получает релевантную информацию в нужный момент, не перегружая чат лишними карточками.
- Ассистент становится более "умным" и проактивным.
- Повышается вовлечённость и удовлетворённость пользователей. 

---

## Публикация страниц в социальных сетях и блогах через API

Система может поддерживать публикацию созданных страниц на страницах компании в социальных сетях и блогах (Medium, LinkedIn, Instagram, Paragraph, Telegraph, Telegram и др.) с помощью соответствующих API.

### Возможности
- Публикация статей и постов на платформах: Medium, LinkedIn (страницы компаний), Instagram (бизнес-аккаунты), Paragraph, Telegraph, Telegram (боты/каналы) и др.
- Выбор платформ для публикации пользователем (чекбоксы или список).
- Формирование контента с учётом особенностей каждой платформы (текст, изображения, разметка).

### Принцип работы
1. Пользователь выбирает опцию "Опубликовать в соцсетях" после создания страницы.
2. Открывается окно выбора платформ и авторизации (OAuth2, если требуется).
3. Для каждой платформы формируется подходящий формат контента.
4. Система отправляет запросы к API выбранных платформ для публикации.
5. Пользователь получает уведомление об успешной публикации или ошибке.

### Ограничения и нюансы
- Для некоторых платформ требуется бизнес-аккаунт и прохождение модерации приложения (LinkedIn, Instagram).
- Формат и объём контента может отличаться (например, Instagram — только изображение+текст).
- Возможны лимиты на частоту публикаций и размер постов.
- Некоторые платформы могут задерживать публикацию для модерации.

### Пример архитектуры

```mermaid
sequenceDiagram
    participant User
    participant Frontend
    participant Backend
    participant SocialAPI

    User->>Frontend: Нажимает “Опубликовать в соцсетях”
    Frontend->>Backend: POST /api/publish-to-social (данные, токены)
    Backend->>SocialAPI: Публикует на выбранных платформах
    SocialAPI-->>Backend: Ответ (успех/ошибка)
    Backend-->>Frontend: Сообщение о результате
    Frontend-->>User: Уведомление
```

### Рекомендации
- Для каждой платформы реализовать отдельный модуль интеграции или использовать сторонние сервисы (Zapier, Make).
- Предусмотреть очередь публикаций и логи для отслеживания статуса.
- Обеспечить безопасное хранение и обновление токенов авторизации. 