Отчёт и Акт сверки технической готовности

Полный отчёт о выполненных работах по проекту EastPay. Каждый пункт договора — с подробным описанием, ссылками на файлы и подтверждающими материалами. Ниже — также работы, выполненные сверх обязательств по нашей инициативе.

📄
Оригинал договора (PDF):
Скачать PDF с Google Drive →
Договор между Заказчиком и StaffAI (Исполнитель)
✅ Обязательства по договору — статус выполнения
Функция по договору Статус Подтверждение
1 Разработка и внедрение ядра AI Chat Agent Готово Перейти →
2 Интеграция с CRM-системой (Chatwoot) Готово Перейти →
3 Подключение каналов связи (Telegram) Готово Перейти →
4 Разработка сценариев и скриптов общения Готово Перейти →
5 Структура и настройка базы данных Готово Перейти →
6 Автоматизация обработки лидов Готово Перейти →
7 Настройка аналитики и отчётов Готово Перейти →
8 Обучение и передача документации Готово Перейти →

8 из 8 пунктов выполнены — все обязательства по договору закрыты

✨ Инициативные разработки (сверх договора)

Следующие работы были выполнены дополнительно к договорным обязательствам. Подробнее — в разделе ниже.

  • Личный кабинет оператора (Admin Panel) (Demo-версия)

    Полноценная веб-панель: React + Refine + Ant Design. 9 страниц: дашборд, заявки, клиенты, курсы, аудит, профиль.

  • Серверная инфраструктура (VPS)

    Настройка VPS: Nginx, SSL, Docker, PM2, автоматические бэкапы в 03:00, SSH-hardening, UFW, fail2ban.

  • Email-шаблоны для приглашений

    Branding-шаблоны email для приглашения операторов в систему (Edge Function invite-user).

🌍 Доступы и ресурсы проекта
  • 🔗

    admin.eastpay.online

    Админ-кабинет (демо-версия)

  • 🔗

    chatcrm.eastpay.online

    CRM и контроль диалогов операторов с клиентами

  • 🔗

    currency.eastpay.online

    Управление курсами валют (панель)

  • 🔗

    n8n.eastpay.online

    Управление веб-хуками и автоматизацией

  • 🔗

    hostinger.com

    Сервер (VPS) для хранения данных и работы системы

  • 🔗

    nextbot.ru

    Настройка AI-ответов и интеграция с мессенджерами (Flow builder)

  • 🔗

    platform.openai.com

    AI-провайдер (интеллект чат-агента)

  • 🔗

    supabase.com

    Основная база данных и серверные функции (Backend)

🤖 Ядро AI Chat Agent

Главный AI-ассистент EastPay. Работает на платформе NextBot Cloud, подключён к Supabase как бэкенд. Общается с клиентами в Telegram, считает курсы, создаёт заявки.

🏗️ Архитектура
architecture.txt
Клиент (Telegram) │ ▼ @east_pay_bot (Telegram Bot API) │ ▼ NextBot Cloud — AI-платформа ├── Промпт v7 (системные инструкции) ├── 9 API-функций (Tools) ├── База знаний (Knowledge Base) └── Сценарии (кнопки, приветствия) │ ▼ Supabase (PostgreSQL + Edge Functions) ├── nextbot-api — единый API-эндпоинт ├── Таблицы: clients, orders, rates... └── Row Level Security (RLS) │ ▼ n8n → синхронизация → Chatwoot CRM
⚙️ 9 API-функций агента (Tools)

Каждая функция — это «инструмент» AI-агента. Когда клиент спрашивает курс, бот сам вызывает нужную функцию через Supabase Edge Function nextbot-api.

📝 Промпт — 7 версий

Промпт — это «мозг» агента: набор правил, которым он следует. За время разработки было 7 итераций, каждая улучшала качество ответов и безопасность.

  • v7 (production) — текущая версия

    Полная защита от prompt-injection, обязательное использование tools, запрет на ответы «из головы», hardened security.

    📄 Открыть документ →
  • Версии v1–v6 (архив)

    Каждая предыдущая версия сохранена для аудита. Краткое содержание: v1=базовый, v2=тон общения, v3=tools, v4=безопасность, v5=рефакторинг, v6=оптимизация.

    docs/ai-agent/prompts/1-version-promt.md … 6-version-promt.md
🔒
Безопасность агента: Защита от prompt injection (v7), запрет раскрытия системного промпта, обязательная верификация через tools, логирование всех действий в audit_logs.

💬 Интеграция с CRM (Chatwoot)

