Перейти к основному содержанию
Статус: встроенный плагин канала личных сообщений, использующий webhooks Synology Chat. Плагин принимает входящие сообщения из исходящих webhooks Synology Chat и отправляет ответы через входящий webhook Synology Chat.

Встроенный плагин

Synology Chat поставляется как встроенный плагин в текущих выпусках OpenClaw, поэтому обычным пакетным сборкам не нужна отдельная установка. Если вы используете более старую сборку или пользовательскую установку, исключающую Synology Chat, установите его вручную: Установка из локального checkout:
openclaw plugins install ./path/to/local/synology-chat-plugin
Подробности: Плагины

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

  1. Убедитесь, что плагин Synology Chat доступен.
    • Текущие пакетные выпуски OpenClaw уже включают его.
    • Более старые/пользовательские установки могут добавить его вручную из исходного checkout с помощью команды выше.
    • openclaw onboard теперь показывает Synology Chat в том же списке настройки каналов, что и openclaw channels add.
    • Неинтерактивная настройка: openclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
  2. В интеграциях Synology Chat:
    • Создайте входящий webhook и скопируйте его URL.
    • Создайте исходящий webhook с вашим секретным токеном.
  3. Укажите URL исходящего webhook на ваш OpenClaw Gateway:
    • https://gateway-host/webhook/synology по умолчанию.
    • Или ваш пользовательский channels.synology-chat.webhookPath.
  4. Завершите настройку в OpenClaw.
    • Через мастер: openclaw onboard
    • Напрямую: openclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
  5. Перезапустите Gateway и отправьте личное сообщение боту Synology Chat.
Подробности аутентификации webhook:
  • OpenClaw принимает токен исходящего webhook из body.token, затем ?token=..., затем из заголовков.
  • Поддерживаемые формы заголовков:
    • x-synology-token
    • x-webhook-token
    • x-openclaw-token
    • Authorization: Bearer <token>
  • Пустые или отсутствующие токены завершаются отказом.
Минимальная конфигурация:
{
  channels: {
    "synology-chat": {
      enabled: true,
      token: "synology-outgoing-token",
      incomingUrl: "https://nas.example.com/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=...",
      webhookPath: "/webhook/synology",
      dmPolicy: "allowlist",
      allowedUserIds: ["123456"],
      rateLimitPerMinute: 30,
      allowInsecureSsl: false,
    },
  },
}

Переменные окружения

Для учетной записи по умолчанию можно использовать переменные окружения:
  • SYNOLOGY_CHAT_TOKEN
  • SYNOLOGY_CHAT_INCOMING_URL
  • SYNOLOGY_NAS_HOST
  • SYNOLOGY_ALLOWED_USER_IDS (через запятую)
  • SYNOLOGY_RATE_LIMIT
  • OPENCLAW_BOT_NAME
Значения конфигурации переопределяют переменные окружения. SYNOLOGY_CHAT_INCOMING_URL нельзя задать из workspace .env; см. файлы Workspace .env.

Политика личных сообщений и контроль доступа

  • dmPolicy: "allowlist" — рекомендуемое значение по умолчанию.
  • allowedUserIds принимает список (или строку через запятую) идентификаторов пользователей Synology.
  • В режиме allowlist пустой список allowedUserIds считается ошибкой конфигурации, и маршрут webhook не запустится (используйте dmPolicy: "open" с allowedUserIds: ["*"] для разрешения всем).
  • dmPolicy: "open" разрешает публичные личные сообщения только когда allowedUserIds включает "*"; при ограничительных записях общаться могут только совпадающие пользователи.
  • dmPolicy: "disabled" блокирует личные сообщения.
  • Привязка получателя ответа по умолчанию остается на стабильном числовом user_id. channels.synology-chat.dangerouslyAllowNameMatching: true — аварийный режим совместимости, который повторно включает поиск по изменяемому имени пользователя/нику для доставки ответов.
  • Подтверждения привязки работают с:
    • openclaw pairing list synology-chat
    • openclaw pairing approve synology-chat <CODE>

