№ настройки сигнала

Гермес остается к Сигналу через демон signal-cli, работая в HTTP-режиме. Адаптер передаёт сообщения в мгновение ока через SSE (события, отправленные сервером) и отправляет ответы через JSON-RPC.

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

ℹ️ Info

Без новых зависимостей Python Адаптер Signal использует httpx (уже является основной зависимостью Hermes) для всей коммуникации. Дополнительные пакеты Python не требуются. Вам нужно установить signal-cli только извне.


Предварительные требования

Установка signal-cli

# macOS
brew install signal-cli

# Linux (скачать последний релиз)
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} \
  https://github.com/AsamK/signal-cli/releases/latest | sed 's/^.*\/v//')
curl -L -O "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}.tar.gz"
sudo tar xf "signal-cli-${VERSION}.tar.gz" -C /opt
sudo ln -sf "/opt/signal-cli-${VERSION}/bin/signal-cli" /usr/local/bin/
```:::осторожно
signal-cli **отсутствует** в репозиториях apt или snap. Установка для Linux выше загружается напрямую из [релизов GitHub](https://github.com/AsamK/signal-cli/releases).</div>
---

## Шаг 1: Привяжите свою учётную запись Signal

Signal-cli работает как **связанное устройство**  как WhatsApp Web, но для Signal. Ваш телефон остается основным устройством.
```bash
# Сгенерировать URI для привязки (отображает QR-код или ссылку)
signal-cli link -n "HermesAgent"
  1. Откройте Сигнал на телефоне.
  2. Перейдите в ** Настройки → Связанные устройства**.
  3. Нажмите Связать новое устройство
  4. Отсканируйте QR-код или введите URI.

Шаг 2: Запустить демон signal-cli

# Замените +1234567890 на ваш номер телефона Signal (формат E.164)
signal-cli --account +1234567890 daemon --http 127.0.0.1:8080
```:::совет
Держите это работающим на фоне. Вы можете использовать `systemd`, `tmux`, `screen` или запустить как сервис.</div>
Проверьте, что он работает:
```bash
curl http://127.0.0.1:8080/api/v1/check
# Должен вернуть: {"versions":{"signal-cli":...}}

Шаг 3: Настраиваем Гермес

Самый простой способ:

hermes gateway setup