Chatwoot — CRM для управления диалогами с клиентами. Развёрнут на собственном сервере (self-hosted), подключён к AI-агенту через n8n. Оператор видит все диалоги в одном окне и может вмешаться в любой момент.

🔧 Что настроено
  • Self-hosted Chatwoot на VPS

    Установлен через Docker на сервере EastPay. Все данные хранятся локально — ничего не уходит на сторонние серверы.

    📄 Открыть документ →
  • API Inbox (канал «EastPay AI Bot»)

    Специальный тип канала, через который n8n пересылает сообщения из Telegram в Chatwoot и обратно.

  • Синхронизация NextBot ↔ Chatwoot через n8n

    Два потока: (1) новое сообщение в Telegram → n8n → Chatwoot, (2) оператор пишет в Chatwoot → n8n → Telegram клиенту.

    📄 Открыть документ →
  • Таблица маппинга каналов (channel_mapping)

    В Supabase таблица channel_mapping связывает: telegram_chat_id ↔ nextbot_dialog_id ↔ chatwoot_conversation_id. Это позволяет не дублировать сообщения.

  • Команды оператора

    Оператор пишет «бот продолжай» или «стоп» прямо в Chatwoot — команда невидима для клиента, но управляет AI-агентом.

    📄 Открыть документ →
🔗 Схема взаимодействия
crm-flow.txt
Клиент пишет в Telegram │ ▼ NextBot → Webhook → n8n (Workflow 1) │ ├──→ Supabase: channel_mapping (find/create) ├──→ Chatwoot API: Contact (find/create) ├──→ Chatwoot API: Conversation (find/create) └──→ Chatwoot API: Message.create │ ▼ Оператор видит сообщение в Chatwoot │ (если хочет ответить) ▼ Chatwoot → Webhook → n8n (Workflow 2) │ └──→ Telegram Bot API: sendMessage

📱 Каналы связи

Telegram — основной канал общения с клиентами. Настроен бот и информационный канал.

📌 Активные каналы
  • Telegram бот: @east_pay_bot

    Основной AI-бот для клиентов. Отвечает 24/7, считает курсы, создаёт заявки. Подключён к NextBot Cloud.

  • Telegram канал: @East_pay_world_ai

    Информационный канал EastPay. Новости, обновления курсов, акции.

⚙️ Техническая реализация
  • Telegram Bot API через NextBot

    Бот зарегистрирован через @BotFather. Токен подключён в NextBot Cloud. NextBot принимает webhook от Telegram и обрабатывает сообщения через AI-агент.

  • Сценарии приветствия (/start)

    При первом запуске бот отправляет приветственное сообщение с описанием возможностей и инструкцией. Настроено в NextBot → Scenarios.

    📄 Открыть документ →
ℹ️
WhatsApp: Подключается через платформу NextBot аналогично Telegram — достаточно активировать канал WhatsApp в настройках NextBot. Отдельная интеграция не требуется.
📢 Telegram-группа «EastPay | Заявки» — уведомления

Кроме CRM (Chatwoot), все новые заявки дублируются в закрытую Telegram-группу для оперативного контроля.

  • Группа: EastPay | Заявки

    Закрытая Telegram-группа для операторов и руководства. Сюда приходят мгновенные уведомления о новых событиях.

  • Новая заявка

    Когда клиент подтверждает сделку и AI вызывает create_order — в группу приходит сообщение с деталями: номер заявки, валютная пара, сумма, город, контакт клиента.

  • Эскалация менеджеру

    Когда клиент просит связать с оператором или AI не может ответить — срабатывает escalate_to_manager, и в группу приходит уведомление с просьбой подключиться.

  • Логика отправки

    Edge Function nextbot-api при обработке action=create_order или escalate_to_manager отправляет сообщение через Telegram Bot API в группу-чат.

notification-flow.txt
Клиент подтверждает заявку │ ▼ NextBot AI → вызывает create_order │ ▼ Supabase Edge Function (nextbot-api) ├──→ Запись в таблицу orders ├──→ Запись в таблицу clients ├──→ Лог в audit_logs └──→ Telegram Bot API → сообщение в группу «EastPay | Заявки»
👨‍💼 Функции оператора

