Платформы обмена сообщениями
Signal
Статус: внешняя интеграция CLI. Шлюз взаимодействует с signal-cli через HTTP JSON-RPC + SSE.
Предварительные требования
- OpenClaw установлен на вашем сервере (нижеприведенный процесс для Linux протестирован на Ubuntu 24).
signal-cliдоступен на хосте, где работает шлюз.- Номер телефона, способный получить одну SMS для верификации (для пути регистрации через SMS).
- Доступ к браузеру для капчи Signal (
signalcaptchas.org) во время регистрации.
Быстрая настройка (для начинающих)
- Используйте отдельный номер Signal для бота (рекомендуется).
- Установите
signal-cli(требуется Java, если используется сборка JVM). - Выберите один из путей настройки:
- Путь A (QR-ссылка):
signal-cli link -n "OpenClaw"и отсканируйте QR-код в Signal. - Путь B (регистрация через SMS): зарегистрируйте выделенный номер с капчей и SMS-верификацией.
- Путь A (QR-ссылка):
- Настройте OpenClaw и перезапустите шлюз.
- Отправьте первое личное сообщение и подтвердите спаривание (
openclaw pairing approve signal <КОД>).
Минимальная конфигурация:
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
cliPath: "signal-cli",
dmPolicy: "pairing",
allowFrom: ["+15557654321"],
},
},
}
Справочник по полям:
| Поле | Описание |
|---|---|
account | Номер телефона бота в формате E.164 (+15551234567) |
cliPath | Пу ть к signal-cli (signal-cli, если он в PATH) |
dmPolicy | Политика доступа к личным сообщениям (рекомендуется pairing) |
allowFrom | Номера телефонов или значения uuid:, которым разрешено отправлять личные сообщения |
Что это такое
- Канал Signal через
signal-cli(не встроенная библиотека libsignal). - Детерминированная маршрутизация: ответы всегда возвращаются в Signal.
- Личные сообщения используют основную сессию агента; группы изолированы (
agent::signal:group:).
Запись конфигурации
По умолчанию Signal разрешено записывать обновления конфигурации, инициированные командой /config set|unset (требуется commands.config: true). Отключите это с помощью:
{
channels: { signal: { configWrites: false } },
}
Модель номера (важно)
- Шлюз подключается к устройству Signal (учетной записи
signal-cli). - Если вы запускаете бота на вашем личном аккаунте Signal, он будет игнорировать ваши собственные сообщения (защита от зацикливания).
- Для сценария «Я пишу боту, и он отвечает» используйте отдельный номер для бота.
Путь настройки A: привязка существующего аккаунта Signal (QR)
- Установите
signal-cli(сборка JVM или нативная). - Привяжите аккаунт бота:
signal-cli link -n "OpenClaw", затем отсканируйте QR-код в Signal.
- Настройте Signal и запустите шлюз.
Пример:
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
cliPath: "signal-cli",
dmPolicy: "pairing",
allowFrom: ["+15557654321"],
},
},
}
Поддержка нескольких аккаунтов: используйте channels.signal.accounts с конфигурацией для каждого аккаунта и опциональным name. См. gateway/configuration для общего шаблона.
Путь настройки B: регистрация выделенного номера для бота (SMS, Linux)
Используйте этот путь, когда вам нужен выделенный номер для бота, а не привязка существующего аккаунта приложения Signal.
- Получите номер, способный принимать SMS (или голосовую верификацию для стационарных телефонов).
- Используйте выделенный номер для бота, чтобы избежать конфликтов аккаунтов/сессий.
- Установите
signal-cliна хосте шлюза:
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/AsamK/signal-cli/releases/latest | sed -e 's/^.*\/v//')
curl -L -O "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}-Linux-native.tar.gz"
sudo tar xf "signal-cli-${VERSION}-Linux-native.tar.gz" -C /opt
sudo ln -sf /opt/signal-cli /usr/local/bin/
signal-cli --version
Если вы используете сборку JVM (signal-cli-${VERSION}.tar.gz), сначала установите JRE 25+. Поддерживайте signal-cli в актуальном состоянии; в исходном коде отмечается, что старые версии могут перестать работать при изменении API серверов Signal.
- Зарегистрируйте и подтвердите номер:
signal-cli -a +<НОМЕР_БОТА> register
Если требуется капча:
- Откройте
https://signalcaptchas.org/registration/generate.html. - Пройдите капчу, скопируйте цель ссылки
signalcaptcha://...из «Open Signal». - По возможности запускайте регистрацию с того же внешнего IP-адреса, что и сессия браузера.
- Немедленно запустите регистрацию снова (токены капчи быстро истекают):
signal-cli -a +<НОМЕР_БОТА> register --captcha '<SIGNALCAPTCHA_URL>'
signal-cli -a +<НОМЕР_БОТА> verify <КОД_ПОДТВЕРЖДЕНИЯ>
- Настройте OpenClaw, перезапустите шлюз, проверьте канал:
# Если вы запускаете шлюз как пользовательский сервис systemd:
systemctl --user restart openclaw-gateway
# Затем проверьте:
openclaw doctor
openclaw channels status --probe
- Спарьте отправителя личных сообщений:
- Отправьте любое сообщение на номер бота.
- Подтвердите код на сервере:
openclaw pairing approve signal <КОД_СПАРИВАНИЯ>. - Сохраните номер бота как контакт на вашем телефоне, чтобы избежать «Неизвестный контакт».
Важно: регистрация аккаунта с номером телефона через signal-cli может деаутентифицировать основную сессию приложения Signal для этого номера. Предпочтительнее использовать выделенный номер для бота или режим QR-привязки, если вам нужно сохранить существующую настройку приложения на телефоне. Ссылки на исходный код:
- README
signal-cli:https://github.com/AsamK/signal-cli - Процесс с капчей:
https://github.com/AsamK/signal-cli/wiki/Registration-with-captcha - Процесс привязки:
https://github.com/AsamK/signal-cli/wiki/Linking-other-devices-(Provisioning)
Режим внешнего демона (httpUrl)
Если вы хотите управлять signal-cli самостоятельно (медленный холодный старт JVM, инициализация контейнера или общие CPU), з апустите демон отдельно и укажите OpenClaw на него:
{
channels: {
signal: {
httpUrl: "http://127.0.0.1:8080",
autoStart: false,
},
},
}
Это пропускает авто-запуск и ожидание старта внутри OpenClaw. Для медленных стартов при авто-запуске установите channels.signal.startupTimeoutMs.
Контроль доступа (личные сообщения + группы)
Личные сообщения:
- По умолчанию:
channels.signal.dmPolicy = "pairing". - Неизвестные отправители получают код спаривания; сообщения игнорируются до подтверждения (коды истекают через 1 час).
- Подтвердите через:
openclaw pairing list signalopenclaw pairing approve signal <КОД>
- Спаривание — это стандартный обмен токенами для личных сообщений Signal. Подробности: Спаривание
- Отправители только по UUID (из
sourceUuid) сохраняются какuuid:вchannels.signal.allowFrom.
Группы:
channels.signal.groupPolicy = open | allowlist | disabled.channels.signal.groupAllowFromуправляет тем, кто может инициировать действия в группах, когда установленallowlist.- Примечание для времени выполнения: если
channels.signalполностью отсутствует, среда выполнения возвращается кgroupPolicy="allowlist"для проверок групп (даже если установленchannels.defaults.groupPolicy).
Как это работает (поведение)
signal-cliработает как демон; шлюз читает события через SSE.- Входящие сообщения нормализуются в общий конверт канала.
- Ответы всегда маршрутизируются обратно на тот же номер или группу.
Медиа + ограничен ия
- Исходящий текст разбивается на части по
channels.signal.textChunkLimit(по умолчанию 4000). - Опциональное разбиение по переносам строк: установите
channels.signal.chunkMode="newline"для разделения по пустым строкам (границам абзацев) перед разбиением по длине. - Поддерживаются вложения (base64, получаемые от
signal-cli). - Ограничение на медиа по умолчанию:
channels.signal.mediaMaxMb(по умолчанию 8). - Используйте
channels.signal.ignoreAttachments, чтобы пропустить загрузку медиа. - Контекст истории группы использует
channels.signal.historyLimit(илиchannels.signal.accounts.*.historyLimit), с откатом наmessages.groupChat.historyLimit. Установите0для отключения (по умолчанию 50).