chore(i18n): refresh pl translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-12 00:21:23 +00:00
parent 64b9245cf1
commit 4f18b4292c
3 changed files with 539 additions and 346 deletions

View File

@ -1,13 +1,13 @@
---
read_when:
- Praca nad funkcjami kanału Microsoft Teams
summary: Stan obsługi, możliwości i konfiguracja bota Microsoft Teams
summary: Stan obsługi bota Microsoft Teams, możliwości i konfiguracja
title: Microsoft Teams
x-i18n:
generated_at: "2026-04-05T13:47:23Z"
generated_at: "2026-04-12T00:18:56Z"
model: gpt-5.4
provider: openai
source_hash: 99fc6e136893ec65dc85d3bc0c0d92134069a2f3b8cb4fcf66c14674399b3eaf
source_hash: 3e6841a618fb030e4c2029b3652d45dedd516392e2ae17309ff46b93648ffb79
source_path: channels/msteams.md
workflow: 15
---
@ -16,15 +16,16 @@ x-i18n:
> „Porzućcie wszelką nadzieję, wy, którzy tu wchodzicie.”
Zaktualizowano: 2026-01-21
Zaktualizowano: 2026-03-25
Stan: obsługiwane są tekst + załączniki DM; wysyłanie plików do kanałów/grup wymaga `sharePointSiteId` + uprawnień Graph (zobacz [Wysyłanie plików w czatach grupowych](#sending-files-in-group-chats)). Ankiety są wysyłane przez Adaptive Cards. Akcje wiadomości udostępniają jawne `upload-file` dla wysyłek rozpoczynających się od pliku.
Stan: obsługiwane są tekst oraz załączniki DM; wysyłanie plików na kanałach/w grupach wymaga `sharePointSiteId` i uprawnień Graph (zobacz [Wysyłanie plików w czatach grupowych](#sending-files-in-group-chats)). Ankiety są wysyłane przez Adaptive Cards. Akcje wiadomości udostępniają jawne `upload-file` dla wysyłek rozpoczynających się od pliku.
## Bundled plugin
Microsoft Teams jest dostarczany jako bundled plugin w bieżących wydaniach OpenClaw, więc w standardowym spakowanym buildzie nie jest wymagana osobna instalacja.
Microsoft Teams jest dostarczany jako bundled plugin w bieżących wydaniach OpenClaw, więc
w standardowej paczkowanej kompilacji nie jest wymagana osobna instalacja.
Jeśli używasz starszego builda lub niestandardowej instalacji bez bundled Teams,
Jeśli używasz starszej kompilacji lub niestandardowej instalacji bez dołączonego Teams,
zainstaluj go ręcznie:
```bash
@ -37,19 +38,19 @@ Lokalny checkout (podczas uruchamiania z repozytorium git):
openclaw plugins install ./path/to/local/msteams-plugin
```
Szczegóły: [Plugins](/tools/plugin)
Szczegóły: [Plugins](/pl/tools/plugin)
## Szybka konfiguracja (dla początkujących)
1. Upewnij się, że plugin Microsoft Teams jest dostępny.
- Bieżące spakowane wydania OpenClaw już go zawierają.
- Bieżące paczkowane wydania OpenClaw zawierają go już domyślnie.
- Starsze/niestandardowe instalacje mogą dodać go ręcznie za pomocą powyższych poleceń.
2. Utwórz **Azure Bot** (App ID + client secret + tenant ID).
3. Skonfiguruj OpenClaw przy użyciu tych poświadczeń.
4. Udostępnij `/api/messages` (domyślnie port 3978) przez publiczny URL lub tunel.
5. Zainstaluj pakiet aplikacji Teams i uruchom gateway.
Minimalna konfiguracja:
Minimalna konfiguracja (client secret):
```json5
{
@ -65,19 +66,21 @@ Minimalna konfiguracja:
}
```
Uwaga: czaty grupowe są domyślnie blokowane (`channels.msteams.groupPolicy: "allowlist"`). Aby zezwolić na odpowiedzi w grupach, ustaw `channels.msteams.groupAllowFrom` (lub użyj `groupPolicy: "open"`, aby zezwolić każdemu członkowi, z bramkowaniem wzmianką).
W środowiskach produkcyjnych rozważ użycie [uwierzytelniania federacyjnego](#federated-authentication-certificate--managed-identity) (certyfikat lub managed identity) zamiast client secret.
Uwaga: czaty grupowe są domyślnie blokowane (`channels.msteams.groupPolicy: "allowlist"`). Aby zezwolić na odpowiedzi w grupach, ustaw `channels.msteams.groupAllowFrom` (lub użyj `groupPolicy: "open"`, aby zezwolić dowolnemu członkowi, z bramkowaniem wzmianką).
## Cele
- Rozmawiać z OpenClaw przez DM-y Teams, czaty grupowe lub kanały.
- Zachować deterministyczne routowanie: odpowiedzi zawsze wracają do kanału, z którego przyszły.
- Domyślnie stosować bezpieczne zachowanie kanału (wzmianki wymagane, chyba że skonfigurowano inaczej).
- Rozmawiaj z OpenClaw przez Teams DM, czaty grupowe lub kanały.
- Zachowaj deterministyczny routing: odpowiedzi zawsze wracają do kanału, z którego przyszły.
- Domyślnie stosuj bezpieczne zachowanie kanałów (wzmianki są wymagane, chyba że skonfigurowano inaczej).
## Zapisy konfiguracji
Domyślnie Microsoft Teams może zapisywać aktualizacje konfiguracji wywołane przez `/config set|unset` (wymaga `commands.config: true`).
Wyłącz przez:
Wyłącz za pomocą:
```json5
{
@ -85,20 +88,20 @@ Wyłącz przez:
}
```
## Kontrola dostępu (DM-y + grupy)
## Kontrola dostępu (DM + grupy)
**Dostęp DM**
**Dostęp do DM**
- Domyślnie: `channels.msteams.dmPolicy = "pairing"`. Nieznani nadawcy są ignorowani do momentu zatwierdzenia.
- Domyślnie: `channels.msteams.dmPolicy = "pairing"`. Nadawcy nieznani systemowi są ignorowani do momentu zatwierdzenia.
- `channels.msteams.allowFrom` powinno używać stabilnych identyfikatorów obiektów AAD.
- UPN-y/nazwy wyświetlane są zmienne; bezpośrednie dopasowanie jest domyślnie wyłączone i włączane tylko przez `channels.msteams.dangerouslyAllowNameMatching: true`.
- Kreator może rozwiązywać nazwy na identyfikatory przez Microsoft Graph, jeśli poświadczenia na to pozwalają.
- UPN-y/nazwy wyświetlane są zmienne; bezpośrednie dopasowywanie jest domyślnie wyłączone i włączane tylko przez `channels.msteams.dangerouslyAllowNameMatching: true`.
- Kreator może rozwiązywać nazwy do identyfikatorów przez Microsoft Graph, jeśli poświadczenia na to pozwalają.
**Dostęp grupowy**
**Dostęp do grup**
- Domyślnie: `channels.msteams.groupPolicy = "allowlist"` (zablokowane, dopóki nie dodasz `groupAllowFrom`). Użyj `channels.defaults.groupPolicy`, aby nadpisać wartość domyślną, gdy nie jest ustawiona.
- `channels.msteams.groupAllowFrom` kontroluje, którzy nadawcy mogą wywoływać działanie w czatach grupowych/kanałach (zapasowo używa `channels.msteams.allowFrom`).
- Ustaw `groupPolicy: "open"`, aby zezwolić każdemu członkowi (domyślnie nadal z bramkowaniem wzmianką).
- Domyślnie: `channels.msteams.groupPolicy = "allowlist"` (zablokowane, dopóki nie dodasz `groupAllowFrom`). Użyj `channels.defaults.groupPolicy`, aby zastąpić domyślną wartość, gdy nie jest ustawiona.
- `channels.msteams.groupAllowFrom` określa, którzy nadawcy mogą wyzwalać działania w czatach grupowych/kanałach (z fallbackiem do `channels.msteams.allowFrom`).
- Ustaw `groupPolicy: "open"`, aby zezwolić dowolnemu członkowi (nadal z domyślnym bramkowaniem wzmianką).
- Aby nie zezwalać na **żadne kanały**, ustaw `channels.msteams.groupPolicy: "disabled"`.
Przykład:
@ -114,14 +117,14 @@ Przykład:
}
```
**Teams + allowlista kanałów**
**Teams + lista dozwolonych kanałów**
- Ogranicz odpowiedzi w grupach/kanałach, podając zespoły i kanały w `channels.msteams.teams`.
- Klucze powinny używać stabilnych identyfikatorów zespołów i identyfikatorów konwersacji kanałów.
- Gdy `groupPolicy="allowlist"` i obecna jest allowlista zespołów, akceptowane są tylko wymienione zespoły/kanały (z bramkowaniem wzmianką).
- Gdy `groupPolicy="allowlist"` i lista dozwolonych zespołów jest obecna, akceptowane są tylko wymienione zespoły/kanały (z bramkowaniem wzmianką).
- Kreator konfiguracji akceptuje wpisy `Team/Channel` i zapisuje je za Ciebie.
- Przy uruchamianiu OpenClaw rozwiązuje nazwy zespołów/kanałów i użytkowników z allowlisty na identyfikatory (gdy pozwalają na to uprawnienia Graph)
i zapisuje mapowanie w logach; nierozwiązane nazwy zespołów/kanałów są zachowywane tak, jak zostały wpisane, ale domyślnie ignorowane przy routowaniu, chyba że włączono `channels.msteams.dangerouslyAllowNameMatching: true`.
- Przy uruchomieniu OpenClaw rozwiązuje nazwy zespołów/kanałów oraz nazwy na liście dozwolonych użytkowników do identyfikatorów (gdy pozwalają na to uprawnienia Graph)
i zapisuje mapowanie w logach; nierozwiązane nazwy zespołów/kanałów są zachowywane w podanej postaci, ale domyślnie ignorowane przy routingu, chyba że włączono `channels.msteams.dangerouslyAllowNameMatching: true`.
Przykład:
@ -145,13 +148,13 @@ Przykład:
## Jak to działa
1. Upewnij się, że plugin Microsoft Teams jest dostępny.
- Bieżące spakowane wydania OpenClaw już go zawierają.
- Bieżące paczkowane wydania OpenClaw zawierają go już domyślnie.
- Starsze/niestandardowe instalacje mogą dodać go ręcznie za pomocą powyższych poleceń.
2. Utwórz **Azure Bot** (App ID + secret + tenant ID).
3. Zbuduj **pakiet aplikacji Teams**, który odwołuje się do bota i zawiera poniższe uprawnienia RSC.
4. Prześlij/zainstaluj aplikację Teams w zespole (lub w zakresie osobistym dla DM-ów).
4. Prześlij/zainstaluj aplikację Teams w zespole (lub w zakresie osobistym dla DM).
5. Skonfiguruj `msteams` w `~/.openclaw/openclaw.json` (lub przez zmienne środowiskowe) i uruchom gateway.
6. Gateway domyślnie nasłuchuje ruchu webhook Bot Framework pod adresem `/api/messages`.
6. Gateway domyślnie nasłuchuje ruchu webhook Bot Framework na `/api/messages`.
## Konfiguracja Azure Bot (wymagania wstępne)
@ -162,16 +165,16 @@ Przed skonfigurowaniem OpenClaw musisz utworzyć zasób Azure Bot.
1. Przejdź do [Create Azure Bot](https://portal.azure.com/#create/Microsoft.AzureBot)
2. Wypełnij kartę **Basics**:
| Pole | Wartość |
| ------------------ | ------------------------------------------------------- |
| Pole | Wartość |
| ------------------ | -------------------------------------------------------- |
| **Bot handle** | Nazwa Twojego bota, np. `openclaw-msteams` (musi być unikalna) |
| **Subscription** | Wybierz swoją subskrypcję Azure |
| **Resource group** | Utwórz nową lub użyj istniejącej |
| **Subscription** | Wybierz swoją subskrypcję Azure |
| **Resource group** | Utwórz nową lub użyj istniejącej |
| **Pricing tier** | **Free** do developmentu/testów |
| **Type of App** | **Single Tenant** (zalecane — patrz uwaga poniżej) |
| **Creation type** | **Create new Microsoft App ID** |
| **Type of App** | **Single Tenant** (zalecane - zobacz uwagę poniżej) |
| **Creation type** | **Create new Microsoft App ID** |
> **Powiadomienie o wycofaniu:** Tworzenie nowych botów wielodostępnych zostało wycofane po 2025-07-31. Dla nowych botów używaj **Single Tenant**.
> **Informacja o wycofaniu:** Tworzenie nowych botów wielodzierżawowych zostało wycofane po 2025-07-31. Dla nowych botów używaj **Single Tenant**.
3. Kliknij **Review + create****Create** (poczekaj ~1-2 minuty)
@ -179,16 +182,16 @@ Przed skonfigurowaniem OpenClaw musisz utworzyć zasób Azure Bot.
1. Przejdź do zasobu Azure Bot → **Configuration**
2. Skopiuj **Microsoft App ID** → to jest Twoje `appId`
3. Kliknij **Manage Password** → przejdź do App Registration
3. Kliknij **Manage Password** → przejdź do rejestracji aplikacji
4. W sekcji **Certificates & secrets****New client secret** → skopiuj **Value** → to jest Twoje `appPassword`
5. Przejdź do **Overview** → skopiuj **Directory (tenant) ID** → to jest Twoje `tenantId`
### Krok 3: Skonfiguruj Messaging Endpoint
### Krok 3: Skonfiguruj endpoint wiadomości
1. W Azure Bot → **Configuration**
2. Ustaw **Messaging endpoint** na URL webhooka:
- Produkcja: `https://your-domain.com/api/messages`
- Local dev: użyj tunelu (zobacz [Local Development](#local-development-tunneling) poniżej)
- Lokalny development: użyj tunelu (zobacz poniżej [Local Development](#local-development-tunneling))
### Krok 4: Włącz kanał Teams
@ -196,9 +199,151 @@ Przed skonfigurowaniem OpenClaw musisz utworzyć zasób Azure Bot.
2. Kliknij **Microsoft Teams** → Configure → Save
3. Zaakceptuj Terms of Service
## Uwierzytelnianie federacyjne (certyfikat + managed identity)
> Dodano w 2026.3.24
W środowiskach produkcyjnych OpenClaw obsługuje **uwierzytelnianie federacyjne** jako bezpieczniejszą alternatywę dla client secret. Dostępne są dwie metody:
### Opcja A: Uwierzytelnianie oparte na certyfikacie
Użyj certyfikatu PEM zarejestrowanego w rejestracji aplikacji Entra ID.
**Konfiguracja:**
1. Wygeneruj lub uzyskaj certyfikat (format PEM z kluczem prywatnym).
2. W Entra ID → App Registration → **Certificates & secrets****Certificates** → prześlij certyfikat publiczny.
**Config:**
```json5
{
channels: {
msteams: {
enabled: true,
appId: "<APP_ID>",
tenantId: "<TENANT_ID>",
authType: "federated",
certificatePath: "/path/to/cert.pem",
webhook: { port: 3978, path: "/api/messages" },
},
},
}
```
**Zmienne środowiskowe:**
- `MSTEAMS_AUTH_TYPE=federated`
- `MSTEAMS_CERTIFICATE_PATH=/path/to/cert.pem`
### Opcja B: Azure Managed Identity
Użyj Azure Managed Identity do uwierzytelniania bez hasła. To idealne rozwiązanie dla wdrożeń na infrastrukturze Azure (AKS, App Service, maszyny wirtualne Azure), gdzie dostępna jest managed identity.
**Jak to działa:**
1. Pod/VM bota ma managed identity (przypisaną przez system lub użytkownika).
2. **Federated identity credential** łączy managed identity z rejestracją aplikacji Entra ID.
3. W czasie działania OpenClaw używa `@azure/identity` do pobierania tokenów z endpointu Azure IMDS (`169.254.169.254`).
4. Token jest przekazywany do SDK Teams na potrzeby uwierzytelniania bota.
**Wymagania wstępne:**
- Infrastruktura Azure z włączoną managed identity (AKS workload identity, App Service, VM)
- Utworzona federated identity credential w rejestracji aplikacji Entra ID
- Dostęp sieciowy do IMDS (`169.254.169.254:80`) z poda/VM
**Config (managed identity przypisana przez system):**
```json5
{
channels: {
msteams: {
enabled: true,
appId: "<APP_ID>",
tenantId: "<TENANT_ID>",
authType: "federated",
useManagedIdentity: true,
webhook: { port: 3978, path: "/api/messages" },
},
},
}
```
**Config (managed identity przypisana przez użytkownika):**
```json5
{
channels: {
msteams: {
enabled: true,
appId: "<APP_ID>",
tenantId: "<TENANT_ID>",
authType: "federated",
useManagedIdentity: true,
managedIdentityClientId: "<MI_CLIENT_ID>",
webhook: { port: 3978, path: "/api/messages" },
},
},
}
```
**Zmienne środowiskowe:**
- `MSTEAMS_AUTH_TYPE=federated`
- `MSTEAMS_USE_MANAGED_IDENTITY=true`
- `MSTEAMS_MANAGED_IDENTITY_CLIENT_ID=<client-id>` (tylko dla tożsamości przypisanej przez użytkownika)
### Konfiguracja AKS Workload Identity
Dla wdrożeń AKS używających workload identity:
1. **Włącz workload identity** w klastrze AKS.
2. **Utwórz federated identity credential** w rejestracji aplikacji Entra ID:
```bash
az ad app federated-credential create --id <APP_OBJECT_ID> --parameters '{
"name": "my-bot-workload-identity",
"issuer": "<AKS_OIDC_ISSUER_URL>",
"subject": "system:serviceaccount:<NAMESPACE>:<SERVICE_ACCOUNT>",
"audiences": ["api://AzureADTokenExchange"]
}'
```
3. **Dodaj adnotację do konta usługi Kubernetes** z identyfikatorem klienta aplikacji:
```yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-bot-sa
annotations:
azure.workload.identity/client-id: "<APP_CLIENT_ID>"
```
4. **Dodaj etykietę do poda** dla wstrzykiwania workload identity:
```yaml
metadata:
labels:
azure.workload.identity/use: "true"
```
5. **Zapewnij dostęp sieciowy** do IMDS (`169.254.169.254`) — jeśli używasz NetworkPolicy, dodaj regułę egress zezwalającą na ruch do `169.254.169.254/32` na porcie 80.
### Porównanie typów uwierzytelniania
| Metoda | Konfiguracja | Zalety | Wady |
| -------------------- | ---------------------------------------------- | ---------------------------------- | ------------------------------------- |
| **Client secret** | `appPassword` | Prosta konfiguracja | Wymaga rotacji sekretu, mniejsze bezpieczeństwo |
| **Certificate** | `authType: "federated"` + `certificatePath` | Brak współdzielonego sekretu w sieci | Narzut związany z zarządzaniem certyfikatami |
| **Managed Identity** | `authType: "federated"` + `useManagedIdentity` | Bez haseł, brak sekretów do zarządzania | Wymagana infrastruktura Azure |
**Zachowanie domyślne:** Gdy `authType` nie jest ustawione, OpenClaw domyślnie używa uwierzytelniania client secret. Istniejące konfiguracje nadal działają bez zmian.
## Local Development (tunelowanie)
Teams nie może połączyć się z `localhost`. Użyj tunelu do local developmentu:
Teams nie może połączyć się z `localhost`. Do lokalnego developmentu użyj tunelu:
**Opcja A: ngrok**
@ -212,20 +357,20 @@ ngrok http 3978
```bash
tailscale funnel 3978
# Użyj swojego URL Tailscale Funnel jako messaging endpoint
# Użyj swojego URL Tailscale funnel jako messaging endpoint
```
## Teams Developer Portal (alternatywa)
Zamiast ręcznie tworzyć ZIP manifestu, możesz użyć [Teams Developer Portal](https://dev.teams.microsoft.com/apps):
Zamiast ręcznie tworzyć ZIP z manifestem, możesz użyć [Teams Developer Portal](https://dev.teams.microsoft.com/apps):
1. Kliknij **+ New app**
2. Wypełnij podstawowe informacje (nazwa, opis, informacje o deweloperze)
2. Uzupełnij podstawowe informacje (nazwa, opis, informacje o deweloperze)
3. Przejdź do **App features** → **Bot**
4. Wybierz **Enter a bot ID manually** i wklej App ID swojego Azure Bot
5. Zaznacz zakresy: **Personal**, **Team**, **Group Chat**
6. Kliknij **Distribute** → **Download app package**
7. W Teams: **Apps****Manage your apps****Upload a custom app** → wybierz ZIP
7. W Teams: **Apps****Manage your apps****Upload a custom app** → wybierz plik ZIP
To często jest łatwiejsze niż ręczna edycja manifestów JSON.
@ -246,10 +391,10 @@ To często jest łatwiejsze niż ręczna edycja manifestów JSON.
## Konfiguracja (minimalna, tylko tekst)
1. **Upewnij się, że plugin Microsoft Teams jest dostępny**
- Bieżące spakowane wydania OpenClaw już go zawierają.
- Bieżące paczkowane wydania OpenClaw zawierają go już domyślnie.
- Starsze/niestandardowe instalacje mogą dodać go ręcznie:
- Z npm: `openclaw plugins install @openclaw/msteams`
- Z lokalnego checkouta: `openclaw plugins install ./path/to/local/msteams-plugin`
- Z lokalnego checkoutu: `openclaw plugins install ./path/to/local/msteams-plugin`
2. **Rejestracja bota**
- Utwórz Azure Bot (zobacz wyżej) i zanotuj:
@ -285,37 +430,42 @@ To często jest łatwiejsze niż ręczna edycja manifestów JSON.
- `MSTEAMS_APP_ID`
- `MSTEAMS_APP_PASSWORD`
- `MSTEAMS_TENANT_ID`
- `MSTEAMS_AUTH_TYPE` (opcjonalnie: `"secret"` lub `"federated"`)
- `MSTEAMS_CERTIFICATE_PATH` (federated + certyfikat)
- `MSTEAMS_CERTIFICATE_THUMBPRINT` (opcjonalne, niewymagane do uwierzytelniania)
- `MSTEAMS_USE_MANAGED_IDENTITY` (federated + managed identity)
- `MSTEAMS_MANAGED_IDENTITY_CLIENT_ID` (tylko dla managed identity przypisanej przez użytkownika)
5. **Endpoint bota**
- Ustaw Azure Bot Messaging Endpoint na:
- `https://<host>:3978/api/messages` (lub wybraną przez Ciebie ścieżkę/port).
- `https://<host>:3978/api/messages` (lub wybraną ścieżkę/port).
6. **Uruchom gateway**
- Kanał Teams uruchamia się automatycznie, gdy bundled plugin lub ręcznie zainstalowany plugin jest dostępny i istnieje konfiguracja `msteams` z poświadczeniami.
- Kanał Teams uruchamia się automatycznie, gdy bundled plugin lub ręcznie zainstalowany plugin jest dostępny, a konfiguracja `msteams` zawiera poświadczenia.
## Akcja informacji o członku
OpenClaw udostępnia opartą na Graph akcję `member-info` dla Microsoft Teams, aby agenci i automatyzacje mogli bezpośrednio z Microsoft Graph rozwiązywać szczegóły członków kanału (nazwa wyświetlana, e-mail, rola).
OpenClaw udostępnia opartą na Graph akcję `member-info` dla Microsoft Teams, dzięki czemu agenci i automatyzacje mogą bezpośrednio z Microsoft Graph rozwiązywać szczegóły członków kanału (nazwa wyświetlana, e-mail, rola).
Wymagania:
- Uprawnienie RSC `Member.Read.Group` (już zawarte w zalecanym manifeście)
- Dla wyszukiwań między zespołami: uprawnienie aplikacyjne Graph `User.Read.All` z consentem administratora
- Uprawnienie RSC `Member.Read.Group` (już obecne w zalecanym manifeście)
- Dla wyszukiwań między zespołami: uprawnienie aplikacyjne Graph `User.Read.All` z zgodą administratora
Akcja jest kontrolowana przez `channels.msteams.actions.memberInfo` (domyślnie: włączona, gdy dostępne są poświadczenia Graph).
## Kontekst historii
- `channels.msteams.historyLimit` kontroluje liczbę ostatnich wiadomości kanału/grupy opakowywanych do promptu.
- Zapasowo używa `messages.groupChat.historyLimit`. Ustaw `0`, aby wyłączyć (domyślnie 50).
- Pobrana historia wątku jest filtrowana przez allowlisty nadawców (`allowFrom` / `groupAllowFrom`), więc zasiewanie kontekstu wątku obejmuje tylko wiadomości od dozwolonych nadawców.
- Cytowany kontekst załączników (`ReplyTo*` pochodzący z HTML odpowiedzi Teams) jest obecnie przekazywany tak, jak został odebrany.
- Innymi słowy, allowlisty kontrolują, kto może wywołać agenta; obecnie filtrowane są tylko konkretne dodatkowe ścieżki kontekstu.
- `channels.msteams.historyLimit` określa, ile ostatnich wiadomości z kanału/grupy jest opakowywanych do promptu.
- Z fallbackiem do `messages.groupChat.historyLimit`. Ustaw `0`, aby wyłączyć (domyślnie 50).
- Pobierana historia wątku jest filtrowana przez listy dozwolonych nadawców (`allowFrom` / `groupAllowFrom`), więc seedowanie kontekstu wątku obejmuje tylko wiadomości od dozwolonych nadawców.
- Cytowany kontekst załączników (`ReplyTo*` pochodzący z HTML odpowiedzi Teams) jest obecnie przekazywany w otrzymanej postaci.
- Innymi słowy, listy dozwolonych nadawców kontrolują, kto może wyzwolić agenta; obecnie filtrowane są tylko określone uzupełniające ścieżki kontekstu.
- Historię DM można ograniczyć przez `channels.msteams.dmHistoryLimit` (tury użytkownika). Nadpisania per użytkownik: `channels.msteams.dms["<user_id>"].historyLimit`.
## Bieżące uprawnienia Teams RSC (manifest)
To są **istniejące resourceSpecific permissions** w naszym manifeście aplikacji Teams. Obowiązują tylko w zespole/czacie, gdzie aplikacja jest zainstalowana.
To są **istniejące uprawnienia resourceSpecific** w manifeście naszej aplikacji Teams. Obowiązują tylko wewnątrz zespołu/czatu, w którym aplikacja jest zainstalowana.
**Dla kanałów (zakres zespołu):**
@ -331,7 +481,7 @@ To są **istniejące resourceSpecific permissions** w naszym manifeście aplikac
- `ChatMessage.Read.Chat` (Application) - odbieranie wszystkich wiadomości czatu grupowego bez @mention
## Przykładowy manifest Teams (zredagowany)
## Przykładowy manifest Teams (z redakcją)
Minimalny, poprawny przykład z wymaganymi polami. Zastąp identyfikatory i URL-e.
@ -381,128 +531,133 @@ Minimalny, poprawny przykład z wymaganymi polami. Zastąp identyfikatory i URL-
}
```
### Zastrzeżenia dotyczące manifestu (pola obowiązkowe)
### Zastrzeżenia dotyczące manifestu (pola wymagane)
- `bots[].botId` **musi** odpowiadać Azure Bot App ID.
- `webApplicationInfo.id` **musi** odpowiadać Azure Bot App ID.
- `bots[].scopes` musi zawierać powierzchnie, których chcesz używać (`personal`, `team`, `groupChat`).
- `bots[].scopes` musi zawierać powierzchnie, których planujesz używać (`personal`, `team`, `groupChat`).
- `bots[].supportsFiles: true` jest wymagane do obsługi plików w zakresie osobistym.
- `authorization.permissions.resourceSpecific` musi zawierać uprawnienia odczytu/wysyłania kanałowego, jeśli chcesz obsługiwać ruch kanałowy.
### Aktualizacja istniejącej aplikacji
Aby zaktualizować już zainstalowaną aplikację Teams (np. w celu dodania uprawnień RSC):
Aby zaktualizować już zainstalowaną aplikację Teams (np. dodać uprawnienia RSC):
1. Zaktualizuj `manifest.json`, dodając nowe ustawienia
2. **Zwiększ pole `version`** (np. `1.0.0``1.1.0`)
3. **Spakuj ponownie** manifest z ikonami (`manifest.json`, `outline.png`, `color.png`)
4. Prześlij nowy zip:
3. **Ponownie spakuj ZIP** z manifestem i ikonami (`manifest.json`, `outline.png`, `color.png`)
4. Prześlij nowy plik zip:
- **Opcja A (Teams Admin Center):** Teams Admin Center → Teams apps → Manage apps → znajdź swoją aplikację → Upload new version
- **Opcja B (Sideload):** w Teams → Apps → Manage your apps → Upload a custom app
5. **Dla kanałów zespołowych:** zainstaluj ponownie aplikację w każdym zespole, aby nowe uprawnienia zaczęły dział
6. **Całkowicie zamknij i uruchom ponownie Teams** (nie tylko zamknij okno), aby wyczyścić cache metadanych aplikacji
- **Opcja B (Sideload):** W Teams → Apps → Manage your apps → Upload a custom app
5. **Dla kanałów zespołu:** ponownie zainstaluj aplikację w każdym zespole, aby nowe uprawnienia zaczęły obowiązyw
6. **Całkowicie zamknij i uruchom ponownie Teams** (nie tylko zamknij okno), aby wyczyścić metadane aplikacji z cache
## Możliwości: tylko RSC vs Graph
### Z **samym Teams RSC** (aplikacja zainstalowana, bez uprawnień Graph API)
### Z **samym Teams RSC** (aplikacja zainstalowana, bez uprawnień API Graph)
Działa:
- Odczyt treści **tekstowej** wiadomości kanałowych.
- Wysyłanie **tekstowej** treści wiadomości kanałowych.
- Odbieranie załączników plikowych w **osobistych (DM)**.
- Odczyt **tekstu** wiadomości kanałowych.
- Wysyłanie **tekstu** wiadomości kanałowych.
- Odbieranie załączników plikowych w **zakresie osobistym (DM)**.
NIE działa:
Nie działa:
- Zawartość **obrazów lub plików** w kanałach/grupach (payload zawiera tylko HTML stub).
- Zawartość **obrazów lub plików** w kanałach/grupach (payload zawiera tylko stub HTML).
- Pobieranie załączników przechowywanych w SharePoint/OneDrive.
- Odczyt historii wiadomości (poza zdarzeniem webhooka na żywo).
- Odczyt historii wiadomości (poza wydarzeniem webhooka na żywo).
### Z **Teams RSC + uprawnieniami aplikacyjnymi Microsoft Graph**
Dodaje:
- Pobieranie hostowanych treści (obrazów wklejonych do wiadomości).
- Pobieranie hostowanych treści (obrazy wklejane do wiadomości).
- Pobieranie załączników plikowych przechowywanych w SharePoint/OneDrive.
- Odczyt historii wiadomości kanałów/czatów przez Graph.
- Odczyt historii wiadomości kanału/czatu przez Graph.
### RSC vs Graph API
| Możliwość | Uprawnienia RSC | Graph API |
| ----------------------- | -------------------- | ----------------------------------- |
| **Wiadomości w czasie rzeczywistym** | Tak (przez webhook) | Nie (tylko polling) |
| **Wiadomości historyczne** | Nie | Tak (można odpytywać historię) |
| **Złożoność konfiguracji** | Tylko manifest aplikacji | Wymaga consentu administratora + przepływu tokena |
| **Działa offline** | Nie (musi działać) | Tak (zapytanie w dowolnym momencie) |
| Możliwość | Uprawnienia RSC | Graph API |
| --------------------- | -------------------- | ----------------------------------- |
| **Wiadomości w czasie rzeczywistym** | Tak (przez webhook) | Nie (tylko polling) |
| **Wiadomości historyczne** | Nie | Tak (można odpytywać historię) |
| **Złożoność konfiguracji** | Tylko manifest aplikacji | Wymaga zgody administratora + przepływu tokenów |
| **Działa offline** | Nie (musi działać) | Tak (zapytanie możliwe w dowolnym momencie) |
**Podsumowanie:** RSC służy do nasłuchiwania w czasie rzeczywistym; Graph API służy do dostępu historycznego. Aby nadrobić wiadomości pominięte podczas offline, potrzebujesz Graph API z `ChannelMessage.Read.All` (wymaga consentu administratora).
**Podsumowanie:** RSC służy do nasłuchu w czasie rzeczywistym; Graph API służy do dostępu historycznego. Aby nadrobić pominięte wiadomości podczas pracy offline, potrzebujesz Graph API z `ChannelMessage.Read.All` (wymaga zgody administratora).
## Media + historia z włączonym Graph (wymagane dla kanałów)
## Media + historia z Graph (wymagane dla kanałów)
Jeśli potrzebujesz obrazów/plików w **kanałach** lub chcesz pobierać **historię wiadomości**, musisz włączyć uprawnienia Microsoft Graph i przyznać consent administratora.
Jeśli potrzebujesz obrazów/plików w **kanałach** lub chcesz pobierać **historię wiadomości**, musisz włączyć uprawnienia Microsoft Graph i udzielić zgody administratora.
1. W Entra ID (Azure AD) **App Registration** dodaj uprawnienia aplikacyjne Microsoft Graph:
- `ChannelMessage.Read.All` (załączniki kanałowe + historia)
- `Chat.Read.All` lub `ChatMessage.Read.All` (czaty grupowe)
2. **Przyznaj consent administratora** dla tenant.
2. **Udziel zgody administratora** dla tenantu.
3. Zwiększ **wersję manifestu** aplikacji Teams, prześlij go ponownie i **zainstaluj aplikację ponownie w Teams**.
4. **Całkowicie zamknij i uruchom ponownie Teams**, aby wyczyścić cache metadanych aplikacji.
4. **Całkowicie zamknij i uruchom ponownie Teams**, aby wyczyścić metadane aplikacji z cache.
**Dodatkowe uprawnienie dla wzmiankowania użytkowników:** Wzmianki @ użytkowników działają od razu dla użytkowników obecnych w konwersacji. Jeśli jednak chcesz dynamicznie wyszukiwać i wzmiankować użytkowników, którzy **nie są w bieżącej konwersacji**, dodaj uprawnienie aplikacyjne `User.Read.All` i przyznaj consent administratora.
**Dodatkowe uprawnienie dla wzmianek o użytkownikach:** Wzmianki @ użytkowników działają od razu dla użytkowników będących uczestnikami rozmowy. Jeśli jednak chcesz dynamicznie wyszukiwać i oznaczać użytkowników, którzy **nie są w bieżącej rozmowie**, dodaj uprawnienie aplikacyjne `User.Read.All` i udziel zgody administratora.
## Znane ograniczenia
### Timeouty webhooków
### Limity czasu webhooka
Teams dostarcza wiadomości przez webhook HTTP. Jeśli przetwarzanie trwa zbyt długo (np. wolne odpowiedzi LLM), możesz zobaczyć:
Teams dostarcza wiadomości przez webhook HTTP. Jeśli przetwarzanie trwa zbyt długo (np. powolne odpowiedzi LLM), możesz zobaczyć:
- Timeouty gateway
- Ponawianie wiadomości przez Teams (powodujące duplikaty)
- Utracone odpowiedzi
- przekroczenia czasu gateway
- ponawianie wiadomości przez Teams (powodujące duplikaty)
- porzucone odpowiedzi
OpenClaw obsługuje to, szybko zwracając odpowiedź i wysyłając odpowiedzi proaktywnie, ale bardzo wolne odpowiedzi mogą nadal powodować problemy.
OpenClaw obsługuje to przez szybki zwrot odpowiedzi i proaktywne wysyłanie odpowiedzi, ale bardzo wolne odpowiedzi nadal mogą powodować problemy.
### Formatowanie
Markdown Teams jest bardziej ograniczony niż w Slack lub Discord:
- Podstawowe formatowanie działa: **pogrubienie**, _kursywa_, `code`, linki
- Złożony Markdown (tabele, zagnieżdżone listy) może nie renderować się poprawnie
- Działa podstawowe formatowanie: **bold**, _italic_, `code`, linki
- Złożony markdown (tabele, zagnieżdżone listy) może renderować się niepoprawnie
- Adaptive Cards są obsługiwane dla ankiet i dowolnych wysyłek kart (zobacz poniżej)
## Konfiguracja
Kluczowe ustawienia (zobacz `/gateway/configuration`, aby poznać współdzielone wzorce kanałów):
Kluczowe ustawienia (wspólne wzorce kanałów znajdziesz w `/gateway/configuration`):
- `channels.msteams.enabled`: włącz/wyłącz kanał.
- `channels.msteams.enabled`: włącza/wyłącza kanał.
- `channels.msteams.appId`, `channels.msteams.appPassword`, `channels.msteams.tenantId`: poświadczenia bota.
- `channels.msteams.webhook.port` (domyślnie `3978`)
- `channels.msteams.webhook.path` (domyślnie `/api/messages`)
- `channels.msteams.dmPolicy`: `pairing | allowlist | open | disabled` (domyślnie: pairing)
- `channels.msteams.allowFrom`: allowlista DM (zalecane identyfikatory obiektów AAD). Kreator rozwiązuje nazwy na identyfikatory podczas konfiguracji, gdy dostępny jest Graph.
- `channels.msteams.dangerouslyAllowNameMatching`: przełącznik awaryjny do ponownego włączenia dopasowywania zmiennych UPN-ów/nazw wyświetlanych oraz bezpośredniego routowania po nazwie zespołu/kanału.
- `channels.msteams.textChunkLimit`: rozmiar chunków tekstu wychodzącego.
- `channels.msteams.chunkMode`: `length` (domyślnie) lub `newline`, aby dzielić po pustych liniach (granice akapitów) przed chunkowaniem po długości.
- `channels.msteams.mediaAllowHosts`: allowlista hostów dla przychodzących załączników (domyślnie domeny Microsoft/Teams).
- `channels.msteams.mediaAuthAllowHosts`: allowlista hostów, dla których dołączane są nagłówki Authorization przy ponownych próbach pobierania mediów (domyślnie hosty Graph + Bot Framework).
- `channels.msteams.requireMention`: wymagaj @mention w kanałach/grupach (domyślnie true).
- `channels.msteams.allowFrom`: lista dozwolonych dla DM (zalecane identyfikatory obiektów AAD). Kreator rozwiązuje nazwy do identyfikatorów podczas konfiguracji, gdy dostęp do Graph jest dostępny.
- `channels.msteams.dangerouslyAllowNameMatching`: przełącznik awaryjny przywracający dopasowywanie po zmiennych UPN/nazwach wyświetlanych oraz bezpośredni routing po nazwach zespołów/kanałów.
- `channels.msteams.textChunkLimit`: rozmiar fragmentów tekstu wychodzącego.
- `channels.msteams.chunkMode`: `length` (domyślnie) lub `newline`, aby dzielić po pustych wierszach (granice akapitów) przed dzieleniem według długości.
- `channels.msteams.mediaAllowHosts`: lista dozwolonych hostów dla przychodzących załączników (domyślnie domeny Microsoft/Teams).
- `channels.msteams.mediaAuthAllowHosts`: lista dozwolonych hostów do dołączania nagłówków Authorization przy ponownych próbach pobrania mediów (domyślnie hosty Graph + Bot Framework).
- `channels.msteams.requireMention`: wymaga @mention w kanałach/grupach (domyślnie true).
- `channels.msteams.replyStyle`: `thread | top-level` (zobacz [Styl odpowiedzi](#reply-style-threads-vs-posts)).
- `channels.msteams.teams.<teamId>.replyStyle`: nadpisanie per zespół.
- `channels.msteams.teams.<teamId>.requireMention`: nadpisanie per zespół.
- `channels.msteams.teams.<teamId>.tools`: domyślne nadpisania polityki narzędzi per zespół (`allow`/`deny`/`alsoAllow`) używane, gdy brak nadpisania kanałowego.
- `channels.msteams.teams.<teamId>.toolsBySender`: domyślne nadpisania polityki narzędzi per nadawca dla zespołu (obsługiwany wildcard `"*"`).
- `channels.msteams.teams.<teamId>.tools`: domyślne nadpisania polityki narzędzi per zespół (`allow`/`deny`/`alsoAllow`) używane, gdy brakuje nadpisania kanału.
- `channels.msteams.teams.<teamId>.toolsBySender`: domyślne nadpisania polityki narzędzi per zespół i nadawcę (obsługiwany wildcard `"*"`).
- `channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle`: nadpisanie per kanał.
- `channels.msteams.teams.<teamId>.channels.<conversationId>.requireMention`: nadpisanie per kanał.
- `channels.msteams.teams.<teamId>.channels.<conversationId>.tools`: nadpisania polityki narzędzi per kanał (`allow`/`deny`/`alsoAllow`).
- `channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender`: nadpisania polityki narzędzi per nadawca dla kanału (obsługiwany wildcard `"*"`).
- `channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender`: nadpisania polityki narzędzi per kanał i nadawcę (obsługiwany wildcard `"*"`).
- Klucze `toolsBySender` powinny używać jawnych prefiksów:
`id:`, `e164:`, `username:`, `name:` (starsze klucze bez prefiksu nadal mapują tylko do `id:`).
- `channels.msteams.actions.memberInfo`: włącz lub wyłącz opartą na Graph akcję informacji o członku (domyślnie: włączona, gdy dostępne są poświadczenia Graph).
- `channels.msteams.sharePointSiteId`: identyfikator witryny SharePoint do przesyłania plików w czatach grupowych/kanałach (zobacz [Wysyłanie plików w czatach grupowych](#sending-files-in-group-chats)).
`id:`, `e164:`, `username:`, `name:` (starsze klucze bez prefiksu nadal mapują się tylko do `id:`).
- `channels.msteams.actions.memberInfo`: włącza lub wyłącza opartą na Graph akcję informacji o członku (domyślnie: włączona, gdy dostępne są poświadczenia Graph).
- `channels.msteams.authType`: typ uwierzytelniania — `"secret"` (domyślnie) lub `"federated"`.
- `channels.msteams.certificatePath`: ścieżka do pliku certyfikatu PEM (federated + uwierzytelnianie certyfikatem).
- `channels.msteams.certificateThumbprint`: odcisk palca certyfikatu (opcjonalny, niewymagany do uwierzytelniania).
- `channels.msteams.useManagedIdentity`: włącza uwierzytelnianie managed identity (tryb federated).
- `channels.msteams.managedIdentityClientId`: identyfikator klienta dla managed identity przypisanej przez użytkownika.
- `channels.msteams.sharePointSiteId`: identyfikator witryny SharePoint dla wysyłania plików w czatach grupowych/kanałach (zobacz [Wysyłanie plików w czatach grupowych](#sending-files-in-group-chats)).
## Routowanie i sesje
## Routing i sesje
- Klucze sesji mają standardowy format agenta (zobacz [/concepts/session](/concepts/session)):
- Klucze sesji są zgodne ze standardowym formatem agenta (zobacz [/concepts/session](/pl/concepts/session)):
- Wiadomości bezpośrednie współdzielą główną sesję (`agent:<agentId>:<mainKey>`).
- Wiadomości kanałowe/grupowe używają identyfikatora konwersacji:
- `agent:<agentId>:msteams:channel:<conversationId>`
@ -510,19 +665,19 @@ Kluczowe ustawienia (zobacz `/gateway/configuration`, aby poznać współdzielon
## Styl odpowiedzi: wątki vs posty
Teams niedawno wprowadził dwa style UI kanałów na tym samym bazowym modelu danych:
Teams niedawno wprowadził dwa style interfejsu kanałów nad tym samym bazowym modelem danych:
| Styl | Opis | Zalecane `replyStyle` |
| ------------------------ | --------------------------------------------------------- | --------------------- |
| **Posts** (klasyczny) | Wiadomości pojawiają się jako karty z odpowiedziami w wątku pod spodem | `thread` (domyślnie) |
| **Threads** (jak Slack) | Wiadomości płyną liniowo, bardziej jak w Slack | `top-level` |
| Styl | Opis | Zalecane `replyStyle` |
| ----------------------- | --------------------------------------------------------- | --------------------- |
| **Posts** (klasyczny) | Wiadomości pojawiają się jako karty z odpowiedziami we wątku pod spodem | `thread` (domyślnie) |
| **Threads** (jak Slack) | Wiadomości płyną liniowo, bardziej jak w Slack | `top-level` |
**Problem:** API Teams nie ujawnia, którego stylu UI używa kanał. Jeśli użyjesz niewłaściwego `replyStyle`:
**Problem:** API Teams nie ujawnia, którego stylu interfejsu używa kanał. Jeśli użyjesz niewłaściwego `replyStyle`:
- `thread` w kanale w stylu Threads → odpowiedzi pojawiają się niezręcznie zagnieżdżone
- `top-level` w kanale w stylu Posts → odpowiedzi pojawiają się jako osobne posty najwyższego poziomu zamiast we wątku
**Rozwiązanie:** Skonfiguruj `replyStyle` per kanał w zależności od tego, jak kanał jest skonfigurowany:
**Rozwiązanie:** Skonfiguruj `replyStyle` per kanał na podstawie sposobu skonfigurowania kanału:
```json5
{
@ -545,15 +700,15 @@ Teams niedawno wprowadził dwa style UI kanałów na tym samym bazowym modelu da
## Załączniki i obrazy
**Bieżące ograniczenia:**
**Obecne ograniczenia:**
- **DM-y:** obrazy i załączniki plikowe działają przez botowe API plików Teams.
- **Kanały/grupy:** załączniki znajdują się w pamięci masowej M365 (SharePoint/OneDrive). Payload webhooka zawiera tylko HTML stub, a nie faktyczne bajty pliku. **Do pobierania załączników kanałowych wymagane są uprawnienia Graph API**.
- **DM-y:** obrazy i załączniki plikowe działają przez interfejsy API plików bota Teams.
- **Kanały/grupy:** załączniki są przechowywane w M365 (SharePoint/OneDrive). Payload webhooka zawiera tylko stub HTML, a nie rzeczywiste bajty pliku. **Do pobierania załączników kanałowych wymagane są uprawnienia Graph API**.
- Dla jawnych wysyłek rozpoczynających się od pliku użyj `action=upload-file` z `media` / `filePath` / `path`; opcjonalne `message` staje się dołączonym tekstem/komentarzem, a `filename` nadpisuje nazwę przesyłanego pliku.
Bez uprawnień Graph wiadomości kanałowe z obrazami będą odbierane jako tylko tekstowe (zawartość obrazu nie jest dostępna dla bota).
Bez uprawnień Graph wiadomości kanałowe z obrazami będą odbierane tylko jako tekst (zawartość obrazu nie jest dostępna dla bota).
Domyślnie OpenClaw pobiera media tylko z nazw hostów Microsoft/Teams. Nadpisz to przez `channels.msteams.mediaAllowHosts` (użyj `["*"]`, aby zezwolić na dowolny host).
Nagłówki Authorization są dołączane tylko dla hostów z `channels.msteams.mediaAuthAllowHosts` (domyślnie hosty Graph + Bot Framework). Utrzymuj tę listę restrykcyjną (unikaj wielodostępnych sufiksów).
Nagłówki Authorization są dołączane tylko dla hostów z `channels.msteams.mediaAuthAllowHosts` (domyślnie hosty Graph + Bot Framework). Utrzymuj tę listę restrykcyjną (unikaj sufiksów wielodzierżawowych).
## Wysyłanie plików w czatach grupowych
@ -561,21 +716,21 @@ Boty mogą wysyłać pliki w DM-ach przy użyciu przepływu FileConsentCard (wbu
| Kontekst | Sposób wysyłania plików | Wymagana konfiguracja |
| ------------------------ | ------------------------------------------ | ---------------------------------------------- |
| **DM-y** | FileConsentCard → użytkownik akceptuje → bot przesyła | Działa od razu |
| **Czaty grupowe/kanały** | Przesłanie do SharePoint → link współdzielenia | Wymaga `sharePointSiteId` + uprawnień Graph |
| **DM-y** | FileConsentCard → użytkownik akceptuje → bot przesyła plik | Działa od razu |
| **Czaty grupowe/kanały** | Przesłanie do SharePoint → udostępnienie linku | Wymaga `sharePointSiteId` + uprawnień Graph |
| **Obrazy (dowolny kontekst)** | Inline zakodowane w Base64 | Działa od razu |
### Dlaczego czaty grupowe wymagają SharePoint
Boty nie mają osobistego dysku OneDrive (endpoint Graph API `/me/drive` nie działa dla tożsamości aplikacyjnych). Aby wysyłać pliki w czatach grupowych/kanałach, bot przesyła je do **witryny SharePoint** i tworzy link współdzielenia.
Boty nie mają osobistego dysku OneDrive (endpoint Graph API `/me/drive` nie działa dla tożsamości aplikacyjnych). Aby wysyłać pliki w czatach grupowych/kanałach, bot przesyła je do **witryny SharePoint** i tworzy link do udostępnienia.
### Konfiguracja
1. **Dodaj uprawnienia Graph API** w Entra ID (Azure AD) → App Registration:
- `Sites.ReadWrite.All` (Application) - przesyłanie plików do SharePoint
- `Chat.Read.All` (Application) - opcjonalnie, umożliwia linki współdzielenia per użytkownik
- `Chat.Read.All` (Application) - opcjonalne, włącza linki udostępniania per użytkownik
2. **Przyznaj consent administratora** dla tenant.
2. **Udziel zgody administratora** dla tenantu.
3. **Pobierz identyfikator witryny SharePoint:**
@ -604,20 +759,20 @@ Boty nie mają osobistego dysku OneDrive (endpoint Graph API `/me/drive` nie dzi
}
```
### Zachowanie współdzielenia
### Zachowanie udostępniania
| Uprawnienie | Zachowanie współdzielenia |
| ---------------------------------------- | ---------------------------------------------------------- |
| `Sites.ReadWrite.All` tylko | Link współdzielenia w całej organizacji (każdy w org może uzyskać dostęp) |
| `Sites.ReadWrite.All` + `Chat.Read.All` | Link współdzielenia per użytkownik (dostęp mają tylko członkowie czatu) |
| Uprawnienie | Zachowanie udostępniania |
| --------------------------------------- | --------------------------------------------------------- |
| `Sites.ReadWrite.All` tylko | Link udostępniania dla całej organizacji (dostępny dla każdego w organizacji) |
| `Sites.ReadWrite.All` + `Chat.Read.All` | Link udostępniania per użytkownik (dostępny tylko dla członków czatu) |
Współdzielenie per użytkownik jest bezpieczniejsze, ponieważ tylko uczestnicy czatu mogą uzyskać dostęp do pliku. Jeśli brakuje uprawnienia `Chat.Read.All`, bot wraca do współdzielenia w całej organizacji.
Udostępnianie per użytkownik jest bezpieczniejsze, ponieważ tylko uczestnicy czatu mają dostęp do pliku. Jeśli brakuje uprawnienia `Chat.Read.All`, bot wraca do udostępniania dla całej organizacji.
### Zachowanie zapasowe
### Zachowanie fallback
| Scenariusz | Wynik |
| ------------------------------------------------- | -------------------------------------------------- |
| Czat grupowy + plik + skonfigurowane `sharePointSiteId` | Przesłanie do SharePoint, wysłanie linku współdzielenia |
| Czat grupowy + plik + skonfigurowane `sharePointSiteId` | Przesłanie do SharePoint, wysłanie linku udostępniania |
| Czat grupowy + plik + brak `sharePointSiteId` | Próba przesłania do OneDrive (może się nie udać), wysłanie tylko tekstu |
| Czat osobisty + plik | Przepływ FileConsentCard (działa bez SharePoint) |
| Dowolny kontekst + obraz | Inline zakodowane w Base64 (działa bez SharePoint) |
@ -637,9 +792,9 @@ OpenClaw wysyła ankiety Teams jako Adaptive Cards (nie ma natywnego API ankiet
## Adaptive Cards (dowolne)
Wyślij dowolny JSON Adaptive Card do użytkowników lub konwersacji Teams za pomocą narzędzia `message` lub CLI.
Wysyłaj dowolny JSON Adaptive Card do użytkowników lub konwersacji Teams przy użyciu narzędzia `message` lub CLI.
Parametr `card` akceptuje obiekt JSON Adaptive Card. Gdy podano `card`, tekst wiadomości jest opcjonalny.
Parametr `card` akceptuje obiekt JSON Adaptive Card. Gdy `card` jest podane, tekst wiadomości jest opcjonalny.
**Narzędzie agenta:**
@ -664,26 +819,26 @@ openclaw message send --channel msteams \
--card '{"type":"AdaptiveCard","version":"1.5","body":[{"type":"TextBlock","text":"Hello!"}]}'
```
Zobacz [dokumentację Adaptive Cards](https://adaptivecards.io/), aby poznać schemat kart i przykłady. Szczegóły formatu target znajdziesz poniżej w [Formatach target](#target-formats).
Zobacz [dokumentację Adaptive Cards](https://adaptivecards.io/), aby poznać schemat karty i przykłady. Szczegóły formatu celu znajdziesz poniżej w [Formatach celu](#target-formats).
## Formaty target
## Formaty celu
Targety MSTeams używają prefiksów do rozróżniania użytkowników i konwersacji:
Cele MSTeams używają prefiksów do rozróżniania użytkowników i konwersacji:
| Typ targetu | Format | Przykład |
| -------------------- | -------------------------------- | --------------------------------------------------- |
| Użytkownik (po ID) | `user:<aad-object-id>` | `user:40a1a0ed-4ff2-4164-a219-55518990c197` |
| Użytkownik (po nazwie) | `user:<display-name>` | `user:John Smith` (wymaga Graph API) |
| Grupa/kanał | `conversation:<conversation-id>` | `conversation:19:abc123...@thread.tacv2` |
| Grupa/kanał (raw) | `<conversation-id>` | `19:abc123...@thread.tacv2` (jeśli zawiera `@thread`) |
| Typ celu | Format | Przykład |
| --------------------- | -------------------------------- | --------------------------------------------------- |
| Użytkownik (według ID) | `user:<aad-object-id>` | `user:40a1a0ed-4ff2-4164-a219-55518990c197` |
| Użytkownik (według nazwy) | `user:<display-name>` | `user:John Smith` (wymaga Graph API) |
| Grupa/kanał | `conversation:<conversation-id>` | `conversation:19:abc123...@thread.tacv2` |
| Grupa/kanał (raw) | `<conversation-id>` | `19:abc123...@thread.tacv2` (jeśli zawiera `@thread`) |
**Przykłady CLI:**
```bash
# Wyślij do użytkownika po ID
# Wyślij do użytkownika według ID
openclaw message send --channel msteams --target "user:40a1a0ed-..." --message "Hello"
# Wyślij do użytkownika po nazwie wyświetlanej (wywołuje wyszukiwanie przez Graph API)
# Wyślij do użytkownika według nazwy wyświetlanej (wywołuje wyszukiwanie przez Graph API)
openclaw message send --channel msteams --target "user:John Smith" --message "Hello"
# Wyślij do czatu grupowego lub kanału
@ -718,14 +873,14 @@ openclaw message send --channel msteams --target "conversation:19:abc...@thread.
}
```
Uwaga: bez prefiksu `user:` nazwy domyślnie trafiają do rozwiązywania grup/zespołów. Zawsze używaj `user:`, gdy kierujesz wiadomość do osób po nazwie wyświetlanej.
Uwaga: bez prefiksu `user:` nazwy domyślnie trafiają do rozwiązywania grup/zespołów. Zawsze używaj `user:`, gdy kierujesz wiadomości do osób po nazwie wyświetlanej.
## Wiadomości proaktywne
- Wiadomości proaktywne są możliwe **dopiero po** interakcji użytkownika, ponieważ dopiero wtedy zapisujemy referencje konwersacji.
- Zobacz `/gateway/configuration`, aby poznać `dmPolicy` i bramkowanie allowlistą.
- Zobacz `/gateway/configuration`, aby poznać `dmPolicy` i kontrolę przez listy dozwolonych.
## Identyfikatory zespołów i kanałów (częsta pułapka)
## Identyfikatory zespołów i kanałów (częsty problem)
Parametr zapytania `groupId` w URL-ach Teams **NIE** jest identyfikatorem zespołu używanym do konfiguracji. Wyodrębnij identyfikatory ze ścieżki URL:
@ -734,7 +889,7 @@ Parametr zapytania `groupId` w URL-ach Teams **NIE** jest identyfikatorem zespo
```
https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/conversations?groupId=...
└────────────────────────────┘
Identyfikator zespołu (zdekoduj URL)
Team ID (zdekoduj URL)
```
**URL kanału:**
@ -742,70 +897,70 @@ https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/conversations?gro
```
https://teams.microsoft.com/l/channel/19%3A15bc...%40thread.tacv2/ChannelName?groupId=...
└─────────────────────────┘
Identyfikator kanału (zdekoduj URL)
Channel ID (zdekoduj URL)
```
**Dla konfiguracji:**
**Do konfiguracji:**
- Identyfikator zespołu = segment ścieżki po `/team/` (po zdekodowaniu URL, np. `19:Bk4j...@thread.tacv2`)
- Identyfikator kanału = segment ścieżki po `/channel/` (po zdekodowaniu URL)
- Team ID = segment ścieżki po `/team/` (po zdekodowaniu URL, np. `19:Bk4j...@thread.tacv2`)
- Channel ID = segment ścieżki po `/channel/` (po zdekodowaniu URL)
- **Ignoruj** parametr zapytania `groupId`
## Kanały prywatne
Boty mają ograniczone wsparcie w kanałach prywatnych:
Boty mają ograniczoną obsługę w kanałach prywatnych:
| Funkcja | Kanały standardowe | Kanały prywatne |
| ---------------------------- | ------------------ | ---------------------- |
| Instalacja bota | Tak | Ograniczona |
| Wiadomości w czasie rzeczywistym (webhook) | Tak | Może nie działać |
| Wiadomości w czasie rzeczywistym (webhook) | Tak | Może nie działać |
| Uprawnienia RSC | Tak | Mogą działać inaczej |
| @mentions | Tak | Jeśli bot jest dostępny |
| Historia przez Graph API | Tak | Tak (z uprawnieniami) |
**Obejścia, jeśli kanały prywatne nie działają:**
1. Używaj kanałów standardowych do interakcji z botem
2. Używaj DM-ów — użytkownicy zawsze mogą napisać bezpośrednio do bota
1. Używaj standardowych kanałów do interakcji z botem
2. Używaj DM-ów — użytkownicy zawsze mogą napisać do bota bezpośrednio
3. Używaj Graph API do dostępu historycznego (wymaga `ChannelMessage.Read.All`)
## Rozwiązywanie problemów
### Typowe problemy
- **Obrazy nie pokazują się w kanałach:** brakuje uprawnień Graph lub consentu administratora. Zainstaluj ponownie aplikację Teams i całkowicie zamknij/otwórz Teams.
- **Brak odpowiedzi w kanale:** domyślnie wymagane są wzmianki; ustaw `channels.msteams.requireMention=false` lub skonfiguruj per zespół/kanał.
- **Niezgodność wersji (Teams nadal pokazuje stary manifest):** usuń i dodaj aplikację ponownie oraz całkowicie zamknij Teams, aby odświeżyć.
- **401 Unauthorized z webhooka:** oczekiwane przy ręcznych testach bez Azure JWT — oznacza, że endpoint jest osiągalny, ale autoryzacja się nie powiodła. Użyj Azure Web Chat do poprawnego testowania.
- **Obrazy nie pokazują się w kanałach:** brakuje uprawnień Graph lub zgody administratora. Zainstaluj ponownie aplikację Teams i całkowicie zamknij/otwórz ponownie Teams.
- **Brak odpowiedzi w kanale:** wzmianki są domyślnie wymagane; ustaw `channels.msteams.requireMention=false` lub skonfiguruj to per zespół/kanał.
- **Niezgodność wersji (Teams nadal pokazuje stary manifest):** usuń i dodaj aplikację ponownie oraz całkowicie zamknij Teams, aby odświeżyć dane.
- **401 Unauthorized z webhooka:** oczekiwane przy ręcznych testach bez JWT z Azure — oznacza, że endpoint jest osiągalny, ale uwierzytelnianie nie przeszło. Do poprawnego testu użyj Azure Web Chat.
### Błędy przesyłania manifestu
- **"Icon file cannot be empty":** manifest odwołuje się do plików ikon, które mają 0 bajtów. Utwórz poprawne ikony PNG (`outline.png` 32x32, `color.png` 192x192).
- **"webApplicationInfo.Id already in use":** aplikacja nadal jest zainstalowana w innym zespole/czacie. Znajdź ją i odinstaluj najpierw albo odczekaj 5-10 minut na propagację.
- **"Something went wrong" przy przesyłaniu:** prześlij przez [https://admin.teams.microsoft.com](https://admin.teams.microsoft.com), otwórz DevTools przeglądarki (F12) → zakładka Network i sprawdź body odpowiedzi, aby zobaczyć faktyczny błąd.
- **Sideload nie działa:** spróbuj opcji „Upload an app to your org's app catalog” zamiast „Upload a custom app” — często omija to ograniczenia sideload.
- **"Icon file cannot be empty":** manifest odwołuje się do plików ikon mających 0 bajtów. Utwórz poprawne ikony PNG (`outline.png` 32x32, `color.png` 192x192).
- **"webApplicationInfo.Id already in use":** aplikacja jest nadal zainstalowana w innym zespole/czacie. Najpierw ją znajdź i odinstaluj albo poczekaj 5-10 minut na propagację.
- **"Something went wrong" podczas przesyłania:** prześlij przez [https://admin.teams.microsoft.com](https://admin.teams.microsoft.com), otwórz DevTools przeglądarki (F12) → kartę Network i sprawdź body odpowiedzi, aby zobaczyć rzeczywisty błąd.
- **Niepowodzenie sideload:** spróbuj użyć „Upload an app to your org's app catalog” zamiast „Upload a custom app” — często omija to ograniczenia sideload.
### Uprawnienia RSC nie działają
1. Zweryfikuj, że `webApplicationInfo.id` dokładnie odpowiada App ID Twojego bota
1. Sprawdź, czy `webApplicationInfo.id` dokładnie odpowiada App ID Twojego bota
2. Prześlij aplikację ponownie i zainstaluj ją ponownie w zespole/czacie
3. Sprawdź, czy administrator Twojej organizacji nie zablokował uprawnień RSC
3. Sprawdź, czy administrator organizacji nie zablokował uprawnień RSC
4. Potwierdź, że używasz właściwego zakresu: `ChannelMessage.Read.Group` dla zespołów, `ChatMessage.Read.Chat` dla czatów grupowych
## Odwołania
## Odnośniki
- [Create Azure Bot](https://learn.microsoft.com/en-us/azure/bot-service/bot-service-quickstart-registration) - przewodnik konfiguracji Azure Bot
- [Teams Developer Portal](https://dev.teams.microsoft.com/apps) - tworzenie/zarządzanie aplikacjami Teams
- [Schemat manifestu aplikacji Teams](https://learn.microsoft.com/en-us/microsoftteams/platform/resources/schema/manifest-schema)
- [Odbieranie wiadomości kanałowych z RSC](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/channel-messages-with-rsc)
- [Dokumentacja uprawnień RSC](https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent)
- [Obsługa plików bota Teams](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/bots-filesv4) (kanał/grupa wymaga Graph)
- [Wiadomości proaktywne](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages)
- [Teams app manifest schema](https://learn.microsoft.com/en-us/microsoftteams/platform/resources/schema/manifest-schema)
- [Receive channel messages with RSC](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/channel-messages-with-rsc)
- [RSC permissions reference](https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent)
- [Teams bot file handling](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/bots-filesv4) (kanały/grupy wymagają Graph)
- [Proactive messaging](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages)
## Powiązane
- [Przegląd kanałów](/pl/channels) — wszystkie obsługiwane kanały
- [Channels Overview](/pl/channels) — wszystkie obsługiwane kanały
- [Pairing](/pl/channels/pairing) — uwierzytelnianie DM i przepływ parowania
- [Grupy](/pl/channels/groups) — zachowanie czatów grupowych i bramkowanie wzmiankami
- [Routowanie kanałów](/pl/channels/channel-routing) — routowanie sesji dla wiadomości
- [Bezpieczeństwo](/gateway/security) — model dostępu i utwardzanie
- [Groups](/pl/channels/groups) — zachowanie czatów grupowych i bramkowanie wzmianką
- [Channel Routing](/pl/channels/channel-routing) — routing sesji dla wiadomości
- [Security](/pl/gateway/security) — model dostępu i utwardzanie

View File

@ -1,53 +1,53 @@
---
read_when:
- Zmieniasz osadzone środowisko uruchomieniowe agenta lub rejestr harness agenta
- Rejestrujesz agent harness z wbudowanego lub zaufanego pluginu
- Musisz zrozumieć, jak plugin Codex odnosi się do providerów modeli
- Zmieniasz osadzony runtime agenta lub rejestr harnessów
- Rejestrujesz harness agenta z dołączonego lub zaufanego pluginu
- Musisz zrozumieć, jak plugin Codex odnosi się do dostawców modeli
sidebarTitle: Agent Harness
summary: Eksperymentalna powierzchnia SDK dla pluginów, które zastępują niskopoziomowy osadzony executor agenta
title: Pluginy Agent Harness
title: Pluginy Harness agenta
x-i18n:
generated_at: "2026-04-11T02:46:20Z"
generated_at: "2026-04-12T00:18:57Z"
model: gpt-5.4
provider: openai
source_hash: 43c1f2c087230398b0162ed98449f239c8db1e822e51c7dcd40c54fa6c3374e1
source_hash: 62b88fd24ce8b600179db27e16e8d764a2cd7a14e5c5df76374c33121aa5e365
source_path: plugins/sdk-agent-harness.md
workflow: 15
---
# Pluginy Agent Harness
**Agent harness** to niskopoziomowy executor dla jednej przygotowanej tury agenta OpenClaw. Nie jest providerem modeli, nie jest kanałem i nie jest rejestrem narzędzi.
**Agent harness** to niskopoziomowy executor jednego przygotowanego kroku agenta OpenClaw. Nie jest dostawcą modeli, nie jest kanałem i nie jest rejestrem narzędzi.
Używaj tej powierzchni tylko dla wbudowanych lub zaufanych natywnych pluginów. Kontrakt jest nadal eksperymentalny, ponieważ typy parametrów celowo odzwierciedlają bieżący osadzony runner.
Używaj tej powierzchni tylko dla dołączonych lub zaufanych natywnych pluginów. Kontrakt jest nadal eksperymentalny, ponieważ typy parametrów celowo odzwierciedlają obecny osadzony runner.
## Kiedy używać harness
## Kiedy używać harnessu
Zarejestruj agent harness, gdy rodzina modeli ma własne natywne środowisko uruchomieniowe sesji, a zwykły transport providera OpenClaw jest niewłaściwą abstrakcją.
Zarejestruj agent harness, gdy rodzina modeli ma własny natywny runtime sesji, a standardowy transport dostawcy OpenClaw jest niewłaściwą abstrakcją.
Przykłady:
- natywny serwer coding-agent, który zarządza wątkami i kompaktacją
- natywny serwer coding-agent, który zarządza wątkami i kompaktowaniem
- lokalny CLI lub demon, który musi strumieniować natywne zdarzenia planu/rozumowania/narzędzi
- środowisko uruchomieniowe modelu, które oprócz transkryptu sesji OpenClaw potrzebuje własnego resume id
- runtime modelu, który oprócz transkryptu sesji OpenClaw potrzebuje własnego identyfikatora wznowienia
**Nie** rejestruj harness tylko po to, aby dodać nowe API LLM. Dla zwykłych interfejsów modeli HTTP lub WebSocket zbuduj [provider plugin](/pl/plugins/sdk-provider-plugins).
**Nie** rejestruj harnessu tylko po to, aby dodać nowe API LLM. Dla zwykłych modeli API HTTP lub WebSocket zbuduj [plugin dostawcy](/pl/plugins/sdk-provider-plugins).
## Czym nadal zarządza core
Zanim harness zostanie wybrany, OpenClaw już ustalił:
Zanim harness zostanie wybrany, OpenClaw ma już rozstrzygnięte:
- providera i model
- stan auth runtime
- poziom rozumowania i budżet kontekstu
- dostawcę i model
- stan uwierzytelniania runtime
- poziom myślenia i budżet kontekstu
- plik transkryptu/sesji OpenClaw
- workspace, sandbox i politykę narzędzi
- callbacki odpowiedzi kanału i callbacki streamingu
- callbacki odpowiedzi kanału i callbacki strumieniowania
- politykę fallbacku modelu i przełączania modeli na żywo
Ten podział jest celowy. Harness uruchamia przygotowaną próbę; nie wybiera providerów, nie zastępuje dostarczania kanałowego i nie przełącza po cichu modeli.
Ten podział jest celowy. Harness uruchamia przygotowaną próbę; nie wybiera dostawców, nie zastępuje dostarczania przez kanał i nie przełącza po cichu modeli.
## Rejestracja harness
## Zarejestruj harness
**Import:** `openclaw/plugin-sdk/agent-harness`
@ -83,42 +83,51 @@ export default definePluginEntry({
});
```
## Zasady wyboru
## Polityka wyboru
OpenClaw wybiera harness po rozstrzygnięciu providera/modelu:
OpenClaw wybiera harness po rozstrzygnięciu dostawcy/modelu:
1. `OPENCLAW_AGENT_RUNTIME=<id>` wymusza zarejestrowany harness o tym id.
2. `OPENCLAW_AGENT_RUNTIME=pi` wymusza wbudowany harness PI.
3. `OPENCLAW_AGENT_RUNTIME=auto` pyta zarejestrowane harnessy, czy obsługują rozstrzygnięty provider/model.
4. Jeśli żaden zarejestrowany harness nie pasuje, OpenClaw używa PI, chyba że fallback PI jest wyłączony.
3. `OPENCLAW_AGENT_RUNTIME=auto` pyta zarejestrowane harnessy, czy obsługują rozstrzygniętego dostawcę/model.
4. Jeśli żaden zarejestrowany harness nie pasuje, OpenClaw używa PI, chyba że fallback do PI jest wyłączony.
Błędy wymuszonego plugin harness są zgłaszane jako błędy uruchomienia. W trybie `auto` OpenClaw może wrócić do PI, gdy wybrany plugin harness zakończy się błędem, zanim tura wywoła skutki uboczne. Ustaw `OPENCLAW_AGENT_HARNESS_FALLBACK=none` lub `embeddedHarness.fallback: "none"`, aby taki fallback był twardym błędem.
Błędy wymuszonego plugin harnessu są zgłaszane jako błędy uruchomienia. W trybie `auto` OpenClaw może wrócić do PI, jeśli wybrany plugin harness zakończy się błędem, zanim krok wywoła skutki uboczne. Ustaw `OPENCLAW_AGENT_HARNESS_FALLBACK=none` lub `embeddedHarness.fallback: "none"`, aby taki fallback zamiast tego był twardym błędem.
Dołączony plugin Codex rejestruje `codex` jako id swojego harness. Core traktuje to jak zwykłe id plugin harness; aliasy specyficzne dla Codex powinny należeć do pluginu albo konfiguracji operatora, a nie do wspólnego selektora runtime.
Dołączony plugin Codex rejestruje `codex` jako swoje id harnessu. Core traktuje to jak zwykłe id plugin harnessu; aliasy specyficzne dla Codex powinny należeć do pluginu lub konfiguracji operatora, a nie do współdzielonego selektora runtime.
## Parowanie provider plus harness
## Parowanie dostawcy i harnessu
Większość harnessów powinna także rejestrować providera. Provider udostępnia odwołania do modeli, stan auth, metadane modeli i wybór `/model` pozostałej części OpenClaw. Harness następnie zgłasza tego providera w `supports(...)`.
Większość harnessów powinna także zarejestrować dostawcę. Dostawca udostępnia reszcie OpenClaw referencje modeli, status uwierzytelnienia, metadane modeli i wybór `/model`. Następnie harness zgłasza tego dostawcę w `supports(...)`.
Dołączony plugin Codex stosuje ten wzorzec:
- id providera: `codex`
- odwołania do modeli użytkownika: `codex/gpt-5.4`, `codex/gpt-5.2` albo inny model zwrócony przez serwer aplikacji Codex
- id harness: `codex`
- auth: syntetyczna dostępność providera, ponieważ harness Codex zarządza natywnym logowaniem/sesją Codex
- żądanie app-servera: OpenClaw wysyła do Codex samo id modelu i pozwala harnessowi rozmawiać z natywnym protokołem app-servera
- id dostawcy: `codex`
- referencje modeli użytkownika: `codex/gpt-5.4`, `codex/gpt-5.2` lub inny model zwracany przez serwer aplikacji Codex
- id harnessu: `codex`
- uwierzytelnianie: syntetyczna dostępność dostawcy, ponieważ harness Codex zarządza natywnym logowaniem/sesją Codex
- żądanie app-server: OpenClaw wysyła do Codex samo id modelu i pozwala harnessowi komunikować się z natywnym protokołem app-server
Plugin Codex jest dodatkiem. Zwykłe odwołania `openai/gpt-*` pozostają odwołaniami providera OpenAI i nadal używają normalnej ścieżki providera OpenClaw. Wybierz `codex/gpt-*`, gdy chcesz auth zarządzanego przez Codex, wykrywania modeli Codex, natywnych wątków i wykonywania przez app-server Codex. `/model` może przełączać się między modelami Codex zwróconymi przez serwer aplikacji Codex bez konieczności posiadania poświadczeń providera OpenAI.
Plugin Codex jest dodatkiem. Zwykłe referencje `openai/gpt-*` pozostają referencjami dostawcy OpenAI i nadal używają standardowej ścieżki dostawcy OpenClaw. Wybierz `codex/gpt-*`, gdy chcesz uwierzytelniania zarządzanego przez Codex, wykrywania modeli Codex, natywnych wątków i wykonywania przez app-server Codex. `/model` może przełączać się między modelami Codex zwracanymi przez app-server Codex bez konieczności posiadania poświadczeń dostawcy OpenAI.
Informacje o konfiguracji operatora, przykłady prefiksów modeli i konfiguracje tylko dla Codex znajdziesz w [Codex Harness](/pl/plugins/codex-harness).
OpenClaw wymaga app-servera Codex `0.118.0` lub nowszego. Plugin Codex sprawdza handshake inicjalizacji app-servera i blokuje starsze lub niezwersjonowane serwery, aby OpenClaw działał tylko z powierzchnią protokołu, na której został przetestowany.
OpenClaw wymaga app-server Codex w wersji `0.118.0` lub nowszej. Plugin Codex sprawdza handshake inicjalizacji app-server i blokuje starsze lub niewersjonowane serwery, aby OpenClaw działał tylko z powierzchnią protokołu, z którą był testowany.
## Wyłącz fallback PI
### Tryb natywnego harnessu Codex
Domyślnie OpenClaw uruchamia osadzonych agentów z `agents.defaults.embeddedHarness` ustawionym na `{ runtime: "auto", fallback: "pi" }`. W trybie `auto` zarejestrowane plugin harnessy mogą przejąć parę provider/model. Jeśli żaden nie pasuje albo jeśli automatycznie wybrany plugin harness zakończy się błędem przed wygenerowaniem danych wyjściowych, OpenClaw wraca do PI.
Dołączony harness `codex` to natywny tryb Codex dla osadzonych kroków agenta OpenClaw. Najpierw włącz dołączony plugin `codex` i uwzględnij `codex` w `plugins.allow`, jeśli twoja konfiguracja używa restrykcyjnej allowlisty. Różni się od `openai-codex/*`:
Ustaw `fallback: "none"`, gdy musisz udowodnić, że plugin harness jest jedynym używanym runtime. To wyłącza automatyczny fallback PI; nie blokuje jawnego `runtime: "pi"` ani `OPENCLAW_AGENT_RUNTIME=pi`.
- `openai-codex/*` używa OAuth ChatGPT/Codex przez standardową ścieżkę dostawcy OpenClaw.
- `codex/*` używa dołączonego dostawcy Codex i kieruje krok przez app-server Codex.
Gdy ten tryb działa, Codex zarządza natywnym id wątku, zachowaniem wznowienia, kompaktowaniem i wykonywaniem przez app-server. OpenClaw nadal zarządza kanałem czatu, widocznym mirrorowaniem transkryptu, polityką narzędzi, zatwierdzeniami, dostarczaniem mediów i wyborem sesji. Użyj `embeddedHarness.runtime: "codex"` z `embeddedHarness.fallback: "none"`, gdy musisz potwierdzić, że używana jest ścieżka app-server Codex, a fallback do PI nie ukrywa uszkodzonego natywnego harnessu.
## Wyłącz fallback do PI
Domyślnie OpenClaw uruchamia osadzonych agentów z `agents.defaults.embeddedHarness` ustawionym na `{ runtime: "auto", fallback: "pi" }`. W trybie `auto` zarejestrowane plugin harnessy mogą zgłaszać obsługę pary dostawca/model. Jeśli żaden nie pasuje albo jeśli automatycznie wybrany plugin harness zakończy się błędem przed wygenerowaniem wyjścia, OpenClaw wraca do PI.
Ustaw `fallback: "none"`, gdy musisz potwierdzić, że plugin harness jest jedynym używanym runtime. Wyłącza to automatyczny fallback do PI; nie blokuje jawnego `runtime: "pi"` ani `OPENCLAW_AGENT_RUNTIME=pi`.
Dla osadzonych uruchomień tylko z Codex:
@ -136,7 +145,7 @@ Dla osadzonych uruchomień tylko z Codex:
}
```
Jeśli chcesz, aby dowolny zarejestrowany plugin harness przejmował pasujące modele, ale nigdy nie chcesz, aby OpenClaw po cichu wracał do PI, pozostaw `runtime: "auto"` i wyłącz fallback:
Jeśli chcesz, aby dowolny zarejestrowany plugin harness zgłaszał pasujące modele, ale nigdy nie chcesz, aby OpenClaw po cichu wracał do PI, pozostaw `runtime: "auto"` i wyłącz fallback:
```json
{
@ -151,7 +160,7 @@ Jeśli chcesz, aby dowolny zarejestrowany plugin harness przejmował pasujące m
}
```
Nadpisania dla konkretnych agentów mają ten sam kształt:
Nadpisania dla poszczególnych agentów używają tego samego kształtu:
```json
{
@ -176,7 +185,7 @@ Nadpisania dla konkretnych agentów mają ten sam kształt:
}
```
`OPENCLAW_AGENT_RUNTIME` nadal nadpisuje skonfigurowany runtime. Użyj `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, aby wyłączyć fallback PI z poziomu środowiska.
`OPENCLAW_AGENT_RUNTIME` nadal nadpisuje skonfigurowany runtime. Użyj `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, aby wyłączyć fallback do PI z poziomu środowiska.
```bash
OPENCLAW_AGENT_RUNTIME=codex \
@ -184,39 +193,39 @@ OPENCLAW_AGENT_HARNESS_FALLBACK=none \
openclaw gateway run
```
Przy wyłączonym fallbacku sesja kończy się błędem wcześnie, gdy żądany harness nie jest zarejestrowany, nie obsługuje rozstrzygniętego providera/modelu albo kończy się błędem przed wygenerowaniem skutków ubocznych tury. Jest to celowe dla wdrożeń tylko z Codex i dla testów live, które muszą potwierdzić, że faktycznie używana jest ścieżka app-servera Codex.
Przy wyłączonym fallbacku sesja kończy się wcześnie błędem, gdy żądany harness nie jest zarejestrowany, nie obsługuje rozstrzygniętego dostawcy/modelu albo kończy się błędem przed wywołaniem skutków ubocznych kroku. Jest to zamierzone dla wdrożeń tylko z Codex oraz dla testów live, które muszą potwierdzić, że ścieżka app-server Codex jest rzeczywiście używana.
To ustawienie kontroluje tylko osadzony agent harness. Nie wyłącza routingu modeli specyficznych dla providerów dla obrazów, wideo, muzyki, TTS, PDF ani innych typów.
To ustawienie kontroluje tylko osadzony agent harness. Nie wyłącza routingu modeli specyficznego dla dostawcy dla obrazów, wideo, muzyki, TTS, PDF ani innych funkcji.
## Natywne sesje i lustro transkryptu
## Natywne sesje i mirror transkryptu
Harness może przechowywać natywne id sesji, id wątku albo token wznowienia po stronie demona. Powiąż to jawnie z sesją OpenClaw i nadal odzwierciedlaj widoczne dla użytkownika dane wyjściowe asystenta/narzędzi w transkrypcie OpenClaw.
Harness może przechowywać natywne id sesji, id wątku albo token wznowienia po stronie demona. Zachowuj to powiązanie jawnie skojarzone z sesją OpenClaw i nadal mirroruj widoczne dla użytkownika wyjście asystenta/narzędzi do transkryptu OpenClaw.
Transkrypt OpenClaw pozostaje warstwą zgodności dla:
Transkrypt OpenClaw pozostaje warstwą kompatybilności dla:
- historii sesji widocznej w kanałach
- wyszukiwania i indeksowania transkryptów
- późniejszego przełączenia z powrotem na wbudowany harness PI
- historii sesji widocznej w kanale
- wyszukiwania i indeksowania transkryptu
- przełączenia z powrotem na wbudowany harness PI w późniejszym kroku
- ogólnego zachowania `/new`, `/reset` i usuwania sesji
Jeśli harness przechowuje powiązanie sidecar, zaimplementuj `reset(...)`, aby OpenClaw mógł je wyczyścić przy resetowaniu powiązanej sesji OpenClaw.
Jeśli twój harness przechowuje powiązanie sidecar, zaimplementuj `reset(...)`, aby OpenClaw mógł je wyczyścić, gdy powiązana sesja OpenClaw zostanie zresetowana.
## Wyniki narzędzi i mediów
Core tworzy listę narzędzi OpenClaw i przekazuje ją do przygotowanej próby. Gdy harness wykonuje dynamiczne wywołanie narzędzia, zwróć wynik narzędzia przez kształt wyniku harness zamiast samodzielnie wysyłać media kanałowe.
Core konstruuje listę narzędzi OpenClaw i przekazuje ją do przygotowanej próby. Gdy harness wykonuje dynamiczne wywołanie narzędzia, zwróć wynik narzędzia przez kształt wyniku harnessu zamiast samodzielnie wysyłać media kanału.
Dzięki temu wyjścia tekstowe, obrazów, wideo, muzyki, TTS, zatwierdzeń i narzędzi wiadomości pozostają na tej samej ścieżce dostarczania co uruchomienia oparte na PI.
Dzięki temu wyjścia tekstowe, obrazy, wideo, muzyka, TTS, zatwierdzenia i wyjścia narzędzi do komunikacji pozostają na tej samej ścieżce dostarczania co uruchomienia oparte na PI.
## Bieżące ograniczenia
## Obecne ograniczenia
- Publiczna ścieżka importu jest ogólna, ale niektóre aliasy typów prób/wyników nadal zawierają nazwy `Pi` ze względu na zgodność.
- Instalacja harnessów firm trzecich jest eksperymentalna. Preferuj provider pluginy, dopóki nie potrzebujesz natywnego środowiska uruchomieniowego sesji.
- Przełączanie harnessów między turami jest obsługiwane. Nie przełączaj harnessów w środku tury po rozpoczęciu natywnych narzędzi, zatwierdzeń, tekstu asystenta lub wysyłania wiadomości.
- Publiczna ścieżka importu jest ogólna, ale niektóre aliasy typów prób/wyników nadal zawierają nazwy `Pi` ze względu na kompatybilność.
- Instalacja harnessów firm trzecich jest eksperymentalna. Preferuj pluginy dostawców, dopóki nie potrzebujesz natywnego runtime sesji.
- Przełączanie harnessów między krokami jest obsługiwane. Nie przełączaj harnessów w środku kroku po rozpoczęciu natywnych narzędzi, zatwierdzeń, tekstu asystenta lub wysyłania wiadomości.
## Powiązane
- [Przegląd SDK](/pl/plugins/sdk-overview)
- [Runtime Helpers](/pl/plugins/sdk-runtime)
- [Provider Plugins](/pl/plugins/sdk-provider-plugins)
- [Pomocniki runtime](/pl/plugins/sdk-runtime)
- [Pluginy dostawców](/pl/plugins/sdk-provider-plugins)
- [Codex Harness](/pl/plugins/codex-harness)
- [Providery modeli](/pl/concepts/model-providers)
- [Dostawcy modeli](/pl/concepts/model-providers)

View File

@ -2,30 +2,32 @@
read_when:
- Chcesz używać modeli OpenAI w OpenClaw
- Chcesz używać uwierzytelniania subskrypcją Codex zamiast kluczy API
summary: Używanie OpenAI przez klucze API lub subskrypcję Codex w OpenClaw
- Potrzebujesz bardziej rygorystycznego zachowania wykonywania agenta GPT-5
summary: Używaj OpenAI za pomocą kluczy API lub subskrypcji Codex w OpenClaw
title: OpenAI
x-i18n:
generated_at: "2026-04-07T09:50:07Z"
generated_at: "2026-04-12T00:18:55Z"
model: gpt-5.4
provider: openai
source_hash: 6a2ce1ce5f085fe55ec50b8d20359180b9002c9730820cd5b0e011c3bf807b64
source_hash: 7aa06fba9ac901e663685a6b26443a2f6aeb6ec3589d939522dc87cbb43497b4
source_path: providers/openai.md
workflow: 15
---
# OpenAI
OpenAI udostępnia API dla deweloperów dla modeli GPT. Codex obsługuje **logowanie przez ChatGPT** dla dostępu
subskrypcyjnego lub **logowanie kluczem API** dla dostępu rozliczanego według użycia. Chmura Codex wymaga logowania przez ChatGPT.
OpenAI jawnie wspiera użycie subskrypcyjnego OAuth w zewnętrznych narzędziach/przepływach pracy, takich jak OpenClaw.
OpenAI udostępnia interfejsy API dla deweloperów do modeli GPT. Codex obsługuje **logowanie przez ChatGPT** dla dostępu w ramach subskrypcji
lub logowanie za pomocą **klucza API** dla dostępu rozliczanego według użycia. Chmura Codex wymaga logowania przez ChatGPT.
OpenAI jawnie wspiera użycie OAuth subskrypcji w zewnętrznych narzędziach/przepływach pracy, takich jak OpenClaw.
## Domyślny styl interakcji
OpenClaw może dodać małą nakładkę promptu specyficzną dla OpenAI zarówno dla uruchomień `openai/*`, jak i
OpenClaw może dodać niewielką nakładkę promptu specyficzną dla OpenAI zarówno dla uruchomień `openai/*`, jak i
`openai-codex/*`. Domyślnie nakładka utrzymuje asystenta jako ciepłego,
współpracującego, zwięzłego, bezpośredniego i nieco bardziej ekspresyjnego emocjonalnie,
nie zastępując bazowego promptu systemowego OpenClaw. Przyjazna nakładka
pozwala też okazjonalnie użyć emoji, gdy pasuje to naturalnie, przy zachowaniu ogólnie zwięzłej odpowiedzi.
współpracującego, zwięzłego, bezpośredniego i trochę bardziej emocjonalnie ekspresyjnego,
bez zastępowania bazowego promptu systemowego OpenClaw. Przyjazna nakładka
dopuszcza też okazjonalne emoji, gdy pasuje to naturalnie, przy zachowaniu ogólnej zwięzłości
wypowiedzi.
Klucz konfiguracji:
@ -33,7 +35,7 @@ Klucz konfiguracji:
Dozwolone wartości:
- `"friendly"`: domyślne; włącza nakładkę specyficzną dla OpenAI.
- `"friendly"`: domyślnie; włącza nakładkę specyficzną dla OpenAI.
- `"on"`: alias dla `"friendly"`.
- `"off"`: wyłącza nakładkę i używa tylko bazowego promptu OpenClaw.
@ -44,7 +46,7 @@ Zakres:
- Nie wpływa na innych dostawców.
To zachowanie jest domyślnie włączone. Zachowaj jawnie `"friendly"`, jeśli chcesz,
aby przetrwało przyszłe lokalne zmiany konfiguracji:
aby przetrwało to przyszłe lokalne zmiany konfiguracji:
```json5
{
@ -62,7 +64,7 @@ aby przetrwało przyszłe lokalne zmiany konfiguracji:
### Wyłącz nakładkę promptu OpenAI
Jeśli chcesz niezmodyfikowanego bazowego promptu OpenClaw, ustaw nakładkę na `"off"`:
Jeśli chcesz niezmodyfikowany bazowy prompt OpenClaw, ustaw nakładkę na `"off"`:
```json5
{
@ -78,25 +80,25 @@ Jeśli chcesz niezmodyfikowanego bazowego promptu OpenClaw, ustaw nakładkę na
}
```
Możesz też ustawić to bezpośrednio przez konfigurację CLI:
Możesz też ustawić to bezpośrednio za pomocą CLI konfiguracji:
```bash
openclaw config set plugins.entries.openai.config.personality off
```
OpenClaw normalizuje to ustawienie bez rozróżniania wielkości liter w czasie działania, więc wartości takie jak
`"Off"` również wyłączą przyjazną nakładkę.
OpenClaw normalizuje to ustawienie w czasie działania bez rozróżniania wielkości liter, więc wartości takie jak
`"Off"` również wyłączają przyjazną nakładkę.
## Opcja A: klucz API OpenAI (OpenAI Platform)
**Najlepsze do:** bezpośredniego dostępu do API i rozliczania według użycia.
Pobierz klucz API z panelu OpenAI.
**Najlepsze dla:** bezpośredniego dostępu do API i rozliczania według użycia.
Pobierz swój klucz API z panelu OpenAI.
Podsumowanie ścieżki:
Podsumowanie ścieżek:
- `openai/gpt-5.4` = bezpośrednia ścieżka API OpenAI Platform
- Wymaga `OPENAI_API_KEY` (lub równoważnej konfiguracji dostawcy OpenAI)
- W OpenClaw logowanie ChatGPT/Codex jest routowane przez `openai-codex/*`, a nie `openai/*`
- W OpenClaw logowanie ChatGPT/Codex jest kierowane przez `openai-codex/*`, a nie `openai/*`
### Konfiguracja CLI
@ -115,25 +117,26 @@ openclaw onboard --openai-api-key "$OPENAI_API_KEY"
}
```
Aktualna dokumentacja modeli API OpenAI wymienia `gpt-5.4` i `gpt-5.4-pro` dla bezpośredniego
Bieżąca dokumentacja modeli API OpenAI wymienia `gpt-5.4` i `gpt-5.4-pro` dla bezpośredniego
użycia API OpenAI. OpenClaw przekazuje oba przez ścieżkę `openai/*` Responses.
OpenClaw celowo ukrywa przestarzały wiersz `openai/gpt-5.3-codex-spark`,
OpenClaw celowo ukrywa nieaktualny wiersz `openai/gpt-5.3-codex-spark`,
ponieważ bezpośrednie wywołania API OpenAI odrzucają go w rzeczywistym ruchu.
OpenClaw **nie** udostępnia `openai/gpt-5.3-codex-spark` na bezpośredniej ścieżce API OpenAI.
`pi-ai` nadal dostarcza wbudowany wiersz dla tego modelu, ale rzeczywiste żądania API OpenAI są obecnie odrzucane. Spark jest traktowany w OpenClaw jako wyłącznie Codex.
OpenClaw **nie** udostępnia `openai/gpt-5.3-codex-spark` na bezpośredniej ścieżce OpenAI
API. `pi-ai` nadal zawiera wbudowany wiersz dla tego modelu, ale rzeczywiste żądania do API OpenAI
są obecnie odrzucane. W OpenClaw Spark jest traktowany jako dostępny tylko w Codex.
## Generowanie obrazów
Dołączona wtyczka `openai` rejestruje także generowanie obrazów przez wspólne
Dołączona w pakiecie wtyczka `openai` rejestruje też generowanie obrazów przez współdzielone
narzędzie `image_generate`.
- Domyślny model obrazu: `openai/gpt-image-1`
- Domyślny model obrazów: `openai/gpt-image-1`
- Generowanie: do 4 obrazów na żądanie
- Tryb edycji: włączony, do 5 obrazów referencyjnych
- Obsługuje `size`
- Aktualne zastrzeżenie specyficzne dla OpenAI: OpenClaw obecnie nie przekazuje nadpisań `aspectRatio` ani
`resolution` do OpenAI Images API
`resolution` do API OpenAI Images
Aby używać OpenAI jako domyślnego dostawcy obrazów:
@ -149,21 +152,21 @@ Aby używać OpenAI jako domyślnego dostawcy obrazów:
}
```
Zobacz [Generowanie obrazów](/pl/tools/image-generation), aby poznać wspólne parametry
Zobacz [Generowanie obrazów](/pl/tools/image-generation), aby poznać współdzielone parametry
narzędzia, wybór dostawcy i zachowanie failover.
## Generowanie wideo
Dołączona wtyczka `openai` rejestruje także generowanie wideo przez wspólne
Dołączona w pakiecie wtyczka `openai` rejestruje też generowanie wideo przez współdzielone
narzędzie `video_generate`.
- Domyślny model wideo: `openai/sora-2`
- Tryby: text-to-video, image-to-video oraz przepływy referencji/edycji pojedynczego wideo
- Bieżące limity: 1 obraz lub 1 referencyjne wejście wideo
- Tryby: tekst-na-wideo, obraz-na-wideo oraz przepływy referencji/edycji pojedynczego wideo
- Obecne limity: 1 obraz lub 1 wejście referencyjne wideo
- Aktualne zastrzeżenie specyficzne dla OpenAI: OpenClaw obecnie przekazuje tylko nadpisania `size`
dla natywnego generowania wideo OpenAI. Nieobsługiwane opcjonalne nadpisania,
takie jak `aspectRatio`, `resolution`, `audio` i `watermark`, są ignorowane
i zwracane jako ostrzeżenie narzędzia.
i zgłaszane z powrotem jako ostrzeżenie narzędzia.
Aby używać OpenAI jako domyślnego dostawcy wideo:
@ -179,19 +182,19 @@ Aby używać OpenAI jako domyślnego dostawcy wideo:
}
```
Zobacz [Generowanie wideo](/pl/tools/video-generation), aby poznać wspólne parametry
Zobacz [Generowanie wideo](/pl/tools/video-generation), aby poznać współdzielone parametry
narzędzia, wybór dostawcy i zachowanie failover.
## Opcja B: subskrypcja OpenAI Code (Codex)
**Najlepsze do:** używania dostępu subskrypcyjnego ChatGPT/Codex zamiast klucza API.
Chmura Codex wymaga logowania przez ChatGPT, podczas gdy CLI Codex obsługuje logowanie przez ChatGPT lub klucz API.
**Najlepsze dla:** używania dostępu w ramach subskrypcji ChatGPT/Codex zamiast klucza API.
Chmura Codex wymaga logowania przez ChatGPT, natomiast CLI Codex obsługuje logowanie przez ChatGPT lub klucz API.
Podsumowanie ścieżki:
Podsumowanie ścieżek:
- `openai-codex/gpt-5.4` = ścieżka OAuth ChatGPT/Codex
- Używa logowania ChatGPT/Codex, a nie bezpośredniego klucza API OpenAI Platform
- Limity po stronie dostawcy dla `openai-codex/*` mogą różnić się od doświadczenia ChatGPT w web/app
- Limity po stronie dostawcy dla `openai-codex/*` mogą różnić się od doświadczenia w wersji webowej/aplikacji ChatGPT
### Konfiguracja CLI (Codex OAuth)
@ -211,42 +214,42 @@ openclaw models auth login --provider openai-codex
}
```
Aktualna dokumentacja Codex OpenAI wymienia `gpt-5.4` jako bieżący model Codex. OpenClaw
mapuje go na `openai-codex/gpt-5.4` do użycia z OAuth ChatGPT/Codex.
Bieżąca dokumentacja Codex OpenAI wymienia `gpt-5.4` jako aktualny model Codex. OpenClaw
mapuje to na `openai-codex/gpt-5.4` dla użycia OAuth ChatGPT/Codex.
Ta ścieżka jest celowo oddzielona od `openai/gpt-5.4`. Jeśli chcesz
bezpośredniej ścieżki API OpenAI Platform, użyj `openai/*` z kluczem API. Jeśli chcesz
logowania ChatGPT/Codex, użyj `openai-codex/*`.
Jeśli onboarding ponownie wykorzystuje istniejące logowanie Codex CLI, te poświadczenia pozostają
zarządzane przez Codex CLI. Po wygaśnięciu OpenClaw najpierw ponownie odczytuje zewnętrzne źródło Codex
i, gdy dostawca może je odświeżyć, zapisuje odświeżone poświadczenie z powrotem
do pamięci Codex zamiast przejmować je we własnej kopii tylko dla OpenClaw.
Jeśli onboarding wykorzysta ponownie istniejące logowanie CLI Codex, te poświadczenia pozostaną
zarządzane przez CLI Codex. Po wygaśnięciu OpenClaw najpierw ponownie odczytuje zewnętrzne źródło Codex
i, gdy dostawca może je odświeżyć, zapisuje odświeżone poświadczenie
z powrotem do magazynu Codex zamiast przejmować je do osobnej kopii używanej wyłącznie przez OpenClaw.
Jeśli Twoje konto Codex ma uprawnienia do Codex Spark, OpenClaw obsługuje również:
- `openai-codex/gpt-5.3-codex-spark`
OpenClaw traktuje Codex Spark jako wyłącznie Codex. Nie udostępnia bezpośredniej
ścieżki klucza API `openai/gpt-5.3-codex-spark`.
OpenClaw traktuje Codex Spark jako dostępny tylko w Codex. Nie udostępnia bezpośredniej
ścieżki z kluczem API `openai/gpt-5.3-codex-spark`.
OpenClaw zachowuje równi`openai-codex/gpt-5.3-codex-spark`, gdy `pi-ai`
go wykryje. Traktuj go jako zależny od uprawnień i eksperymentalny: Codex Spark jest
OpenClaw zachowuje t`openai-codex/gpt-5.3-codex-spark`, gdy `pi-ai`
go wykryje. Traktuj to jako zależne od uprawnień i eksperymentalne: Codex Spark jest
oddzielny od GPT-5.4 `/fast`, a dostępność zależy od zalogowanego konta Codex /
ChatGPT.
### Limit okna kontekstu Codex
OpenClaw traktuje metadane modelu Codex i limit kontekstu w runtime jako oddzielne
OpenClaw traktuje metadane modelu Codex i limit kontekstu w czasie działania jako oddzielne
wartości.
Dla `openai-codex/gpt-5.4`:
- natywne `contextWindow`: `1050000`
- domyślny limit `contextTokens` w runtime: `272000`
- domyślny limit `contextTokens` w czasie działania: `272000`
Pozwala to zachować prawdziwe metadane modelu, przy jednoczesnym utrzymaniu mniejszego domyślnego
okna runtime, które w praktyce ma lepsze właściwości opóźnienia i jakości.
Pozwala to zachować zgodność metadanych modelu z prawdą, a jednocześnie utrzymać mniejsze domyślne okno działania,
które w praktyce zapewnia lepszą latencję i jakość.
Jeśli chcesz innego efektywnego limitu, ustaw `models.providers.<provider>.models[].contextTokens`:
@ -268,34 +271,34 @@ Jeśli chcesz innego efektywnego limitu, ustaw `models.providers.<provider>.mode
```
Używaj `contextWindow` tylko wtedy, gdy deklarujesz lub nadpisujesz natywne metadane modelu.
Używaj `contextTokens`, gdy chcesz ograniczyć budżet kontekstu w runtime.
Używaj `contextTokens`, gdy chcesz ograniczyć budżet kontekstu w czasie działania.
### Domyślny transport
OpenClaw używa `pi-ai` do strumieniowania modeli. Dla `openai/*` i
`openai-codex/*` domyślnym transportem jest `"auto"` (najpierw WebSocket, potem fallback do SSE).
OpenClaw używa `pi-ai` do strumieniowania modeli. Dla obu `openai/*` i
`openai-codex/*` domyślnym transportem jest `"auto"` (najpierw WebSocket, potem fallback
do SSE).
W trybie `"auto"` OpenClaw wykonuje również jedną ponowną próbę po wczesnej, możliwej do ponowienia awarii WebSocket,
zanim przełączy się na SSE. Wymuszony tryb `"websocket"` nadal bezpośrednio pokazuje błędy transportu
W trybie `"auto"` OpenClaw wykonuje też jedną ponowną próbę po wczesnej, możliwej do ponowienia awarii WebSocket,
zanim przełączy się na SSE. Wymuszony tryb `"websocket"` nadal pokazuje błędy transportu bezpośrednio,
zamiast ukrywać je za fallbackiem.
Po błędzie WebSocket przy połączeniu lub na początku tury w trybie `"auto"` OpenClaw oznacza
ścieżkę WebSocket tej sesji jako zdegradowaną na około 60 sekund i wysyła
kolejne tury przez SSE podczas tego cooldownu zamiast przełączać się chaotycznie między
Po błędzie połączenia lub błędzie WebSocket na początku tury w trybie `"auto"` OpenClaw oznacza
ścieżkę WebSocket tej sesji jako pogorszoną na około 60 sekund i wysyła
kolejne tury przez SSE w czasie schłodzenia, zamiast bez końca przełączać się między
transportami.
Dla natywnych punktów końcowych rodziny OpenAI (`openai/*`, `openai-codex/*` i Azure
OpenAI Responses) OpenClaw dołącza też stabilny stan tożsamości sesji i tury
do żądań, aby ponowne próby, ponowne połączenia i fallback do SSE pozostawały wyrównane do tej samej
tożsamości rozmowy. Na natywnych ścieżkach rodziny OpenAI obejmuje to stabilne nagłówki tożsamości żądania sesji/tury oraz pasujące metadane transportu.
OpenAI Responses) OpenClaw dołącza również stabilny stan tożsamości sesji i tury
do żądań, aby ponowienia, ponowne połączenia i fallback do SSE pozostawały przypisane do tej samej
tożsamości konwersacji. W natywnych ścieżkach rodziny OpenAI obejmuje to stabilne nagłówki tożsamości żądania sesji/tury oraz pasujące metadane transportu.
OpenClaw normalizuje również liczniki użycia OpenAI między wariantami transportu, zanim
OpenClaw normalizuje też liczniki użycia OpenAI między wariantami transportu, zanim
trafią one do powierzchni sesji/statusu. Natywny ruch OpenAI/Codex Responses może
raportować użycie jako `input_tokens` / `output_tokens` albo
`prompt_tokens` / `completion_tokens`; OpenClaw traktuje je jako te same liczniki wejścia
i wyjścia dla `/status`, `/usage` i logów sesji. Gdy natywny ruch WebSocket pomija `total_tokens`
(lub raportuje `0`), OpenClaw przełącza się na znormalizowaną sumę wejścia + wyjścia,
aby widoki sesji/statusu pozostały wypełnione.
(lub raportuje `0`), OpenClaw wraca do znormalizowanej sumy wejścia i wyjścia, aby wyświetlanie sesji/statusu pozostało wypełnione.
Możesz ustawić `agents.defaults.models.<provider/model>.params.transport`:
@ -303,8 +306,7 @@ Możesz ustawić `agents.defaults.models.<provider/model>.params.transport`:
- `"websocket"`: wymuś WebSocket
- `"auto"`: najpierw spróbuj WebSocket, potem fallback do SSE
Dla `openai/*` (Responses API) OpenClaw domyślnie włącza również rozgrzewanie WebSocket
(`openaiWsWarmup: true`), gdy używany jest transport WebSocket.
Dla `openai/*` (Responses API) OpenClaw domyślnie włącza też rozgrzewkę WebSocket (`openaiWsWarmup: true`), gdy używany jest transport WebSocket.
Powiązana dokumentacja OpenAI:
@ -328,12 +330,12 @@ Powiązana dokumentacja OpenAI:
}
```
### Rozgrzewanie OpenAI WebSocket
### Rozgrzewka OpenAI WebSocket
Dokumentacja OpenAI opisuje rozgrzewanie jako opcjonalne. OpenClaw domyślnie je włącza dla
`openai/*`, aby zmniejszyć opóźnienie pierwszej tury przy użyciu transportu WebSocket.
Dokumentacja OpenAI opisuje rozgrzewkę jako opcjonalną. OpenClaw domyślnie ją włącza dla
`openai/*`, aby skrócić opóźnienie pierwszej tury przy użyciu transportu WebSocket.
### Wyłącz rozgrzewanie
### Wyłącz rozgrzew
```json5
{
@ -351,7 +353,7 @@ Dokumentacja OpenAI opisuje rozgrzewanie jako opcjonalne. OpenClaw domyślnie je
}
```
### Jawnie włącz rozgrzewanie
### Włącz rozgrzewkę jawnie
```json5
{
@ -369,7 +371,7 @@ Dokumentacja OpenAI opisuje rozgrzewanie jako opcjonalne. OpenClaw domyślnie je
}
```
### OpenAI i priorytetowe przetwarzanie Codex
### Priorytetowe przetwarzanie OpenAI i Codex
API OpenAI udostępnia priorytetowe przetwarzanie przez `service_tier=priority`. W
OpenClaw ustaw `agents.defaults.models["<provider>/<model>"].params.serviceTier`,
@ -406,27 +408,27 @@ Ważne zachowanie:
- bezpośrednie `openai/*` musi wskazywać na `api.openai.com`
- `openai-codex/*` musi wskazywać na `chatgpt.com/backend-api`
- jeśli kierujesz któregokolwiek dostawcę przez inny base URL lub proxy, OpenClaw pozostawia `service_tier` bez zmian
- jeśli kierujesz któregokolwiek dostawcę przez inny podstawowy URL lub proxy, OpenClaw pozostawia `service_tier` bez zmian
### Tryb szybki OpenAI
### Tryb fast OpenAI
OpenClaw udostępnia wspólny przełącznik trybu szybkiego dla sesji `openai/*` i
OpenClaw udostępnia współdzielony przełącznik trybu fast zarówno dla sesji `openai/*`, jak i
`openai-codex/*`:
- Czat/UI: `/fast status|on|off`
- Konfiguracja: `agents.defaults.models["<provider>/<model>"].params.fastMode`
Gdy tryb szybki jest włączony, OpenClaw mapuje go na priorytetowe przetwarzanie OpenAI:
Gdy tryb fast jest włączony, OpenClaw mapuje go na priorytetowe przetwarzanie OpenAI:
- bezpośrednie wywołania Responses `openai/*` do `api.openai.com` wysyłają `service_tier = "priority"`
- wywołania Responses `openai-codex/*` do `chatgpt.com/backend-api` również wysyłają `service_tier = "priority"`
- istniejące wartości `service_tier` w ładunku są zachowywane
- tryb szybki nie przepisuje `reasoning` ani `text.verbosity`
- istniejące wartości `service_tier` w payloadzie są zachowywane
- tryb fast nie nadpisuje `reasoning` ani `text.verbosity`
W szczególności dla GPT 5.4 najczęstsza konfiguracja to:
Dla GPT 5.4 w szczególności najczęstsza konfiguracja to:
- wyślij `/fast on` w sesji używającej `openai/gpt-5.4` lub `openai-codex/gpt-5.4`
- albo ustaw `agents.defaults.models["openai/gpt-5.4"].params.fastMode = true`
- wysłanie `/fast on` w sesji używającej `openai/gpt-5.4` lub `openai-codex/gpt-5.4`
- albo ustawienie `agents.defaults.models["openai/gpt-5.4"].params.fastMode = true`
- jeśli używasz też OAuth Codex, ustaw również `agents.defaults.models["openai-codex/gpt-5.4"].params.fastMode = true`
Przykład:
@ -453,45 +455,72 @@ Przykład:
```
Nadpisania sesji mają pierwszeństwo przed konfiguracją. Wyczyszczenie nadpisania sesji w interfejsie Sessions UI
przywraca sesję do skonfigurowanej wartości domyślnej.
przywraca w sesji domyślną wartość skonfigurowaną.
### Natywne OpenAI a ścieżki zgodne z OpenAI
OpenClaw traktuje bezpośrednie punkty końcowe OpenAI, Codex i Azure OpenAI inaczej
niż generyczne proxy `/v1` zgodne z OpenAI:
niż ogólne proxy `/v1` zgodne z OpenAI:
- natywne ścieżki `openai/*`, `openai-codex/*` i Azure OpenAI zachowują
`reasoning: { effort: "none" }`, gdy jawnie wyłączysz reasoning
- natywne ścieżki rodziny OpenAI domyślnie ustawiają schematy narzędzi w trybie strict
`reasoning: { effort: "none" }` bez zmian, gdy jawnie wyłączysz rozumowanie
- natywne ścieżki z rodziny OpenAI domyślnie ustawiają schematy narzędzi w trybie ścisłym
- ukryte nagłówki atrybucji OpenClaw (`originator`, `version` i
`User-Agent`) są dołączane tylko na zweryfikowanych natywnych hostach OpenAI
(`api.openai.com`) i natywnych hostach Codex (`chatgpt.com/backend-api`)
`User-Agent`) są dołączane tylko do zweryfikowanych natywnych hostów OpenAI
(`api.openai.com`) i natywnych hostów Codex (`chatgpt.com/backend-api`)
- natywne ścieżki OpenAI/Codex zachowują kształtowanie żądań specyficzne dla OpenAI, takie jak
`service_tier`, Responses `store`, ładunki zgodności reasoning OpenAI oraz
podpowiedzi cache promptów
- ścieżki zgodne z OpenAI w stylu proxy zachowują luźniejsze zachowanie zgodności i nie
wymuszają ścisłych schematów narzędzi, kształtowania żądań tylko dla natywnych tras ani ukrytych
`service_tier`, Responses `store`, payloady zgodności z rozumowaniem OpenAI oraz
wskazówki pamięci podręcznej promptów
- ścieżki w stylu proxy zgodne z OpenAI zachowują luźniejsze zachowanie zgodności i nie
wymuszają ścisłych schematów narzędzi, kształtowania żądań tylko dla ścieżek natywnych ani ukrytych
nagłówków atrybucji OpenAI/Codex
Azure OpenAI pozostaje w koszyku routingu natywnego pod względem transportu i zachowania zgodności,
Azure OpenAI pozostaje w koszyku routingu natywnego pod względem zachowania transportu i zgodności,
ale nie otrzymuje ukrytych nagłówków atrybucji OpenAI/Codex.
Pozwala to zachować obecne natywne zachowanie OpenAI Responses bez narzucania starszych
shimów zgodnych z OpenAI na backendy `/v1` innych firm.
Pozwala to zachować obecne natywne zachowanie OpenAI Responses bez wymuszania starszych
warstw zgodności z OpenAI na backendach `/v1` innych firm.
### Ścisły agentowy tryb GPT
Dla uruchomień rodziny GPT-5 w `openai/*` i `openai-codex/*` OpenClaw może używać
bardziej rygorystycznego osadzonego kontraktu wykonania Pi:
```json5
{
agents: {
defaults: {
embeddedPi: {
executionContract: "strict-agentic",
},
},
},
}
```
Przy `strict-agentic` OpenClaw nie traktuje już tury asystenta zawierającej tylko planu jako
udanego postępu, gdy dostępne jest konkretne działanie narzędzia. Powtarza
turę z ukierunkowaniem na działanie natychmiast, automatycznie włącza
ustrukturyzowane narzędzie `update_plan` dla istotnej pracy i pokazuje jawny stan blokady,
jeśli model nadal planuje bez działania.
Ten tryb jest ograniczony do uruchomień rodziny GPT-5 w OpenAI i OpenAI Codex. Inni dostawcy
i starsze rodziny modeli zachowują domyślne zachowanie osadzonego Pi, chyba że jawnie włączysz
dla nich inne ustawienia czasu działania.
### Kompaktowanie po stronie serwera OpenAI Responses
Dla bezpośrednich modeli OpenAI Responses (`openai/*` używających `api: "openai-responses"` z
`baseUrl` na `api.openai.com`) OpenClaw teraz automatycznie włącza wskazówki ładunku
`baseUrl` ustawionym na `api.openai.com`) OpenClaw teraz automatycznie włącza wskazówki payloadu
kompaktowania po stronie serwera OpenAI:
- Wymusza `store: true` (chyba że zgodność modelu ustawia `supportsStore: false`)
- Wstrzykuje `context_management: [{ type: "compaction", compact_threshold: ... }]`
Domyślnie `compact_threshold` wynosi `70%` modelowego `contextWindow` (lub `80000`,
gdy nie jest dostępne).
Domyślnie `compact_threshold` wynosi `70%` wartości `contextWindow` modelu (lub `80000`,
gdy jest niedostępna).
### Jawnie włącz kompaktowanie po stronie serwera
### Jawne włączenie kompaktowania po stronie serwera
Użyj tego, gdy chcesz wymusić wstrzykiwanie `context_management` w zgodnych
modelach Responses (na przykład Azure OpenAI Responses):
@ -512,7 +541,7 @@ modelach Responses (na przykład Azure OpenAI Responses):
}
```
### Włącz z niestandardowym progiem
### Włączenie z niestandardowym progiem
```json5
{
@ -531,7 +560,7 @@ modelach Responses (na przykład Azure OpenAI Responses):
}
```
### Wyłącz kompaktowanie po stronie serwera
### Wyłączenie kompaktowania po stronie serwera
```json5
{
@ -555,5 +584,5 @@ Bezpośrednie modele OpenAI Responses nadal wymuszają `store: true`, chyba że
## Uwagi
- Referencje modeli zawsze używają `provider/model` (zobacz [/concepts/models](/pl/concepts/models)).
- Szczegóły uwierzytelniania + reguły ponownego użycia znajdują się w [/concepts/oauth](/pl/concepts/oauth).
- Odwołania do modeli zawsze używają `provider/model` (zobacz [/concepts/models](/pl/concepts/models)).
- Szczegóły uwierzytelniania i reguły ponownego użycia znajdują się w [/concepts/oauth](/pl/concepts/oauth).