Оператор работает через Chatwoot CRM. Вот основные действия, которые доступны:

  • Мониторинг диалогов

    В Chatwoot видны все диалоги AI-бота с клиентами в реал-тайм. Оператор может читать переписку и оценивать качество ответов AI.

  • Перехват диалога

    Команда стоп — AI перестаёт отвечать, оператор общается с клиентом напрямую. Команда невидима для клиента.

  • Возврат AI

    Команда бот продолжай — AI снова начинает отвечать на сообщения клиента.

  • Ответ клиенту из Chatwoot

    Оператор пишет сообщение в Chatwoot → n8n пересылает его клиенту в Telegram. Клиент не знает, что он общается не с ботом.

  • Просмотр контактов и истории

    Карточка клиента в Chatwoot: имя, telegram_chat_id, история всех диалогов.

  • Уведомления в Telegram-группу

    Новые заявки и эскалации мгновенно появляются в группе «EastPay | Заявки» — не нужно сидеть в Chatwoot постоянно.

📄 Полный гайд оператора →

📋 Сценарии и скрипты

Все сценарии диалогов, API-функции, и примеры разговоров. AI-агент обучен на реальных диалогах и следует строгим правилам.

🎯 Как агент ведёт диалог
dialog-scenario.txt
// Типичный сценарий обмена Клиент: Привет, хочу обменять доллары Бот: Привет! Какая сумма и в какую сторону? (вызывает get_rates_tool) Клиент: 1000 долларов в USDT Бот: Рассчитываю... (вызывает calculate_deal) Вы отдаёте: $1,000 Получите: 998 USDT Курс: 1.002 Подтвердить заявку? Клиент: Да Бот: (вызывает create_order) Заявка #42 создана! ✅ Менеджер свяжется для уточнения деталей.
📂 Документация сценариев
  • Примеры диалогов (12+ сценариев)

    Реальные примеры: обмен валюты, вопрос по статусу, эскалация менеджеру, вопрос не по теме, попытка взлома промпта.

    📄 Открыть документ →
  • Сценарии NextBot (кнопки, автоответы)

    Настройка inline-кнопок при /start, автоматические приветствия, сценарии реактивации.

    📄 Открыть документ →
  • Сценарии взаимодействия NextBot ↔ Chatwoot

    Что происходит при эскалации, как оператор перехватывает диалог, как бот возвращается.

    📄 Открыть документ →

🗄️ База данных

Supabase (PostgreSQL) — основное хранилище всех данных EastPay. Включает 17 таблиц, 3 Edge Functions, Row Level Security. Проект: cvzsgjksswowqgfxvrsb.

🔗
Supabase Dashboard: supabase.com/dashboard/project/cvzsgjksswowqgfxvrsb
API URL: https://cvzsgjksswowqgfxvrsb.supabase.co
🗃️ 3 Edge Functions (серверные функции)
  • nextbot-api

    Единый API-эндпоинт для всех запросов от AI-агента. NextBot вызывает эту функцию, передаёт action (get_rates, calculate_deal и т.д.), получает ответ.

    URL: https://cvzsgjksswowqgfxvrsb.supabase.co/functions/v1/nextbot-api
  • invite-user

    Функция приглашения операторов в систему. Создаёт пользователя и отправляет ссылку для регистрации.

  • logger-service

    Сервис логирования действий. Записывает события в таблицу audit_logs.

📊 Полная схема базы данных (17 таблиц)

Нажмите на название таблицы, чтобы увидеть колонки. Данные актуальны на момент генерации отчёта.