Исходящая доставка

Используйте числовые идентификаторы пользователей Synology Chat как цели. Примеры:
openclaw message send --channel synology-chat --target 123456 --text "Hello from OpenClaw"
openclaw message send --channel synology-chat --target synology-chat:123456 --text "Hello again"
openclaw message send --channel synology-chat --target synology:123456 --text "Short prefix"
Отправка медиа поддерживается через доставку файлов по URL. URL исходящих файлов должны использовать http или https, а частные или иным образом заблокированные сетевые цели отклоняются до того, как OpenClaw передаст URL в webhook NAS.

Несколько учетных записей

Несколько учетных записей Synology Chat поддерживаются в channels.synology-chat.accounts. Каждая учетная запись может переопределять токен, входящий URL, путь webhook, политику личных сообщений и лимиты. Сеансы личных сообщений изолированы по учетной записи и пользователю, поэтому один и тот же числовой user_id в двух разных учетных записях Synology не разделяет состояние истории. Задайте каждой включенной учетной записи отдельный webhookPath. OpenClaw теперь отклоняет точные дубликаты путей и отказывается запускать именованные учетные записи, которые только наследуют общий путь webhook в конфигурациях с несколькими учетными записями. Если вам намеренно нужно устаревшее наследование для именованной учетной записи, задайте dangerouslyAllowInheritedWebhookPath: true для этой учетной записи или в channels.synology-chat, но точные дубликаты путей по-прежнему отклоняются с отказом. Предпочитайте явные пути для каждой учетной записи.
{
  channels: {
    "synology-chat": {
      enabled: true,
      accounts: {
        default: {
          token: "token-a",
          incomingUrl: "https://nas-a.example.com/...token=...",
        },
        alerts: {
          token: "token-b",
          incomingUrl: "https://nas-b.example.com/...token=...",
          webhookPath: "/webhook/synology-alerts",
          dmPolicy: "allowlist",
          allowedUserIds: ["987654"],
        },
      },
    },
  },
}

Примечания по безопасности

  • Храните token в секрете и ротируйте его при утечке.
  • Оставляйте allowInsecureSsl: false, если только вы явно не доверяете самоподписанному локальному сертификату NAS.
  • Входящие запросы webhook проверяются по токену и ограничиваются по частоте для каждого отправителя.
  • Проверки недействительных токенов используют сравнение секретов с постоянным временем выполнения и завершаются отказом.
  • Для production предпочитайте dmPolicy: "allowlist".
  • Держите dangerouslyAllowNameMatching выключенным, если вам явно не нужна устаревшая доставка ответов на основе имени пользователя.
  • Держите dangerouslyAllowInheritedWebhookPath выключенным, если вы явно не принимаете риск маршрутизации по общему пути в конфигурации с несколькими учетными записями.

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

  • Missing required fields (token, user_id, text):
    • в полезной нагрузке исходящего webhook отсутствует одно из обязательных полей
    • если Synology отправляет токен в заголовках, убедитесь, что gateway/прокси сохраняет эти заголовки
  • Invalid token:
    • секрет исходящего webhook не совпадает с channels.synology-chat.token
    • запрос попадает не в ту учетную запись/путь webhook
    • обратный прокси удалил заголовок токена до того, как запрос дошел до OpenClaw
  • Rate limit exceeded:
    • слишком много попыток с недействительным токеном из одного источника могут временно заблокировать этот источник
    • у аутентифицированных отправителей также есть отдельное ограничение частоты сообщений для каждого пользователя
  • Allowlist is empty. Configure allowedUserIds or use dmPolicy=open with allowedUserIds=["*"].:
    • dmPolicy="allowlist" включен, но пользователи не настроены
  • User not authorized:
    • числовой user_id отправителя отсутствует в allowedUserIds

Связанные материалы