Files
turn-bridge/README.md
T
2026-06-01 19:04:04 +02:00

6.7 KiB
Raw Blame History

Go Chat Bridge

Мультичат-бот для объединения чатов в Telegram, Discord, VK, MAX и на вашем сайте.

Возможности

  • Пересылка сообщений между Telegram, Discord, VK, MAX и сайтом
  • Отображение имени отправителя в пересылаемых сообщениях ([TG], [DS], [VK], [MAX], [SITE])
  • Медиа: фото, документы, видео, аудио, голосовые, GIF
    • В Discord и Telegram медиа отправляются как вложения (файлы)
    • В VK и на сайт — ссылками на прокси (без токена бота в URL)
  • Медиа-прокси: ссылки из Telegram не содержат токен бота; файлы отдаются через ваш сервер
  • Webhook для приёма сообщений с сайта (POST /webhook)
  • Загрузка переменных из файла .env при запуске
  • Версия и дата сборки в логах при старте

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

1. Клонирование и зависимости

git clone <repo_url>
cd turn-bridge
go mod tidy

2. Токены и ID

  • Telegram: токен у @BotFather, ID чата/канала
  • Discord: токен приложения, ID канала
  • VK: токен группы с правами messages, groups (см. раздел ниже), VK_PEER_ID беседы, VK_GROUP_ID
  • MAX: токен в платформе MAX (Чат-боты → Интеграция), ID чата MAX_CHAT_ID

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

Создайте .env в корне проекта (при запуске бинарника переменные подхватываются автоматически):

# Обязательные
TELEGRAM_TOKEN=...
DISCORD_TOKEN=...
VK_TOKEN=...

# ID чатов
TELEGRAM_CHAT_ID=-1001234567890
DISCORD_CHANNEL_ID=123456789012345678
VK_PEER_ID=2000000002
VK_GROUP_ID=15469861

# MAX (опционально)
MAX_TOKEN=...
MAX_CHAT_ID=123456789
# MAX_USE_WEBHOOK=true  # для production: webhook вместо long polling
# MAX_WEBHOOK_SECRET=...  # секрет для проверки заголовка X-Max-Bot-Api-Secret

# Сайт: отправка сообщений на сайт и приём с сайта
SITE_API_URL=https://your-site.com/telebot/chat_api.php
SITE_API_TOKEN=...
WEBHOOK_API_KEY=...

# Медиа-прокси (чтобы в ссылках для VK и сайта не светить токен Telegram)
PUBLIC_URL=https://your-bridge-host:8080
MEDIA_PROXY_SECRET=длинная-секретная-строка
  • PUBLIC_URL — базовый URL, по которому доступен этот сервис (порт 8080). По нему отдаются ссылки вида PUBLIC_URL/media/....
  • MEDIA_PROXY_SECRET — секрет для подписи ссылок на медиа. Без него прокси отключён, в VK и на сайт пойдут прямые ссылки Telegram (с токеном бота).

4. Запуск

Локально:

./go-chat-bridge
# или
go run .

Docker:

docker-compose up -d --build

При сборке образа можно задать версию:
docker build --build-arg VERSION=1.0.0 -t chat-bridge .

Эндпоинты (порт 8080)

Путь Описание
POST /webhook Приём сообщений с сайта. Параметр key (или поле key в JSON) = WEBHOOK_API_KEY; в теле — text, sender.
POST /max/webhook Приём событий от MAX (режим webhook). Проверка заголовка X-Max-Bot-Api-Secret при заданном MAX_WEBHOOK_SECRET.
GET /media/<токен>/<имя_файла>.<расширение> Прокси медиа из Telegram. Токен подписан, расширение в URL для корректного отображения и сохранения.

Формат сообщений в чатах

  • [TG] Имя: текст — из Telegram
  • [DS] Имя: текст — из Discord
  • [VK] Имя: текст — из VK
  • [MAX] Имя: текст — из MAX
  • [SITE] Имя: текстс сайта

При наличии медиа к сообщению добавляются ссылки (в VK и на сайте — на прокси с расширением в конце, например .../media/xxx/file_332.jpg).

Получение токена VK

  1. В настройках группы VK включите Long Poll API и разрешите сообщения.
  2. Создайте Standalone-приложение VK, получите токен по ссылке:
    https://oauth.vk.com/authorize?client_id=ВАШ_CLIENT_ID&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=messages,groups&response_type=token&v=5.131
    
    Скопируйте access_token из адресной строки после редиректа.

Настройка MAX

  1. Создайте бота на платформе MAX и получите токен.
  2. Добавьте бота в групповой чат (бот должен быть администратором для получения событий из групп).
  3. Задайте MAX_TOKEN и MAX_CHAT_ID (ID чата, куда пересылать и откуда принимать сообщения).
  4. Long polling (по умолчанию) — для разработки и тестирования; запускается автоматически при наличии MAX_TOKEN.
  5. Webhook (production) — задайте MAX_USE_WEBHOOK=true, PUBLIC_URL=https://... (HTTPS на порту 443) и опционально MAX_WEBHOOK_SECRET. При старте бот зарегистрирует подписку POST /subscriptions на PUBLIC_URL/max/webhook.

Логи

При старте выводятся:

  • Загрузка .env (или сообщение, что файл не найден)
  • Версия и дата сборки (при сборке через Docker — дата сборки образа)
  • Состояние медиа-прокси (включён / выключен)
  • Служебные сообщения [Telegram], [Media], [Bridge] при пересылке и отдаче медиа

Лицензия

MIT