clients 11 rows RLS ✓
КолонкаТипОписание
id PKbigintID клиента
telegram_idtextTelegram ID (unique)
telegram_usernametext@username
full_nametextПолное имя
phonetextТелефон
verification_statustextunverified / verified
risk_leveltextlow / medium / high
total_volume_usdnumericОбщий объём сделок в USD
deals_countintКоличество сделок
is_ai_pausedboolAI выключен для этого клиента
is_ambassadorboolФлаг амбассадора
referrer_id FK→clientsbigintРеферал
orders 12 rows RLS ✓
КолонкаТипОписание
id PKbigintID заявки
client_id FK→clientsbigintКто создал
manager_id FK→profilesuuidОтветственный менеджер
location_id FK→locationsbigintГород
instrument_id FK→instrumentsbigintВалютная пара
directionenumbuy / sell
amount_give / amount_getnumericСуммы обмена
currency_give / currency_gettextВалюты (USD, USDT, RUB…)
exchange_ratenumericКурс для клиента
cost_price_ratenumericСебестоимость (для расчёта прибыли)
estimated_profit_usdtnumericРасчётная прибыль
statusenumnew → calculated → payment_pending → processing → delivery → done / cancelled / dispute
delivery_methodtextСпособ доставки
locations 5 rows
КолонкаТипОписание
id PKbigintID города
nametextНазвание (unique)
countrytextСтрана
currency_localtextЛокальная валюта
surcharge_percentnumericНаценка города (%)
is_activeboolАктивен ли город
instruments 4 rows
КолонкаТипОписание
id PKbigintID инструмента
nametextНазвание (USDT→USD, RUB→THB…)
base_currencytextБазовая валюта
cost_rate_expressiontextФормула расчёта себестоимости
fixed_fee_usdtnumericФиксированная комиссия
market_rates 3 rows RLS ✓
КолонкаТипОписание
id PKbigintID
location_id FK→locationsbigintГород
instrument_id FK→instrumentsbigintИнструмент
cost_price_percentnumeric% себестоимости
selling_rate_percentnumeric% продажи клиенту
min_amountnumericМин. сумма обмена
daily_rates 7 rows RLS ✓
КолонкаТипОписание
symbol PKtextВалютная пара (USDTHB, USDTRUB…)
ratenumericТекущий курс
is_activeboolАктивна ли пара
profiles 4 rows RLS ✓
КолонкаТипОписание
id PK FK→auth.usersuuidID (= auth user)
roleenumsuper_admin / admin / operator / city_manager / pending
assigned_location_id FK→locationsbigintГород привязки
email, full_name, telegram_usernametextДанные профиля
channel_mapping 7 rows RLS ✓
КолонкаТипОписание
id PKuuidID маппинга
telegram_chat_idbigintTelegram chat ID клиента
nextbot_dialog_idbigintID диалога в NextBot
chatwoot_contact_idintID контакта в Chatwoot
chatwoot_conversation_idintID диалога в Chatwoot
operator_activeboolОператор управляет (AI спит)
sync_message_log 167 rows RLS ✓
КолонкаТипОписание
id PKuuidID
message_idtextID сообщения (идемпотентность)
directiontextnb_to_cw / cw_to_nb / cw_to_tg
statustextsent / error
audit_logs 69 rows RLS ✓

Аудит всех действий в системе: user_id, action, table_name, old_data, new_data, ip_address, severity. Используется для безопасности и отладки.

documents 32 rows

RAG-база знаний агента: content (текст), embedding (vector), metadata (jsonb). Используется для поиска ответов по документации.

n8n_chat_histories 120 rows

История чатов из n8n AI-агента. session_id + message (jsonb) + created_at.

chat_logs RLS ✓

Логи чатов: client_id, order_id, sender, message_content, is_read.

project_activity 103 rows

Активность проекта: stat_name, stat_value (jsonb). Для дашборда аналитики.

workflow_locks 18 rows

Блокировки для предотвращения race conditions в n8n workflows.

message_templates

Шаблоны сообщений: title, category, content, trigger_keywords. Подготовлены, пока не наполнены.

conversations + messages RLS ✓

Таблицы для будущего встроенного чата на веб-панели: user_id, title, role (user/assistant/system), content.

⚡ Автоматизация лидов

n8n — оркестратор автоматизации. Связывает NextBot, Supabase и Chatwoot. Весь путь от первого сообщения клиента до создания заявки — полностью автоматический.

🔄 Поток автоматизации
automation-flow.txt
1. Клиент пишет в Telegram │ ▼ 2. NextBot AI квалифицирует: → Направление (валютная пара) → Сумма обмена → Город (для наличных) → Способ расчёта │ ▼ 3. AI рассчитывает сделку: → get_rates → актуальный курс → calculate_deal → итоговая сумма → get_locations → проверка города │ ▼ 4. Клиент подтверждает → create_order: → Заявка → Supabase (таблица orders) → Контакт → create_contact → Статус: "new" │ ▼ 5. n8n синхронизирует в Chatwoot: → Оператор видит готовую заявку → Может подтвердить / изменить
🔧 n8n Workflows
  • Workflow 1: NextBot → Chatwoot

    Webhook из NextBot → n8n → находит/создаёт Contact в Chatwoot → находит/создаёт Conversation → создаёт Message. Использует таблицу channel_mapping и sync_message_log для идемпотентности.

  • Workflow 2: Chatwoot → Telegram

    Оператор пишет в Chatwoot → Webhook → n8n → определяет telegram_chat_id через channel_mapping → шлёт в Telegram Bot API.

  • Защита от дублей

    Таблица sync_message_log (167 записей) + workflow_locks (18 записей) — гарантируют, что одно сообщение не будет отправлено дважды.

🎯
Результат: 0 ручных действий от первого сообщения клиента до создания заявки. Оператор получает готовую заявку с расчётом — остаётся только подтвердить.

📊 Аналитика и отчёты

Два источника аналитики: Chatwoot (диалоги и эффективность) и Supabase Dashboard (данные, заявки, логи).

