Шлюз обмена сообщениями

Общайтесь с Hermes через Telegram, Discord, Slack, WhatsApp, Signal, SMS, электронную почту, Home Assistant, Mattermost, Matrix, DingTalk, Feishu/Lark, WeCom, Weixin, BlueBubbles (iMessage), QQ, Yuanbao, Microsoft Teams, LINE или ваш браузер. Шлюз — это единый фоновый процесс, который поддерживает все настроенные платформы, управляет сессиями, запускает задачи по расписанию и отправляет голосовые сообщения.

Полный набор голосовых функций — включение режима микрофона в CLI, голосовые ответы в сообщениях и разговоры в голосовых каналах Discord — см. в разделах Голосовой режим и Использование голосового режима с Hermes.

Сравнение платформы

Платформа Голос Изображения Файлы Ветки Реакции Печать Потоковая передача
Телеграмма
Раздор
слабый
Google Чат
WhatsApp
Сигнал
СМС
Электронная почта
Домашний помощник
Самое важное
Матрица
ДинТок
Фейшу/Жаворонок
ВеКом
Обратный звонок WeCom
Вэйсинь
Синие пузыри
QQ
Юаньбао
Команды Майкрософт
ЛИНИЯ

Голос = аудиоответы TTS и/или транскрипция голосовых сообщений. Изображения = отправка/получение изображений. Файлы = отправка/получение вложений. Ветки = обсуждение в видеоветок. Реакции = Состояние эмодзи сообщений. Печать = индикатор набора текста во время обработки. Потоковая связь = прогрессивные обновления сообщений посредством редактирования.

Архитектура

flowchart TB
    subgraph Gateway["Шлюз Hermes"]
        subgraph Adapters["Адаптеры платформ"]
            tg[Telegram]
            dc[Discord]
            wa[WhatsApp]
            sl[Slack]
            gc[Google Chat]
            sig[Signal]
            sms[SMS]
            em[Email]
            ha[Home Assistant]
            mm[Mattermost]
            mx[Matrix]
            dt[DingTalk]
    fs[Feishu/Lark]
    wc[WeCom]
    wcb[WeCom Callback]
    wx[Weixin]
    bb[BlueBubbles]
    qq[QQ]
    yb[Yuanbao]
    ms[Microsoft Teams]
    api["Сервер API<br/>(совместимый с OpenAI)"]
    wh[Webhooks]
        end

        store["Хранилище сессий<br/>на каждый чат"]
        agent["AIAgent<br/>run_agent.py"]
        cron["Планировщик Cron<br/>тикает каждые 60 с"]
    end

    tg --> store
    dc --> store
    wa --> store
    sl --> store
    gc --> store
    sig --> store
    sms --> store
    em --> store
    ha --> store
    mm --> store
    mx --> store
    dt --> store
    fs --> store
    wc --> store
    wcb --> store
    wx --> store
    bb --> store
    qq --> store
    yb --> store
    ms --> store
    api --> store
    wh --> store
    store --> agent
    cron --> store

Каждая платформа адаптера получает сообщения, направляет их через хранилище сессий для каждого чата и передает AIAgent для обработки. Шлюз также запускает планировщик cron, отсчитывающий 60 секунд для выполнения запланированных задач.

Быстрая настройка

Самый простой способ настройки платформы для обмена сообщениями — интерактивный мастер:

hermes gateway setup        # Интерактивная настройка для всех платформ обмена сообщениями

Это проведет вас через диапазон каждой платформы с выбором стрелок, определит, какая платформа уже настроена, и предложит запустить/перезапустить шлюз по завершении.

Команды шлюза

hermes gateway              # Запуск в фореграунде
hermes gateway setup        # Интерактивная настройка платформ обмена сообщениями
hermes gateway install      # Установка как пользовательская служба (Linux) / служба launchd (macOS)
sudo hermes gateway install --system   # Linux: установка системной службы, запускаемой при загрузке
hermes gateway start        # Запуск службы по умолчанию
hermes gateway stop         # Остановка службы по умолчанию
hermes gateway status       # Проверка статуса службы по умолчанию
hermes gateway status --system         # Linux: явная проверка системной службы

