npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mefodiytr/n8n-nodes-max

v0.3.0

Published

n8n community node for Max messenger integration. Fork of pfrankov/n8n-nodes-max with additional message and chat operations (pin/unpin/forward/edit_chat/send_action) and webhook deduplication.

Readme

@mefodiytr/n8n-nodes-max

npm version

Это форк

Это расширенная версия n8n-nodes-max от Павла Франкова. Спасибо ему за отличную базу.

Что добавлено в 0.2.0:

  • Дедупликация webhook-событий (защита от двойной доставки)
  • Перевод логирования с console.log на n8n logger
  • Pin / Unpin сообщений
  • Forward сообщений между чатами
  • Edit chat (название, иконка, описание)
  • Send action (typing_on и др. индикаторы)

Что добавлено в 0.3.0:

  • Новая нода Max Polling Trigger — long-polling-альтернатива webhook'у для сред без публичного HTTPS endpoint

Что планируется в 0.4.0+: members management, rate limit handling (429 + Retry-After), subscriptions / bot info ops.


Нода для интеграции мессенджера Max с платформой автоматизации n8n.

Установка

Для self-hosted n8n

  1. Установите пакет через npm в директории n8n:
npm install @mefodiytr/n8n-nodes-max
  1. Перезапустите n8n для загрузки новой ноды

Для n8n Cloud

  1. Откройте настройки вашего workspace
  2. Перейдите в раздел "Community nodes"
  3. Нажмите "Install a community node"
  4. Введите @mefodiytr/n8n-nodes-max и нажмите "Install"

Альтернативный способ (переменная окружения)

Добавьте пакет в переменную окружения:

export N8N_CUSTOM_EXTENSIONS=@mefodiytr/n8n-nodes-max

Полезные ссылки:

Для разработки

  • После npm install автоматически устанавливается Husky pre-commit hook.
  • Перед коммитом запускается Prettier для staged исходников (*.{ts,js,mjs,cjs,json,md,yml,yaml}).

Релиз

  1. Подготовьте изменения и закоммитьте их обычным git-коммитом.
  2. Выберите semver-тип релиза и создайте commit+tag командой npm version patch, npm version minor или npm version major.
  3. Запушьте ветку и теги командой git push origin master --follow-tags.
  4. GitHub Actions опубликует пакет в npm по пушу тега v*.*.*.

Для автопубликации в репозитории должен быть настроен секрет NPM_TOKEN.

Возможности

Сообщения

  • Отправка текстовых сообщений с форматированием
  • Автоматический fallback в plain text при ошибке Max API о неподдерживаемом Markdown
  • Редактирование и удаление сообщений
  • Для Edit Message нода отправляет message_id в query-параметре запроса PUT /messages?message_id=...
  • В Edit Message опция Clear Attachments удаляет текущие вложения сообщения, включая inline-клавиатуру
  • Отправка файлов (изображения, видео, аудио, документы)
  • Для вложений в Send Message доступны три источника: Binary Data, URL и готовый Token MAX
  • В Send Message текст не обязателен, если отправляются вложения
  • Нода не ограничивает вложения по расширению файла: формат проверяется на стороне Max API
  • Payload вложения зависит от типа файла: для image используются поля из JSON-ответа upload-шага (token/photos/url), для file используется token из upload-ответа, а для video/audio нода также поддерживает токен из POST /uploads, если upload endpoint возвращает retval
  • Если у вас уже есть payload.token из Max API, выберите Attachment Source = Token: нода отправит вложение без повторного скачивания и upload
  • Автоматический ретрай отправки с медиа-вложением при временной ошибке attachment.not.ready
  • Явная валидация ID получателя: 0 отклоняется с подсказкой по полям из Max Trigger
  • Интерактивные клавиатуры с кнопками
  • Pin / Unpin Message — закрепление и открепление сообщения в групповом чате (PUT/DELETE /chats/{chatId}/pin); параметр Notify Members контролирует, рассылать ли уведомление участникам
  • Forward Message — пересылка существующего сообщения в другой чат (POST /messages?chat_id= с body {link: {type: forward, message_id}})

