Каналы и интеграции
Канал — это способ доставить сообщение в Велес и получить ответ обратно. Каналом может быть интерфейс Велеса, CLI, Telegram, WhatsApp, Discord, Feishu, Slack, email, QQ, Matrix, DingTalk, WeCom, Mochat или интеграция-расширение.Общая модель
Канал отвечает за доставку сообщений. Цикл работы Велеса остаётся общим: Это значит, что инструменты, память, модель и правила Велеса применяются независимо от того, пришло сообщение из интерфейса, CLI или Telegram.Общие настройки channels
Для внешних каналов подсказки об инструментах лучше включать осторожно: они могут раскрывать имена файлов, команды или внутреннюю структуру задачи.
allowFrom
Большинство каналов поддерживает whitelist отправителей:[]— запретить всем;["*"]— разрешить всем;- список id — разрешить только указанным отправителям.
["*"] для публичного Велеса с включёнными файловыми инструментами, оболочкой или MCP.
Telegram
Telegram обычно требует токен Велеса Telegram иallowFrom.
Другие встроенные каналы
В кодовой базе есть встроенные модули каналов для:
Точные поля зависят от конфигурации канала. Общий принцип одинаковый: включить
enabled, задать учётные данные, настроить allowFrom, запустить veles gateway.
Push-уведомления (Firebase Cloud Messaging)
Каналpush доставляет исходящие сообщения агента как web push-уведомления на подписанные устройства: браузер и установленную PWA на Windows, Android и iPadOS/iOS (iOS 16.4+, PWA должна быть добавлена на домашний экран). Канал только исходящий: любое OutboundMessage с channel="push" рассылается на все зарегистрированные токены устройств (или на один токен, если chat_id совпадает с ним).
Конфигурация в channels.push (config.json):
notifyOnReplies — зеркалирование ответов веб-чата в push. Когда включено, каждый финальный ответ агента в веб-сессии автоматически отправляется как push-уведомление, если ни одна вкладка/PWA сейчас не видима. Вкладки сообщают видимость через POST /push/presence; запись считается видимой в течение presenceTtlSeconds секунд после последней отметки. По умолчанию это 100 секунд, потому что Nerve повторяет видимую отметку примерно каждые 45 секунд. Это логика приложения, а не решение агента: прогресс-сообщения и повторы не зеркалируются. Переключается в Nerve → настройки конфигурации → каналы → push.
presenceTtlSeconds — время в секундах, в течение которого последняя видимая вкладка/PWA подавляет push-уведомления с ответами веб-чата. Минимальное значение при чтении конфигурации — 1 секунда.
Секреты хранятся в зашифрованном хранилище Велеса (см. Секреты):
channels.push.apiKey— web API key Firebase. Он в любом случае отдается браузеру (это публичное значение по модели Firebase), но по политике деплоя хранится в секретах.channels.push.serviceAccount— полный JSON сервисного аккаунта Firebase. Это настоящий серверный секрет: им подписываются отправки через FCM HTTP v1.
- Создайте проект в Firebase console и включите Cloud Messaging.
- Добавьте web-приложение для каждого домена/инстанса — каждое получает свой
appId(остальные значения проекта общие). - В Cloud Messaging → Web configuration сгенерируйте пару ключей Web Push (VAPID) — публичный ключ идет в
vapidKey. - В Project settings → Service accounts скачайте JSON сервисного аккаунта и сохраните его строкой в секрет
channels.push.serviceAccount.
~/.veles/push_subscriptions.json, каждый сервер знает только свои подписки. Учтите, что при общем Firebase-проекте сервисный аккаунт технически способен отправлять на токены любого инстанса этого проекта; для полной изоляции используйте отдельные проекты.
Подписка устройств выполняется веб-интерфейсом (Nerve) автоматически: при открытии приложения запрашивается разрешение на уведомления (на Safari/iOS — через баннер с одним нажатием), затем FCM-токен регистрируется через POST /push/subscriptions. Недействительные токены (UNREGISTERED) удаляются автоматически при отправке.
WhatsApp и мост
Для WhatsApp используется мост. Вход запускается командой:Каналы-расширения
Велес поддерживает архитектуру расширений для каналов.veles onboard добавляет конфигурацию по умолчанию для обнаруженных встроенных каналов и каналов-расширений, не перетирая существующие значения.
Для разработки канала читайте Руководство по плагинам каналов.
Сессии по каналам
Обычно ключ сессии строится так:Каналы и безопасность
Перед включением внешнего канала проверьте:allowFromне пустой случайно и не["*"]без причины;tools.restrictToWorkspaceвключён;execвыключен или ограничен;- секреты не лежат в рабочей области открытым текстом;
- токен интерфейса и сервера Велеса не опубликован;
- прогресс и подсказки об инструментах не раскрывают лишнего.