Выберите Сигнал в меню платформы. Мастер:

  1. Проверить, установлен ли signal-cli
  2. Запросить HTTP URL (по умолчанию: http://127.0.0.1:8080)
  3. Проверить связь с демоном.
  4. Запросить номер телефона вашей учетной записи.
  5. Настроить разрешённые пользователи и политику доступа.

Ручная настройка

Добавьте в ~/.hermes/.env:

# Обязательно
SIGNAL_HTTP_URL=http://127.0.0.1:8080
SIGNAL_ACCOUNT=+1234567890

# Безопасность (рекомендуется)
SIGNAL_ALLOWED_USERS=+1234567890,+0987654321    # Разделённые запятыми номера E.164 или UUID

# Опционально
SIGNAL_GROUP_ALLOWED_USERS=groupId1,groupId2     # Включить группы (опустите для отключения, * для всех)
SIGNAL_HOME_CHANNEL=+1234567890                  # Цель доставки по умолчанию для задач cron

Затем запустите шлюз:

hermes gateway              # На переднем плане
hermes gateway install      # Установить как пользовательский сервис
sudo hermes gateway install --system   # Только Linux: системный сервис при загрузке

Контроль доступа

Доступ к ЛС

Доступ к ЛС следует тому же шаблону, что и для всех других платформ Hermes:

  1. SIGNAL_ALLOWED_USERS установлен → только эти пользователи могут писать
  2. Белый список не задан → неизвестные пользователи получают код привязки DM (одобрите через hermes pairing approve signal CODE)
  3. SIGNAL_ALLOW_ALL_USERS=true → любой может писать (используйте с осторожностью)

Доступ к группам

Доступ к группам контролируется переменной окружения SIGNAL_GROUP_ALLOWED_USERS:

Конфигурация Поведение
Не задана (по умолчанию) Все групповые сообщения игнорируются. Бот отвечает только в ЛС.
Задана с ID групп Отслеживаются только перечисленные группы (например, groupId1,groupId2).
Задана как * Бот отвечает в любой группе, где он состоит.

Возможности

Вложения

Адаптер поддерживает отправку и получение медиа в обоих направлениях.

Входящие (пользователь → агент):

Исходящие (агент → пользователь):

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

Все исходящие медиа проходят через стандартный API вложений Signal. В отличие от некоторых платформ, Signal не различает голосовые сообщения и вложения файлов на уровне протокола.

Ограничение размера вложений: 100 МБ (в обоих направлениях).

⚠️ Warning

Серверы Signal будут ограничивать скорость загрузки вложений, адаптер использует планировщик для отправки нескольких изображений, группируя изображения в пакеты по 32 и регулируя загрузки в соответствии с политикой сервера Signal.

Нативное форматирование, цитаты ответов и реакции

Сообщения Signal отображаются с нативным форматированием вместо буквальных символов markdown. Адаптер преобразует markdown (**жирный**, *курсив*, `код`, ~~зачёркнутый~~, ||спойлер||, заголовки) в bodyRanges Signal, так что текст отображается с реальным стилем на клиенте получателя, а не как видимые символы ** / `.

Цитаты ответов. Когда Hermes отвечает на конкретное сообщение, он теперь публикует нативный ответ, цитирующий оригинал — тот же элемент интерфейса, который видят пользователи Signal, когда сами используют "Ответить". Это автоматически для ответов, сгенерированных на входящее сообщение.

Реакции. Агент может реагировать на сообщения через стандартный API реакций; реакции отображаются в Signal как эмодзи-реакции на указанное сообщение, а не как дополнительный текст.

Ничто из этого не требует дополнительной настройки — это работает по умолчанию в последних сборках signal-cli. Если ваша версия signal-cli слишком старая, Hermes возвращается к обычной текстовой доставке и записывает одноразовое предупреждение в лог.

Индикаторы набора текста

Бот отправляет индикаторы набора текста во время обработки сообщений, обновляя каждые 8 секунд.

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

Все номера телефонов автоматически скрываются в логах: - +15551234567+155****4567 - Это относится как к логам шлюза Hermes, так и к глобальной системе сокрытия

Заметка для себя (настройка с одним номером)

Если вы запускаете signal-cli как связанное вторичное устройство на своём собственном номере телефона (а не на отдельном номере бота), вы можете взаимодействовать с Hermes через функцию "Заметка для себя" в Signal.

Просто отправьте сообщение самому себе с телефона — signal-cli подхватывает его, и Hermes отвечает в той же беседе.

Как это работает: - Сообщения "Заметка для себя" приходят как конверты syncMessage.sentMessage - Адаптер определяет, когда они адресованы собственной учётной записи бота, и обрабатывает их как обычные входящие сообщения - Защита от эха (отслеживание временных меток отправки) предотвращает бесконечные циклы — собственные ответы бота автоматически отфильтровываются

Никакой дополнительной настройки не требуется. Это работает автоматически, если SIGNAL_ACCOUNT совпадает с вашим номером телефона.

Мониторинг здоровья

Адаптер отслеживает SSE-соединение и автоматически переподключается, если: - Соединение разрывается (с экспоненциальной задержкой: 2с → 60с) - Нет активности в течение 120 секунд (пингует signal-cli для проверки)


Устранение неполадок

Проблема Решение
"Cannot reach signal-cli" во время настройки Убедитесь, что демон signal-cli запущен: signal-cli --account +YOUR_NUMBER daemon --http 127.0.0.1:8080
Сообщения не получены Проверьте, что SIGNAL_ALLOWED_USERS включает номер отправителя в формате E.164 (с префиксом +)
"signal-cli not found on PATH" Установите signal-cli и убедитесь, что он находится в PATH, или используйте Docker
Соединение постоянно разрывается Проверьте логи signal-cli на наличие ошибок. Убедитесь, что установлена Java 17+.
Групповые сообщения игнорируются Настройте SIGNAL_GROUP_ALLOWED_USERS с конкретными ID групп или * для разрешения всех групп.
Бот никому не отвечает Настройте SIGNAL_ALLOWED_USERS, используйте привязку DM или явно разрешите всех пользователей через политику шлюза, если нужен более широкий доступ.
Дублирующиеся сообщения Убедитесь, что только один экземпляр signal-cli прослушивает ваш номер телефона

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

⚠️ Warning

Всегда настраивайте контроль доступа. Бот по умолчанию имеет доступ к терминалу. Без SIGNAL_ALLOWED_USERS или привязки DM шлюз отклоняет все входящие сообщения в качестве меры безопасности.

- Номера телефонов скрываются во всех выводах логов - Используйте привязку DM или явные белые списки для безопасного подключения новых пользователей - Держите группы отключёнными, если вам не нужна поддержка групп, или внесите в белый список только те группы, которым доверяете - Сквозное шифрование Signal защищает содержимое сообщений при передаче - Данные сессии signal-cli в ~/.local/share/signal-cli/ содержат учётные данные учётной записи — защищайте их как пароль


Справочник переменных окружения

Переменная Обязательно По умолчанию Описание
SIGNAL_HTTP_URL Да HTTP-конечная точка signal-cli
SIGNAL_ACCOUNT Да Номер телефона бота (E.164)
SIGNAL_ALLOWED_USERS Нет Разделённые запятыми номера телефонов/UUID
SIGNAL_GROUP_ALLOWED_USERS Нет ID групп для мониторинга или * для всех (опустите для отключения групп)
SIGNAL_ALLOW_ALL_USERS Нет false Разрешить любому пользователю взаимодействовать (пропустить белый список)
SIGNAL_HOME_CHANNEL Нет Цель доставки по умолчанию для задач cron