Developer and self-hosted
Synology Chat
Стан: bundled Plugin для каналу прямих повідомлень із використанням Synology Chat webhooks. Plugin приймає вхідні повідомлення від Synology Chat outgoing webhooks і надсилає відповіді через Synology Chat incoming webhook.
Bundled plugin
Synology Chat постачається як bundled Plugin у поточних випусках OpenClaw, тому звичайні пакетні збірки не потребують окремого встановлення.
Якщо ви використовуєте старішу збірку або власне встановлення, яке не містить Synology Chat, встановіть його вручну:
Встановлення з локального checkout:
openclaw plugins install ./path/to/local/synology-chat-plugin
Докладніше: Plugins
Швидке налаштування
- Переконайтеся, що Plugin Synology Chat доступний.
- Поточні пакетні випуски OpenClaw вже містять його.
- У старіших/власних встановленнях його можна додати вручну з source checkout за допомогою наведеної вище команди.
openclaw onboardтепер показує Synology Chat у тому самому списку налаштування каналів, що йopenclaw channels add.- Неінтерактивне налаштування:
openclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
- В інтеграціях Synology Chat:
- Створіть incoming webhook і скопіюйте його URL.
- Створіть outgoing webhook із вашим секретним токеном.
- Спрямуйте URL outgoing webhook на ваш OpenClaw gateway:
https://gateway-host/webhook/synologyза замовчуванням.- Або ваш власний
channels.synology-chat.webhookPath.
- Завершіть налаштування в OpenClaw.
- З майстром:
openclaw onboard - Напряму:
openclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
- З майстром:
- Перезапустіть gateway і надішліть DM боту Synology Chat.
Подробиці автентифікації webhook:
- OpenClaw приймає токен outgoing webhook з
body.token, потім?token=..., потім із заголовків. - Прийняті форми заголовків:
x-synology-tokenx-webhook-tokenx-openclaw-tokenAuthorization: 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_TOKENSYNOLOGY_CHAT_INCOMING_URLSYNOLOGY_NAS_HOSTSYNOLOGY_ALLOWED_USER_IDS(розділені комами)SYNOLOGY_RATE_LIMITOPENCLAW_BOT_NAME
Значення конфігурації перевизначають змінні середовища.
SYNOLOGY_CHAT_INCOMING_URL не можна встановити з workspace .env; див. Workspace .env files.
Політика DM і контроль доступу
dmPolicy: "allowlist"є рекомендованим значенням за замовчуванням.allowedUserIdsприймає список (або рядок, розділений комами) ідентифікаторів користувачів Synology.- У режимі
allowlistпорожній списокallowedUserIdsвважається помилковою конфігурацією, і маршрут webhook не запуститься (використовуйтеdmPolicy: "open"зallowedUserIds: ["*"]для дозволу всім). dmPolicy: "open"дозволяє публічні DM лише колиallowedUserIdsмістить"*"; з обмежувальними записами спілкуватися можуть лише відповідні користувачі.dmPolicy: "disabled"блокує DM.- Прив’язка отримувача відповіді за замовчуванням залишається на стабільному числовому
user_id.channels.synology-chat.dangerouslyAllowNameMatching: true— це режим сумісності на випадок аварійного відновлення, який знову вмикає пошук за змінним іменем користувача/нікнеймом для доставлення відповідей. - Схвалення pairing працюють із:
openclaw pairing list synology-chatopenclaw 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 до NAS webhook.
Кілька облікових записів
Кілька облікових записів Synology Chat підтримуються в channels.synology-chat.accounts.
Кожен обліковий запис може перевизначати токен, incoming URL, шлях webhook, політику DM і ліміти.
Сеанси прямих повідомлень ізольовані за обліковим записом і користувачем, тому той самий числовий user_id
у двох різних облікових записах Synology не має спільного стану transcript.
Надайте кожному ввімкненому обліковому запису окремий 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 перевіряються за токеном і обмежуються за частотою для кожного відправника.
- Перевірки недійсних токенів використовують порівняння секретів зі сталим часом і завершуються закритою відмовою.
- Надавайте перевагу
dmPolicy: "allowlist"для production. - Тримайте
dangerouslyAllowNameMatchingвимкненим, якщо вам явно не потрібне застаріле доставлення відповідей на основі імен користувачів. - Тримайте
dangerouslyAllowInheritedWebhookPathвимкненим, якщо ви явно не приймаєте ризик маршрутизації через спільний шлях у конфігурації з кількома обліковими записами.
Усунення несправностей
Missing required fields (token, user_id, text):- у payload outgoing webhook відсутнє одне з обов’язкових полів
- якщо Synology надсилає токен у заголовках, переконайтеся, що gateway/proxy зберігає ці заголовки
Invalid token:- секрет outgoing webhook не збігається з
channels.synology-chat.token - запит потрапляє до неправильного облікового запису/шляху webhook
- reverse proxy видалив заголовок токена до того, як запит дістався OpenClaw
- секрет outgoing webhook не збігається з
Rate limit exceeded:- забагато спроб із недійсним токеном з одного джерела можуть тимчасово заблокувати це джерело
- автентифіковані відправники також мають окремий ліміт повідомлень на користувача
Allowlist is empty. Configure allowedUserIds or use dmPolicy=open with allowedUserIds=["*"].:dmPolicy="allowlist"увімкнено, але користувачів не налаштовано
User not authorized:- числовий
user_idвідправника відсутній уallowedUserIds
- числовий
Пов’язане
- Огляд каналів — усі підтримувані канали
- Pairing — автентифікація DM і процес pairing
- Групи — поведінка групових чатів і обмеження за згадками
- Маршрутизація каналів — маршрутизація сеансів для повідомлень
- Безпека — модель доступу та посилення захисту