Public Access
6.7 KiB
6.7 KiB
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
- В настройках группы VK включите Long Poll API и разрешите сообщения.
- Создайте 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.131access_tokenиз адресной строки после редиректа.
Настройка MAX
- Создайте бота на платформе MAX и получите токен.
- Добавьте бота в групповой чат (бот должен быть администратором для получения событий из групп).
- Задайте
MAX_TOKENиMAX_CHAT_ID(ID чата, куда пересылать и откуда принимать сообщения). - Long polling (по умолчанию) — для разработки и тестирования; запускается автоматически при наличии
MAX_TOKEN. - 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