Synology Chat
Synology Chat (plugin)
Status: supported via plugin as a direct-message channel using Synology Chat webhooks. The plugin accepts inbound messages from Synology Chat outgoing webhooks and sends replies through a Synology Chat incoming webhook.
Plugin required
Synology Chat is plugin-based and not part of the default core channel install.
Install from a local checkout:
remoteclaw plugins install ./extensions/synology-chatDetails: Plugins
Quick setup
- Install and enable the Synology Chat plugin.
remoteclaw onboardnow shows Synology Chat in the same channel setup list asremoteclaw channels add.- Non-interactive setup:
remoteclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
- In Synology Chat integrations:
- Create an incoming webhook and copy its URL.
- Create an outgoing webhook with your secret token.
- Point the outgoing webhook URL to your RemoteClaw gateway:
https://gateway-host/webhook/synologyby default.- Or your custom
channels.synology-chat.webhookPath.
- Finish setup in RemoteClaw.
- Guided:
remoteclaw onboard - Direct:
remoteclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
- Guided:
- Restart gateway and send a DM to the Synology Chat bot.
Minimal config:
{ 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, }, },}Environment variables
For the default account, you can use env vars:
SYNOLOGY_CHAT_TOKENSYNOLOGY_CHAT_INCOMING_URLSYNOLOGY_NAS_HOSTSYNOLOGY_ALLOWED_USER_IDS(comma-separated)SYNOLOGY_RATE_LIMITREMOTECLAW_BOT_NAME
Config values override env vars.
DM policy and access control
dmPolicy: "allowlist"is the recommended default.allowedUserIdsaccepts a list (or comma-separated string) of Synology user IDs.- In
allowlistmode, an emptyallowedUserIdslist is treated as misconfiguration and the webhook route will not start (usedmPolicy: "open"for allow-all). dmPolicy: "open"allows any sender.dmPolicy: "disabled"blocks DMs.- Reply recipient binding stays on stable numeric
user_idby default.channels.synology-chat.dangerouslyAllowNameMatching: trueis break-glass compatibility mode that re-enables mutable username/nickname lookup for reply delivery. - Pairing approvals work with:
remoteclaw pairing list synology-chatremoteclaw pairing approve synology-chat <CODE>
Outbound delivery
Use numeric Synology Chat user IDs as targets.
Examples:
remoteclaw message send --channel synology-chat --target 123456 --text "Hello from RemoteClaw"remoteclaw message send --channel synology-chat --target synology-chat:123456 --text "Hello again"Media sends are supported by URL-based file delivery.
Multi-account
Multiple Synology Chat accounts are supported under channels.synology-chat.accounts.
Each account can override token, incoming URL, webhook path, DM policy, and limits.
Direct-message sessions are isolated per account and user, so the same numeric user_id
on two different Synology accounts does not share transcript state.
Give each enabled account a distinct webhookPath. RemoteClaw now rejects duplicate exact paths
and refuses to start named accounts that only inherit a shared webhook path in multi-account setups.
If you intentionally need legacy inheritance for a named account, set
dangerouslyAllowInheritedWebhookPath: true on that account or at channels.synology-chat,
but duplicate exact paths are still rejected fail-closed. Prefer explicit per-account paths.
{ 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"], }, }, }, },}Security notes
- Keep
tokensecret and rotate it if leaked. - Keep
allowInsecureSsl: falseunless you explicitly trust a self-signed local NAS cert. - Inbound webhook requests are token-verified and rate-limited per sender.
- Prefer
dmPolicy: "allowlist"for production. - Keep
dangerouslyAllowNameMatchingoff unless you explicitly need legacy username-based reply delivery. - Keep
dangerouslyAllowInheritedWebhookPathoff unless you explicitly accept shared-path routing risk in a multi-account setup.