💬 Chatwoot — аналитика диалогов
  • Статистика диалогов

    Количество диалогов, среднее время первого ответа, процент решённых AI vs оператором.

  • Метрики по агентам

    Сколько диалогов обработал каждый оператор, средняя оценка, время ответа.

  • Полный архив диалогов

    Все сообщения за всё время — доступны для ревью и обучения.

🗄️ Supabase Dashboard — данные
  • Таблица заявок (orders)

    12 заявок с фильтрацией по статусу, дате, сумме. Визуальный интерфейс (Table Editor).

  • Клиентская база (clients)

    11 клиентов: Telegram ID, объём сделок, риск-уровень, статус верификации.

  • Аудит-логи (audit_logs)

    69 записей: кто, когда, что сделал. IP-адреса, severity, old/new data.

  • SQL-запросы

    Встроенный SQL-редактор для произвольных запросов. Можно строить кастомные отчёты.

    Supabase Dashboard → SQL Editor

🎓 Обучение и документация

Полный комплект документации для самостоятельной работы с системой. Все файлы — в проектной директории в формате Markdown.

👨‍💼 Для оператора (как работать)
  • Инструкция оператора Chatwoot

    Как мониторить диалоги, вмешиваться, управлять AI-ботом. Команды: «бот продолжай», «стоп», «менеджер ответит».

    📄 Открыть документ →
  • 3 типовых сценария работы

    (1) AI справляется сам — просто мониторить. (2) Вмешаться и ответить. (3) Передать коллеге.

⚙️ Техническая документация
  • NextBot Full Reference (8 глав)

    Полный справочник по платформе: агенты, функции, сценарии, база знаний, интеграции, диалоги, рассылки.

    docs/ai-agent/nextBot/00-overview.md … 08-broadcasts.md
  • Гайд настройки AI-агента

    Как менять промпт, добавлять функции, настраивать параметры памяти.

    📄 Открыть документ →
  • Документация всех 9 функций

    Для каждой функции: параметры, URL, headers, body, примеры ответов.

    docs/ai-agent/nextBot/functions/*.md
  • Legacy Logic & AI Strategy

    Документ перехода: как работала старая система и почему перешли на AI.

    📄 Открыть документ →
Передача знаний: Вся документация передана в формате Markdown в проектной директории. Заказчик имеет полный доступ ко всем файлам.

✨ Дополнительные разработки по нашей инициативе

Следующие компоненты были разработаны и внедрены исполнителем дополнительно к договорным обязательствам. Они значительно расширяют возможности платформы.

🖥️ Личный кабинет оператора (Admin Panel) (Demo-версия)

Полноценная веб-панель управления, созданная до заключения договора как демонстрация технических возможностей. Стек: React 18 + Refine v4 + Ant Design v5 + Vite.

  • Dashboard (главная страница)

    Общая статистика: количество заявок, клиентов, выручка, конверсия. Графики и виджеты.

    apps/admin-panel/src/pages/dashboard/
  • Управление заявками (Orders)

    CRUD для заявок: список, фильтры, детали, смена статуса, назначение менеджера.

    apps/admin-panel/src/pages/orders/
  • Управление клиентами (Users/Clients)

    Карточки клиентов, история сделок, уровень риска, статус верификации.

    apps/admin-panel/src/pages/users/
  • Управление курсами (Rates)

    Редактирование market_rates: себестоимость, наценка, минимальные суммы по городам.

    apps/admin-panel/src/pages/rates/
  • Аудит-логи

    Просмотр всех действий в системе: кто, когда, что изменил.

    apps/admin-panel/src/pages/audit-logs/
  • Системные пользователи

    Управление операторами и администраторами: роли, привязка к городу, приглашения.

    apps/admin-panel/src/pages/system-users/
  • Профиль пользователя

    Настройки учётной записи оператора.

    apps/admin-panel/src/pages/profile/
🔐 Серверная инфраструктура

Полная настройка production-сервера (VPS, Ubuntu 24.04 LTS, AMD EPYC) с нуля.

  • Chatwoot Self-Hosted (Docker)

    Rails + Sidekiq + PostgreSQL + Redis. 5 контейнеров. Полностью изолированная CRM.

  • Nginx Reverse Proxy + SSL

    HTTPS для всех сервисов. Let's Encrypt автопродление.

  • Hardening: SSH, UFW, fail2ban

    Key-only SSH, отключён root login, firewall, защита от brute-force.

  • Автоматические бэкапы

    Cron-задание в 03:00: резервное копирование Chatwoot DB. Скрипт: /srv/eastpay/backups/backup-chatwoot.sh

  • PM2 — менеджер процессов

    Автозапуск Node.js приложений при перезагрузке сервера.