Find a file
Andrey Lugovskoy 77fa94914f
Some checks failed
Build / build (push) Has been cancelled
Fix: video-without-caption TG→MAX rejected as send-message.empty
v0.3.14 started sending format="markdown" for every TG→MAX forward
(including crossposts). For media-only posts (video without caption,
etc.) text ends up empty and MAX API rejects the payload with
  400 proto.payload errors.send-message.empty
because format is set but no text is present.

sendMaxDirectFormatted now drops format when text is "". This also
unsticks queued items that were retrying forever with the same 400.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 17:40:53 +04:00
.github/workflows Fix release workflow: pass changelog via file to avoid shell expansion 2026-04-16 21:40:15 +04:00
docs Restore migration files after revert (schema already applied on prod) 2026-04-02 12:39:01 +03:00
migrations Add created_at to pairs for pair growth stats 2026-04-24 15:40:28 +04:00
.env.example Update .env.example 2026-03-26 18:26:59 +02:00
.gitignore Route MAX replies to source TG thread + crosspost/UX fixes 2026-04-23 15:26:44 +04:00
admin.go Treat anonymous admins as admins for /bridge, /thread etc. 2026-04-20 17:31:37 +04:00
admin_test.go Treat anonymous admins as admins for /bridge, /thread etc. 2026-04-20 17:31:37 +04:00
bridge.go Route crosspost error notifications to owner DM, not to the channel 2026-04-24 16:29:52 +04:00
docker-compose.yml Use env vars for Postgres config in docker-compose 2026-02-15 13:01:59 +03:00
Dockerfile Security hardening and admin check tests 2026-02-15 15:05:41 +03:00
format.go Preserve links in TG→MAX crossposts; deliver text when video fails 2026-04-24 16:26:24 +04:00
format_test.go Migrate TG library to go-telegram/bot with forum topic support 2026-04-02 17:48:33 +03:00
go.mod Migrate TG library to go-telegram/bot with forum topic support 2026-04-02 17:48:33 +03:00
go.sum Migrate TG library to go-telegram/bot with forum topic support 2026-04-02 17:48:33 +03:00
LICENSE Add CC BY-NC 4.0 license 2026-03-17 13:09:35 +03:00
main.go Allow other bots' messages through bridge, filter only self 2026-04-03 11:45:29 +03:00
main_test.go Security hardening and admin check tests 2026-02-15 15:05:41 +03:00
Makefile Load .env in Makefile 2026-02-15 13:03:09 +03:00
markup.go Fix overlapping entities (bold+italic+strike) duplicating text 2026-04-08 22:31:12 +03:00
markup_test.go Fix overlapping entities (bold+italic+strike) duplicating text 2026-04-08 22:31:12 +03:00
max.go Add /thread_bridge: link a single TG forum thread to a separate MAX chat 2026-04-23 17:39:00 +04:00
mediagroup.go Route crosspost error notifications to owner DM, not to the channel 2026-04-24 16:29:52 +04:00
migrate.go Initial commit: TG↔MAX bridge 2026-02-15 03:58:24 +03:00
postgres.go Add created_at to pairs for pair growth stats 2026-04-24 15:40:28 +04:00
queue.go Route MAX replies to source TG thread + crosspost/UX fixes 2026-04-23 15:26:44 +04:00
README.md Document /thread_bridge and Part 1 reply routing in README 2026-04-23 17:42:34 +04:00
replacements.go Migrate TG library to go-telegram/bot with forum topic support 2026-04-02 17:48:33 +03:00
repository.go Add /thread_bridge: link a single TG forum thread to a separate MAX chat 2026-04-23 17:39:00 +04:00
sqlite.go Add created_at to pairs for pair growth stats 2026-04-24 15:40:28 +04:00
telegram.go Route crosspost error notifications to owner DM, not to the channel 2026-04-24 16:29:52 +04:00
tgsender.go Fix TG webhook: start library workers for update dispatch 2026-04-02 17:52:11 +03:00
tgsender_impl.go Fix TG webhook: start library workers for update dispatch 2026-04-02 17:52:11 +03:00
tgsender_impl_test.go Migrate TG library to go-telegram/bot with forum topic support 2026-04-02 17:48:33 +03:00
upload.go Fix: video-without-caption TG→MAX rejected as send-message.empty 2026-04-24 17:40:53 +04:00

