chore(i18n): refresh pl translations
This commit is contained in:
parent
d10f098d12
commit
8bf9280c21
@ -5,342 +5,84 @@ read_when:
|
||||
summary: Przegląd bota Feishu, funkcje i konfiguracja
|
||||
title: Feishu
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T13:43:36Z"
|
||||
generated_at: "2026-04-13T12:36:58Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 4e39b6dfe3a3aa4ebbdb992975e570e4f1b5e79f3b400a555fc373a0d1889952
|
||||
source_hash: 77fcf95a3fab534ed898bc157d76bf8bdfa8bf8a918d6af84c0db19890916c1a
|
||||
source_path: channels/feishu.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Bot Feishu
|
||||
# Feishu / Lark
|
||||
|
||||
Feishu (Lark) to platforma czatu zespołowego używana przez firmy do komunikacji i współpracy. Ten plugin łączy OpenClaw z botem Feishu/Lark przy użyciu subskrypcji zdarzeń WebSocket platformy, dzięki czemu wiadomości mogą być odbierane bez udostępniania publicznego adresu URL webhooka.
|
||||
Feishu/Lark to kompleksowa platforma do współpracy, w której zespoły czatują, udostępniają dokumenty, zarządzają kalendarzami i wspólnie wykonują pracę.
|
||||
|
||||
---
|
||||
|
||||
## Dołączony plugin
|
||||
|
||||
Feishu jest dołączony do aktualnych wydań OpenClaw, więc nie jest wymagana osobna instalacja pluginu.
|
||||
|
||||
Jeśli używasz starszej wersji lub niestandardowej instalacji, która nie zawiera dołączonego
|
||||
Feishu, zainstaluj go ręcznie:
|
||||
|
||||
```bash
|
||||
openclaw plugins install @openclaw/feishu
|
||||
```
|
||||
**Status:** gotowe do użycia produkcyjnego dla prywatnych wiadomości bota i czatów grupowych. WebSocket jest trybem domyślnym; tryb webhook jest opcjonalny.
|
||||
|
||||
---
|
||||
|
||||
## Szybki start
|
||||
|
||||
Są dwa sposoby dodania kanału Feishu:
|
||||
|
||||
### Metoda 1: onboarding (zalecane)
|
||||
|
||||
Jeśli właśnie zainstalowano OpenClaw, uruchom onboarding:
|
||||
|
||||
```bash
|
||||
openclaw onboard
|
||||
```
|
||||
|
||||
Kreator przeprowadzi Cię przez:
|
||||
|
||||
1. Utworzenie aplikacji Feishu i zebranie danych uwierzytelniających
|
||||
2. Skonfigurowanie danych uwierzytelniających aplikacji w OpenClaw
|
||||
3. Uruchomienie gateway
|
||||
|
||||
✅ **Po konfiguracji** sprawdź stan gateway:
|
||||
|
||||
- `openclaw gateway status`
|
||||
- `openclaw logs --follow`
|
||||
|
||||
### Metoda 2: konfiguracja przez CLI
|
||||
|
||||
Jeśli początkowa instalacja została już ukończona, dodaj kanał przez CLI:
|
||||
|
||||
```bash
|
||||
openclaw channels add
|
||||
```
|
||||
|
||||
Wybierz **Feishu**, a następnie wprowadź App ID i App Secret.
|
||||
|
||||
✅ **Po konfiguracji** zarządzaj gateway:
|
||||
|
||||
- `openclaw gateway status`
|
||||
- `openclaw gateway restart`
|
||||
- `openclaw logs --follow`
|
||||
|
||||
---
|
||||
|
||||
## Krok 1: Utwórz aplikację Feishu
|
||||
|
||||
### 1. Otwórz Feishu Open Platform
|
||||
|
||||
Odwiedź [Feishu Open Platform](https://open.feishu.cn/app) i zaloguj się.
|
||||
|
||||
Dzierżawy Lark (globalne) powinny używać [https://open.larksuite.com/app](https://open.larksuite.com/app) i ustawić `domain: "lark"` w konfiguracji Feishu.
|
||||
|
||||
### 2. Utwórz aplikację
|
||||
|
||||
1. Kliknij **Create enterprise app**
|
||||
2. Wypełnij nazwę i opis aplikacji
|
||||
3. Wybierz ikonę aplikacji
|
||||
|
||||

|
||||
|
||||
### 3. Skopiuj dane uwierzytelniające
|
||||
|
||||
Z sekcji **Credentials & Basic Info** skopiuj:
|
||||
|
||||
- **App ID** (format: `cli_xxx`)
|
||||
- **App Secret**
|
||||
|
||||
❗ **Ważne:** zachowaj App Secret w tajemnicy.
|
||||
|
||||

|
||||
|
||||
### 4. Skonfiguruj uprawnienia
|
||||
|
||||
W sekcji **Permissions** kliknij **Batch import** i wklej:
|
||||
|
||||
```json
|
||||
{
|
||||
"scopes": {
|
||||
"tenant": [
|
||||
"aily:file:read",
|
||||
"aily:file:write",
|
||||
"application:application.app_message_stats.overview:readonly",
|
||||
"application:application:self_manage",
|
||||
"application:bot.menu:write",
|
||||
"cardkit:card:read",
|
||||
"cardkit:card:write",
|
||||
"contact:user.employee_id:readonly",
|
||||
"corehr:file:download",
|
||||
"event:ip_list",
|
||||
"im:chat.access_event.bot_p2p_chat:read",
|
||||
"im:chat.members:bot_access",
|
||||
"im:message",
|
||||
"im:message.group_at_msg:readonly",
|
||||
"im:message.p2p_msg:readonly",
|
||||
"im:message:readonly",
|
||||
"im:message:send_as_bot",
|
||||
"im:resource"
|
||||
],
|
||||
"user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
### 5. Włącz możliwości bota
|
||||
|
||||
W **App Capability** > **Bot**:
|
||||
|
||||
1. Włącz możliwości bota
|
||||
2. Ustaw nazwę bota
|
||||
|
||||

|
||||
|
||||
### 6. Skonfiguruj subskrypcję zdarzeń
|
||||
|
||||
⚠️ **Ważne:** przed skonfigurowaniem subskrypcji zdarzeń upewnij się, że:
|
||||
|
||||
1. `openclaw channels add` zostało już uruchomione dla Feishu
|
||||
2. Gateway jest uruchomiony (`openclaw gateway status`)
|
||||
|
||||
W sekcji **Event Subscription**:
|
||||
|
||||
1. Wybierz **Use long connection to receive events** (WebSocket)
|
||||
2. Dodaj zdarzenie: `im.message.receive_v1`
|
||||
3. (Opcjonalnie) Dla workflow komentarzy Drive dodaj też: `drive.notice.comment_add_v1`
|
||||
|
||||
⚠️ Jeśli gateway nie jest uruchomiony, konfiguracja long connection może nie zostać zapisana.
|
||||
|
||||

|
||||
|
||||
### 7. Opublikuj aplikację
|
||||
|
||||
1. Utwórz wersję w **Version Management & Release**
|
||||
2. Wyślij do przeglądu i opublikuj
|
||||
3. Poczekaj na zatwierdzenie przez administratora (aplikacje firmowe zwykle są zatwierdzane automatycznie)
|
||||
|
||||
---
|
||||
|
||||
## Krok 2: Skonfiguruj OpenClaw
|
||||
|
||||
### Skonfiguruj za pomocą kreatora (zalecane)
|
||||
|
||||
```bash
|
||||
openclaw channels add
|
||||
```
|
||||
|
||||
Wybierz **Feishu** i wklej swój App ID oraz App Secret.
|
||||
|
||||
### Skonfiguruj przez plik config
|
||||
|
||||
Edytuj `~/.openclaw/openclaw.json`:
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
feishu: {
|
||||
enabled: true,
|
||||
dmPolicy: "pairing",
|
||||
accounts: {
|
||||
main: {
|
||||
appId: "cli_xxx",
|
||||
appSecret: "xxx",
|
||||
name: "Mój asystent AI",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Jeśli używasz `connectionMode: "webhook"`, ustaw zarówno `verificationToken`, jak i `encryptKey`. Serwer webhooków Feishu domyślnie nasłuchuje na `127.0.0.1`; ustaw `webhookHost` tylko wtedy, gdy celowo potrzebujesz innego adresu nasłuchiwania.
|
||||
|
||||
#### Verification Token i Encrypt Key (tryb webhook)
|
||||
|
||||
Podczas używania trybu webhook ustaw w konfiguracji zarówno `channels.feishu.verificationToken`, jak i `channels.feishu.encryptKey`. Aby uzyskać te wartości:
|
||||
|
||||
1. W Feishu Open Platform otwórz swoją aplikację
|
||||
2. Przejdź do **Development** → **Events & Callbacks** (开发配置 → 事件与回调)
|
||||
3. Otwórz kartę **Encryption** (加密策略)
|
||||
4. Skopiuj **Verification Token** i **Encrypt Key**
|
||||
|
||||
Poniższy zrzut ekranu pokazuje, gdzie znaleźć **Verification Token**. **Encrypt Key** znajduje się w tej samej sekcji **Encryption**.
|
||||
|
||||

|
||||
|
||||
### Skonfiguruj przez zmienne środowiskowe
|
||||
|
||||
```bash
|
||||
export FEISHU_APP_ID="cli_xxx"
|
||||
export FEISHU_APP_SECRET="xxx"
|
||||
```
|
||||
|
||||
### Domena Lark (globalna)
|
||||
|
||||
Jeśli Twoja dzierżawa działa w Lark (międzynarodowym), ustaw domenę na `lark` (lub pełny ciąg domeny). Można to ustawić w `channels.feishu.domain` albo per konto (`channels.feishu.accounts.<id>.domain`).
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
feishu: {
|
||||
domain: "lark",
|
||||
accounts: {
|
||||
main: {
|
||||
appId: "cli_xxx",
|
||||
appSecret: "xxx",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Flagi optymalizacji limitów
|
||||
|
||||
Możesz ograniczyć użycie API Feishu za pomocą dwóch opcjonalnych flag:
|
||||
|
||||
- `typingIndicator` (domyślnie `true`): gdy ustawione na `false`, pomija wywołania reakcji wpisywania.
|
||||
- `resolveSenderNames` (domyślnie `true`): gdy ustawione na `false`, pomija wywołania wyszukiwania profilu nadawcy.
|
||||
|
||||
Ustaw je na poziomie głównym lub per konto:
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
feishu: {
|
||||
typingIndicator: false,
|
||||
resolveSenderNames: false,
|
||||
accounts: {
|
||||
main: {
|
||||
appId: "cli_xxx",
|
||||
appSecret: "xxx",
|
||||
typingIndicator: true,
|
||||
resolveSenderNames: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Krok 3: Uruchom + przetestuj
|
||||
|
||||
### 1. Uruchom gateway
|
||||
|
||||
```bash
|
||||
openclaw gateway
|
||||
```
|
||||
|
||||
### 2. Wyślij wiadomość testową
|
||||
|
||||
W Feishu znajdź swojego bota i wyślij wiadomość.
|
||||
|
||||
### 3. Zatwierdź parowanie
|
||||
|
||||
Domyślnie bot odpowiada kodem parowania. Zatwierdź go:
|
||||
|
||||
```bash
|
||||
openclaw pairing approve feishu <CODE>
|
||||
```
|
||||
|
||||
Po zatwierdzeniu możesz normalnie rozmawiać.
|
||||
|
||||
---
|
||||
|
||||
## Przegląd
|
||||
|
||||
- **Kanał bota Feishu**: bot Feishu zarządzany przez gateway
|
||||
- **Deterministyczne routowanie**: odpowiedzi zawsze wracają do Feishu
|
||||
- **Izolacja sesji**: wiadomości prywatne współdzielą główną sesję; grupy są izolowane
|
||||
- **Połączenie WebSocket**: long connection przez SDK Feishu, bez potrzeby używania publicznego URL
|
||||
> **Wymaga OpenClaw 2026.4.10 lub nowszego.** Aby sprawdzić wersję, uruchom `openclaw --version`. Zaktualizuj za pomocą `openclaw update`.
|
||||
|
||||
<Steps>
|
||||
<Step title="Uruchom kreator konfiguracji kanału">
|
||||
```bash
|
||||
openclaw channels login --channel feishu
|
||||
```
|
||||
Zeskanuj kod QR w aplikacji mobilnej Feishu/Lark, aby automatycznie utworzyć bota Feishu/Lark.
|
||||
</Step>
|
||||
|
||||
<Step title="Po zakończeniu konfiguracji uruchom ponownie Gateway, aby zastosować zmiany">
|
||||
```bash
|
||||
openclaw gateway restart
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
---
|
||||
|
||||
## Kontrola dostępu
|
||||
|
||||
### Wiadomości prywatne
|
||||
### Prywatne wiadomości
|
||||
|
||||
- **Domyślnie**: `dmPolicy: "pairing"` (nieznani użytkownicy otrzymują kod parowania)
|
||||
- **Zatwierdź parowanie**:
|
||||
Skonfiguruj `dmPolicy`, aby określić, kto może wysyłać prywatne wiadomości do bota:
|
||||
|
||||
```bash
|
||||
openclaw pairing list feishu
|
||||
openclaw pairing approve feishu <CODE>
|
||||
```
|
||||
- `"pairing"` — nieznani użytkownicy otrzymują kod parowania; zatwierdź przez CLI
|
||||
- `"allowlist"` — tylko użytkownicy wymienieni w `allowFrom` mogą czatować (domyślnie: tylko właściciel bota)
|
||||
- `"open"` — zezwól wszystkim użytkownikom
|
||||
- `"disabled"` — wyłącz wszystkie prywatne wiadomości
|
||||
|
||||
- **Tryb allowlist**: ustaw `channels.feishu.allowFrom` z dozwolonymi Open ID
|
||||
**Zatwierdzanie prośby o parowanie:**
|
||||
|
||||
```bash
|
||||
openclaw pairing list feishu
|
||||
openclaw pairing approve feishu <CODE>
|
||||
```
|
||||
|
||||
### Czaty grupowe
|
||||
|
||||
**1. Zasada grupy** (`channels.feishu.groupPolicy`):
|
||||
**Zasada dla grup** (`channels.feishu.groupPolicy`):
|
||||
|
||||
- `"open"` = zezwól wszystkim w grupach
|
||||
- `"allowlist"` = zezwól tylko `groupAllowFrom`
|
||||
- `"disabled"` = wyłącz wiadomości grupowe
|
||||
| Wartość | Zachowanie |
|
||||
| ------------- | ------------------------------------------ |
|
||||
| `"open"` | Odpowiadaj na wszystkie wiadomości w grupach |
|
||||
| `"allowlist"` | Odpowiadaj tylko grupom z `groupAllowFrom` |
|
||||
| `"disabled"` | Wyłącz wszystkie wiadomości grupowe |
|
||||
|
||||
Domyślnie: `allowlist`
|
||||
|
||||
**2. Wymaganie wzmianki** (`channels.feishu.requireMention`, z możliwością nadpisania przez `channels.feishu.groups.<chat_id>.requireMention`):
|
||||
**Wymaganie wzmianki** (`channels.feishu.requireMention`):
|
||||
|
||||
- jawne `true` = wymagaj @wzmianki
|
||||
- jawne `false` = odpowiadaj bez wzmianek
|
||||
- gdy nieustawione i `groupPolicy: "open"` = domyślnie `false`
|
||||
- gdy nieustawione i `groupPolicy` nie jest `"open"` = domyślnie `true`
|
||||
- `true` — wymagaj wzmianki @ (domyślnie)
|
||||
- `false` — odpowiadaj bez wzmianki @
|
||||
- Nadpisanie dla grupy: `channels.feishu.groups.<chat_id>.requireMention`
|
||||
|
||||
---
|
||||
|
||||
## Przykłady konfiguracji grup
|
||||
|
||||
### Zezwól na wszystkie grupy, bez wymagania @wzmianki (domyślnie dla otwartych grup)
|
||||
### Zezwól na wszystkie grupy, bez wymogu wzmianki @
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -352,7 +94,7 @@ Domyślnie: `allowlist`
|
||||
}
|
||||
```
|
||||
|
||||
### Zezwól na wszystkie grupy, ale nadal wymagaj @wzmianki
|
||||
### Zezwól na wszystkie grupy, ale nadal wymagaj wzmianki @
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -372,16 +114,14 @@ Domyślnie: `allowlist`
|
||||
channels: {
|
||||
feishu: {
|
||||
groupPolicy: "allowlist",
|
||||
// Identyfikatory grup Feishu (chat_id) wyglądają tak: oc_xxx
|
||||
// Identyfikatory grup wyglądają tak: oc_xxx
|
||||
groupAllowFrom: ["oc_xxx", "oc_yyy"],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Ogranicz, którzy nadawcy mogą wysyłać wiadomości w grupie (allowlist nadawców)
|
||||
|
||||
Oprócz zezwolenia na samą grupę, **wszystkie wiadomości** w tej grupie są filtrowane według `open_id` nadawcy: przetwarzane są tylko wiadomości użytkowników wymienionych w `groups.<chat_id>.allowFrom`; wiadomości od pozostałych członków są ignorowane (to pełne filtrowanie na poziomie nadawcy, a nie tylko dla poleceń sterujących takich jak /reset lub /new).
|
||||
### Ogranicz nadawców w obrębie grupy
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -391,7 +131,7 @@ Oprócz zezwolenia na samą grupę, **wszystkie wiadomości** w tej grupie są f
|
||||
groupAllowFrom: ["oc_xxx"],
|
||||
groups: {
|
||||
oc_xxx: {
|
||||
// Identyfikatory użytkowników Feishu (open_id) wyglądają tak: ou_xxx
|
||||
// Identyfikatory open_id użytkowników wyglądają tak: ou_xxx
|
||||
allowFrom: ["ou_user1", "ou_user2"],
|
||||
},
|
||||
},
|
||||
@ -402,35 +142,23 @@ Oprócz zezwolenia na samą grupę, **wszystkie wiadomości** w tej grupie są f
|
||||
|
||||
---
|
||||
|
||||
<a id="get-groupuser-ids"></a>
|
||||
|
||||
## Pobieranie identyfikatorów grup/użytkowników
|
||||
|
||||
### Identyfikatory grup (chat_id)
|
||||
### Identyfikatory grup (`chat_id`, format: `oc_xxx`)
|
||||
|
||||
Identyfikatory grup wyglądają tak: `oc_xxx`.
|
||||
Otwórz grupę w Feishu/Lark, kliknij ikonę menu w prawym górnym rogu i przejdź do **Settings**. Identyfikator grupy (`chat_id`) jest widoczny na stronie ustawień.
|
||||
|
||||
**Metoda 1 (zalecana)**
|
||||

|
||||
|
||||
1. Uruchom gateway i użyj @wzmianki bota w grupie
|
||||
2. Uruchom `openclaw logs --follow` i poszukaj `chat_id`
|
||||
### Identyfikatory użytkowników (`open_id`, format: `ou_xxx`)
|
||||
|
||||
**Metoda 2**
|
||||
Uruchom Gateway, wyślij prywatną wiadomość do bota, a następnie sprawdź logi:
|
||||
|
||||
Użyj debuggera API Feishu, aby wyświetlić listę czatów grupowych.
|
||||
```bash
|
||||
openclaw logs --follow
|
||||
```
|
||||
|
||||
### Identyfikatory użytkowników (open_id)
|
||||
|
||||
Identyfikatory użytkowników wyglądają tak: `ou_xxx`.
|
||||
|
||||
**Metoda 1 (zalecana)**
|
||||
|
||||
1. Uruchom gateway i wyślij wiadomość prywatną do bota
|
||||
2. Uruchom `openclaw logs --follow` i poszukaj `open_id`
|
||||
|
||||
**Metoda 2**
|
||||
|
||||
Sprawdź żądania parowania dla Open ID użytkowników:
|
||||
Poszukaj `open_id` w danych wyjściowych logów. Możesz też sprawdzić oczekujące prośby o parowanie:
|
||||
|
||||
```bash
|
||||
openclaw pairing list feishu
|
||||
@ -440,59 +168,43 @@ openclaw pairing list feishu
|
||||
|
||||
## Typowe polecenia
|
||||
|
||||
| Polecenie | Opis |
|
||||
| --------- | --------------------- |
|
||||
| `/status` | Pokaż stan bota |
|
||||
| `/reset` | Zresetuj sesję |
|
||||
| `/model` | Pokaż/przełącz model |
|
||||
| Polecenie | Opis |
|
||||
| --------- | ----------------------------- |
|
||||
| `/status` | Pokaż status bota |
|
||||
| `/reset` | Zresetuj bieżącą sesję |
|
||||
| `/model` | Pokaż lub przełącz model AI |
|
||||
|
||||
> Uwaga: Feishu nie obsługuje jeszcze natywnych menu poleceń, więc polecenia muszą być wysyłane jako tekst.
|
||||
|
||||
## Polecenia zarządzania gateway
|
||||
|
||||
| Polecenie | Opis |
|
||||
| ------------------------- | ----------------------------- |
|
||||
| `openclaw gateway status` | Pokaż stan gateway |
|
||||
| `openclaw gateway install` | Zainstaluj/uruchom usługę gateway |
|
||||
| `openclaw gateway stop` | Zatrzymaj usługę gateway |
|
||||
| `openclaw gateway restart` | Uruchom ponownie usługę gateway |
|
||||
| `openclaw logs --follow` | Śledź logi gateway |
|
||||
> Feishu/Lark nie obsługuje natywnego menu poleceń z ukośnikiem, więc wysyłaj je jako zwykłe wiadomości tekstowe.
|
||||
|
||||
---
|
||||
|
||||
## Rozwiązywanie problemów
|
||||
|
||||
### Bot nie odpowiada w czatach grupowych
|
||||
### Bot nie odpowiada na czatach grupowych
|
||||
|
||||
1. Upewnij się, że bot został dodany do grupy
|
||||
2. Upewnij się, że używasz @wzmianki bota (zachowanie domyślne)
|
||||
3. Sprawdź, czy `groupPolicy` nie jest ustawione na `"disabled"`
|
||||
2. Upewnij się, że oznaczasz bota wzmianką @ (domyślnie wymagane)
|
||||
3. Sprawdź, czy `groupPolicy` nie ma wartości `"disabled"`
|
||||
4. Sprawdź logi: `openclaw logs --follow`
|
||||
|
||||
### Bot nie odbiera wiadomości
|
||||
|
||||
1. Upewnij się, że aplikacja została opublikowana i zatwierdzona
|
||||
2. Upewnij się, że subskrypcja zdarzeń zawiera `im.message.receive_v1`
|
||||
3. Upewnij się, że **long connection** jest włączone
|
||||
4. Upewnij się, że uprawnienia aplikacji są kompletne
|
||||
5. Upewnij się, że gateway jest uruchomiony: `openclaw gateway status`
|
||||
1. Upewnij się, że bot został opublikowany i zatwierdzony w Feishu Open Platform / Lark Developer
|
||||
2. Upewnij się, że subskrypcja zdarzeń obejmuje `im.message.receive_v1`
|
||||
3. Upewnij się, że wybrano **persistent connection** (WebSocket)
|
||||
4. Upewnij się, że przyznano wszystkie wymagane zakresy uprawnień
|
||||
5. Upewnij się, że Gateway działa: `openclaw gateway status`
|
||||
6. Sprawdź logi: `openclaw logs --follow`
|
||||
|
||||
### Wyciek App Secret
|
||||
### Wyciekł App Secret
|
||||
|
||||
1. Zresetuj App Secret w Feishu Open Platform
|
||||
2. Zaktualizuj App Secret w swojej konfiguracji
|
||||
3. Uruchom ponownie gateway
|
||||
|
||||
### Błędy wysyłania wiadomości
|
||||
|
||||
1. Upewnij się, że aplikacja ma uprawnienie `im:message:send_as_bot`
|
||||
2. Upewnij się, że aplikacja została opublikowana
|
||||
3. Sprawdź logi pod kątem szczegółowych błędów
|
||||
1. Zresetuj App Secret w Feishu Open Platform / Lark Developer
|
||||
2. Zaktualizuj wartość w swojej konfiguracji
|
||||
3. Uruchom ponownie Gateway: `openclaw gateway restart`
|
||||
|
||||
---
|
||||
|
||||
## Zaawansowana konfiguracja
|
||||
## Konfiguracja zaawansowana
|
||||
|
||||
### Wiele kont
|
||||
|
||||
@ -505,12 +217,12 @@ openclaw pairing list feishu
|
||||
main: {
|
||||
appId: "cli_xxx",
|
||||
appSecret: "xxx",
|
||||
name: "Podstawowy bot",
|
||||
name: "Główny bot",
|
||||
},
|
||||
backup: {
|
||||
appId: "cli_yyy",
|
||||
appSecret: "yyy",
|
||||
name: "Zapasowy bot",
|
||||
name: "Bot zapasowy",
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
@ -519,42 +231,53 @@ openclaw pairing list feishu
|
||||
}
|
||||
```
|
||||
|
||||
`defaultAccount` kontroluje, które konto Feishu jest używane, gdy wychodzące API nie określają jawnie `accountId`.
|
||||
`defaultAccount` określa, które konto jest używane, gdy wychodzące API nie określają `accountId`.
|
||||
|
||||
### Limity wiadomości
|
||||
|
||||
- `textChunkLimit`: rozmiar fragmentu tekstu wychodzącego (domyślnie: 2000 znaków)
|
||||
- `mediaMaxMb`: limit wysyłania/pobierania multimediów (domyślnie: 30MB)
|
||||
- `textChunkLimit` — rozmiar fragmentu tekstu wychodzącego (domyślnie: `2000` znaków)
|
||||
- `mediaMaxMb` — limit przesyłania/pobierania multimediów (domyślnie: `30` MB)
|
||||
|
||||
### Streaming
|
||||
|
||||
Feishu obsługuje odpowiedzi strumieniowe przez karty interaktywne. Gdy jest włączone, bot aktualizuje kartę podczas generowania tekstu.
|
||||
Feishu/Lark obsługuje odpowiedzi strumieniowe za pomocą interaktywnych kart. Gdy ta funkcja jest włączona, bot aktualizuje kartę w czasie rzeczywistym podczas generowania tekstu.
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
feishu: {
|
||||
streaming: true, // włącz wyjście strumieniowe kart (domyślnie true)
|
||||
blockStreaming: true, // włącz streaming na poziomie bloków (domyślnie true)
|
||||
streaming: true, // włącz wyjście strumieniowe w kartach (domyślnie: true)
|
||||
blockStreaming: true, // włącz streaming na poziomie bloków (domyślnie: true)
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Ustaw `streaming: false`, aby poczekać na pełną odpowiedź przed wysłaniem.
|
||||
Ustaw `streaming: false`, aby wysyłać pełną odpowiedź w jednej wiadomości.
|
||||
|
||||
### Optymalizacja limitów
|
||||
|
||||
Zmniejsz liczbę wywołań API Feishu/Lark za pomocą dwóch opcjonalnych flag:
|
||||
|
||||
- `typingIndicator` (domyślnie `true`): ustaw `false`, aby pominąć wywołania reakcji pisania
|
||||
- `resolveSenderNames` (domyślnie `true`): ustaw `false`, aby pominąć wyszukiwanie profili nadawców
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
feishu: {
|
||||
typingIndicator: false,
|
||||
resolveSenderNames: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Sesje ACP
|
||||
|
||||
Feishu obsługuje ACP dla:
|
||||
Feishu/Lark obsługuje ACP dla prywatnych wiadomości i wiadomości wątków grupowych. ACP w Feishu/Lark jest sterowane poleceniami tekstowymi — nie ma natywnych menu poleceń z ukośnikiem, więc używaj bezpośrednio wiadomości `/acp ...` w rozmowie.
|
||||
|
||||
- wiadomości prywatnych
|
||||
- rozmów grupowych w wątkach tematycznych
|
||||
|
||||
ACP w Feishu jest sterowane poleceniami tekstowymi. Nie ma natywnych menu poleceń typu slash, więc używaj wiadomości `/acp ...` bezpośrednio w rozmowie.
|
||||
|
||||
#### Trwałe powiązania ACP
|
||||
|
||||
Użyj typowanych powiązań ACP na poziomie głównym, aby przypiąć wiadomość prywatną Feishu lub rozmowę tematyczną do trwałej sesji ACP.
|
||||
#### Trwałe powiązanie ACP
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -598,58 +321,39 @@ Użyj typowanych powiązań ACP na poziomie głównym, aby przypiąć wiadomoś
|
||||
}
|
||||
```
|
||||
|
||||
#### Uruchamianie ACP powiązanego z wątkiem z czatu
|
||||
#### Uruchamianie ACP z czatu
|
||||
|
||||
W wiadomości prywatnej Feishu lub rozmowie tematycznej możesz uruchomić i powiązać sesję ACP bezpośrednio na miejscu:
|
||||
W prywatnej wiadomości lub wątku Feishu/Lark:
|
||||
|
||||
```text
|
||||
/acp spawn codex --thread here
|
||||
```
|
||||
|
||||
Uwagi:
|
||||
`--thread here` działa w prywatnych wiadomościach i wiadomościach wątków Feishu/Lark. Kolejne wiadomości w powiązanej rozmowie są kierowane bezpośrednio do tej sesji ACP.
|
||||
|
||||
- `--thread here` działa dla wiadomości prywatnych i tematów Feishu.
|
||||
- Kolejne wiadomości w powiązanej wiadomości prywatnej/temacie są routowane bezpośrednio do tej sesji ACP.
|
||||
- Wersja v1 nie obsługuje ogólnych czatów grupowych bez tematów.
|
||||
### Routing wielu agentów
|
||||
|
||||
### Routowanie wielu agentów
|
||||
|
||||
Użyj `bindings`, aby routować wiadomości prywatne lub grupy Feishu do różnych agentów.
|
||||
Użyj `bindings`, aby kierować prywatne wiadomości lub grupy Feishu/Lark do różnych agentów.
|
||||
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
list: [
|
||||
{ id: "main" },
|
||||
{
|
||||
id: "clawd-fan",
|
||||
workspace: "/home/user/clawd-fan",
|
||||
agentDir: "/home/user/.openclaw/agents/clawd-fan/agent",
|
||||
},
|
||||
{
|
||||
id: "clawd-xi",
|
||||
workspace: "/home/user/clawd-xi",
|
||||
agentDir: "/home/user/.openclaw/agents/clawd-xi/agent",
|
||||
},
|
||||
{ id: "agent-a", workspace: "/home/user/agent-a" },
|
||||
{ id: "agent-b", workspace: "/home/user/agent-b" },
|
||||
],
|
||||
},
|
||||
bindings: [
|
||||
{
|
||||
agentId: "main",
|
||||
agentId: "agent-a",
|
||||
match: {
|
||||
channel: "feishu",
|
||||
peer: { kind: "direct", id: "ou_xxx" },
|
||||
},
|
||||
},
|
||||
{
|
||||
agentId: "clawd-fan",
|
||||
match: {
|
||||
channel: "feishu",
|
||||
peer: { kind: "direct", id: "ou_yyy" },
|
||||
},
|
||||
},
|
||||
{
|
||||
agentId: "clawd-xi",
|
||||
agentId: "agent-b",
|
||||
match: {
|
||||
channel: "feishu",
|
||||
peer: { kind: "group", id: "oc_zzz" },
|
||||
@ -659,58 +363,47 @@ Użyj `bindings`, aby routować wiadomości prywatne lub grupy Feishu do różny
|
||||
}
|
||||
```
|
||||
|
||||
Pola routowania:
|
||||
Pola routingu:
|
||||
|
||||
- `match.channel`: `"feishu"`
|
||||
- `match.peer.kind`: `"direct"` lub `"group"`
|
||||
- `match.peer.id`: Open ID użytkownika (`ou_xxx`) lub ID grupy (`oc_xxx`)
|
||||
- `match.peer.kind`: `"direct"` (prywatna wiadomość) lub `"group"` (czat grupowy)
|
||||
- `match.peer.id`: Open ID użytkownika (`ou_xxx`) lub identyfikator grupy (`oc_xxx`)
|
||||
|
||||
Wskazówki dotyczące wyszukiwania znajdziesz w sekcji [Pobieranie identyfikatorów grup/użytkowników](#get-groupuser-ids).
|
||||
Wskazówki dotyczące wyszukiwania znajdziesz w [Pobieranie identyfikatorów grup/użytkowników](#pobieranie-identyfikatorów-grupużytkowników).
|
||||
|
||||
---
|
||||
|
||||
## Odniesienie do konfiguracji
|
||||
## Dokumentacja konfiguracji
|
||||
|
||||
Pełna konfiguracja: [Konfiguracja Gateway](/gateway/configuration)
|
||||
Pełna konfiguracja: [Konfiguracja Gateway](/pl/gateway/configuration)
|
||||
|
||||
Najważniejsze opcje:
|
||||
|
||||
| Ustawienie | Opis | Domyślnie |
|
||||
| ------------------------------------------------- | --------------------------------------- | ---------------- |
|
||||
| `channels.feishu.enabled` | Włącz/wyłącz kanał | `true` |
|
||||
| `channels.feishu.domain` | Domena API (`feishu` lub `lark`) | `feishu` |
|
||||
| `channels.feishu.connectionMode` | Tryb transportu zdarzeń | `websocket` |
|
||||
| `channels.feishu.defaultAccount` | Domyślne ID konta dla routowania wychodzącego | `default` |
|
||||
| `channels.feishu.verificationToken` | Wymagane dla trybu webhook | - |
|
||||
| `channels.feishu.encryptKey` | Wymagane dla trybu webhook | - |
|
||||
| `channels.feishu.webhookPath` | Ścieżka trasy webhooka | `/feishu/events` |
|
||||
| `channels.feishu.webhookHost` | Host nasłuchiwania webhooka | `127.0.0.1` |
|
||||
| `channels.feishu.webhookPort` | Port nasłuchiwania webhooka | `3000` |
|
||||
| `channels.feishu.accounts.<id>.appId` | App ID | - |
|
||||
| `channels.feishu.accounts.<id>.appSecret` | App Secret | - |
|
||||
| `channels.feishu.accounts.<id>.domain` | Nadpisanie domeny API per konto | `feishu` |
|
||||
| `channels.feishu.dmPolicy` | Zasada wiadomości prywatnych | `pairing` |
|
||||
| `channels.feishu.allowFrom` | Allowlist wiadomości prywatnych (lista `open_id`) | - |
|
||||
| `channels.feishu.groupPolicy` | Zasada grup | `allowlist` |
|
||||
| `channels.feishu.groupAllowFrom` | Allowlist grup | - |
|
||||
| `channels.feishu.requireMention` | Domyślnie wymagaj @wzmianki | warunkowe |
|
||||
| `channels.feishu.groups.<chat_id>.requireMention` | Nadpisanie wymagania @wzmianki per grupa | dziedziczone |
|
||||
| `channels.feishu.groups.<chat_id>.enabled` | Włącz grupę | `true` |
|
||||
| `channels.feishu.textChunkLimit` | Rozmiar fragmentu wiadomości | `2000` |
|
||||
| `channels.feishu.mediaMaxMb` | Limit rozmiaru mediów | `30` |
|
||||
| `channels.feishu.streaming` | Włącz strumieniowe wyjście kart | `true` |
|
||||
| `channels.feishu.blockStreaming` | Włącz streaming bloków | `true` |
|
||||
|
||||
---
|
||||
|
||||
## Odniesienie do dmPolicy
|
||||
|
||||
| Wartość | Zachowanie |
|
||||
| ------------- | --------------------------------------------------------------- |
|
||||
| `"pairing"` | **Domyślnie.** Nieznani użytkownicy otrzymują kod parowania; muszą zostać zatwierdzeni |
|
||||
| `"allowlist"` | Tylko użytkownicy z `allowFrom` mogą rozmawiać |
|
||||
| `"open"` | Zezwól wszystkim użytkownikom (wymaga `"*"` w `allowFrom`) |
|
||||
| `"disabled"` | Wyłącz wiadomości prywatne |
|
||||
| Ustawienie | Opis | Domyślnie |
|
||||
| ------------------------------------------------- | ------------------------------------------ | ---------------- |
|
||||
| `channels.feishu.enabled` | Włącz/wyłącz kanał | `true` |
|
||||
| `channels.feishu.domain` | Domena API (`feishu` lub `lark`) | `feishu` |
|
||||
| `channels.feishu.connectionMode` | Transport zdarzeń (`websocket` lub `webhook`) | `websocket` |
|
||||
| `channels.feishu.defaultAccount` | Domyślne konto dla routingu wychodzącego | `default` |
|
||||
| `channels.feishu.verificationToken` | Wymagane w trybie webhook | — |
|
||||
| `channels.feishu.encryptKey` | Wymagane w trybie webhook | — |
|
||||
| `channels.feishu.webhookPath` | Ścieżka trasy webhooka | `/feishu/events` |
|
||||
| `channels.feishu.webhookHost` | Host powiązania webhooka | `127.0.0.1` |
|
||||
| `channels.feishu.webhookPort` | Port powiązania webhooka | `3000` |
|
||||
| `channels.feishu.accounts.<id>.appId` | App ID | — |
|
||||
| `channels.feishu.accounts.<id>.appSecret` | App Secret | — |
|
||||
| `channels.feishu.accounts.<id>.domain` | Nadpisanie domeny dla konta | `feishu` |
|
||||
| `channels.feishu.dmPolicy` | Zasada dla prywatnych wiadomości | `allowlist` |
|
||||
| `channels.feishu.allowFrom` | Lista dozwolonych prywatnych wiadomości (lista `open_id`) | [BotOwnerId] |
|
||||
| `channels.feishu.groupPolicy` | Zasada dla grup | `allowlist` |
|
||||
| `channels.feishu.groupAllowFrom` | Lista dozwolonych grup | — |
|
||||
| `channels.feishu.requireMention` | Wymagaj wzmianki @ w grupach | `true` |
|
||||
| `channels.feishu.groups.<chat_id>.requireMention` | Nadpisanie wzmianki @ dla grupy | dziedziczone |
|
||||
| `channels.feishu.groups.<chat_id>.enabled` | Włącz/wyłącz określoną grupę | `true` |
|
||||
| `channels.feishu.textChunkLimit` | Rozmiar fragmentu wiadomości | `2000` |
|
||||
| `channels.feishu.mediaMaxMb` | Limit rozmiaru multimediów | `30` |
|
||||
| `channels.feishu.streaming` | Strumieniowe wyjście kart | `true` |
|
||||
| `channels.feishu.blockStreaming` | Streaming na poziomie bloków | `true` |
|
||||
| `channels.feishu.typingIndicator` | Wysyłaj reakcje pisania | `true` |
|
||||
| `channels.feishu.resolveSenderNames` | Rozpoznawaj wyświetlane nazwy nadawców | `true` |
|
||||
|
||||
---
|
||||
|
||||
@ -723,7 +416,7 @@ Najważniejsze opcje:
|
||||
- ✅ Obrazy
|
||||
- ✅ Pliki
|
||||
- ✅ Audio
|
||||
- ✅ Wideo/media
|
||||
- ✅ Wideo/multimedia
|
||||
- ✅ Naklejki
|
||||
|
||||
### Wysyłanie
|
||||
@ -732,68 +425,22 @@ Najważniejsze opcje:
|
||||
- ✅ Obrazy
|
||||
- ✅ Pliki
|
||||
- ✅ Audio
|
||||
- ✅ Wideo/media
|
||||
- ✅ Karty interaktywne
|
||||
- ⚠️ Tekst sformatowany (formatowanie w stylu post i karty, ale nie dowolne funkcje autorskie Feishu)
|
||||
- ✅ Wideo/multimedia
|
||||
- ✅ Karty interaktywne (w tym aktualizacje strumieniowe)
|
||||
- ⚠️ Tekst sformatowany (formatowanie w stylu post; nie obsługuje pełnych możliwości tworzenia treści Feishu/Lark)
|
||||
|
||||
### Wątki i odpowiedzi
|
||||
|
||||
- ✅ Odpowiedzi inline
|
||||
- ✅ Odpowiedzi w wątkach tematycznych, gdy Feishu udostępnia `reply_in_thread`
|
||||
- ✅ Odpowiedzi multimedialne zachowują świadomość wątku podczas odpowiadania na wiadomość w wątku/temacie
|
||||
- ✅ Odpowiedzi wbudowane
|
||||
- ✅ Odpowiedzi wątkowe
|
||||
- ✅ Odpowiedzi z multimediami zachowują świadomość wątku podczas odpowiadania na wiadomość w wątku
|
||||
|
||||
## Komentarze Drive
|
||||
|
||||
Feishu może wyzwolić agenta, gdy ktoś doda komentarz do dokumentu Feishu Drive (Docs, Sheets
|
||||
itp.). Agent otrzymuje treść komentarza, kontekst dokumentu i wątek komentarzy, dzięki czemu może
|
||||
odpowiedzieć w wątku lub edytować dokument.
|
||||
|
||||
Wymagania:
|
||||
|
||||
- Subskrybuj `drive.notice.comment_add_v1` w ustawieniach subskrypcji zdarzeń aplikacji Feishu
|
||||
(obok istniejącego `im.message.receive_v1`)
|
||||
- Narzędzie Drive jest domyślnie włączone; wyłącz je przez `channels.feishu.tools.drive: false`
|
||||
|
||||
Narzędzie `feishu_drive` udostępnia następujące akcje komentarzy:
|
||||
|
||||
| Akcja | Opis |
|
||||
| --------------------- | ------------------------------------- |
|
||||
| `list_comments` | Wyświetl komentarze dokumentu |
|
||||
| `list_comment_replies` | Wyświetl odpowiedzi w wątku komentarzy |
|
||||
| `add_comment` | Dodaj nowy komentarz najwyższego poziomu |
|
||||
| `reply_comment` | Odpowiedz w istniejącym wątku komentarzy |
|
||||
|
||||
Gdy agent obsługuje zdarzenie komentarza Drive, otrzymuje:
|
||||
|
||||
- treść komentarza i nadawcę
|
||||
- metadane dokumentu (tytuł, typ, URL)
|
||||
- kontekst wątku komentarzy do odpowiedzi w wątku
|
||||
|
||||
Po wprowadzeniu zmian w dokumencie agent otrzymuje wskazówkę, aby użyć `feishu_drive.reply_comment` do powiadomienia
|
||||
komentującego, a następnie wypisać dokładny cichy token `NO_REPLY` / `no_reply`, aby
|
||||
uniknąć zduplikowanych wysyłek.
|
||||
|
||||
## Powierzchnia akcji runtime
|
||||
|
||||
Feishu obecnie udostępnia następujące akcje runtime:
|
||||
|
||||
- `send`
|
||||
- `read`
|
||||
- `edit`
|
||||
- `thread-reply`
|
||||
- `pin`
|
||||
- `list-pins`
|
||||
- `unpin`
|
||||
- `member-info`
|
||||
- `channel-info`
|
||||
- `channel-list`
|
||||
- `react` i `reactions`, gdy reakcje są włączone w konfiguracji
|
||||
- akcje komentarzy `feishu_drive`: `list_comments`, `list_comment_replies`, `add_comment`, `reply_comment`
|
||||
---
|
||||
|
||||
## Powiązane
|
||||
|
||||
- [Przegląd kanałów](/channels) — wszystkie obsługiwane kanały
|
||||
- [Pairing](/channels/pairing) — uwierzytelnianie wiadomości prywatnych i przepływ parowania
|
||||
- [Grupy](/channels/groups) — zachowanie czatów grupowych i filtrowanie wzmiankami
|
||||
- [Routowanie kanałów](/channels/channel-routing) — routowanie sesji dla wiadomości
|
||||
- [Bezpieczeństwo](/gateway/security) — model dostępu i wzmacnianie zabezpieczeń
|
||||
- [Przegląd kanałów](/pl/channels) — wszystkie obsługiwane kanały
|
||||
- [Parowanie](/pl/channels/pairing) — uwierzytelnianie prywatnych wiadomości i przepływ parowania
|
||||
- [Grupy](/pl/channels/groups) — zachowanie czatów grupowych i bramkowanie wzmiankami
|
||||
- [Routing kanałów](/pl/channels/channel-routing) — routing sesji dla wiadomości
|
||||
- [Zabezpieczenia](/pl/gateway/security) — model dostępu i utwardzanie
|
||||
|
||||
Loading…
Reference in New Issue
Block a user