インストール
クイックセットアップ
- Plugin をインストールします(上記)。
- Synology Chat の連携で:
- 受信 Webhook を作成し、その URL をコピーします。
- シークレットトークン付きの送信 Webhook を作成します。
- 送信 Webhook URL を OpenClaw Gateway に向けます:
- 既定では
https://gateway-host/webhook/synology。 - またはカスタムの
channels.synology-chat.webhookPath。
- 既定では
- OpenClaw でセットアップを完了します。Synology Chat は、両方のフローで同じチャンネルセットアップ一覧に表示されます:
- ガイド付き:
openclaw onboardまたはopenclaw channels add - 直接:
openclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
- ガイド付き:
- Gateway を再起動し、Synology Chat ボットに DM を送信します。
- OpenClaw は送信 Webhook トークンを
body.token、次に?token=...、次にヘッダーから受け付けます。 - 受け付けるヘッダー形式:
x-synology-tokenx-webhook-tokenx-openclaw-tokenAuthorization: Bearer <token>
- 空または欠落したトークンは fail closed します。
- ペイロードは
application/x-www-form-urlencodedまたはapplication/jsonにできます。token、user_id、textが必須です。
環境変数
既定のアカウントでは、環境変数を使用できます:SYNOLOGY_CHAT_TOKENSYNOLOGY_CHAT_INCOMING_URLSYNOLOGY_NAS_HOSTSYNOLOGY_ALLOWED_USER_IDS(カンマ区切り)SYNOLOGY_RATE_LIMITOPENCLAW_BOT_NAME
SYNOLOGY_CHAT_INCOMING_URL と SYNOLOGY_NAS_HOST はワークスペースの .env から設定できません。ワークスペース .env ファイルを参照してください。
DM ポリシーとアクセス制御
- 対応する
dmPolicy値:allowlist(既定)、open、disabled。Synology Chat にはペアリングフローがありません。送信者を承認するには、数値の Synology ユーザー ID をallowedUserIdsに追加します。 allowedUserIdsは Synology ユーザー ID のリスト(またはカンマ区切り文字列)を受け付けます。allowlistモードでは、空のallowedUserIdsリストは構成ミスとして扱われ、Webhook ルートは開始されません。dmPolicy: "open"は、allowedUserIdsに"*"が含まれている場合にのみ公開 DM を許可します。制限付きのエントリがある場合は、一致するユーザーだけがチャットできます。空のallowedUserIdsリストでのopenも、ルートの開始を拒否します。dmPolicy: "disabled"は DM をブロックします。- 返信先のバインドは、既定で安定した数値の
user_idに留まります。channels.synology-chat.dangerouslyAllowNameMatching: trueは break-glass 互換モードで、返信配信のために変更可能なユーザー名/ニックネーム検索を再度有効にします。
送信配信
数値の Synology Chat ユーザー ID をターゲットとして使用します。synology-chat:、synology_chat:、synology: のプレフィックスが受け付けられます。
例:
http または https を使用する必要があります。プライベートまたはその他のブロックされたネットワークターゲットは、OpenClaw が URL を NAS Webhook に転送する前に拒否されます。
マルチアカウント
複数の Synology Chat アカウントはchannels.synology-chat.accounts 配下で対応しています。
各アカウントは、トークン、受信 URL、Webhook パス、DM ポリシー、制限を上書きできます。
ダイレクトメッセージセッションはアカウントとユーザーごとに分離されるため、2 つの異なる Synology アカウント上の同じ数値 user_id
がトランスクリプト状態を共有することはありません。
有効な各アカウントには個別の webhookPath を指定してください。OpenClaw は完全に重複するパスを拒否し、
マルチアカウントセットアップで共有 Webhook パスだけを継承する名前付きアカウントの開始を拒否します。
名前付きアカウントで意図的にレガシー継承が必要な場合は、そのアカウントまたは channels.synology-chat に
dangerouslyAllowInheritedWebhookPath: true を設定します。ただし、完全に重複するパスは引き続き fail closed で拒否されます。アカウントごとの明示的なパスを優先してください。
セキュリティメモ
tokenは秘密に保ち、漏えいした場合はローテーションしてください。- 自己署名されたローカル NAS 証明書を明示的に信頼する場合を除き、
allowInsecureSsl: falseのままにしてください。 - 受信 Webhook リクエストはトークン検証され、送信者ごとにレート制限されます(
rateLimitPerMinute、既定 30)。 - 無効なトークンチェックは定数時間のシークレット比較を使用し、fail closed します。無効なトークン試行が繰り返されると、送信元 IP が一時的にロックアウトされます。
- 受信メッセージテキストは、既知のプロンプトインジェクションパターンに対してサニタイズされ、4000 文字で切り捨てられます。
- 本番環境では
dmPolicy: "allowlist"を優先してください。 - レガシーのユーザー名ベース返信配信が明示的に必要な場合を除き、
dangerouslyAllowNameMatchingはオフのままにしてください。 - マルチアカウントセットアップで共有パスルーティングのリスクを明示的に受け入れる場合を除き、
dangerouslyAllowInheritedWebhookPathはオフのままにしてください。
トラブルシューティング
Missing required fields (token, user_id, text):- 送信 Webhook ペイロードに必須フィールドのいずれかが欠けています
- Synology がヘッダーでトークンを送信する場合は、Gateway/プロキシがそれらのヘッダーを保持していることを確認してください
Invalid token:- 送信 Webhook シークレットが
channels.synology-chat.tokenと一致しません - リクエストが誤ったアカウント/Webhook パスに到達しています
- リクエストが OpenClaw に到達する前に、リバースプロキシがトークンヘッダーを削除しました
- 送信 Webhook シークレットが
Rate limit exceeded:- 同じ送信元からの無効なトークン試行が多すぎると、その送信元が一時的にロックアウトされることがあります
- 認証済み送信者にも、ユーザーごとの別のメッセージレート制限があります
Allowlist is empty. Configure allowedUserIds or use dmPolicy=open with allowedUserIds=["*"].:dmPolicy="allowlist"が有効ですが、ユーザーが構成されていません
User not authorized:- 送信者の数値
user_idがallowedUserIdsに含まれていません
- 送信者の数値
関連
- チャンネル概要 — 対応しているすべてのチャンネル
- グループ — グループチャットの動作とメンションゲート
- チャンネルルーティング — メッセージのセッションルーティング
- セキュリティ — アクセスモデルと強化