Pairing
Channel troubleshooting
Gateway configuration
Szybka konfiguracja
Create the bot token in BotFather
@BotFather).Uruchom /newbot, postępuj zgodnie z instrukcjami i zapisz token.Configure token and DM policy
TELEGRAM_BOT_TOKEN=... (tylko konto domyślne).
Telegram nie używa openclaw channels login telegram; skonfiguruj token w konfiguracji/środowisku, a następnie uruchom gateway.Add the bot to a group
- Twój identyfikator użytkownika Telegram, używany w
allowFrom/groupAllowFrom - identyfikator czatu grupy Telegram, używany jako klucz w
channels.telegram.groups
openclaw logs --follow, bota do przekazywanych identyfikatorów albo Bot API getUpdates. Po dopuszczeniu grupy /whoami@<bot_username> może potwierdzić identyfikatory użytkownika i grupy.Ujemne identyfikatory supergrup Telegram zaczynające się od -100 są identyfikatorami czatów grupowych. Umieść je w channels.telegram.groups, a nie w groupAllowFrom.TELEGRAM_BOT_TOKEN dotyczy tylko konta domyślnego.
Po udanym uruchomieniu OpenClaw zapisuje tożsamość bota w katalogu stanu na maksymalnie 24 godziny, aby ponowne uruchomienia mogły uniknąć dodatkowego wywołania Telegram getMe; zmiana lub usunięcie tokenu czyści tę pamięć podręczną.Ustawienia po stronie Telegram
Privacy mode and group visibility
Privacy mode and group visibility
- wyłącz tryb prywatności za pomocą
/setprivacy, albo - ustaw bota jako administratora grupy.
Group permissions
Group permissions
Helpful BotFather toggles
Helpful BotFather toggles
/setjoingroups, aby zezwolić na dodawanie do grup lub je zablokować/setprivacydla zachowania widoczności w grupach
Kontrola dostępu i aktywacja
Tożsamość bota w grupie
W grupach Telegram i tematach forum jawna wzmianka o skonfigurowanym uchwycie bota (na przykład@my_bot) jest traktowana jako adresowanie wybranego agenta OpenClaw, nawet jeśli nazwa persony agenta różni się od nazwy użytkownika Telegram. Polityka wyciszenia grupy nadal dotyczy niepowiązanego ruchu grupowego, ale sam uchwyt bota nie jest uznawany za „kogoś innego”.
- DM policy
- Group policy and allowlists
- Mention behavior
channels.telegram.dmPolicy kontroluje dostęp do wiadomości bezpośrednich:pairing(domyślne)allowlist(wymaga co najmniej jednego identyfikatora nadawcy wallowFrom)open(wymaga, abyallowFromzawierało"*")disabled
dmPolicy: "open" z allowFrom: ["*"] pozwala dowolnemu kontu Telegram, które znajdzie lub odgadnie nazwę użytkownika bota, wydawać botowi polecenia. Używaj tego tylko dla celowo publicznych botów z mocno ograniczonymi narzędziami; boty jednego właściciela powinny używać allowlist z numerycznymi identyfikatorami użytkowników.channels.telegram.allowFrom przyjmuje numeryczne identyfikatory użytkowników Telegram. Prefiksy telegram: / tg: są akceptowane i normalizowane.
W konfiguracjach wielokontowych restrykcyjne channels.telegram.allowFrom najwyższego poziomu jest traktowane jako granica bezpieczeństwa: wpisy allowFrom: ["*"] na poziomie konta nie czynią tego konta publicznym, chyba że efektywna lista dozwolonych kont po scaleniu nadal zawiera jawny symbol wieloznaczny.
dmPolicy: "allowlist" z pustym allowFrom blokuje wszystkie DM-y i jest odrzucane przez walidację konfiguracji.
Konfiguracja prosi tylko o numeryczne identyfikatory użytkowników.
Jeśli po aktualizacji Twoja konfiguracja zawiera wpisy listy dozwolonych @username, uruchom openclaw doctor --fix, aby je rozwiązać (najlepszym możliwym sposobem; wymaga tokenu bota Telegram).
Jeśli wcześniej polegałeś na plikach listy dozwolonych magazynu parowania, openclaw doctor --fix może odzyskać wpisy do channels.telegram.allowFrom w przepływach listy dozwolonych (na przykład gdy dmPolicy: "allowlist" nie ma jeszcze jawnych identyfikatorów).Dla botów jednego właściciela preferuj dmPolicy: "allowlist" z jawnymi numerycznymi identyfikatorami allowFrom, aby polityka dostępu była trwała w konfiguracji (zamiast zależeć od wcześniejszych zatwierdzeń parowania).Częste nieporozumienie: zatwierdzenie parowania DM nie oznacza „ten nadawca jest autoryzowany wszędzie”.
Parowanie przyznaje dostęp do DM-ów. Jeśli nie istnieje jeszcze właściciel poleceń, pierwsze zatwierdzone parowanie ustawia także commands.ownerAllowFrom, aby polecenia tylko dla właściciela i zatwierdzenia exec miały jawne konto operatora.
Autoryzacja nadawców w grupie nadal pochodzi z jawnych list dozwolonych w konfiguracji.
Jeśli chcesz, aby „jestem raz autoryzowany i działają zarówno DM-y, jak i polecenia grupowe”, umieść swój numeryczny identyfikator użytkownika Telegram w channels.telegram.allowFrom; dla poleceń tylko dla właściciela upewnij się, że commands.ownerAllowFrom zawiera telegram:<your user id>.Znajdowanie 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 runtime
- Telegram należy do procesu Gateway.
- Routing jest deterministyczny: odpowiedzi przychodzące z Telegram wracają do Telegram (model nie wybiera kanałów).
- Wiadomości przychodzące są normalizowane do wspólnej koperty kanału z metadanymi odpowiedzi, placeholderami multimediów oraz utrwalonym kontekstem łańcucha odpowiedzi dla odpowiedzi Telegram zaobserwowanych przez Gateway.
- Sesje grupowe są izolowane według ID grupy. Tematy forum dodają
:topic:<threadId>, aby utrzymać izolację tematów. - Wiadomości DM mogą zawierać
message_thread_id; OpenClaw zachowuje je dla odpowiedzi. Sesje tematów DM są rozdzielane tylko wtedy, gdy TelegramgetMezgłaszahas_topics_enabled: truedla bota; w przeciwnym razie DM pozostają w płaskiej sesji. - Long polling używa runnera grammY z sekwencjonowaniem per czat/per wątek. Ogólna współbieżność ujścia runnera używa
agents.defaults.maxConcurrent. - Uruchamianie wielu kont ogranicza współbieżne sondy Telegram
getMe, aby duże floty botów nie uruchamiały sond wszystkich kont naraz. - Long polling jest chroniony wewnątrz każdego procesu Gateway, więc tylko jeden aktywny poller może używać tokena bota w danym czasie. Jeśli nadal widzisz konflikty
getUpdates409, prawdopodobnie inny Gateway OpenClaw, skrypt albo zewnętrzny poller używa tego samego tokena. - Restarty watchdog long pollingu są domyślnie wyzwalane po 120 sekundach bez ukończonej żywotności
getUpdates. Zwiększchannels.telegram.pollingStallThresholdMstylko wtedy, gdy wdrożenie nadal widzi fałszywe restarty z powodu zastoju pollingu 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).
channels.telegram.dm.threadReplies i channels.telegram.direct.<chatId>.threadReplies zostały usunięte. Uruchom openclaw doctor --fix po aktualizacji, jeśli konfiguracja nadal ma te klucze. Routing tematów DM używa teraz możliwości bota z Telegram getMe.has_topics_enabled, kontrolowanej przez tryb wątków BotFather: boty z włączonymi tematami używają sesji DM ograniczonych do wątku, gdy Telegram wysyła message_thread_id; pozostałe DM pozostają w płaskiej sesji.Dokumentacja funkcji
Podgląd strumienia na żywo (edycje wiadomości)
Podgląd strumienia na żywo (edycje wiadomości)
- czaty bezpośrednie: wiadomość podglądu +
editMessageText - grupy/tematy: wiadomość podglądu +
editMessageText
channels.telegram.streamingtooff | partial | block | progress(domyślnie:partial)- krótkie początkowe podglądy odpowiedzi są debounce’owane, a następnie materializowane po ograniczonym opóźnieniu, jeśli uruchomienie jest nadal aktywne
progressutrzymuje jeden edytowalny szkic statusu dla postępu narzędzi, pokazuje stabilną etykietę statusu, gdy aktywność odpowiedzi pojawia się przed postępem narzędzi, czyści go po ukończeniu i wysyła finalną odpowiedź jako zwykłą wiadomośćstreaming.preview.toolProgresskontroluje, czy aktualizacje narzędzi/postępu ponownie używają tej samej edytowanej wiadomości podglądu (domyślnie:true, gdy strumieniowanie podglądu jest aktywne)streaming.preview.commandTextkontroluje szczegóły polecenia/wykonania w tych wierszach postępu narzędzi:raw(domyślnie, zachowuje wydane zachowanie) albostatus(tylko etykieta narzędzia)streaming.progress.commentary(domyślnie:false) włącza tekst komentarza/preambuły asystenta w tymczasowym szkicu postępu- starsze
channels.telegram.streamMode, boolowskie wartościstreamingi wycofane klucze natywnego podglądu szkicu są wykrywane; uruchomopenclaw doctor --fix, aby zmigrować je do bieżącej konfiguracji strumieniowania
v2026.4.22 i nowszych.Aby zachować edytowany podgląd dla tekstu odpowiedzi, ale ukryć wiersze postępu narzędzi, ustaw:progress, gdy chcesz widocznego postępu narzędzi bez edytowania finalnej odpowiedzi w tej samej wiadomości. Umieść politykę tekstu polecenia pod streaming.progress:streaming.mode: "off" tylko wtedy, gdy chcesz dostarczania wyłącznie finalnego: edycje podglądu Telegram są wyłączone, a ogólny szum narzędzi/postępu jest tłumiony zamiast wysyłania jako samodzielne wiadomości statusu. Monity zatwierdzania, payloady multimediów i błędy nadal przechodzą przez normalne dostarczanie finalne. Użyj streaming.preview.toolProgress: false, gdy chcesz tylko zachować edycje podglądu odpowiedzi, ukrywając wiersze statusu postępu narzędzi.replyToMode to "first", "all" albo "batched" i wiadomość przychodząca zawiera tekst wybranego cytatu, OpenClaw wysyła finalną odpowiedź przez natywną ścieżkę odpowiedzi na cytat Telegram zamiast edytować podgląd odpowiedzi, więc streaming.preview.toolProgress nie może pokazać krótkich wierszy statusu dla tego przebiegu. Odpowiedzi na bieżącą wiadomość bez tekstu wybranego cytatu nadal zachowują strumieniowanie podglądu. Ustaw replyToMode: "off", gdy widoczność postępu narzędzi jest ważniejsza niż natywne odpowiedzi na cytaty, albo ustaw streaming.preview.toolProgress: false, aby zaakceptować kompromis.- krótkie podglądy DM/grupy/tematu: OpenClaw zachowuje tę samą wiadomość podglądu i wykonuje finalną edycję w miejscu
- długie finalne teksty, które dzielą się na wiele wiadomości Telegram, ponownie używają istniejącego podglądu jako pierwszego finalnego fragmentu, gdy to możliwe, a potem wysyłają tylko pozostałe fragmenty
- finalne odpowiedzi w trybie postępu czyszczą szkic statusu i używają normalnego dostarczania finalnego zamiast edytować szkic w odpowiedź
- jeśli finalna edycja nie powiedzie się przed potwierdzeniem ukończonego tekstu, OpenClaw używa normalnego dostarczania finalnego i czyści przestarzały podgląd
/reasoning streamużywa ścieżki podglądu rozumowania obsługiwanego kanału; w Telegram strumieniuje rozumowanie do podglądu na żywo podczas generowania- podgląd rozumowania jest usuwany po dostarczeniu finalnym; użyj
/reasoning on, gdy rozumowanie ma pozostać widoczne - finalna odpowiedź jest wysyłana bez tekstu rozumowania
Formatowanie wiadomości rozszerzonych
Formatowanie wiadomości rozszerzonych
channels.telegram.richMessages: true, aby włączyć rozszerzone wiadomości Bot API 10.1:- Agent otrzymuje informację, że rozszerzone wiadomości Telegram są dostępne dla tego bota/konta.
- Tekst Markdown jest renderowany przez Markdown IR OpenClaw i wysyłany jako rozszerzony HTML Telegram.
- Jawne payloady rozszerzonego HTML zachowują obsługiwane tagi Bot API 10.1, takie jak nagłówki, tabele, szczegóły, rich media i formuły.
- Podpisy multimediów nadal używają podpisów HTML Telegram, ponieważ rozszerzone wiadomości nie zastępują podpisów.
$400-600K nie są parsowane jako matematyka. Długi tekst rozszerzony jest automatycznie dzielony między limity tekstu rozszerzonego i bloków rozszerzonych Telegram. Tabele przekraczające limit kolumn Telegram są wysyłane jako bloki kodu.Domyślnie: wyłączone dla zgodności klientów. Rozszerzone wiadomości wymagają zgodnych klientów Telegram; niektóre bieżące klienty Desktop, Web, Android i klientów zewnętrznych wyświetlają zaakceptowane rozszerzone wiadomości jako nieobsługiwane. Pozostaw tę opcję wyłączoną, chyba że każdy klient używany z botem potrafi je renderować. /status pokazuje, czy bieżąca sesja Telegram ma rozszerzone wiadomości włączone czy wyłączone.Podglądy linków są domyślnie włączone. channels.telegram.linkPreview: false pomija automatyczne wykrywanie encji dla tekstu rozszerzonego.Natywne polecenia i polecenia niestandardowe
Natywne polecenia i polecenia niestandardowe
setMyCommands.Domyślne polecenia natywne:commands.native: "auto"włącza natywne polecenia 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ów/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 przepełniło się po przycięciu; zmniejsz liczbę poleceń pluginów/Skills/niestandardowych albo wyłączchannels.telegram.commands.native.- Niepowodzenie
deleteWebhook,deleteMyCommandsalbosetMyCommandsz404: Not Found, gdy bezpośrednie polecenia curl Bot API działają, może oznaczać, żechannels.telegram.apiRootustawiono na pełny endpoint/bot<TOKEN>.apiRootmusi być tylko korzeniem Bot API, aopenclaw doctor --fixusuwa przypadkowe końcowe/bot<TOKEN>. getMe returned 401oznacza, że Telegram odrzucił skonfigurowany token bota. ZaktualizujbotToken,tokenFilealboTELEGRAM_BOT_TOKENbieżącym tokenem BotFather; OpenClaw zatrzymuje się przed pollingiem, więc nie jest to zgłaszane jako niepowodzenie czyszczenia webhooka.setMyCommands failedz błędami sieci/fetch zwykle oznacza, że wychodzący DNS/HTTPS doapi.telegram.orgjest zablokowany.
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 rolę/zakresy)- zatwierdź żądanie:
/pair approve <requestId>dla jawnego zatwierdzenia/pair approve, gdy jest tylko jedno oczekujące żądanie/pair approve latestdla najnowszego
scopes: [] oraz ograniczony token przekazania operatora dla zaufanego onboardingu mobilnego. Ten token operatora może odczytywać natywną konfigurację z czasu konfiguracji, ale nie przyznaje zakresów mutacji parowania ani operator.admin.Jeśli urządzenie ponawia próbę ze zmienionymi szczegółami uwierzytelniania (na przykład rolą/zakresami/kluczem publicznym), 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
offdmgroupallallowlist(domyślnie)
capabilities: ["inlineButtons"] jest mapowane na inlineButtons: "all".Przykład akcji wiadomości:web_app działają tylko w prywatnych czatach między użytkownikiem a
botem.Kliknięcia wywołania zwrotnego, które nie zostaną obsłużone przez zarejestrowany interaktywny
handler pluginu, są przekazywane agentowi jako tekst:
callback_data: <value>Akcje wiadomości Telegram dla agentów i automatyzacji
Akcje wiadomości Telegram dla agentów i automatyzacji
sendMessage(to,content, opcjonalniemediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,contentlubcaption, opcjonalne przyciski inlinepresentation; edycje samych przycisków aktualizują znaczniki odpowiedzi)createForumTopic(chatId,name, opcjonalnieiconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Kontrole bramkowania: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 czasie działania używają aktywnej migawki konfiguracji/sekretów (uruchomienie/ponowne wczytanie), więc ścieżki akcji nie wykonują doraźnego ponownego rozwiązywania SecretRef przy każdej wysyłce.Semantyka usuwania reakcji: /tools/reactionsTagi wątkowania odpowiedzi
Tagi wątkowania odpowiedzi
[[reply_to_current]]odpowiada na wiadomość wyzwalającą[[reply_to:<id>]]odpowiada na konkretny 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_*]] nadal są respektowane.Tematy forum i zachowanie wątków
Tematy forum i zachowanie wątków
- klucze sesji tematów dodają
:topic:<threadId> - odpowiedzi i sygnalizowanie pisania trafiają 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 domyślnych ustawień grupy.
topics."*" ustawia wartości domyślne dla każdego tematu w tej grupie; dokładne identyfikatory tematów nadal mają pierwszeństwo przed "*".Routing agentów według tematu: Każdy temat może kierować do innego agenta przez ustawienie agentId w konfiguracji tematu. Dzięki temu każdy temat ma własną izolowaną przestrzeń roboczą, pamięć i sesję. Przykład:agent:zu:telegram:group:-1001234567890:topic:3Trwałe powiązanie tematu ACP: Tematy forum mogą przypinać sesje uprzęży ACP przez typowane powiązania ACP najwyższego poziomu (bindings[] z type: "acp" oraz match.channel: "telegram", peer.kind: "group" i identyfikatorem kwalifikowanym tematem, takim jak -1001234567890:topic:42). Obecnie ograniczone do tematów forum w grupach/supergrupach. Zobacz Agenci ACP.Uruchomienie ACP powiązane z wątkiem z czatu: /acp spawn <agent> --thread here|auto wiąże bieżący temat z nową sesją ACP; kolejne wiadomości trafiają bezpośrednio tam. OpenClaw przypina potwierdzenie uruchomienia w temacie. Wymaga, aby channels.telegram.threadBindings.spawnSessions pozostało włączone (domyślnie: true).Kontekst szablonu udostępnia MessageThreadId i IsForum. Czaty DM z message_thread_id zachowują metadane odpowiedzi; używają kluczy sesji świadomych wątków tylko wtedy, gdy Telegram getMe zgłasza has_topics_enabled: true dla bota.
Dawne nadpisania dm.threadReplies i direct.*.threadReplies zostały celowo wycofane; używaj trybu wątków BotFather jako jedynego źródła prawdy i uruchom openclaw doctor --fix, aby usunąć przestarzałe klucze konfiguracji.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 notatki głosowej - transkrypcje przychodzących notatek głosowych są ujmowane w kontekście agenta jako tekst wygenerowany maszynowo i niezaufany; wykrywanie wzmianek nadal używa surowej transkrypcji, więc wiadomości głosowe bramkowane wzmiankami nadal działają.
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
Reaction notifications
Reaction notifications
message_reaction (oddzielnie od ładunków wiadomości).Gdy są włączone, OpenClaw kolejkuje zdarzenia systemowe, takie jak:Telegram reaction added: 👍 by Alice (@alice) on msg 42
channels.telegram.reactionNotifications:off | own | all(domyślnie:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(domyślnie:minimal)
ownoznacza tylko reakcje użytkownika na wiadomości wysłane przez bota (best-effort przez pamięć podręczną 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 nieforumowe są kierowane do sesji czatu grupowego
- grupy forumowe 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.Ack reactions
Ack reactions
ackReaction wysyła emoji potwierdzenia, gdy OpenClaw przetwarza przychodzącą wiadomość. ackReactionScope decyduje, kiedy to emoji zostanie faktycznie wysłane.Kolejność rozstrzygania emoji (ackReaction):channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- awaryjne 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.
messages.ackReactionScope):Dostawca Telegram odczytuje zakres z messages.ackReactionScope (domyślnie "group-mentions"). Obecnie nie ma nadpisania na poziomie konta Telegram ani kanału Telegram.Wartości: "all" (DM-y + grupy), "direct" (tylko DM-y), "group-all" (każda wiadomość grupowa, bez DM-ów), "group-mentions" (grupy, gdy bot jest wspomniany; bez DM-ów — to wartość domyślna), "off" / "none" (wyłączone)."group-mentions") nie uruchamia reakcji potwierdzających w wiadomościach bezpośrednich. Aby uzyskać reakcję potwierdzającą dla przychodzących DM-ów Telegram, ustaw messages.ackReactionScope na "direct" lub "all". Wartość jest odczytywana przy uruchomieniu dostawcy Telegram, więc do zastosowania zmiany potrzebny jest restart Gateway.Config writes from Telegram events and commands
Config writes from Telegram events and commands
configWrites !== false).Zapisy wyzwalane przez Telegram obejmują:- zdarzenia migracji grupy (
migrate_to_chat_id) aktualizującechannels.telegram.groups /config seti/config unset(wymaga włączenia poleceń)
Long polling vs webhook
Long polling vs webhook
channels.telegram.webhookUrl i channels.telegram.webhookSecret; opcjonalnie webhookPath, webhookHost, webhookPort (domyślne wartości to /telegram-webhook, 127.0.0.1, 8787).W trybie długiego odpytywania OpenClaw utrwala swój znacznik restartu dopiero po pomyślnym przekazaniu aktualizacji. Jeśli handler zawiedzie, ta aktualizacja pozostaje możliwa do ponowienia w tym samym procesie i nie jest zapisywana jako ukończona na potrzeby deduplikacji po restarcie.Lokalny listener wiąże się z 127.0.0.1:8787. W przypadku publicznego wejścia umieść reverse proxy przed lokalnym portem albo świadomie ustaw webhookHost: "0.0.0.0".Tryb Webhook sprawdza strażników żądania, tajny token Telegram oraz treść JSON przed zwróceniem 200 do Telegram.
Następnie OpenClaw przetwarza aktualizację asynchronicznie przez te same pasy bota per czat/per temat, których używa długie odpytywanie, więc wolne tury agenta nie blokują potwierdzenia dostarczenia Telegram.Limity, ponawianie prób i cele CLI
Limity, ponawianie prób i cele CLI
- Domyślna wartość
channels.telegram.textChunkLimitto 4000. channels.telegram.chunkMode="newline"preferuje granice akapitów (puste wiersze) przed dzieleniem według długości.channels.telegram.mediaMaxMb(domyślnie 100) ogranicza rozmiar multimediów przychodzących i wychodzących Telegram.channels.telegram.mediaGroupFlushMs(domyślnie 500) kontroluje, jak długo albumy/grupy multimediów Telegram są buforowane, zanim OpenClaw przekaże je jako jedną wiadomość przychodzącą. Zwiększ tę wartość, jeśli części albumu docierają z opóźnieniem; zmniejsz ją, aby skrócić opóźnienie odpowiedzi albumu.channels.telegram.timeoutSecondszastępuje limit czasu klienta API Telegram (jeśli nie ustawiono, obowiązuje domyślna wartość grammY). Klienci botów ograniczają skonfigurowane wartości poniżej 60-sekundowego zabezpieczenia żądań wychodzącego tekstu/wpisywania, aby grammY nie przerwał dostarczenia widocznej odpowiedzi, zanim uruchomi się zabezpieczenie transportu i mechanizm awaryjny OpenClaw. Długie odpytywanie nadal używa 45-sekundowego zabezpieczenia żądaniagetUpdates, aby bezczynne odpytywania nie były porzucane bez końca.channels.telegram.pollingStallThresholdMsma domyślną wartość120000; dostrajaj w zakresie od30000do600000tylko w przypadku fałszywie dodatnich restartów z powodu zastoju odpytywania.- historia kontekstu grupy używa
channels.telegram.historyLimitlubmessages.groupChat.historyLimit(domyślnie 50);0wyłącza. - dodatkowy kontekst odpowiedzi/cytatu/przekazania jest normalizowany do jednego wybranego okna kontekstu konwersacji, gdy gateway zaobserwował wiadomości nadrzędne; pamięć podręczna zaobserwowanych wiadomości znajduje się w stanie Plugin SQLite OpenClaw, a
openclaw doctor --fiximportuje starsze pliki pomocnicze. Telegram obejmuje w aktualizacjach tylko jeden płytkireply_to_message, więc łańcuchy starsze niż pamięć podręczna są ograniczone do bieżącego ładunku aktualizacji Telegram. - Listy dozwolonych Telegram kontrolują głównie, kto może uruchomić agenta, a nie stanowią pełnej granicy redakcji dodatkowego kontekstu.
- Kontrole 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 błędów wychodzącego API. Dostarczanie końcowej odpowiedzi przychodzącej również używa ograniczonego bezpiecznego ponawiania wysyłki dla awarii Telegram przed połączeniem, ale nie ponawia niejednoznacznych kopert sieciowych po wysłaniu, które mogłyby zduplikować widoczne wiadomości.
openclaw message poll i obsługują tematy forum:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-iddla tematów forum (albo użyj celu:topic:)
--presentationz blokamibuttonsdla klawiatur inline, gdychannels.telegram.capabilities.inlineButtonsna to pozwala--pinlub--delivery '{"pin":true}', aby zażądać przypiętego dostarczenia, gdy bot może przypinać w tym czacie--force-document, aby wysyłać wychodzące obrazy, GIF-y i filmy jako dokumenty zamiast skompresowanych zdjęć, animowanych multimediów lub przesłanych filmów
channels.telegram.actions.sendMessage=falsewyłącza wychodzące wiadomości Telegram, w tym ankietychannels.telegram.actions.poll=falsewyłącza tworzenie ankiet Telegram, pozostawiając zwykłe wysyłki włączone
Zatwierdzenia exec w Telegram
Zatwierdzenia exec w Telegram
channels.telegram.execApprovals.enabled(włącza się automatycznie, gdy da się rozpoznać co najmniej jednego zatwierdzającego)channels.telegram.execApprovals.approvers(wraca do numerycznych identyfikatorów właścicieli zcommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(domyślnie) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom i defaultTo kontrolują, kto może rozmawiać z botem i gdzie wysyła on zwykłe odpowiedzi. Nie czynią nikogo zatwierdzającym exec. Pierwsze zatwierdzone parowanie DM inicjuje commands.ownerAllowFrom, gdy nie istnieje jeszcze żaden właściciel poleceń, więc konfiguracja z jednym właścicielem nadal działa bez duplikowania identyfikatorów w execApprovals.approvers.Dostarczanie do kanału pokazuje tekst polecenia na czacie; włączaj channel lub both tylko w zaufanych grupach/tematach. Gdy monit trafia do tematu forum, OpenClaw zachowuje temat dla monitu zatwierdzenia i dalszej odpowiedzi. Zatwierdzenia exec domyślnie wygasają po 30 minutach.Przyciski zatwierdzania inline wymagają też, aby channels.telegram.capabilities.inlineButtons zezwalało na docelową powierzchnię (dm, group lub all). Identyfikatory zatwierdzeń z prefiksem plugin: są rozwiązywane przez zatwierdzenia pluginów; pozostałe są najpierw rozwiązywane przez zatwierdzenia exec.Zobacz Zatwierdzenia exec.Kontrole odpowiedzi błędów
Gdy agent napotyka błąd dostarczenia lub dostawcy, polityka błędów kontroluje, czy komunikaty o błędach są wysyłane do czatu Telegram:| Klucz | Wartości | Domyślnie | Opis |
|---|---|---|---|
channels.telegram.errorPolicy | always, once, silent | always | always — wysyłaj każdy komunikat o błędzie do czatu. once — wysyłaj każdy unikatowy komunikat o błędzie raz na okno schładzania (tłum powtarzające się identyczne błędy). silent — nigdy nie wysyłaj komunikatów o błędach do czatu. |
channels.telegram.errorCooldownMs | liczba (ms) | 14400000 (4h) | Okno schładzania dla polityki once. Po wysłaniu błędu ten sam komunikat o błędzie jest tłumiony do upływu tego interwału. 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ń i ponownie dodaj bota 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ć sprawdzony 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 (albo zawierać"*") - sprawdź członkostwo bota w grupie
- przejrzyj logi:
openclaw logs --followpod kątem powodów pominięcia
Polecenia działają częściowo albo wcale
Polecenia działają częściowo albo wcale
- autoryzuj tożsamość nadawcy (parowanie i/lub numeryczne
allowFrom) - autoryzacja poleceń nadal obowiązuje, nawet gdy polityka grupy to
open setMyCommands failedzBOT_COMMANDS_TOO_MUCHoznacza, że menu natywne ma zbyt wiele pozycji; zmniejsz liczbę poleceń pluginów/Skills/niestandardowych albo wyłącz menu natywne- Wywołania startowe
deleteMyCommands/setMyCommandsoraz wywołania wpisywaniasendChatActionsą ograniczone czasowo i ponawiane raz przez awaryjny transport Telegram przy przekroczeniu limitu czasu żądania. Uporczywe błędy sieci/pobierania zwykle wskazują na problemy z osiągalnością DNS/HTTPS doapi.telegram.org
Uruchamianie zgłasza nieautoryzowany token
Uruchamianie zgłasza nieautoryzowany token
getMe returned 401to błąd uwierzytelniania Telegram dla skonfigurowanego tokenu bota.- Skopiuj ponownie lub wygeneruj od nowa token bota w BotFather, a następnie zaktualizuj
channels.telegram.botToken,channels.telegram.tokenFile,channels.telegram.accounts.<id>.botTokenlubTELEGRAM_BOT_TOKENdla konta domyślnego. deleteWebhook 401 Unauthorizedpodczas uruchamiania również jest błędem uwierzytelniania; traktowanie tego jako „brak istniejącego webhooka” tylko odłożyłoby tę samą awarię złego tokenu do późniejszych wywołań API.
Niestabilność odpytywania lub sieci
Niestabilność odpytywania lub sieci
- Node 22+ i niestandardowe fetch/proxy mogą wywołać natychmiastowe przerwanie, jeśli typy AbortSignal się nie zgadzają.
- Niektóre hosty najpierw rozwiązuje
api.telegram.orgdo IPv6; zepsuty wychodzący IPv6 może powodować okresowe awarie API Telegram. - Jeśli logi zawierają
TypeError: fetch failedlubNetwork request for 'getUpdates' failed!, OpenClaw ponawia je teraz jako możliwe do odzyskania błędy sieciowe. - Podczas uruchamiania odpytywania OpenClaw ponownie używa udanej startowej sondy
getMedla grammY, aby runner nie potrzebował drugiegogetMeprzed pierwszymgetUpdates. - Jeśli
deleteWebhookkończy się przejściowym błędem sieci podczas uruchamiania odpytywania, OpenClaw przechodzi do długiego odpytywania zamiast wykonywać kolejne przedodpytywaniowe wywołanie płaszczyzny sterowania. Nadal aktywny Webhook ujawnia się jako konfliktgetUpdates; OpenClaw następnie przebudowuje transport Telegram i ponawia czyszczenie webhooka. - Jeśli gniazda Telegram odświeżają się w krótkim stałym rytmie, sprawdź niską wartość
channels.telegram.timeoutSeconds; klienci botów ograniczają skonfigurowane wartości poniżej zabezpieczeń żądań wychodzących igetUpdates, ale starsze wydania mogły przerywać każde odpytywanie lub odpowiedź, gdy ustawiono tę wartość poniżej tych zabezpieczeń. - Jeśli logi zawierają
Polling stall detected, OpenClaw domyślnie restartuje odpytywanie i przebudowuje transport Telegram po 120 sekundach bez ukończonej żywotności długiego odpytywania. openclaw channels status --probeiopenclaw doctorostrzegają, gdy uruchomione konto odpytywania nie ukończyłogetUpdatespo okresie karencji startu, gdy uruchomione konto webhooka nie ukończyłosetWebhookpo okresie karencji startu, albo gdy ostatnia udana aktywność transportu odpytywania jest nieaktualna.- Zwiększaj
channels.telegram.pollingStallThresholdMstylko wtedy, gdy długotrwałe wywołaniagetUpdatessą zdrowe, ale host nadal zgłasza fałszywe restarty z powodu zastoju odpytywania. Uporczywe zastoje zwykle wskazują na problemy z proxy, DNS, IPv6 lub wychodzącym TLS między hostem aapi.telegram.org. - Telegram honoruje też zmienne środowiskowe proxy procesu dla transportu Bot API, w tym
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYi ich warianty małymi literami.NO_PROXY/no_proxynadal może omijaćapi.telegram.org. - Jeśli zarządzany proxy OpenClaw jest skonfigurowany przez
OPENCLAW_PROXY_URLdla środowiska usługi i nie ma standardowej zmiennej środowiskowej proxy, Telegram również używa tego URL-a dla transportu Bot API. - Na hostach VPS z niestabilnym bezpośrednim wyjściem/TLS kieruj wywołania API Telegram przez
channels.telegram.proxy:
- Node 22+ domyślnie używa
autoSelectFamily=true(z wyjątkiem WSL2). Kolejność wyników DNS Telegram honoruje najpierwOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, potemchannels.telegram.network.dnsResultOrder, a następnie domyślne ustawienie procesu, takie jakNODE_OPTIONS=--dns-result-order=ipv4first; jeśli żadne nie ma zastosowania, Node 22+ wraca doipv4first. - Jeśli Twój host to WSL2 albo jawnie działa lepiej z zachowaniem tylko IPv4, wymuś wybór rodziny:
- Odpowiedzi z zakresu testów porównawczych RFC 2544 (
198.18.0.0/15) są już domyślnie dozwolone dla pobierania multimediów Telegram. Jeśli zaufany fake-IP lub przezroczysty proxy przepisujeapi.telegram.orgna inny prywatny/wewnętrzny/specjalnego użycia adres podczas pobierania multimediów, możesz włączyć obejście tylko dla Telegram:
- To samo ustawienie opcjonalne jest dostępne dla konta pod adresem
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Jeśli Twój proxy rozwiązuje hosty multimediów Telegram do
198.18.x.x, najpierw pozostaw niebezpieczną flagę wyłączoną. Multimedia Telegram już domyślnie dopuszczają zakres testów porównawczych RFC 2544.
- Nadpisania środowiskowe (tymczasowe):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Sprawdź odpowiedzi DNS:
Odniesienie konfiguracji
Główne odniesienie: Odniesienie konfiguracji - Telegram.High-signal Telegram fields
High-signal Telegram fields
- uruchamianie/uwierzytelnianie:
enabled,botToken,tokenFile,accounts.*(tokenFilemusi wskazywać zwykły plik; dowiązania symboliczne są odrzucane) - kontrola dostępu:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, najwyższego poziomubindings[](type: "acp") - domyślne tematy:
groups.<chatId>.topics."*"stosuje się do niedopasowanych tematów forum; dokładne identyfikatory tematów mają nad nim pierwszeństwo - zatwierdzenia wykonania:
execApprovals,accounts.*.execApprovals - polecenia/menu:
commands.native,commands.nativeSkills,customCommands - wątki/odpowiedzi:
replyToMode - strumieniowanie:
streaming(wersja podglądowa),streaming.preview.toolProgress,blockStreaming - formatowanie/dostarczanie:
textChunkLimit,chunkMode,richMessages,linkPreview,responsePrefix - multimedia/sieć:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - niestandardowy katalog główny API:
apiRoot(tylko katalog główny Bot API; nie dołączaj/bot<TOKEN>) - 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
channels.telegram.defaultAccount (albo dodaj channels.telegram.accounts.default), aby jawnie określić domyślne trasowanie. W przeciwnym razie OpenClaw wraca do pierwszego znormalizowanego identyfikatora konta, a openclaw doctor ostrzega. Nazwane konta dziedziczą channels.telegram.allowFrom / groupAllowFrom, ale nie wartości accounts.default.*.