> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fased.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Synology Chat

# Synology Chat

**Delivery:** Bundled.

Synology Chat is useful when the NAS is already part of your internal
collaboration stack and you want a lightweight webhook bridge instead of a full
separate chat server. Fased accepts inbound events from Synology Chat outgoing
webhooks and replies through the paired incoming webhook URL.

Status: bundled channel extension as a DM-focused channel backed by Synology Chat webhooks.

## Setup from Agent > Channels

Synology Chat ships with Fased as a local bundled channel extension. You do not
need to download an npm package in a normal install.

Open **Agents**, select the Agent, then use **Agent > Channels > Synology
Chat**. Enter the outgoing token and incoming webhook URL, save the channel,
then restart the gateway if the UI reports that the runtime still needs to
load.

## Quick setup

This integration is simplest when you keep it allowlisted and private. Start
with one known user ID, then widen access only when needed.

1. In Synology Chat integrations:
   * Create an incoming webhook and copy its URL.
   * Create an outgoing webhook with your secret token.
2. Point the outgoing webhook URL to your Fased gateway:
   * `https://gateway-host/webhook/synology` by default.
   * Or your custom `channels.synology-chat.webhookPath`.
3. Configure **Agent > Channels > Synology Chat** in Fased.
4. Restart the gateway if the UI asks for it, then send a DM to the Synology
   Chat bot.

Minimal config:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    "synology-chat": {
      enabled: true,
      token: "synology-outgoing-token",
      incomingUrl: "https://nas.example.com/webapi/entry.cgi?...",
      webhookPath: "/webhook/synology",
      dmPolicy: "allowlist",
      allowedUserIds: ["123456"],
      rateLimitPerMinute: 30,
      allowInsecureSsl: false,
    },
  },
}
```

## Environment variables

For the default account, you can use env vars:

* `SYNOLOGY_CHAT_TOKEN`
* `SYNOLOGY_CHAT_INCOMING_URL`
* `SYNOLOGY_NAS_HOST`
* `SYNOLOGY_ALLOWED_USER_IDS` (comma-separated)
* `SYNOLOGY_RATE_LIMIT`
* `FASED_BOT_NAME`

Config values override env vars.

## DM policy and access control

* `dmPolicy: "allowlist"` is the recommended default.
* `allowedUserIds` accepts a list or comma-separated string of Synology user
  IDs.
* In `allowlist` mode, an empty `allowedUserIds` list is treated as
  misconfiguration and the webhook route will not start. Use
  `dmPolicy: "open"` for allow-all.
* `dmPolicy: "open"` allows any sender.
* `dmPolicy: "disabled"` blocks DMs.
* Pairing approvals work with:
  * `fased pairing list synology-chat`
  * `fased pairing approve synology-chat <CODE>`

## Outbound delivery

Use numeric Synology Chat user IDs as targets.

Examples:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
fased message send --channel synology-chat --target 123456 \
  --message "Hello from Fased"
fased message send --channel synology-chat --target synology-chat:123456 \
  --message "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.

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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 `token` secret and rotate it if leaked.
* Keep `allowInsecureSsl: false` unless 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.