Bridge Bot

MaxTelegramBridgeBot

Мост между Telegram и MAX мессенджером. Пересылает сообщения, медиа, файлы и редактирования между связанными чатами.

Сайт: maxtelegrambridge.ru

Боты: Telegram | MAX

❤ Поддержать проект

Возможности

  • Пересылка текстовых сообщений в обе стороны
  • Пересылка медиа: фото, видео, GIF, стикеры, документы, голосовые, аудио, кружки
  • Поддержка ответов (reply) — сохраняется контекст
  • Отслеживание редактирования сообщений. Если при редактировании добавлено медиа — отправляется как новое сообщение (MAX API не поддерживает редактирование вложений)
  • Удаление сообщений (MAX→TG). TG→MAX удаление невозможно — Telegram Bot API не отправляет событие удаления
  • Retry-очередь — при недоступности API сообщения сохраняются в БД и доставляются позже
  • Поддержка локального Telegram Bot API сервера (TG_API_URL)
  • Поддержка форумов (топиков) в TG-группах — сообщения из MAX приходят в нужный топик
  • Команда /thread — выбрать топик по умолчанию для сообщений из MAX
  • Команда /thread_bridge — связать отдельный TG-тред с отдельным MAX-чатом (форум ↔ несколько MAX-групп)
  • Reply из MAX автоматически попадает в тред исходного сообщения (а не в дефолтный)
  • Автосброс топика при отключении форума в группе
  • Настраиваемый префикс [TG] / [MAX]
  • Кросспостинг каналов с выбором направления (tg>max, max>tg, both)
  • Сохранение форматирования при кросспостинге (жирный, курсив, код, ссылки, зачёркнутый, подчёркнутый)
  • Управление кросспостингом через inline-кнопки
  • SQLite или PostgreSQL для хранения связок и маппинга сообщений

Форматирование при кросспостинге

Формат TG → MAX MAX → TG
Жирный
Курсив
Моноширинный
Зачёркнутый
Подчёркнутый
Ссылки
Цитата
Спойлер

Цитаты и спойлеры не поддерживаются MAX Bot API.

Установка

Из бинаря

Скачайте бинарь со страницы релизов и запустите:

chmod +x max-telegram-bridge-bot
./max-telegram-bridge-bot

Docker

docker run -e TG_TOKEN=your_token -e MAX_TOKEN=your_token ghcr.io/bearlogin/max-telegram-bridge-bot:latest

Docker Compose (с PostgreSQL)

cp .env.example .env
# Заполните TG_TOKEN и MAX_TOKEN в .env
docker compose up -d

PostgreSQL настраивается через .env:

POSTGRES_USER=bridge
POSTGRES_PASSWORD=bridge
POSTGRES_DB=bridge

Из исходников

git clone https://github.com/BEARlogin/max-telegram-bridge-bot.git
cd max-telegram-bridge-bot
go build -o max-telegram-bridge-bot .
./max-telegram-bridge-bot

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

1. Создайте ботов

  • Telegram: через @BotFather, отключите Privacy Mode (Bot Settings → Group Privacy → Turn off)
  • MAX: через business.max.ru

2. Настройте и запустите

Передайте токены через переменные окружения:

TG_TOKEN=your_token MAX_TOKEN=your_token ./max-telegram-bridge-bot

Или через export:

export TG_TOKEN=your_token
export MAX_TOKEN=your_token
./max-telegram-bridge-bot

3. Свяжите чаты

  1. Добавьте бота в Telegram-группу и MAX-группу
  2. В MAX сделайте бота админом группы
  3. В Telegram сделайте бота админом, если группа — супергруппа с темами (форум). В обычных группах админство не требуется (нужно только отключить Bot Privacy Mode через @BotFather, либо сделать бота админом)
  4. В одном из чатов отправьте /bridge
  5. Бот выдаст ключ — отправьте /bridge <ключ> в другом чате (в группе, не в ЛС бота)

4. Кросспостинг каналов

Настройка через личные сообщения с ботами (ничего не публикуется в каналах):

  1. Добавьте бота как админа в TG-канал и MAX-канал
  2. Перешлите любой пост из TG-канала в личку TG-бота → бот покажет ID канала
  3. В личке MAX-бота напишите /crosspost <TG_ID>
  4. Перешлите любой пост из MAX-канала в личку MAX-бота → кросспостинг настроен!

По умолчанию посты идут в обе стороны. Управление:

  • /crosspost (в личке любого бота) — список всех связок с кнопками
  • Перешлите пост из связанного канала в личку бота → появятся кнопки управления (направление, удаление)

Команды

Группы (bridge)

Команда Описание
/start, /help Инструкция
/bridge Создать ключ для связки
/bridge <ключ> Связать чат по ключу
/bridge prefix on/off Включить/выключить префикс [TG]/[MAX]
/unbridge Удалить связку
/thread Направить сообщения из MAX в текущий топик (форум-группы)

Форум-тред ↔ отдельная MAX-группа (thread-bridge)

В MAX нет тредов, но можно связать отдельные MAX-группы с конкретными тредами TG-форума — каждый тред получает своё зеркало.

Команда Где Описание
/thread_bridge TG, внутри треда Создать ключ для связки этого треда (нужны права админа, не работает в General)
/thread_bridge <ключ> MAX, отдельная группа Связать MAX-чат с TG-тредом по ключу
/thread_unbridge TG (в треде) или MAX Удалить связку треда

Один MAX-чат может быть зеркалом максимум одного треда и не может одновременно участвовать в /bridge. В одной форум-группе может быть несколько /thread_bridge (по одной на тред) параллельно с обычным /bridge для General.

Каналы (crosspost) — через личку бота

Команда Где Описание
/crosspost TG или MAX личка Список всех связок с кнопками управления
/crosspost <TG_ID> MAX личка Начать настройку (затем переслать пост из MAX-канала)
Переслать пост из канала TG или MAX личка Показать ID (если не связан) или кнопки управления

Кнопки управления позволяют менять направление (TG→MAX, MAX→TG, оба) и удалять связку.

5. Автозамены в кросспостинге

Автоматическая замена текста при пересылке постов. Удобно для UTM-меток, ссылок и любых строк.

  1. /crosspost → нажмите 🔄 Замены на нужной связке
  2. Выберите направление: + TG→MAX или + MAX→TG
  3. Выберите тип: Весь текст или Только ссылки
  4. Отправьте правило: from | to

Для регулярных выражений: /regex/ | replacement

Пример: utm_source=tg | utm_source=max — при пересылке из TG в MAX все вхождения utm_source=tg заменятся на utm_source=max.

Переменные окружения

Переменная Описание По умолчанию
TG_TOKEN Токен Telegram бота — (обязательно)
MAX_TOKEN Токен MAX бота — (обязательно)
DB_PATH Путь к SQLite базе bridge.db
DATABASE_URL DSN для PostgreSQL (если задана — SQLite игнорируется)
TG_BOT_URL Ссылка на TG-бота (показывается в /help) https://t.me/MaxTelegramBridgeBot
MAX_BOT_URL Ссылка на MAX-бота (показывается в /help) https://max.ru/id710708943262_bot
WEBHOOK_URL Базовый URL для webhook, например https://bridge.example.com (если не задан — long polling). Эндпоинты: /tg-webhook, /max-webhook
WEBHOOK_PORT Порт для webhook сервера 8443
LOG_LEVEL Уровень логирования: debug, info, warn, error info
TG_API_URL URL локального Telegram Bot API сервера, например http://localhost:8081. Снимает лимиты на размер файлов
ALLOWED_USERS Белый список Telegram user ID через запятую. Если не задан — доступ открыт для всех
TG_MAX_FILE_SIZE_MB Максимальный размер файла из Telegram в Max. Рекомендуется 20 МБ (если не используется локальный сервер API), если не задано - без ограничений
MAX_MAX_FILE_SIZE_MB Максимальный размер файла из Max в Telegram. Рекомендуется 20 МБ (если не используется локальный сервер API), если не задано - без ограничений
MAX_ALLOWED_EXTENSIONS Список расширений файлов через запятую, которые разрешены к отправке. Если не задано - без ограничений
MESSAGE_FORMAT Формат сообщений. inline (текущий Имя: текст) и newline (Имя:\nтекст) inline

Лицензия

CC BY-NC 4.0 — свободное использование и модификация, но коммерческое использование только с письменного разрешения автора.

Разработчик

bearlogin.dev — разработка ботов, сайтов, лендингов и digital-продуктов под ключ. Консультации по автоматизации и AI.