Чаты

  • Получение информации о чате
  • Выход из групповых чатов
  • Edit Chat — обновление title / description / icon (только для групповых чатов; иконка задаётся URL'ом, MAX скачивает её сам)
  • Send Action — отправка индикаторов активности бота (typing_on, sending_photo/video/audio/file, mark_seen); парного typing_off в API нет — клиент сам гасит индикатор по таймауту, и иногда typing_on возвращает 200 OK без визуального индикатора (поведение клиента, не баг)

Триггеры

В пакете две ноды-триггера. Выбор зависит от того, есть ли у n8n публичный HTTPS endpoint.

Max Trigger (webhook)

  • Получение событий в реальном времени:
    • Новые сообщения в личных диалогах (message_created) и чатах (message_chat_created)
    • Нажатия на кнопки
    • События чатов
  • Поддержка webhook URL с интернационализированными доменами (IDN/Punycode) для корректной TLS-валидации
  • Дедупликация webhook'ов: при ретрае MAX или гонке при апдейте подписки workflow запускается ровно один раз. Ключ строится по update_type (см. ниже), состояние хранится в getWorkflowStaticData('node'), TTL 12 часов для известных типов и 60 секунд для неизвестных
  • Логирование: события триггера и lifecycle подписки идут через this.logger (debug/info/error), а не console.log — удобно фильтровать через стандартные средства n8n

Max Polling Trigger (long-polling)

Альтернатива webhook'у для сред без публичного HTTPS endpoint (закрытые сети, локальный n8n без проброса наружу).

  • Использует GET /updates?marker=&timeout=&limit= — соединение держится до 90 секунд, новые события приходят как только появляются
  • Marker (курсор) хранится в getWorkflowStaticData('global')['maxPollingMarker'] и переживает рестарт workflow
  • Backoff на временных ошибках: 1 → 2 → 4 → 8 → 16 → 30 секунд, сбрасывается на первом успешном запросе
  • На 401 Unauthorized — останавливает polling и пишет error в лог (auto-restart бесполезен без новых credentials)
  • Дедупликация по composite key (та же логика, что в webhook-триггере) — secondary safety net на случай потери marker'а при рестарте
  • Webhook и polling взаимоисключающие (ограничение MAX API): при активной webhook-подписке polling вернёт 0 update'ов. Параметр Force Unsubscribe Webhooks on Activate управляет поведением при активации:
    • false (по умолчанию) — если подписки есть, нода падает с понятной ошибкой и инструкцией
    • true — нода удаляет все активные подписки перед стартом polling
Когда использовать polling vs webhook

| Условие | Выбор | | ----------------------------------------------------- | ---------------------------------- | | n8n доступен по публичному HTTPS | Webhook (быстрее, меньше нагрузки) | | n8n за NAT / в VPN / без публичного DNS | Polling | | Нужна работа в разработке без ngrok / туннелей | Polling | | Один воркспейс — несколько workflow на ту же подписку | Webhook | | Latency критична (ms-уровень) | Webhook |

Настройка

  1. Создайте бота через @PrimeBot в Max мессенджере
  2. Получите токен доступа
  3. Добавьте токен в настройки ноды в n8n

Быстрый старт

Отправка сообщения

  1. Добавьте ноду Max в workflow
  2. Выберите операцию "Send Message"
  3. Укажите ID получателя; при необходимости добавьте текст
  4. Чтобы отправить только файл/медиа, оставьте Message Text пустым и добавьте вложение в Additional Fields → Attachments
  5. Чтобы переиспользовать уже загруженный файл, выберите Additional Fields → Attachments → Attachment Source = Token и вставьте File Token
  6. Запустите workflow

Удаление inline-кнопок при редактировании

  1. Выберите операцию Edit Message
  2. Укажите Message ID и новый текст
  3. Включите Clear Attachments, чтобы Max API получил attachments: [] и удалил текущую inline-клавиатуру

Получение сообщений (webhook)

  1. Добавьте ноду Max Trigger
  2. Настройте webhook
  3. Выберите типы событий для отслеживания

Получение сообщений (long-polling)

  1. Добавьте ноду Max Polling Trigger
  2. Выберите типы событий
  3. При первой активации — если есть активные webhook-подписки, либо деактивируйте все Max Trigger workflows, либо включите Force Unsubscribe Webhooks on Activate

Ресурсы

Лицензия

MIT