Единый шлюз VK + MAX -> OpenClaw через fake Mattermost API.
OpenClaw подключается к мосту как к обычному Mattermost-каналу. Мост пересылает сообщения в VK и/или MAX и обратно через Long Poll.
Вся фильтрация пользователей — на уровне моста. OpenClaw получает статическую конфигурацию и доверяет всему, что прошло через мост.
- Go 1.22+
- Токен сообщества VK и/или токен бота MAX
git clone https://github.com/PiDmitrius/vk-mattermost.git
cd vk-mattermost
make installБинарь ставится в ~/.local/bin/vk-mattermost, регистрируется как systemd user service с автозапуском.
- Создать
~/.config/vk-mattermost/config.jsonс токенами (списки пользователей пока пустые) make install— собрать и запустить- Написать боту
/i— получить свой ID - Добавить полученный ID в конфиг моста,
systemctl --user restart vk-mattermost - Добавить канал mattermost в
openclaw.json(см. ниже) - Перезапустить OpenClaw
~/.config/vk-mattermost/config.json — главный фильтр доступа:
{
"vk_token": "vk1.a.YOUR_TOKEN",
"allowed_users": [12345678],
"max_token": "YOUR_MAX_BOT_TOKEN",
"max_allowed_users": [87654321],
"listen": ":8065"
}Все поля опциональны, кроме хотя бы одного из vk_token / max_token.
vk_token— токен сообщества VK (Настройки -> API -> Ключ доступа)allowed_users— VK ID пользователей, которым разрешено писатьmax_token— токен бота MAX (Чат-боты -> Интеграция -> Получить токен)max_allowed_users— MAX user ID, которым разрешено писатьlisten— адрес привязки (по умолчанию:8065)
Фильтрация в группах: если пользователь есть в max_allowed_users, его сообщения из групповых чатов тоже проходят. Отдельно прописывать группы не нужно.
При первом запуске списки пользователей можно оставить пустыми ([]). Используйте команду /i для получения ID (см. ниже), затем добавьте их в конфиг и перезапустите мост.
chmod 600 ~/.config/vk-mattermost/config.json
OpenClaw получает статическую конфигурацию — фильтрацией он не занимается. Добавить в openclaw.json:
"channels": {
"mattermost": {
"enabled": true,
"baseUrl": "http://localhost:8065",
"botToken": "any-token",
"allowPrivateNetwork": true,
"dmPolicy": "open",
"allowFrom": ["*"]
}
}botToken— токен не нужен, мост работает на localhost без аутентификации, любое непустое значениеdmPolicy: "open"+allowFrom: ["*"]— принимать всё, что пришло через мостallowPrivateNetwork: true— обязателен для localhost-моста (иначе SSRF-блокировка)
Любой пользователь может написать боту /i для получения своих ID.
В DM бот ответит:
ID пользователя = 87654321
В групповом чате:
ID пользователя = 87654321
ID чата = -987654321
Эти ID нужны для конфигурации моста.
Документация: https://dev.vk.com/ru/api/bots/getting-started
- Настройки сообщества -> API -> создать ключ доступа (Сообщения + Управление)
- Включить Long Poll API: версия 5.199, событие "Входящие сообщения"
- Написать боту
/i, полученный ID добавить вallowed_users
Документация: https://dev.max.ru/docs/chatbots Платформа: https://business.max.ru/self/#/chat-bots
- Создать бота: business.max.ru -> Чат-боты -> Интеграция -> Получить токен
- Написать боту
/iв DM, полученный ID добавить вmax_allowed_users - Групповые чаты: добавить бота в группу и назначить админом (обязательно для получения сообщений)
| Источник | user_id в OpenClaw | channel_id в OpenClaw |
|---|---|---|
| VK DM | vk-user-{vk_id} |
vk-dm-{vk_id} |
| MAX DM | max-user-{user_id} |
max-dm-{user_id} |
| MAX группа | max-chat-{chat_id} |
max-chat-{chat_id} |
Мост работает как systemd user service:
systemctl --user status vk-mattermost # статус
systemctl --user restart vk-mattermost # перезапуск (после изменений в config.json)
systemctl --user stop vk-mattermost # остановкаПосле изменений в коде — пересобрать и переустановить:
make install # go build + копирование в ~/.local/bin + перезапуск сервисаЛоги:
journalctl --user -u vk-mattermost -f