Telegram (Bot API)
Status: gotowe do produkcji dla DM botów + grup przez grammY. Long polling jest trybem domyślnym; tryb Webhook jest opcjonalny.Parowanie
Domyślna zasada DM dla Telegram to parowanie.
Rozwiązywanie problemów z kanałami
Diagnostyka międzykanałowa i instrukcje naprawy.
Konfiguracja Gateway
Pełne wzorce konfiguracji kanałów i przykłady.
Szybka konfiguracja
Utwórz token bota w BotFather
Otwórz Telegram i rozpocznij czat z @BotFather (upewnij się, że nazwa użytkownika to dokładnie
@BotFather).Uruchom /newbot, postępuj zgodnie z instrukcjami i zapisz token.Skonfiguruj token i zasady DM
TELEGRAM_BOT_TOKEN=... (tylko konto domyślne).
Telegram nie używa openclaw channels login telegram; skonfiguruj token w config/env, a następnie uruchom gateway.Kolejność rozstrzygania tokenu uwzględnia konto. W praktyce wartości z config mają pierwszeństwo przed zapasowym env, a
TELEGRAM_BOT_TOKEN dotyczy tylko konta domyślnego.Ustawienia po stronie Telegram
Tryb prywatności i widoczność grup
Tryb prywatności i widoczność grup
Boty Telegram domyślnie używają Privacy Mode, który ogranicza, jakie wiadomości grupowe otrzymują.Jeśli bot ma widzieć wszystkie wiadomości grupowe, zrób jedno z poniższych:
- wyłącz tryb prywatności przez
/setprivacy, lub - ustaw bota jako administratora grupy.
Uprawnienia grupy
Uprawnienia grupy
Status administratora jest kontrolowany w ustawieniach grupy Telegram.Boty-administratorzy otrzymują wszystkie wiadomości grupowe, co jest przydatne dla stale aktywnego zachowania w grupie.
Przydatne przełączniki BotFather
Przydatne przełączniki BotFather
/setjoingroups, aby zezwolić/zabronić dodawania do grup/setprivacydla zachowania widoczności w grupach
Kontrola dostępu i aktywacja
- Zasady DM
- Zasady grup i listy dozwolonych
- Zachowanie wzmianek
channels.telegram.dmPolicy kontroluje dostęp do wiadomości bezpośrednich:pairing(domyślnie)allowlist(wymaga co najmniej jednego identyfikatora nadawcy wallowFrom)open(wymaga, abyallowFromzawierało"*")disabled
channels.telegram.allowFrom akceptuje numeryczne identyfikatory użytkowników Telegram. Prefiksy telegram: / tg: są akceptowane i normalizowane.
dmPolicy: "allowlist" z pustym allowFrom blokuje wszystkie DM i jest odrzucane przez walidację konfiguracji.
Konfiguracja wymaga wyłącznie numerycznych identyfikatorów użytkowników.
Jeśli wykonałeś aktualizację i Twoja konfiguracja zawiera wpisy listy dozwolonych @username, uruchom openclaw doctor --fix, aby je rozwiązać (best-effort; wymaga tokenu bota Telegram).
Jeśli wcześniej polegałeś na plikach list dozwolonych ze store parowania, openclaw doctor --fix może odzyskać wpisy do channels.telegram.allowFrom w przepływach allowlist (na przykład gdy dmPolicy: "allowlist" nie ma jeszcze jawnych identyfikatorów).W przypadku botów z jednym właścicielem preferuj dmPolicy: "allowlist" z jawnymi numerycznymi identyfikatorami allowFrom, aby zachować trwałą zasadę dostępu w konfiguracji (zamiast zależeć od wcześniejszych zatwierdzeń parowania).Częsta pomyłka: zatwierdzenie parowania DM nie oznacza „ten nadawca jest autoryzowany wszędzie”.
Parowanie przyznaje tylko dostęp do DM. Autoryzacja nadawcy w grupie nadal pochodzi z jawnych list dozwolonych w konfiguracji.
Jeśli chcesz, aby „po jednorazowej autoryzacji działały zarówno DM, jak i polecenia grupowe”, umieść swój numeryczny identyfikator użytkownika Telegram w channels.telegram.allowFrom.Znajdowanie swojego identyfikatora użytkownika Telegram
Bezpieczniej (bez bota zewnętrznego):- Wyślij DM do swojego bota.
- Uruchom
openclaw logs --follow. - Odczytaj
from.id.
@userinfobot lub @getidsbot.Zachowanie w runtime
- Telegram jest zarządzany przez proces gateway.
- Routing jest deterministyczny: przychodzące odpowiedzi Telegram wracają do Telegram (model nie wybiera kanałów).
- Wiadomości przychodzące są normalizowane do wspólnej koperty kanału z metadanymi odpowiedzi i placeholderami mediów.
- Sesje grupowe są izolowane według identyfikatora grupy. Tematy forum dopisują
:topic:<threadId>, aby utrzymać izolację tematów. - Wiadomości DM mogą zawierać
message_thread_id; OpenClaw trasuje je za pomocą kluczy sesji świadomych wątków i zachowuje identyfikator wątku dla odpowiedzi. - Long polling używa grammY runner z sekwencjonowaniem per czat/per wątek. Ogólna współbieżność sink runner używa
agents.defaults.maxConcurrent. - Restarty watchdoga long polling są wyzwalane domyślnie po 120 sekundach bez zakończonego sygnału życia
getUpdates. Zwiększajchannels.telegram.pollingStallThresholdMstylko wtedy, gdy w Twoim wdrożeniu nadal występują fałszywe restarty z powodu zastoju polling podczas długotrwałej pracy. Wartość jest podawana w milisekundach i może wynosić od30000do600000; obsługiwane są nadpisania per konto. - Telegram Bot API nie obsługuje potwierdzeń odczytu (
sendReadReceiptsnie ma zastosowania).
Opis funkcji
Podgląd strumienia na żywo (edycje wiadomości)
Podgląd strumienia na żywo (edycje wiadomości)
OpenClaw może strumieniować częściowe odpowiedzi w czasie rzeczywistym:
- czaty bezpośrednie: wiadomość podglądu +
editMessageText - grupy/tematy: wiadomość podglądu +
editMessageText
channels.telegram.streamingma wartośćoff | partial | block | progress(domyślnie:partial)progressjest mapowane dopartialw Telegram (zgodność z nazewnictwem międzykanałowym)streaming.preview.toolProgresskontroluje, czy aktualizacje narzędzi/postępu używają tej samej edytowanej wiadomości podglądu (domyślnie:true). Ustawfalse, aby zachować osobne wiadomości narzędzi/postępu.- starsze
channels.telegram.streamModei wartości logicznestreamingsą mapowane automatycznie
- DM: OpenClaw zachowuje tę samą wiadomość podglądu i wykonuje końcową edycję w miejscu (bez drugiej wiadomości)
- grupa/temat: OpenClaw zachowuje tę samą wiadomość podglądu i wykonuje końcową edycję w miejscu (bez drugiej wiadomości)
sendMessage + editMessageText.Strumień rozumowania tylko dla Telegram:/reasoning streamwysyła rozumowanie do podglądu na żywo podczas generowania- odpowiedź końcowa jest wysyłana bez tekstu rozumowania
Formatowanie i zapasowe HTML
Formatowanie i zapasowe HTML
Tekst wychodzący używa
parse_mode: "HTML" Telegram.- Tekst w stylu Markdown jest renderowany do HTML bezpiecznego dla Telegram.
- Surowy HTML modelu jest escape’owany, aby ograniczyć błędy parsowania Telegram.
- Jeśli Telegram odrzuci sparsowany HTML, OpenClaw ponawia próbę jako zwykły tekst.
channels.telegram.linkPreview: false.Polecenia natywne i polecenia niestandardowe
Polecenia natywne i polecenia niestandardowe
Rejestracja menu poleceń Telegram jest obsługiwana przy starcie przez Zasady:Polecenia parowania urządzenia (Plugin
Gdy Plugin
setMyCommands.Domyślne ustawienia poleceń natywnych:commands.native: "auto"włącza polecenia natywne dla Telegram
- nazwy są normalizowane (usunięcie początkowego
/, małe litery) - prawidłowy wzorzec:
a-z,0-9,_, długość1..32 - polecenia niestandardowe nie mogą nadpisywać poleceń natywnych
- konflikty/duplikaty są pomijane i logowane
- polecenia niestandardowe są tylko wpisami menu; nie implementują automatycznie zachowania
- polecenia Plugin/Skills nadal mogą działać po wpisaniu, nawet jeśli nie są pokazane w menu Telegram
setMyCommands failedzBOT_COMMANDS_TOO_MUCHoznacza, że menu Telegram nadal było przepełnione po przycięciu; zmniejsz liczbę poleceń plugin/Skills/niestandardowych albo wyłączchannels.telegram.commands.native.setMyCommands failedz błędami sieci/fetch zwykle oznacza, że wychodzące DNS/HTTPS doapi.telegram.orgjest zablokowane.
Polecenia parowania urządzenia (Plugin device-pair)
Gdy Plugin device-pair jest zainstalowany:/pairgeneruje kod konfiguracji- wklej kod w aplikacji iOS
/pair pendingwyświetla oczekujące żądania (w tym role/scopes)- zatwierdź żądanie:
/pair approve <requestId>dla jawnego zatwierdzenia/pair approve, gdy istnieje tylko jedno oczekujące żądanie/pair approve latestdla najnowszego
scopes: []; każdy przekazany token operatora pozostaje ograniczony do operator.approvals, operator.read, operator.talk.secrets i operator.write. Kontrole zakresów bootstrap są prefiksowane rolą, więc ta lista dozwolonych operatora spełnia tylko żądania operatora; role inne niż operator nadal wymagają zakresów pod własnym prefiksem roli.Jeśli urządzenie ponowi próbę ze zmienionymi szczegółami uwierzytelniania (na przykład rola/scopes/klucz publiczny), poprzednie oczekujące żądanie zostaje zastąpione, a nowe żądanie używa innego requestId. Uruchom ponownie /pair pending przed zatwierdzeniem.Więcej szczegółów: Parowanie.Przyciski inline
Przyciski inline
Skonfiguruj zakres klawiatury inline:Nadpisanie per konto:Zakresy:Kliknięcia callback są przekazywane do agenta jako tekst:
offdmgroupallallowlist(domyślnie)
capabilities: ["inlineButtons"] jest mapowane na inlineButtons: "all".Przykład akcji wiadomości:callback_data: <value>Akcje wiadomości Telegram dla agentów i automatyzacji
Akcje wiadomości Telegram dla agentów i automatyzacji
Akcje narzędzi Telegram obejmują:
sendMessage(to,content, opcjonalniemediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,content)createForumTopic(chatId,name, opcjonalnieiconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Kontrolki ograniczeń:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(domyślnie: wyłączone)
edit i topic-create są obecnie domyślnie włączone i nie mają osobnych przełączników channels.telegram.actions.*.
Wysyłki w runtime używają aktywnego zrzutu config/secrets (start/reload), więc ścieżki akcji nie wykonują ad hoc ponownego rozwiązywania SecretRef przy każdym wysłaniu.Semantyka usuwania reakcji: /tools/reactionsTagi wątkowania odpowiedzi
Tagi wątkowania odpowiedzi
Telegram obsługuje jawne tagi wątkowania odpowiedzi w generowanym wyjściu:
[[reply_to_current]]odpowiada na wiadomość wyzwalającą[[reply_to:<id>]]odpowiada na określony identyfikator wiadomości Telegram
channels.telegram.replyToMode kontroluje obsługę:off(domyślnie)firstall
off wyłącza niejawne wątkowanie odpowiedzi. Jawne tagi [[reply_to_*]] są nadal honorowane.Tematy forum i zachowanie wątków
Tematy forum i zachowanie wątków
Supergrupy z forum:Każdy temat ma wtedy własny klucz sesji: Obecnie jest to ograniczone do tematów forum w grupach i supergrupach.Uruchamianie ACP powiązanego z wątkiem z czatu:
- klucze sesji tematów dopisują
:topic:<threadId> - odpowiedzi i wpisywanie kierowane są do wątku tematu
- ścieżka konfiguracji tematu:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1):- wysyłki wiadomości pomijają
message_thread_id(Telegram odrzucasendMessage(...thread_id=1)) - akcje pisania nadal zawierają
message_thread_id
requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy).
agentId dotyczy tylko tematu i nie dziedziczy z ustawień domyślnych grupy.Routing agenta per temat: Każdy temat może kierować do innego agenta przez ustawienie agentId w konfiguracji tematu. Daje to każdemu tematowi własny izolowany obszar roboczy, pamięć i sesję. Przykład:agent:zu:telegram:group:-1001234567890:topic:3Trwałe powiązanie tematu ACP: Tematy forum mogą przypinać sesje harness ACP przez najwyższego poziomu typowane powiązania ACP:bindings[]ztype: "acp"imatch.channel: "telegram"
/acp spawn <agent> --thread here|automoże powiązać bieżący temat Telegram z nową sesją ACP.- Kolejne wiadomości w temacie są kierowane bezpośrednio do powiązanej sesji ACP (bez potrzeby
/acp steer). - OpenClaw przypina wiadomość potwierdzającą uruchomienie w temacie po pomyślnym powiązaniu.
- Wymaga
channels.telegram.threadBindings.spawnAcpSessions=true.
MessageThreadIdIsForum
- czaty prywatne z
message_thread_idzachowują routing DM, ale używają kluczy sesji i celów odpowiedzi świadomych wątku.
Audio, wideo i naklejki
Audio, wideo i naklejki
Wiadomości audio
Telegram rozróżnia notatki głosowe i pliki audio.- domyślnie: zachowanie pliku audio
- tag
[[audio_as_voice]]w odpowiedzi agenta wymusza wysłanie jako notatka głosowa
Wiadomości wideo
Telegram rozróżnia pliki wideo i notatki wideo.Przykład akcji wiadomości:Naklejki
Obsługa przychodzących naklejek:- statyczne WEBP: pobierane i przetwarzane (placeholder
<media:sticker>) - animowane TGS: pomijane
- wideo WEBM: pomijane
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
Powiadomienia o reakcjach
Powiadomienia o reakcjach
Reakcje Telegram przychodzą jako aktualizacje
message_reaction (oddzielnie od ładunków wiadomości).Gdy są włączone, OpenClaw umieszcza w kolejce zdarzenia systemowe takie jak:Dodano reakcję Telegram: 👍 przez Alice (@alice) do wiadomości 42
channels.telegram.reactionNotifications:off | own | all(domyślnie:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(domyślnie:minimal)
ownoznacza tylko reakcje użytkowników na wiadomości wysłane przez bota (best-effort przez cache wysłanych wiadomości).- Zdarzenia reakcji nadal respektują kontrolę dostępu Telegram (
dmPolicy,allowFrom,groupPolicy,groupAllowFrom); nieautoryzowani nadawcy są odrzucani. - Telegram nie udostępnia identyfikatorów wątków w aktualizacjach reakcji.
- grupy niebędące forami są kierowane do sesji czatu grupowego
- grupy forum są kierowane do sesji ogólnego tematu grupy (
:topic:1), a nie do dokładnego tematu źródłowego
allowed_updates dla polling/webhook automatycznie obejmuje message_reaction.Reakcje ack
Reakcje ack
ackReaction wysyła emoji potwierdzenia, gdy OpenClaw przetwarza przychodzącą wiadomość.Kolejność rozstrzygania:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- zapasowo emoji tożsamości agenta (
agents.list[].identity.emoji, w przeciwnym razie ”👀”)
- Telegram oczekuje emoji unicode (na przykład ”👀”).
- Użyj
"", aby wyłączyć reakcję dla kanału lub konta.
Zapisy konfiguracji z wydarzeń i poleceń Telegram
Zapisy konfiguracji z wydarzeń i poleceń Telegram
Zapisy konfiguracji kanału są domyślnie włączone (
configWrites !== false).Zapisy wyzwalane przez Telegram obejmują:- zdarzenia migracji grup (
migrate_to_chat_id) do aktualizacjichannels.telegram.groups /config seti/config unset(wymaga włączenia poleceń)
Long polling vs webhook
Long polling vs webhook
Domyślnie: long polling.Tryb Webhook:
- ustaw
channels.telegram.webhookUrl - ustaw
channels.telegram.webhookSecret(wymagane, gdy ustawiony jest adres URL webhooka) - opcjonalnie
channels.telegram.webhookPath(domyślnie/telegram-webhook) - opcjonalnie
channels.telegram.webhookHost(domyślnie127.0.0.1) - opcjonalnie
channels.telegram.webhookPort(domyślnie8787)
127.0.0.1:8787.Jeśli Twój publiczny endpoint jest inny, umieść przed nim reverse proxy i ustaw webhookUrl na publiczny URL.
Ustaw webhookHost (na przykład 0.0.0.0), gdy celowo potrzebujesz zewnętrznego ingressu.Limity, ponawianie i cele CLI
Limity, ponawianie i cele CLI
- domyślna wartość
channels.telegram.textChunkLimitto 4000. channels.telegram.chunkMode="newline"preferuje granice akapitów (puste linie) przed dzieleniem według długości.channels.telegram.mediaMaxMb(domyślnie 100) ogranicza rozmiar mediów Telegram przychodzących i wychodzących.channels.telegram.timeoutSecondsnadpisuje timeout klienta Telegram API (jeśli nie jest ustawione, obowiązuje wartość domyślna grammY).channels.telegram.pollingStallThresholdMsdomyślnie wynosi120000; dostrajaj w zakresie30000–600000tylko dla fałszywie dodatnich restartów zastoju polling.- historia kontekstu grupy używa
channels.telegram.historyLimitlubmessages.groupChat.historyLimit(domyślnie 50);0wyłącza. - dodatkowy kontekst odpowiedzi/cytatu/przekazania dalej jest obecnie przekazywany tak, jak został odebrany.
- listy dozwolonych Telegram przede wszystkim ograniczają to, kto może uruchomić agenta, a nie stanowią pełnej granicy redakcji dodatkowego kontekstu.
- kontrolki historii DM:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- konfiguracja
channels.telegram.retrydotyczy pomocników wysyłania Telegram (CLI/narzędzia/akcje) dla możliwych do odzyskania wychodzących błędów API.
openclaw message poll i obsługują tematy forum:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-iddla tematów forum (lub użyj celu:topic:)
--presentationz blokamibuttonsdla klawiatur inline, gdy pozwala na tochannels.telegram.capabilities.inlineButtons--pinlub--delivery '{"pin":true}', aby zażądać przypiętego dostarczenia, gdy bot może przypinać w danym czacie--force-document, aby wysyłać wychodzące obrazy i GIF-y jako dokumenty zamiast skompresowanych zdjęć lub przesyłek animowanych mediów
channels.telegram.actions.sendMessage=falsewyłącza wychodzące wiadomości Telegram, w tym pollschannels.telegram.actions.poll=falsewyłącza tworzenie Telegram polls, pozostawiając zwykłe wysyłanie włączone
Zatwierdzenia exec w Telegram
Zatwierdzenia exec w Telegram
Telegram obsługuje zatwierdzenia exec w DM zatwierdzających i może opcjonalnie publikować prośby o zatwierdzenie w czacie lub temacie źródłowym.Ścieżka konfiguracji:
channels.telegram.execApprovals.enabledchannels.telegram.execApprovals.approvers(opcjonalnie; zapasowo używa numerycznych identyfikatorów właścicieli wywnioskowanych zallowFromoraz bezpośredniegodefaultTo, gdy to możliwe)channels.telegram.execApprovals.target(dm|channel|both, domyślnie:dm)agentFilter,sessionFilter
enabled nie jest ustawione lub ma wartość "auto" i można rozpoznać co najmniej jednego zatwierdzającego, albo z execApprovals.approvers, albo z numerycznej konfiguracji właściciela konta (allowFrom i defaultTo dla wiadomości bezpośrednich). Ustaw enabled: false, aby jawnie wyłączyć Telegram jako natywnego klienta zatwierdzeń. W przeciwnym razie żądania zatwierdzenia wracają zapasowo do innych skonfigurowanych ścieżek zatwierdzania albo do zasad zapasowych zatwierdzeń exec.Telegram renderuje także współdzielone przyciski zatwierdzania używane przez inne kanały czatu. Natywny adapter Telegram głównie dodaje routing DM zatwierdzających, rozsyłanie do czatów/tematów i wskazówki pisania przed dostarczeniem.
Gdy te przyciski są obecne, są one podstawowym UX zatwierdzania; OpenClaw
powinien uwzględniać ręczne polecenie /approve tylko wtedy, gdy wynik narzędzia mówi,
że zatwierdzenia czatowe są niedostępne lub ręczne zatwierdzenie jest jedyną ścieżką.Zasady dostarczania:target: "dm"wysyła prośby o zatwierdzenie tylko do rozpoznanych DM zatwierdzającychtarget: "channel"wysyła prośbę z powrotem do źródłowego czatu/tematu Telegramtarget: "both"wysyła do DM zatwierdzających i do źródłowego czatu/tematu
/approve ani przycisków zatwierdzania Telegram.Zachowanie rozstrzygania zatwierdzeń:- ID z prefiksem
plugin:są zawsze rozstrzygane przez zatwierdzenia Plugin. - Inne ID najpierw próbują
exec.approval.resolve. - Jeśli Telegram jest również autoryzowany do zatwierdzeń Plugin, a gateway zwraca,
że zatwierdzenie exec jest nieznane/wygasłe, Telegram ponawia próbę raz przez
plugin.approval.resolve. - Rzeczywiste odmowy/błędy zatwierdzeń exec nie przechodzą po cichu zapasowo do rozstrzygania zatwierdzeń Plugin.
channel lub both tylko w zaufanych grupach/tematach. Gdy prośba trafia do tematu forum, OpenClaw zachowuje temat zarówno dla prośby o zatwierdzenie, jak i działań po zatwierdzeniu. Zatwierdzenia exec domyślnie wygasają po 30 minutach.Przyciski zatwierdzania inline zależą także od tego, czy channels.telegram.capabilities.inlineButtons dopuszcza docelową powierzchnię (dm, group lub all).Powiązana dokumentacja: Zatwierdzenia execKontrolki odpowiedzi na błędy
Gdy agent napotka błąd dostarczenia lub dostawcy, Telegram może odpowiedzieć tekstem błędu albo go wyciszyć. To zachowanie kontrolują dwa klucze konfiguracji:| Klucz | Wartości | Domyślnie | Opis |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply wysyła przyjazną wiadomość o błędzie na czat. silent całkowicie wycisza odpowiedzi z błędami. |
channels.telegram.errorCooldownMs | number (ms) | 60000 | Minimalny czas między odpowiedziami z błędami na tym samym czacie. Zapobiega spamowi błędów podczas awarii. |
Rozwiązywanie problemów
Bot nie odpowiada na wiadomości grupowe bez wzmianki
Bot nie odpowiada na wiadomości grupowe bez wzmianki
- Jeśli
requireMention=false, tryb prywatności Telegram musi pozwalać na pełną widoczność.- BotFather:
/setprivacy-> Disable - następnie usuń bota i dodaj go ponownie do grupy
- BotFather:
openclaw channels statusostrzega, gdy konfiguracja oczekuje wiadomości grupowych bez wzmianki.openclaw channels status --probemoże sprawdzać jawne numeryczne identyfikatory grup; wildcard"*"nie może być sprawdzany pod kątem członkostwa.- szybki test sesji:
/activation always.
Bot w ogóle nie widzi wiadomości grupowych
Bot w ogóle nie widzi wiadomości grupowych
- gdy istnieje
channels.telegram.groups, grupa musi być wymieniona (lub musi zawierać"*") - zweryfikuj członkostwo bota w grupie
- przejrzyj logi:
openclaw logs --follow, aby sprawdzić powody pomijania
Polecenia działają częściowo albo wcale
Polecenia działają częściowo albo wcale
- autoryzuj tożsamość swojego nadawcy (parowanie i/lub numeryczne
allowFrom) - autoryzacja poleceń nadal obowiązuje, nawet gdy zasady grupy mają wartość
open setMyCommands failedzBOT_COMMANDS_TOO_MUCHoznacza, że natywne menu ma zbyt wiele wpisów; zmniejsz liczbę poleceń plugin/Skills/niestandardowych albo wyłącz menu natywnesetMyCommands failedz błędami sieci/fetch zwykle wskazuje na problemy z dostępnością DNS/HTTPS doapi.telegram.org
Niestabilność polling lub sieci
Niestabilność polling lub sieci
- Node 22+ + niestandardowy fetch/proxy może wywoływać natychmiastowe zachowanie abort, jeśli typy AbortSignal nie pasują.
- Niektóre hosty najpierw rozwiązują
api.telegram.orgdo IPv6; uszkodzony ruch wychodzący IPv6 może powodować sporadyczne błędy Telegram API. - Jeśli logi zawierają
TypeError: fetch failedlubNetwork request for 'getUpdates' failed!, OpenClaw ponawia je teraz jako możliwe do odzyskania błędy sieciowe. - Jeśli logi zawierają
Polling stall detected, OpenClaw restartuje polling i odbudowuje transport Telegram po 120 sekundach bez zakończonego sygnału życia long polling. - Zwiększaj
channels.telegram.pollingStallThresholdMstylko wtedy, gdy długotrwałe wywołaniagetUpdatessą zdrowe, ale host nadal zgłasza fałszywe restarty zastoju polling. Uporczywe zastoje zwykle wskazują na problemy proxy, DNS, IPv6 lub TLS egress między hostem aapi.telegram.org. - Na hostach VPS z niestabilnym bezpośrednim egress/TLS kieruj wywołania Telegram API przez
channels.telegram.proxy:
- Node 22+ domyślnie używa
autoSelectFamily=true(z wyjątkiem WSL2) idnsResultOrder=ipv4first. - Jeśli Twój host to WSL2 lub jawnie lepiej działa w trybie tylko IPv4, wymuś wybór rodziny:
- Odpowiedzi z zakresu benchmarkowego RFC 2544 (
198.18.0.0/15) są już domyślnie dozwolone dla pobierania mediów Telegram. Jeśli zaufany fake-IP lub transparent proxy przepisujeapi.telegram.orgna jakiś inny prywatny/wewnętrzny/specjalnego przeznaczenia adres podczas pobierania mediów, możesz włączyć obejście tylko dla Telegram:
- To samo ustawienie opt-in jest dostępne per konto pod
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Jeśli Twoje proxy rozwiązuje hosty mediów Telegram do
198.18.x.x, najpierw pozostaw niebezpieczną flagę wyłączoną. Media Telegram już domyślnie dopuszczają zakres benchmarkowy RFC 2544.
- Nadpisania przez env (tymczasowe):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Zweryfikuj odpowiedzi DNS:
Wskaźniki do dokumentacji referencyjnej konfiguracji Telegram
Główna dokumentacja referencyjna:-
channels.telegram.enabled: włącza/wyłącza uruchamianie kanału. -
channels.telegram.botToken: token bota (BotFather). -
channels.telegram.tokenFile: odczytuje token ze ścieżki do zwykłego pliku. Symlinki są odrzucane. -
channels.telegram.dmPolicy:pairing | allowlist | open | disabled(domyślnie: pairing). -
channels.telegram.allowFrom: lista dozwolonych DM (numeryczne identyfikatory użytkowników Telegram).allowlistwymaga co najmniej jednego identyfikatora nadawcy.openwymaga"*".openclaw doctor --fixmoże rozwiązać starsze wpisy@usernamedo identyfikatorów i może odzyskać wpisy listy dozwolonych z plików store parowania w przepływach migracji allowlist. -
channels.telegram.actions.poll: włącza lub wyłącza tworzenie Telegram polls (domyślnie: włączone; nadal wymagasendMessage). -
channels.telegram.defaultTo: domyślny cel Telegram używany przez CLI--deliver, gdy nie podano jawnego--reply-to. -
channels.telegram.groupPolicy:open | allowlist | disabled(domyślnie: allowlist). -
channels.telegram.groupAllowFrom: lista dozwolonych nadawców grupowych (numeryczne identyfikatory użytkowników Telegram).openclaw doctor --fixmoże rozwiązać starsze wpisy@usernamedo identyfikatorów. Wpisy nienumeryczne są ignorowane podczas autoryzacji. Autoryzacja grupowa nie używa zapasowego store parowania DM (2026.2.25+). -
Priorytet dla wielu kont:
- Gdy skonfigurowane są co najmniej dwa identyfikatory kont, ustaw
channels.telegram.defaultAccount(lub uwzględnijchannels.telegram.accounts.default), aby jawnie określić domyślny routing. - Jeśli żadne z nich nie jest ustawione, OpenClaw zapasowo używa pierwszego znormalizowanego identyfikatora konta, a
openclaw doctorzgłasza ostrzeżenie. channels.telegram.accounts.default.allowFromichannels.telegram.accounts.default.groupAllowFromdotyczą wyłącznie kontadefault.- Nazwane konta dziedziczą
channels.telegram.allowFromichannels.telegram.groupAllowFrom, gdy wartości na poziomie konta nie są ustawione. - Nazwane konta nie dziedziczą
channels.telegram.accounts.default.allowFrom/groupAllowFrom.
- Gdy skonfigurowane są co najmniej dwa identyfikatory kont, ustaw
-
channels.telegram.groups: wartości domyślne per grupa + lista dozwolonych (użyj"*"dla globalnych wartości domyślnych).channels.telegram.groups.<id>.groupPolicy: nadpisanie per grupa dla groupPolicy (open | allowlist | disabled).channels.telegram.groups.<id>.requireMention: domyślne ograniczanie do wzmianek.channels.telegram.groups.<id>.skills: filtr Skills (pominięcie = wszystkie Skills, puste = brak).channels.telegram.groups.<id>.allowFrom: nadpisanie listy dozwolonych nadawców per grupa.channels.telegram.groups.<id>.systemPrompt: dodatkowy system prompt dla grupy.channels.telegram.groups.<id>.enabled: wyłącza grupę, gdy ma wartośćfalse.channels.telegram.groups.<id>.topics.<threadId>.*: nadpisania per temat (pola grupy +agentIdtylko dla tematu).channels.telegram.groups.<id>.topics.<threadId>.agentId: kieruje ten temat do konkretnego agenta (nadpisuje routing na poziomie grupy i bindings).
-
channels.telegram.groups.<id>.topics.<threadId>.groupPolicy: nadpisanie per temat dla groupPolicy (open | allowlist | disabled). -
channels.telegram.groups.<id>.topics.<threadId>.requireMention: nadpisanie ograniczania do wzmianek per temat. -
najwyższego poziomu
bindings[]ztype: "acp"i kanonicznym identyfikatorem tematuchatId:topic:topicIdwmatch.peer.id: pola trwałego powiązania tematu ACP (zobacz Agenci ACP). -
channels.telegram.direct.<id>.topics.<threadId>.agentId: kieruje tematy DM do konkretnego agenta (to samo zachowanie co dla tematów forum). -
channels.telegram.execApprovals.enabled: włącza Telegram jako klienta zatwierdzeń exec opartego na czacie dla tego konta. -
channels.telegram.execApprovals.approvers: identyfikatory użytkowników Telegram uprawnionych do zatwierdzania lub odrzucania żądań exec. Opcjonalne, gdychannels.telegram.allowFromlub bezpośredniechannels.telegram.defaultTojuż identyfikuje właściciela. -
channels.telegram.execApprovals.target:dm | channel | both(domyślnie:dm).channelibothzachowują źródłowy temat Telegram, jeśli jest obecny. -
channels.telegram.execApprovals.agentFilter: opcjonalny filtr identyfikatora agenta dla przekazywanych próśb o zatwierdzenie. -
channels.telegram.execApprovals.sessionFilter: opcjonalny filtr klucza sesji (substring lub regex) dla przekazywanych próśb o zatwierdzenie. -
channels.telegram.accounts.<account>.execApprovals: nadpisanie per konto dla routingu zatwierdzeń exec Telegram i autoryzacji zatwierdzających. -
channels.telegram.capabilities.inlineButtons:off | dm | group | all | allowlist(domyślnie: allowlist). -
channels.telegram.accounts.<account>.capabilities.inlineButtons: nadpisanie per konto. -
channels.telegram.commands.nativeSkills: włącza/wyłącza natywne polecenia Skills Telegram. -
channels.telegram.replyToMode:off | first | all(domyślnie:off). -
channels.telegram.textChunkLimit: rozmiar wychodzących fragmentów (znaki). -
channels.telegram.chunkMode:length(domyślnie) lubnewline, aby dzielić po pustych liniach (granice akapitów) przed dzieleniem według długości. -
channels.telegram.linkPreview: przełącznik podglądów linków dla wiadomości wychodzących (domyślnie: true). -
channels.telegram.streaming:off | partial | block | progress(podgląd strumienia na żywo; domyślnie:partial;progressjest mapowane dopartial;blockto zgodność ze starszym trybem podglądu). Strumieniowanie podglądu Telegram używa jednej wiadomości podglądu, która jest edytowana w miejscu. -
channels.telegram.streaming.preview.toolProgress: ponownie używa wiadomości podglądu na żywo do aktualizacji narzędzi/postępu, gdy aktywne jest strumieniowanie podglądu (domyślnie:true). Ustawfalse, aby zachować osobne wiadomości narzędzi/postępu. -
channels.telegram.mediaMaxMb: limit mediów Telegram przychodzących/wychodzących (MB, domyślnie: 100). -
channels.telegram.retry: zasady ponawiania dla pomocników wysyłania Telegram (CLI/narzędzia/akcje) przy możliwych do odzyskania wychodzących błędach API (attempts, minDelayMs, maxDelayMs, jitter). -
channels.telegram.network.autoSelectFamily: nadpisuje Node autoSelectFamily (true=włącz, false=wyłącz). Domyślnie włączone w Node 22+, z domyślnym wyłączeniem w WSL2. -
channels.telegram.network.dnsResultOrder: nadpisuje kolejność wyników DNS (ipv4firstlubverbatim). Domyślnieipv4firstw Node 22+. -
channels.telegram.network.dangerouslyAllowPrivateNetwork: niebezpieczne ustawienie opt-in dla zaufanych środowisk fake-IP lub transparent proxy, w których pobieranie mediów Telegram rozwiązujeapi.telegram.orgdo prywatnych/wewnętrznych/specjalnego przeznaczenia adresów poza domyślnym dozwolonym zakresem benchmarkowym RFC 2544. -
channels.telegram.proxy: URL proxy dla wywołań Bot API (SOCKS/HTTP). -
channels.telegram.webhookUrl: włącza tryb Webhook (wymagachannels.telegram.webhookSecret). -
channels.telegram.webhookSecret: sekret Webhooka (wymagany, gdy ustawione jest webhookUrl). -
channels.telegram.webhookPath: lokalna ścieżka Webhooka (domyślnie/telegram-webhook). -
channels.telegram.webhookHost: lokalny host bindowania Webhooka (domyślnie127.0.0.1). -
channels.telegram.webhookPort: lokalny port bindowania Webhooka (domyślnie8787). -
channels.telegram.actions.reactions: ogranicza reakcje narzędzi Telegram. -
channels.telegram.actions.sendMessage: ogranicza wysyłanie wiadomości przez narzędzia Telegram. -
channels.telegram.actions.deleteMessage: ogranicza usuwanie wiadomości przez narzędzia Telegram. -
channels.telegram.actions.sticker: ogranicza akcje naklejek Telegram — wysyłanie i wyszukiwanie (domyślnie: false). -
channels.telegram.reactionNotifications:off | own | all— kontroluje, które reakcje wyzwalają zdarzenia systemowe (domyślnie:own, gdy nieustawione). -
channels.telegram.reactionLevel:off | ack | minimal | extensive— kontroluje możliwości reakcji agenta (domyślnie:minimal, gdy nieustawione). -
channels.telegram.errorPolicy:reply | silent— kontroluje zachowanie odpowiedzi na błędy (domyślnie:reply). Obsługiwane są nadpisania per konto/grupa/temat. -
channels.telegram.errorCooldownMs: minimalna liczba ms między odpowiedziami z błędami na tym samym czacie (domyślnie:60000). Zapobiega spamowi błędów podczas awarii. - Dokumentacja referencyjna konfiguracji - Telegram
- start/auth:
enabled,botToken,tokenFile,accounts.*(tokenFilemusi wskazywać zwykły plik; symlinki są odrzucane) - kontrola dostępu:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, najwyższego poziomubindings[](type: "acp") - zatwierdzenia exec:
execApprovals,accounts.*.execApprovals - polecenia/menu:
commands.native,commands.nativeSkills,customCommands - wątki/odpowiedzi:
replyToMode - strumieniowanie:
streaming(podgląd),streaming.preview.toolProgress,blockStreaming - formatowanie/dostarczanie:
textChunkLimit,chunkMode,linkPreview,responsePrefix - media/sieć:
mediaMaxMb,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - akcje/możliwości:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reakcje:
reactionNotifications,reactionLevel - błędy:
errorPolicy,errorCooldownMs - zapisy/historia:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit