- register_max_webhook.py, fetch_schema.py - n8n-code-node-max-normalize.js (max_id, callback из callback.user, contact из vcf_info) - n8n-code-add-menu-buttons.js (меню с callback, request_contact, Главное меню) - docs: max-webhook, max-curl-http-request, max-api (форматы, кнопки, контакт), clpr vs sprf - README, SITUATION, схемы sprf_ и clpr_, .gitignore Co-authored-by: Cursor <cursoragent@cursor.com>
61 lines
3.3 KiB
Markdown
61 lines
3.3 KiB
Markdown
# Текущая ситуация — MAX / СПРФ (актуализировано 13.02.2025)
|
||
|
||
## Что это за проект
|
||
|
||
- **Бот MAX** (мессенджер) получает события по **Webhook** на n8n.
|
||
- n8n обрабатывает сообщения и коллбэки, при необходимости ходит в **PostgreSQL** (таблицы `sprf_*`) и в **MAX API** (ответы, кнопки).
|
||
- Документация MAX API и инструкции по webhook лежат в `docs/`.
|
||
|
||
## Что уже настроено и работает
|
||
|
||
| Компонент | Статус |
|
||
|-----------|--------|
|
||
| **.env** | Есть: `MAX_BOT_TOKEN`, `N8N_MAX_WORKFLOW`, `MAX_WEBHOOK_SECRET`, параметры PostgreSQL |
|
||
| **Webhook в MAX** | Зарегистрирован на `https://n8n.clientright.pro/webhook/sprf_max` (события: `message_created`, `message_callback`, `bot_started`) |
|
||
| **Секрет** | Задан в .env; в n8n проверяй заголовок `X-Max-Bot-Api-Secret` |
|
||
| **Схема БД** | Выгружена в `sprf_tables_schema.md` (таблицы sprf_claims, sprf_chat_messages, sprf_conversation_state и др.) |
|
||
|
||
## Что нужно проверить вручную
|
||
|
||
1. **n8n** (https://n8n.clientright.pro): воркфлоу с нодой **Webhook** включён (Production), путь = `sprf_max`, метод POST.
|
||
2. **Проверка доставки**: написать боту в MAX — во входящих данных Webhook в n8n должен появиться объект с `update_type`, `message` и т.д.
|
||
|
||
## Полезные команды
|
||
|
||
```bash
|
||
# Заново зарегистрировать webhook (если меняли URL или пересоздавали воркфлоу)
|
||
python3 register_max_webhook.py
|
||
|
||
# Проверить, какие подписки зарегистрированы в MAX
|
||
python3 -c "
|
||
import os, json, urllib.request
|
||
from pathlib import Path
|
||
for line in Path('.env').read_text().splitlines():
|
||
s = line.strip()
|
||
if s and not s.startswith('#') and '=' in s:
|
||
k, v = s.split('=', 1)
|
||
os.environ[k.strip()] = v.strip()
|
||
r = urllib.request.urlopen(urllib.request.Request(
|
||
os.environ.get('MAX_API_BASE','https://platform-api.max.ru').rstrip('/') + '/subscriptions',
|
||
headers={'Authorization': os.environ['MAX_BOT_TOKEN']}, method='GET'))
|
||
print(r.read().decode())
|
||
"
|
||
|
||
# Обновить схему таблиц sprf_ из PostgreSQL (нужны PGHOST, PGUSER, PGPASSWORD, PGDATABASE в .env)
|
||
python3 fetch_schema.py
|
||
```
|
||
|
||
## Файлы в проекте
|
||
|
||
- `register_max_webhook.py` — регистрация webhook в MAX
|
||
- `fetch_schema.py` — выгрузка схемы таблиц sprf_ в `sprf_tables_schema.md`
|
||
- `docs/max-webhook.md` — пошаговая настройка webhook в n8n и в MAX
|
||
- `docs/max-api/` — обзор API, методы, объекты (01–03)
|
||
- `sprf_tables_schema.md` — структура таблиц БД
|
||
- `.env` — токены и URL (не коммитить)
|
||
|
||
## Дальше
|
||
|
||
- Дорабатывать воркфлоу в n8n под логику бота (ответы, кнопки, запись в БД).
|
||
- При смене URL webhook — обновить `N8N_MAX_WORKFLOW` в .env и снова запустить `python3 register_max_webhook.py`.
|