Developer and self-hosted
Synology Chat
Synology Chat łączy się z OpenClaw za pomocą pary webhooków: wychodzący webhook Synology Chat przesyła przychodzące wiadomości bezpośrednie do Gateway, a odpowiedzi wracają przez przychodzący webhook Synology Chat.
Status: oficjalny plugin, instalowany oddzielnie. Obsługiwane są wyłącznie wiadomości bezpośrednie; możliwe jest wysyłanie tekstu i plików za pośrednictwem adresów URL.
Instalacja
openclaw plugins install @openclaw/synology-chatLokalna kopia robocza (podczas uruchamiania z repozytorium git):
openclaw plugins install ./path/to/local/synology-chat-pluginSzczegóły: Pluginy
Szybka konfiguracja
- Zainstaluj plugin (jak wyżej).
- W integracjach Synology Chat:
- Utwórz przychodzący webhook i skopiuj jego adres URL.
- Utwórz wychodzący webhook z tajnym tokenem.
- Ustaw adres URL wychodzącego webhooka na Gateway OpenClaw:
- Domyślnie
https://gateway-host/webhook/synology. - Lub własną ścieżkę
channels.synology-chat.webhookPath.
- Domyślnie
- Dokończ konfigurację w OpenClaw. Synology Chat pojawia się na tej samej liście konfiguracji kanałów w obu trybach:
- Z przewodnikiem:
openclaw onboardlubopenclaw channels add - Bezpośrednio:
openclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
- Z przewodnikiem:
- Uruchom ponownie Gateway i wyślij wiadomość bezpośrednią do bota Synology Chat.
Szczegóły uwierzytelniania webhooka:
- OpenClaw przyjmuje token wychodzącego webhooka kolejno z
body.token,?token=..., a następnie z nagłówków. - Akceptowane postacie nagłówków:
x-synology-tokenx-webhook-tokenx-openclaw-tokenAuthorization: Bearer <token>
- Puste lub brakujące tokeny powodują bezpieczne odrzucenie żądania.
- Dane mogą mieć typ
application/x-www-form-urlencodedlubapplication/json; polatoken,user_iditextsą wymagane.
Minimalna konfiguracja:
{ 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, }, },}Zmienne środowiskowe
Dla domyślnego konta można użyć zmiennych środowiskowych:
SYNOLOGY_CHAT_TOKENSYNOLOGY_CHAT_INCOMING_URLSYNOLOGY_NAS_HOSTSYNOLOGY_ALLOWED_USER_IDS(wartości rozdzielone przecinkami)SYNOLOGY_RATE_LIMITOPENCLAW_BOT_NAME
Wartości konfiguracji zastępują zmienne środowiskowe.
Zmienne SYNOLOGY_CHAT_INCOMING_URL i SYNOLOGY_NAS_HOST nie mogą być ustawiane w pliku .env obszaru roboczego; zobacz Pliki .env obszaru roboczego.
Zasady wiadomości bezpośrednich i kontrola dostępu
- Obsługiwane wartości
dmPolicy:allowlist(domyślna),openidisabled. Synology Chat nie obsługuje procesu parowania; zezwól nadawcom, dodając ich numeryczne identyfikatory użytkowników Synology doallowedUserIds. allowedUserIdsprzyjmuje listę (lub ciąg wartości rozdzielonych przecinkami) identyfikatorów użytkowników Synology.- W trybie
allowlistpusta listaallowedUserIdsjest traktowana jako błędna konfiguracja i trasa webhooka nie zostanie uruchomiona. dmPolicy: "open"zezwala na publiczne wiadomości bezpośrednie tylko wtedy, gdyallowedUserIdszawiera"*"; przy wpisach ograniczających rozmawiać mogą wyłącznie pasujący użytkownicy. Trybopenz pustą listąallowedUserIdsrównież uniemożliwia uruchomienie trasy.dmPolicy: "disabled"blokuje wiadomości bezpośrednie.- Domyślnie powiązanie odbiorcy odpowiedzi opiera się na stabilnym numerycznym identyfikatorze
user_id.channels.synology-chat.dangerouslyAllowNameMatching: trueto awaryjny tryb zgodności, który ponownie włącza wyszukiwanie na podstawie zmiennych nazw użytkowników lub pseudonimów podczas dostarczania odpowiedzi.
Dostarczanie wiadomości wychodzących
Jako odbiorców używaj numerycznych identyfikatorów użytkowników Synology Chat. Akceptowane są prefiksy synology-chat:, synology_chat: i synology:.
Przykłady:
openclaw message send --channel synology-chat --target 123456 --message "Hello from OpenClaw"openclaw message send --channel synology-chat --target synology-chat:123456 --message "Hello again"openclaw message send --channel synology-chat --target synology:123456 --message "Short prefix"Tekst wychodzący jest dzielony na fragmenty o długości do 2000 znaków. Wysyłanie multimediów jest obsługiwane poprzez dostarczanie plików za pomocą adresów URL: serwer NAS pobiera i załącza plik (maksymalnie 32 MB). Adresy URL plików wychodzących muszą używać protokołu http lub https, a prywatne lub w inny sposób zablokowane cele sieciowe są odrzucane, zanim OpenClaw przekaże adres URL do webhooka serwera NAS.
Wiele kont
Wiele kont Synology Chat jest obsługiwanych w channels.synology-chat.accounts.
Każde konto może zastąpić token, adres URL przychodzącego webhooka, ścieżkę webhooka, zasady wiadomości bezpośrednich i limity.
Sesje wiadomości bezpośrednich są izolowane według konta i użytkownika, dlatego ten sam numeryczny user_id
na dwóch różnych kontach Synology nie współdzieli stanu transkrypcji.
Każdemu włączonemu kontu przypisz odrębną wartość webhookPath. OpenClaw odrzuca identyczne, zduplikowane ścieżki
i nie uruchamia nazwanych kont, które w konfiguracji wielokontowej jedynie dziedziczą współdzieloną ścieżkę webhooka.
Jeśli celowo potrzebujesz starszego mechanizmu dziedziczenia dla nazwanego konta, ustaw
dangerouslyAllowInheritedWebhookPath: true dla tego konta lub w channels.synology-chat,
jednak identyczne, zduplikowane ścieżki nadal są bezpiecznie odrzucane. Preferuj jawne ścieżki dla poszczególnych kont.
{ 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"], }, }, }, },}Uwagi dotyczące bezpieczeństwa
- Zachowaj
tokenw tajemnicy i zmień go w razie ujawnienia. - Zachowaj
allowInsecureSsl: false, chyba że jednoznacznie ufasz samopodpisanemu lokalnemu certyfikatowi serwera NAS. - Żądania przychodzącego webhooka są weryfikowane za pomocą tokena i ograniczane częstotliwościowo dla każdego nadawcy (
rateLimitPerMinute, domyślnie 30). - Weryfikacja nieprawidłowych tokenów korzysta z porównywania tajnych wartości w stałym czasie i bezpiecznie odrzuca żądania; powtarzające się próby użycia nieprawidłowego tokena tymczasowo blokują źródłowy adres IP.
- Tekst wiadomości przychodzących jest oczyszczany ze znanych wzorców wstrzykiwania poleceń i skracany do 4000 znaków.
- W środowisku produkcyjnym preferuj
dmPolicy: "allowlist". - Pozostaw
dangerouslyAllowNameMatchingwyłączone, chyba że jednoznacznie potrzebujesz starszego mechanizmu dostarczania odpowiedzi na podstawie nazwy użytkownika. - Pozostaw
dangerouslyAllowInheritedWebhookPathwyłączone, chyba że jednoznacznie akceptujesz ryzyko routingu po współdzielonej ścieżce w konfiguracji wielokontowej.
Rozwiązywanie problemów
Missing required fields (token, user_id, text):- w danych wychodzącego webhooka brakuje jednego z wymaganych pól
- jeśli Synology wysyła token w nagłówkach, upewnij się, że gateway lub serwer proxy zachowuje te nagłówki
Invalid token:- tajny token wychodzącego webhooka nie jest zgodny z
channels.synology-chat.token - żądanie trafia do niewłaściwego konta lub niewłaściwej ścieżki webhooka
- odwrotny serwer proxy usunął nagłówek tokena, zanim żądanie dotarło do OpenClaw
- tajny token wychodzącego webhooka nie jest zgodny z
Rate limit exceeded:- zbyt wiele prób użycia nieprawidłowego tokena z tego samego źródła może tymczasowo zablokować to źródło
- uwierzytelnieni nadawcy podlegają również osobnemu limitowi częstotliwości wiadomości dla każdego użytkownika
Allowlist is empty. Configure allowedUserIds or use dmPolicy=open with allowedUserIds=["*"].:- włączono
dmPolicy="allowlist", ale nie skonfigurowano żadnych użytkowników
- włączono
User not authorized:- numeryczny identyfikator
user_idnadawcy nie znajduje się wallowedUserIds
- numeryczny identyfikator
Powiązane
- Przegląd kanałów — wszystkie obsługiwane kanały
- Grupy — działanie czatu grupowego i wymóg wzmianki
- Routing kanałów — routing sesji dla wiadomości
- Bezpieczeństwo — model dostępu i wzmacnianie zabezpieczeń