175345194c6b1b998099f0363184a7ead5387d33
Co-authored-by: Cursor <cursoragent@cursor.com>
MAX Bot + n8n (СПРФ / Клиент)
Интеграция бота в мессенджере MAX с n8n: webhook, нормализация входящих, отправка сообщений и кнопок, работа с БД (PostgreSQL, схемы sprf_ / clpr_).
Содержимое репозитория
Скрипты
| Файл | Назначение |
|---|---|
| register_max_webhook.py | Регистрация webhook бота MAX на URL n8n (читает .env: MAX_BOT_TOKEN, N8N_MAX_WORKFLOW, MAX_WEBHOOK_SECRET). |
| fetch_schema.py | Выгрузка структуры таблиц sprf_* из PostgreSQL в sprf_tables_schema.md. |
Ноды для n8n (Code node)
| Файл | Назначение |
|---|---|
| n8n-code-node-max-normalize.js | Нормализация входящего Webhook MAX: один объект с max_id, max_chat_id, answer_text, answer_type (text, command, callback, contact, voice, photo, file и т.д.), callback_id, callback_message_text, contact_payload и др. Личные чаты (dialog); при callback пользователь берётся из callback.user. |
| n8n-code-add-menu-buttons.js | Формирование тела сообщения с меню: текст + inline_keyboard (callback-кнопки, request_contact, кнопка «Главное меню» type message). Выход: message_body для POST /messages. |
Документация
| Путь | Описание |
|---|---|
| docs/max-webhook.md | Настройка Webhook в n8n, регистрация в MAX, отправка ответа (POST /messages), ответ на callback (POST /answers), удаление кнопок. |
| docs/max-curl-http-request.md | Примеры curl и настройка HTTP Request в n8n: отправка сообщения, кнопки, ответ на callback, удаление кнопок. |
| docs/max-api/ | Локальная копия/выжимка MAX Bot API: обзор, методы (messages, updates, subscriptions, answers), объекты (Update, Message, MessageBody, NewMessageBody), форматы текста (markdown/html), кнопки (inline_keyboard: callback, message, link, request_contact и др.), контакт (vcf_info, max_info). |
| docs/clpr-vs-sprf-schema-diff.md | Сравнение структуры таблиц БД с префиксами clpr_ и sprf_. |
| SITUATION.md | Текущая ситуация: что настроено, команды, файлы. |
Схемы БД
| Файл | Описание |
|---|---|
| sprf_tables_schema.md | Структура таблиц с префиксом sprf_ (public). |
| clpr_tables_schema.md | Структура таблиц с префиксом clpr_ (public). |
Требования
- Python 3, зависимости:
psycopg2-binary(для fetch_schema). - В корне файл .env (не коммитить):
MAX_BOT_TOKEN,N8N_MAX_WORKFLOW,MAX_WEBHOOK_SECRET, при необходимостиMAX_API_BASE; для выгрузки схемы:PGHOST,PGPORT,PGDATABASE,PGUSER,PGPASSWORD.
Быстрый старт
- Настроить Webhook в n8n (path =
sprf_max, POST), включить воркфлоу. - Выполнить:
python3 register_max_webhook.py. - В воркфлоу после Webhook вставить Code node с содержимым
n8n-code-node-max-normalize.js. - Ответ пользователю: HTTP Request — POST
https://platform-api.max.ru/messages?user_id={{ $json.max_id }}, body изmessage_bodyили свой JSON (текст, кнопки — см. docs).
Подробнее: docs/max-webhook.md, docs/max-curl-http-request.md, docs/max-api/04-formats-and-buttons.md.
Ограничения MAX API
- Редактирование (PUT /messages) и удаление (DELETE /messages) — только для сообщений моложе 24 часов.
- POST /answers (обновление сообщения с кнопками) — по факту тоже редактирование; при старше 24 ч может не сработать.
Git
Репозиторий на ветке main, remote origin → Gitea.
Пуш без ввода пароля: скрипт ./git-push.sh читает GITEA_USER, GITEA_PASSWORD, GITEA_URL из .env и пушит в origin main. Пароль в URL после push убирается.
cd /dev/MAX
./git-push.sh
Можно сказать «запуш» — тогда будет выполнен этот скрипт (с текущими изменениями нужно сначала сделать git add и git commit).
Лицензия / конфиденциальность
Скрипты и доки — для внутреннего использования. Не коммитить .env и токены.
Description
Languages
JavaScript
58.6%
Python
30.5%
Shell
10.9%