Gotowe do produkcji dla wiadomości prywatnych botów i grup przez grammY. Long polling jest trybem domyślnym; tryb webhook jest opcjonalny.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Parowanie
Rozwiązywanie problemów z kanałami
Konfiguracja Gateway
Szybka konfiguracja
Utwórz token bota w BotFather
@BotFather).Uruchom /newbot, postępuj zgodnie z monitami i zapisz token.Skonfiguruj token i politykę wiadomości prywatnych
TELEGRAM_BOT_TOKEN=... (tylko konto domyślne).
Telegram nie używa openclaw channels login telegram; skonfiguruj token w konfiguracji/env, a następnie uruchom gateway.Dodaj bota do grupy
- identyfikator użytkownika Telegram, używany w
allowFrom/groupAllowFrom - identyfikator czatu grupowego Telegram, używany jako klucz w
channels.telegram.groups
openclaw logs --follow, bota do przekazywanych identyfikatorów albo Bot API getUpdates. Po zezwoleniu grupie /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.Ustawienia po stronie Telegram
Tryb prywatności i widoczność grup
Tryb prywatności i widoczność grup
- wyłącz tryb prywatności przez
/setprivacy, albo - ustaw bota jako administratora grupy.
Uprawnienia grupy
Uprawnienia grupy
Przydatne przełączniki BotFather
Przydatne przełączniki BotFather
/setjoingroups, aby zezwolić na dodawanie do grup lub go zabronić/setprivacydla zachowania widoczności w grupach
Kontrola dostępu i aktywacja
- Polityka wiadomości prywatnych
- Polityka grup i listy dozwolonych
- Zachowanie wzmianki
channels.telegram.dmPolicy kontroluje dostęp przez wiadomości bezpośrednie:pairing(domyślnie)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 ściśle ograniczonymi narzędziami; boty jednego właściciela powinny używać allowlist z numerycznymi identyfikatorami użytkowników.channels.telegram.allowFrom akceptuje 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 wiadomości prywatne i jest odrzucane przez walidację konfiguracji.
Konfiguracja pyta tylko o numeryczne identyfikatory użytkowników.
Jeśli po aktualizacji konfiguracja zawiera wpisy listy dozwolonych w formie @username, uruchom openclaw doctor --fix, aby je rozwiązać (w trybie best-effort; wymaga tokena bota Telegram).
Jeśli wcześniej używano plików listy dozwolonych z 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 wiadomości prywatnych nie oznacza „ten nadawca jest autoryzowany wszędzie”.
Parowanie przyznaje dostęp do wiadomości prywatnych. 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 grupowych nadal pochodzi z jawnych list dozwolonych w konfiguracji.
Jeśli chcesz, aby „mam jedną autoryzację i działają zarówno wiadomości prywatne, 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 wiadomość prywatną do swojego bota.
- Uruchom
openclaw logs --follow. - Odczytaj
from.id.
@userinfobot lub @getidsbot.Zachowanie w środowisku uruchomieniowym
- Telegram jest własnością procesu gateway.
- Routing jest deterministyczny: wiadomości przychodzące z Telegram otrzymują odpowiedź w Telegram (model nie wybiera kanałów).
- Wiadomości przychodzące są normalizowane do współdzielonej koperty kanału z metadanymi odpowiedzi, placeholderami mediów i utrwalonym kontekstem łańcucha odpowiedzi dla odpowiedzi Telegram zaobserwowanych przez gateway.
- Sesje grupowe są izolowane według identyfikatora grupy. Tematy forum dodają
:topic:<threadId>, aby utrzymać izolację tematów. - Wiadomości prywatne mogą przenosić
message_thread_id; OpenClaw zachowuje identyfikator wątku dla odpowiedzi, ale domyślnie utrzymuje wiadomości prywatne w płaskiej sesji. Skonfigurujchannels.telegram.dm.threadReplies: "inbound",channels.telegram.direct.<chatId>.threadReplies: "inbound",requireTopic: truealbo pasującą konfigurację tematu, gdy celowo chcesz izolować sesje tematów wiadomości prywatnych. - 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. - Long polling jest chroniony wewnątrz każdego procesu gateway, więc tylko jeden aktywny poller może używać tokena bota naraz. Jeśli nadal widzisz konflikty
getUpdates409, inny gateway OpenClaw, skrypt lub zewnętrzny poller prawdopodobnie używa tego samego tokena. - Restarty watchdoga long polling są domyślnie wyzwalane po 120 sekundach bez zakończonej żywotności
getUpdates. Zwiększchannels.telegram.pollingStallThresholdMstylko wtedy, gdy Twoje wdrożenie nadal notuje fałszywe restarty z powodu zatrzymania 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).
Referencja 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)progressutrzymuje jedną edytowalną wersję roboczą statusu dla postępu narzędzi, czyści ją po zakończeniu i wysyła końcową 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 aktywne jest strumieniowanie podglądu)streaming.preview.commandTextkontroluje szczegóły poleceń/wykonania w tych wierszach postępu narzędzi:raw(domyślnie, zachowuje opublikowane zachowanie) albostatus(tylko etykieta narzędzia)- starsze wartości
channels.telegram.streamModeoraz logiczne wartościstreamingsą wykrywane; uruchomopenclaw doctor --fix, aby zmigrować je dochannels.telegram.streaming.mode
v2026.4.22 i nowszych wersji. Aby zachować edytowany podgląd tekstu odpowiedzi, ale ukryć wiersze postępu narzędzi, ustaw:progress, gdy chcesz widzieć postęp narzędzi bez edytowania końcowej odpowiedzi w tej samej wiadomości. Umieść politykę tekstu poleceń pod streaming.progress:streaming.mode: "off" tylko wtedy, gdy chcesz dostarczanie wyłącznie końcowe: edycje podglądu Telegram są wyłączone, a ogólne komunikaty narzędzi/postępu są tłumione zamiast wysyłane jako samodzielne wiadomości statusu. Monity o zatwierdzenie, ładunki multimedialne i błędy nadal przechodzą przez normalne dostarczanie końcowe. Użyj streaming.preview.toolProgress: false, gdy chcesz zachować tylko edycje podglądu odpowiedzi, ukrywając wiersze statusu postępu narzędzi.replyToMode ma wartość "first", "all" albo "batched" i wiadomość przychodząca zawiera wybrany tekst cytatu, OpenClaw wysyła końcową odpowiedź przez natywną ścieżkę odpowiedzi z cytatem 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 wybranego tekstu cytatu nadal zachowują strumieniowanie podglądu. Ustaw replyToMode: "off", gdy widoczność postępu narzędzi ma większe znaczenie niż natywne odpowiedzi z cytatem, albo ustaw streaming.preview.toolProgress: false, aby zaakceptować ten kompromis.- krótkie podglądy DM/grupy/tematu: OpenClaw zachowuje tę samą wiadomość podglądu i wykonuje końcową edycję w miejscu
- długie końcowe teksty dzielone na wiele wiadomości Telegram ponownie używają istniejącego podglądu jako pierwszego końcowego fragmentu, gdy to możliwe, a następnie wysyłają tylko pozostałe fragmenty
- odpowiedzi końcowe w trybie postępu czyszczą wersję roboczą statusu i używają normalnego dostarczania końcowego zamiast edytować wersję roboczą w odpowiedź
- jeśli końcowa edycja nie powiedzie się, zanim ukończony tekst zostanie potwierdzony, OpenClaw używa normalnego dostarczania końcowego i czyści nieaktualny podgląd
/reasoning streamwysyła rozumowanie do podglądu na żywo podczas generowania- podgląd rozumowania jest usuwany po dostarczeniu końcowym; użyj
/reasoning on, gdy rozumowanie ma pozostać widoczne - końcowa odpowiedź jest wysyłana bez tekstu rozumowania
Formatowanie i awaryjny HTML
Formatowanie i awaryjny HTML
parse_mode: "HTML".- Tekst podobny do Markdown jest renderowany do HTML bezpiecznego dla Telegram.
- Obsługiwane tagi HTML Telegram są zachowywane; nieobsługiwany HTML jest escapowany.
- Jeśli Telegram odrzuci przetworzony HTML, OpenClaw ponawia próbę jako zwykły tekst.
channels.telegram.linkPreview: false.Natywne polecenia i polecenia niestandardowe
Natywne polecenia i polecenia niestandardowe
setMyCommands.Domyślne ustawienia poleceń natywnych: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ą zastępować poleceń natywnych
- konflikty/duplikaty są pomijane i logowane
- polecenia niestandardowe są wyłącznie wpisami menu; nie implementują automatycznie zachowania
- polecenia Plugin/skill 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/skill/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 punkt końcowy/bot<TOKEN>.apiRootmusi być tylko korzeniem Bot API, aopenclaw doctor --fixusuwa przypadkowy końcowy/bot<TOKEN>. getMe returned 401oznacza, że Telegram odrzucił skonfigurowany token bota. ZaktualizujbotToken,tokenFilealboTELEGRAM_BOT_TOKENbieżącym tokenem BotFather; OpenClaw zatrzymuje się przed odpytywaniem, więc nie jest to zgłaszane jako niepowodzenie czyszczenia Webhook.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 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 oraz operator.write. Kontrole zakresu bootstrap są prefiksowane rolą, więc ta allowlista operatora spełnia tylko żądania operatora; role niebędące operatorem nadal potrzebują zakresów pod własnym prefiksem roli.Jeśli urządzenie ponowi próbę ze zmienionymi szczegółami uwierzytelniania (na przykład rolą/zakresami/kluczem publicznym), poprzednie oczekujące żądanie zostanie zastąpione, a nowe żądanie użyje innego requestId. Uruchom ponownie /pair pending przed zatwierdzeniem.Więcej szczegółów: Parowanie.Przyciski inline
Przyciski inline
offdmgroupallallowlist(domyślnie)
capabilities: ["inlineButtons"] mapuje się 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
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).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ą oddzielnych przełączników channels.telegram.actions.*.
Wysyłki w czasie działania używają aktywnej migawki konfiguracji/sekretów (uruchomienie/przeładowanie), więc ścieżki akcji nie wykonują doraźnego ponownego rozwiązywania SecretRef dla każdej wysyłki.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ą honorowane.Tematy forum i zachowanie wątków
Tematy forum i zachowanie wątków
- klucze sesji tematu dodają
:topic:<threadId> - odpowiedzi i wskaźnik pisania celują w wątek tematu
- ścieżka konfiguracji tematu:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1) jako przypadek specjalny:- 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 jest wyłącznie tematyczny i nie dziedziczy z domyślnych ustawień 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 mechanizmu ACP za pomocą typowanych powiązań 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 są kierowane bezpośrednio tam. OpenClaw przypina potwierdzenie uruchomienia w temacie. Wymaga pozostawienia włączonego channels.telegram.threadBindings.spawnSessions (domyślnie: true).Kontekst szablonu udostępnia MessageThreadId i IsForum. Czaty DM z message_thread_id domyślnie zachowują trasowanie DM i metadane odpowiedzi w płaskich sesjach; używają kluczy sesji świadomych wątków tylko wtedy, gdy są skonfigurowane z threadReplies: "inbound", threadReplies: "always", requireTopic: true albo pasującą konfiguracją tematu. Użyj channels.telegram.dm.threadReplies dla domyślnego ustawienia konta albo direct.<chatId>.threadReplies dla jednego DM.Audio, video, and stickers
Audio, video, and stickers
Wiadomości audio
Telegram rozróżnia notatki głosowe i pliki audio.- domyślnie: zachowanie pliku audio
- znacznik
[[audio_as_voice]]w odpowiedzi agenta wymusza wysłanie 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 wymagające wzmianki 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:- statyczny WEBP: pobierany i przetwarzany (placeholder
<media:sticker>) - animowany TGS: pomijany
- wideo WEBM: pomijane
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
Reaction notifications
Reaction notifications
message_reaction (oddzielnie od ładunków wiadomości).Po włączeniu 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żytkowników na wiadomości wysłane przez bota (best effort za pomocą pamięci podręcznej wysłanych wiadomości).- Zdarzenia reakcji nadal respektują kontrole 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ą trasowane do sesji czatu grupowego
- grupy forumowe są trasowane do sesji ogólnego tematu grupy (
:topic:1), a nie do dokładnego tematu źródłowego
allowed_updates dla pollingu/Webhook automatycznie obejmuje message_reaction.Ack reactions
Ack reactions
ackReaction wysyła emoji potwierdzenia, gdy OpenClaw przetwarza wiadomość przychodzącą.Kolejność rozstrzygania:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- awaryjnie 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.
Config writes from Telegram events and commands
Config writes from Telegram events and commands
configWrites !== false).Zapisy wyzwalane przez Telegram obejmują:- zdarzenia migracji grup (
migrate_to_chat_id) aktualizującechannels.telegram.groups /config seti/config unset(wymaga włączenia polecenia)
Long polling vs webhook
Long polling vs webhook
channels.telegram.webhookUrl i channels.telegram.webhookSecret; opcjonalnie webhookPath, webhookHost, webhookPort (domyślnie /telegram-webhook, 127.0.0.1, 8787).W trybie long pollingu OpenClaw utrwala swój znacznik restartu dopiero po pomyślnym wysłaniu aktualizacji do obsługi. Jeśli handler się nie powiedzie, 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. Dla publicznego wejścia umieść reverse proxy przed lokalnym portem albo celowo ustaw webhookHost: "0.0.0.0".Tryb Webhook weryfikuje zabezpieczenia żądania, tajny token Telegram i treść JSON przed zwróceniem 200 do Telegram.
Następnie OpenClaw przetwarza aktualizację asynchronicznie przez te same pasma bota per czat/per temat, których używa long polling, więc wolne tury agenta nie blokują potwierdzenia dostarczenia Telegram.Limits, retry, and CLI targets
Limits, retry, and CLI targets
- 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 przychodzących i wychodzących multimediów 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 przychodzą późno; zmniejsz ją, aby skrócić opóźnienie odpowiedzi na album.channels.telegram.timeoutSecondsnadpisuje 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-sekundowej osłony żądań tekstu wychodzącego/wpisywania, aby grammY nie przerwał widocznego dostarczenia odpowiedzi, zanim zadziała osłona transportowa i mechanizm awaryjny OpenClaw. Long polling nadal używa 45-sekundowej osłony żądaniagetUpdates, aby bezczynne sondowania nie były porzucane bezterminowo.channels.telegram.pollingStallThresholdMsdomyślnie wynosi120000; dostrajaj w zakresie od30000do600000tylko przy fałszywie dodatnich restartach z powodu zastoju pollingu.- historia kontekstu grupy używa
channels.telegram.historyLimitalbomessages.groupChat.historyLimit(domyślnie 50);0wyłącza. - dodatkowy kontekst odpowiedzi/cytatu/przekazania jest normalizowany do jednego wybranego okna kontekstu rozmowy, gdy Gateway zaobserwował wiadomości nadrzędne; pamięć podręczna zaobserwowanych wiadomości jest utrwalana obok magazynu sesji. Telegram dołącza w aktualizacjach tylko jedno płytkie
reply_to_message, więc łańcuchy starsze niż pamięć podręczna są ograniczone do bieżącego ładunku aktualizacji Telegram. - listy dozwolonych Telegram przede wszystkim ograniczają, kto może wywołać agenta, a nie stanowią pełnej granicy redakcji dodatkowego kontekstu.
- kontrolki historii DM:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- konfiguracja
channels.telegram.retryma zastosowanie do helperów wysyłania Telegram (CLI/narzędzia/akcje) dla możliwych do odzyskania błędów wychodzącego API. Dostarczanie końcowych odpowiedzi przychodzących również używa ograniczonego ponowienia bezpiecznego wysyłania 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--pinalbo--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 przesyłanych filmów
channels.telegram.actions.sendMessage=falsewyłącza wychodzące wiadomości Telegram, w tym pollingichannels.telegram.actions.poll=falsewyłącza tworzenie pollingów Telegram, pozostawiając zwykłe wysyłanie włączone
Exec approvals in Telegram
Exec approvals in Telegram
channels.telegram.execApprovals.enabled(włącza się automatycznie, gdy można rozpoznać co najmniej jednego zatwierdzającego)channels.telegram.execApprovals.approvers(wraca do numerycznych ID 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 wykonanie. Pierwsze zatwierdzone sparowanie DM inicjuje commands.ownerAllowFrom, gdy nie istnieje jeszcze właściciel poleceń, więc konfiguracja z jednym właścicielem nadal działa bez duplikowania ID w execApprovals.approvers.Dostarczanie kanałowe pokazuje tekst polecenia na czacie; włączaj channel lub both tylko w zaufanych grupach/tematach. Gdy prompt trafia do tematu forum, OpenClaw zachowuje temat dla promptu zatwierdzenia i kolejnej wiadomości. Zatwierdzenia wykonania domyślnie wygasają po 30 minutach.Przyciski zatwierdzania inline również wymagają, aby channels.telegram.capabilities.inlineButtons dopuszczało docelową powierzchnię (dm, group albo all). Identyfikatory zatwierdzeń z prefiksem plugin: są rozpoznawane przez zatwierdzenia pluginów; pozostałe są najpierw rozpoznawane przez zatwierdzenia wykonania.Zobacz Zatwierdzenia wykonania.Kontrolki odpowiedzi o błędach
Gdy agent napotka błąd dostarczania lub błąd 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 przyjazny komunikat o błędzie do czatu. silent całkowicie wycisza odpowiedzi o błędach. |
channels.telegram.errorCooldownMs | liczba (ms) | 60000 | Minimalny czas między odpowiedziami o błędach do tego samego czatu. Zapobiega spamowi błędami podczas awarii. |
Rozwiązywanie problemów
Bot does not respond to non mention group messages
Bot does not respond to non mention group messages
- Jeśli
requireMention=false, tryb prywatności Telegram musi zezwalać na pełną widoczność.- BotFather:
/setprivacy-> Wyłącz - następnie usuń bota z grupy i dodaj go ponownie
- 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 zostać sprawdzony pod kątem członkostwa.- szybki test sesji:
/activation always.
Bot not seeing group messages at all
Bot not seeing group messages at all
- gdy istnieje
channels.telegram.groups, grupa musi być wymieniona (albo zawierać"*") - zweryfikuj członkostwo bota w grupie
- przejrzyj logi:
openclaw logs --follow, aby znaleźć przyczyny pominięcia
Commands work partially or not at all
Commands work partially or not at all
- autoryzuj swoją tożsamość nadawcy (parowanie i/lub numeryczne
allowFrom) - autoryzacja poleceń nadal obowiązuje nawet wtedy, gdy polityka grupy to
open setMyCommands failedzBOT_COMMANDS_TOO_MUCHoznacza, że natywne menu ma zbyt wiele pozycji; ogranicz polecenia plugin/skill/niestandardowe albo wyłącz natywne menu- wywołania startowe
deleteMyCommands/setMyCommandsoraz wywołania pisaniasendChatActionsą ograniczone czasowo i ponawiane raz przez zapasowy transport Telegram przy przekroczeniu limitu czasu żądania. Trwałe błędy sieciowe/fetch zwykle wskazują na problemy z dostępnością DNS/HTTPS doapi.telegram.org
Startup reports unauthorized token
Startup reports unauthorized token
Polling or network instability
Polling or network instability
- Node 22+ i niestandardowy fetch/proxy mogą wywołać natychmiastowe przerwanie, jeśli typy AbortSignal się nie zgadzają.
- Niektóre hosty najpierw rozwiązują
api.telegram.orgdo IPv6; uszkodzony ruch wychodzący IPv6 może powodować przerywane awarie API Telegram. - Jeśli logi zawierają
TypeError: fetch failedalboNetwork request for 'getUpdates' failed!, OpenClaw ponawia je teraz jako możliwe do odzyskania błędy sieciowe. - Podczas uruchamiania odpytywania OpenClaw ponownie używa udanego startowego sprawdzenia
getMedla grammY, aby runner nie potrzebował drugiegogetMeprzed pierwszymgetUpdates. - Jeśli
deleteWebhookzakończy się przejściowym błędem sieciowym podczas uruchamiania odpytywania, OpenClaw przechodzi do długiego odpytywania zamiast wykonywać kolejne przedodpytywające wywołanie control-plane. Nadal aktywny webhook ujawnia się jako konfliktgetUpdates; OpenClaw przebudowuje wtedy transport Telegram i ponawia czyszczenie webhooka. - Jeśli gniazda Telegram są odtwarzane w krótkim stałym cyklu, sprawdź, czy
channels.telegram.timeoutSecondsnie jest niskie; 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 to poniżej tych zabezpieczeń. - Jeśli logi zawierają
Polling stall detected, OpenClaw domyślnie restartuje odpytywanie i przebudowuje transport Telegram po 120 sekundach bez zakończonej żywotności długiego odpytywania. openclaw channels status --probeiopenclaw doctorostrzegają, gdy działające konto odpytywania nie zakończyłogetUpdatespo okresie rozruchowym, gdy działające konto webhooka nie zakończyłosetWebhookpo okresie rozruchowym albo gdy ostatnia udana aktywność transportu odpytywania jest przestarzała.- Zwiększ
channels.telegram.pollingStallThresholdMstylko wtedy, gdy długotrwałe wywołaniagetUpdatessą zdrowe, ale host nadal zgłasza fałszywe restarty z powodu zastoju odpytywania. Trwałe zastoje zwykle wskazują na problemy z proxy, DNS, IPv6 albo ruchem 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_PROXYoraz ich warianty pisane małymi literami.NO_PROXY/no_proxynadal mogą omijaćapi.telegram.org. - Jeśli zarządzane proxy OpenClaw jest skonfigurowane przez
OPENCLAW_PROXY_URLdla środowiska usługi i nie ma standardowej zmiennej środowiskowej proxy, Telegram używa tego URL również dla transportu Bot API. - Na hostach VPS z niestabilnym bezpośrednim ruchem wychodzącym/TLS kieruj wywołania API Telegram przez
channels.telegram.proxy:
- Node 22+ domyślnie ustawia
autoSelectFamily=true(z wyjątkiem WSL2). Kolejność wyników DNS Telegram honorujeOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, następniechannels.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 wyraźnie działa lepiej z zachowaniem tylko IPv4, wymuś wybór rodziny:
- Odpowiedzi z zakresu benchmarkowego RFC 2544 (
198.18.0.0/15) są już domyślnie dozwolone dla pobierania multimediów Telegram. Jeśli zaufane fake-IP albo transparentne proxy przepisujeapi.telegram.orgna inny adres prywatny/wewnętrzny/specjalnego użycia podczas pobierania multimediów, możesz włączyć obejście tylko dla Telegram:
- To samo włączenie jest dostępne dla każdego konta pod
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Jeśli Twoje 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 benchmarkowy RFC 2544.
- Nadpisania środowiskowe (tymczasowe):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Zweryfikuj 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; 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,dm.threadReplies,direct.*.threadReplies - strumieniowanie:
streaming(podgląd),streaming.preview.toolProgress,blockStreaming - formatowanie/dostarczanie:
textChunkLimit,chunkMode,linkPreview,responsePrefix - media/sieć:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - niestandardowy główny API:
apiRoot(tylko główny Bot API; nie dodawaj/bot<TOKEN>) - webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - działania/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 uwzględnij 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.*.