Команды чата (внутри обмена сообщениями)

Команда Описание
/new или /reset Начать новый разговор
/модель [провайдер:модель] Показать или изменить модель (поддерживается синтаксис провайдер:модель)
/personality [имя] Установить личность
/повторить Повторить последнее сообщение
/отменить Удалить последний обмен
/статус Показать информацию о сессии
/воами Показать уровень вашего доступа к слэш-командам в этой области (администратор/пользователь/неограниченный)
/стоп Остановить работающего агента
/утвердить Подтвердить ожидаемую опасную команду
/отказать Отклонить ожидаемую опасную команду
/sethome Установить этот чат как домашний канал
/сжать Вручную сжать контекст разговора
/title [имя] Установить или название показать сессию
/resume [имя] Возобновить ранее названную сессию
/использование Показать использование токенов для этой сессии
/insights [дни] Показать аналитику использования
/рассуждение [уровень\|показать\|скрыть] Изменить уровень регулирования или переключить инструменты рассуждений
/voice [вкл\|выкл\|tts\|присоединиться\|выйти\|статус] Управление голосовыми ответами в сообщениях и поведением в голосовых каналах Discord
/rollback [число] Список или восстановление контрольных точек файловой системы
/background <промпт> Запустить приглашение в отдельной фоновой сессии
/перезагрузка-MCP Перезагрузить MCP-серверы из конфигурации
/обновить Обновить Агент Гермес до последней версии
/помощь Показать доступные команды
/<имя-навыка> Вызовите любой установленный навык

Управление сессиями

Сохранение сессий

Сессия переключается между сообщениями до сброса. Агент помнит контекст разговора.

Политики сброса

Сессии сбрасываются на основе настраиваемых политиков:

Политика По умолчанию Описание
Ежедневно 4:00 Сброс в определенный час каждый день
Неактивность 1440 мин Сброс после N минут бездействия
Комбинированная (объединено) С осуществлением того, что происходит раньше

Настройте переопределение для каждой платформы в ~/.hermes/gateway.json:

{
  "reset_by_platform": {
    "telegram": { "mode": "idle", "idle_minutes": 240 },
    "discord": { "mode": "idle", "idle_minutes": 60 }
  }
}

Безопасность

По умолчанию шлюз запрещает все пользователи, не входящие в белый список или не подключенные через личные сообщения. Это безопасное поведение по умолчанию для бота с доступом к терминалу.

# Ограничить определёнными пользователями (рекомендуется):
TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=123456789012345678
SIGNAL_ALLOWED_USERS=+155****4567,+155****6543
SMS_ALLOWED_USERS=+155****4567,+155****6543
EMAIL_ALLOWED_USERS=trusted@example.com,colleague@work.com
MATTERMOST_ALLOWED_USERS=3uo8dkh1p7g1mfk49ear5fzs5c
MATRIX_ALLOWED_USERS=@alice:matrix.org
DINGTALK_ALLOWED_USERS=user-id-1
FEISHU_ALLOWED_USERS=ou_xxxxxxxx,ou_yyyyyyyy
WECOM_ALLOWED_USERS=user-id-1,user-id-2
WECOM_CALLBACK_ALLOWED_USERS=user-id-1,user-id-2
TEAMS_ALLOWED_USERS=aad-object-id-1,aad-object-id-2

# Или разрешить
GATEWAY_ALLOWED_USERS=123456789,987654321

# Или явно разрешить всех пользователей (НЕ рекомендуется для ботов с доступом к терминалу):
GATEWAY_ALLOW_ALL_USERS=true

Состыковка через личные сообщения (альтернативно белым спискам)

Вместо ручной настройки идентификатора пользователя неизвестные пользователи получают одноразовый код состыковки, когда пишут боту в личку:

# Пользователь видит: "Код состыковки: XKGH5N7P"
# Вы подтверждаете его с помощью:
hermes pairing approve telegram XKGH5N7P

# Другие команды состыковки:
hermes pairing list          # Просмотр ожидающих + подтверждённых пользователей
hermes pairing revoke telegram 123456789  # Удаление доступа

Коды состыковки истекают через 1 час, имеют ограничение скорости и обеспечивают криптографическую случайность.

Контроль доступа к слэш-командам

После того, как пользователи допущены, их можно разделить на администраторов (полный доступ к слэш-командам) и обычных пользователей (только те слэш-команды, которые вы явно разрешили). Это применимо для каждой платформы и каждой (личные области сообщений или группы/канала) и работает через команду реестра с первого раза, поэтому это происходит как со встроенными, так и с зарегистрированными плагинами слэш-команд без необходимости связывания для каждой функции.

gateway:
  platforms:
    discord:
      extra:
        allow_from: ["111", "222", "333"]
        allow_admin_from: ["111"]                    # администраторы → все слэш-команды
        user_allowed_commands: [status, model]       # что могут выполнять обычные пользователи
        # Опционально: отдельная область для группы/канала
        group_allow_admin_from: ["111"]
        group_user_allowed_commands: [status]

Поведение:

Используйте /whoami на любой платформе, чтобы увидеть активную область, ваш уровень (администратор/пользователь/неограниченный) и какие слэш-команды вы можете выполнить. Примеры для конкретной платформы см. на страницах Telegram и Discord.

Прерывание агента

Отредактируйте любое сообщение, пока агент работает, чтобы прервать его. Ключевые особенности:

Очередь, прерывание и управление (режим занят-вход)

По умолчанию отправка сообщения занятому агенту прерывает его. Доступны два других режима:

display:
  busy_input_mode: steer   # или queue, или interrupt (по умолчанию)
  busy_ack_enabled: true   # установите false, чтобы полностью отключить ответ ⚡/⏳/⏩ в чате

Когда вы впервые отправляете сообщение занятому агенту на любой платформе, Hermes добавил однострочное напоминание о busy-ack, объясняющее этап («💡 Совет для новичков — …»). Напоминание о выполнении один раз для установки — флажок подonboarding.seen.busy_input_prompt` фиксирует это. Удалите этот ключ, чтобы снова увидеть подсказку.

Если busy-ack кажется вам шумным — особенно при голосовом вводе или отправке сообщений — установите display.busy_ack_enabled: false. Ваш ввод по-прежнему происходит в свою очередь/управляется/прерывается как обычно, только ответ в чате скрыт.

Уведомления о прогрессивных инструментах

Управляйте активностями инструментов в ~/.hermes/config.yaml:

display:
  tool_progress: all    # off | new | all | verbose
  tool_progress_command: false  # установите true, чтобы включить /verbose в сообщениях

При включении бот отправляет сообщения о статусе по мере работы:

💻 `ls -la`...
🔍 web_search...
📄 web_extract...
🐍 execute_code...

Фоновые сессии

Запустите подсказку в отдельной фоновой сессии, чтобы агент работал над ним независимо, пока ваш основной чат остается отзывчивым:

/background Проверь все серверы в кластере и сообщи, какие не работают

Согласование Гермеса:

🔄 Фоновая задача запущена: "Проверь все серверы в кластере..."
   ID задачи: bg_143022_a1b2c3

Как это работает

Каждый запрос /background блокчейнет отдельный экземпляр агента, который работает асинхронно:

Уведомления фоновых процессов

Когда агент, выполняющий фоновую сессию, использует terminal(background=true) для запуска долгосрочных рабочих процессов (серверы, сборка и т.д.), шлюз может отправить запрос обновления в ваш чат. Управляйте этим с помощью display.background_process_notifications в ~/.hermes/config.yaml:

display:
  background_process_notifications: all    # all | result | error | off
Режим Что вы чувствуете
все Обновление результатов во время работы и окончательное сообщение о завершении (по умолчанию)
результат Единственное последнее сообщение о завершении (независимо от выхода кода)
ошибка Только итоговое сообщение при ненулевом коде вывода
выключено Никаких замечаний от наблюдателей за процессом

Вы также можете задать это через переменное окружение:

HERMES_BACKGROUND_NOTIFICATIONS=result

Варианты использования

Управление службами

Linux (systemd)

hermes gateway install               # Установить как пользовательскую службу
hermes gateway start                 # Запустить службу
hermes gateway stop                  # Остановить службу
hermes gateway status                # Проверить статус
journalctl --user -u hermes-gateway -f  # Просмотр логов

# Включить lingering (продолжает работу после выхода из системы)
sudo loginctl enable-linger $USER

# Или установить системную службу, запускаемую при загрузке, работающую от вашего имени
sudo hermes gateway install --system
sudo hermes gateway start --system
sudo hermes gateway status --system
journalctl -u hermes-gateway -f

Используйте пользовательскую службу на ноутбуках и компьютерах. Используйте системную службу на VPS или безголовых хостах, которые должны начать работу при включении без использования systemd linger.

Избегайте одновременной установки и пользовательской, и системной службы шлюза, если только вы этого действительно не хотите. Гермес предупредит, если применить обе, так как поведение start/stop/status становится неоднозначным.

ℹ️ Info

Несколько настроек Если вы запустите несколько установок Hermes на одной машине (с разными каталогами HERMES_HOME), вы получите собственное имя службы systemd. По умолчанию ~/.hermes использует hermes-gateway; другие установки используют hermes-gateway-<хэш>. Команды hermesшлюз автоматически нацеливаются на правильный сервис для вашего текущего HERMES_HOME.

macOS (запущен)

hermes gateway install               # Установить как агент launchd
hermes gateway start                 # Запустить службу
hermes gateway stop                  # Остановить службу
hermes gateway status                # Проверить статус
tail -f ~/.hermes/logs/gateway.log   # Просмотр логов

Сгенерированный plist находится в ~/Library/LaunchAgents/ai.hermes.gateway.plist. Он содержит три переменных окружения:

Наборы инструментов для конкретных платформ

каждая платформа имеет свой набор инструментов:

Платформа Набор инструментов Возможности
интерфейс командной строки гермес-кли Полный доступ
Телеграмма гермес-телеграмма Полные инструменты, терминалы
Раздор гермес-раздор Полные инструменты, терминалы
WhatsApp Гермес-WhatsApp Полные инструменты, терминалы
слабый гермес-слэк Полные инструменты, терминалы
Google Чат гермес-google_chat Полные инструменты, терминалы
Сигнал гермес-сигнал Полные инструменты, терминалы
СМС гермес-смс Полные инструменты, терминалы
Электронная почта гермес-электронная почта Полные инструменты, терминалы
Домашний помощник Гермес-помощник по дому Полные инструменты + управление устройствами высокой доступности (ha_list_entities, ha_get_state, ha_call_service, ha_list_services)
Самое важное гермес-матерость Полные инструменты, терминалы
Матрица гермес-матрица Полные инструменты, терминалы
ДинТок гермес-дингтолк Полные инструменты, терминалы
Фейшу/Жаворонок гермес-фейшу Полные инструменты, терминалы
ВеКом гермес-веком Полные инструменты, терминалы
Обратный звонок WeCom hermes-wecom-обратный вызов Полные инструменты, терминалы
Вэйсинь Гермес-Вэйсинь Полные инструменты, терминалы
Синие пузыри гермес-голубые пузыри Полные инструменты, терминалы
QQBot гермес-qqbot Полные инструменты, терминалы
Юаньбао Гермес-Юаньбао Полные инструменты, терминалы
Команды Майкрософт гермес-команды Полные инструменты, терминалы
Серверный API гермес-апи-сервер Полные инструменты (без clarify, send_message, text_to_speech — программный доступ не имеет интерактивного пользователя)
Вебхуки гермес-вебхук Полные инструменты, терминалы

дальнейшее шаги