Chuyển đến nội dung chính

Telegram (Bot API)

Trạng thái: sẵn sàng cho sản xuất với tin nhắn trực tiếp (DM) và nhóm qua grammY. Chế độ long polling là mặc định; chế độ webhook là tùy chọn.

Ghép nối

Chính sách DM mặc định cho Telegram là ghép nối.

Khắc phục sự cố kênh

Chẩn đoán và hướng dẫn sửa chữa đa kênh.

Cấu hình Gateway

Mẫu cấu hình kênh đầy đủ và ví dụ.

Thiết lập nhanh

1

Tạo token bot trong BotFather

Mở Telegram và trò chuyện với @BotFather (xác nhận tên chính xác là @BotFather).Chạy lệnh /newbot, làm theo hướng dẫn và lưu token.
2

Cấu hình token và chính sách DM

{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123:abc",
      dmPolicy: "pairing",
      groups: { "*": { requireMention: true } },
    },
  },
}
Dự phòng môi trường: TELEGRAM_BOT_TOKEN=... (chỉ tài khoản mặc định). Telegram không sử dụng openclaw channels login telegram; cấu hình token trong config/env, sau đó khởi động gateway.
3

Khởi động gateway và phê duyệt DM đầu tiên

openclaw gateway
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
Mã ghép nối hết hạn sau 1 giờ.
4

Thêm bot vào nhóm

Thêm bot vào nhóm của bạn, sau đó thiết lập channels.telegram.groupsgroupPolicy để phù hợp với mô hình truy cập của bạn.
Thứ tự giải quyết token có nhận thức về tài khoản. Trong thực tế, giá trị cấu hình sẽ ưu tiên hơn dự phòng môi trường, và TELEGRAM_BOT_TOKEN chỉ áp dụng cho tài khoản mặc định.

Cài đặt phía Telegram

Bot Telegram mặc định ở Chế độ Riêng tư, giới hạn các tin nhắn nhóm mà chúng nhận được.Nếu bot cần thấy tất cả tin nhắn nhóm, bạn có thể:
  • tắt chế độ riêng tư qua /setprivacy, hoặc
  • làm cho bot trở thành quản trị viên nhóm.
Khi thay đổi chế độ riêng tư, hãy xóa và thêm lại bot vào từng nhóm để Telegram áp dụng thay đổi.
Trạng thái quản trị viên được kiểm soát trong cài đặt nhóm Telegram.Bot quản trị viên nhận được tất cả tin nhắn nhóm, hữu ích cho hành vi nhóm luôn bật.
  • /setjoingroups để cho phép/từ chối thêm vào nhóm
  • /setprivacy cho hành vi hiển thị nhóm

Kiểm soát truy cập và kích hoạt

channels.telegram.dmPolicy kiểm soát truy cập tin nhắn trực tiếp:
  • pairing (mặc định)
  • allowlist (yêu cầu ít nhất một ID người gửi trong allowFrom)
  • open (yêu cầu allowFrom bao gồm "*")
  • disabled
channels.telegram.allowFrom chấp nhận ID người dùng Telegram dạng số. Tiền tố telegram: / tg: được chấp nhận và chuẩn hóa. dmPolicy: "allowlist" với allowFrom trống sẽ chặn tất cả DM và bị từ chối bởi xác thực cấu hình. Quá trình onboarding chấp nhận đầu vào @username và chuyển đổi nó thành ID số. Nếu bạn đã nâng cấp và cấu hình của bạn chứa các mục allowlist @username, hãy chạy openclaw doctor --fix để chuyển đổi chúng (nỗ lực tốt nhất; yêu cầu token bot Telegram). Nếu trước đây bạn dựa vào các tệp allowlist trong pairing-store, openclaw doctor --fix có thể khôi phục các mục vào channels.telegram.allowFrom trong các luồng allowlist (ví dụ khi dmPolicy: "allowlist" chưa có ID rõ ràng).Đối với bot chỉ có một chủ sở hữu, nên sử dụng dmPolicy: "allowlist" với các ID allowFrom dạng số rõ ràng để giữ chính sách truy cập bền vững trong cấu hình (thay vì phụ thuộc vào các phê duyệt ghép nối trước đó).

Tìm ID người dùng Telegram của bạn

An toàn hơn (không cần bot bên thứ ba):
  1. DM bot của bạn.
  2. Chạy openclaw logs --follow.
  3. Đọc from.id.
Phương pháp API Bot chính thức:
curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Phương pháp bên thứ ba (ít riêng tư hơn): @userinfobot hoặc @getidsbot.

Hành vi khi chạy

  • Telegram được sở hữu bởi quá trình gateway.
  • Định tuyến là xác định: Telegram nhận tin nhắn trả lời lại Telegram (mô hình không chọn kênh).
  • Tin nhắn đến được chuẩn hóa thành phong bì kênh chia sẻ với siêu dữ liệu trả lời và chỗ giữ chỗ phương tiện.
  • Phiên nhóm được cách ly theo ID nhóm. Các chủ đề diễn đàn thêm :topic:<threadId> để giữ các chủ đề cách ly.
  • Tin nhắn DM có thể mang message_thread_id; OpenClaw định tuyến chúng với khóa phiên nhận thức chủ đề và bảo toàn ID chủ đề cho các câu trả lời.
  • Long polling sử dụng grammY runner với trình tự theo chat/chủ đề. Tổng thể runner sink concurrency sử dụng agents.defaults.maxConcurrent.
  • Telegram Bot API không hỗ trợ xác nhận đã đọc (sendReadReceipts không áp dụng).

Tham khảo tính năng

OpenClaw có thể phát trực tiếp các câu trả lời một phần theo thời gian thực:
  • trò chuyện trực tiếp: xem trước tin nhắn + editMessageText
  • nhóm/chủ đề: xem trước tin nhắn + editMessageText
Yêu cầu:
  • channels.telegram.streamingoff | partial | block | progress (mặc định: partial)
  • progress ánh xạ tới partial trên Telegram (tương thích với tên gọi đa kênh)
  • channels.telegram.streamMode cũ và các giá trị boolean streaming được ánh xạ tự động
Đối với các câu trả lời chỉ có văn bản:
  • DM: OpenClaw giữ cùng một tin nhắn xem trước và thực hiện chỉnh sửa cuối cùng tại chỗ (không có tin nhắn thứ hai)
  • nhóm/chủ đề: OpenClaw giữ cùng một tin nhắn xem trước và thực hiện chỉnh sửa cuối cùng tại chỗ (không có tin nhắn thứ hai)
Đối với các câu trả lời phức tạp (ví dụ như tải trọng phương tiện), OpenClaw quay lại việc giao hàng cuối cùng bình thường và sau đó dọn dẹp tin nhắn xem trước.Phát trực tiếp xem trước tách biệt với phát trực tiếp khối. Khi phát trực tiếp khối được bật rõ ràng cho Telegram, OpenClaw bỏ qua phát trực tiếp xem trước để tránh phát trực tiếp kép.Nếu vận chuyển bản nháp gốc không khả dụng/bị từ chối, OpenClaw tự động quay lại sendMessage + editMessageText.Luồng lý luận chỉ dành cho Telegram:
  • /reasoning stream gửi lý luận đến bản xem trước trực tiếp trong khi tạo
  • câu trả lời cuối cùng được gửi mà không có văn bản lý luận
Văn bản gửi đi sử dụng parse_mode: "HTML" của Telegram.
  • Văn bản giống Markdown được hiển thị thành HTML an toàn với Telegram.
  • HTML thô của mô hình được thoát để giảm lỗi phân tích cú pháp của Telegram.
  • Nếu Telegram từ chối HTML đã phân tích, OpenClaw thử lại dưới dạng văn bản thuần túy.
Xem trước liên kết được bật theo mặc định và có thể bị tắt với channels.telegram.linkPreview: false.
Đăng ký menu lệnh Telegram được xử lý khi khởi động với setMyCommands.Mặc định lệnh gốc:
  • commands.native: "auto" bật lệnh gốc cho Telegram
Thêm mục menu lệnh tùy chỉnh:
{
  channels: {
    telegram: {
      customCommands: [
        { command: "backup", description: "Git backup" },
        { command: "generate", description: "Tạo một hình ảnh" },
      ],
    },
  },
}
Quy tắc:
  • tên được chuẩn hóa (bỏ dấu / đầu, viết thường)
  • mẫu hợp lệ: a-z, 0-9, _, độ dài 1..32
  • lệnh tùy chỉnh không thể ghi đè lệnh gốc
  • xung đột/trùng lặp bị bỏ qua và ghi lại
Ghi chú:
  • lệnh tùy chỉnh chỉ là mục menu; chúng không tự động thực hiện hành vi
  • lệnh plugin/kỹ năng vẫn có thể hoạt động khi được nhập ngay cả khi không hiển thị trong menu Telegram
Nếu lệnh gốc bị tắt, các lệnh tích hợp sẵn sẽ bị xóa. Lệnh tùy chỉnh/plugin vẫn có thể đăng ký nếu được cấu hình.Các lỗi thiết lập phổ biến:
  • setMyCommands failed với BOT_COMMANDS_TOO_MUCH có nghĩa là menu Telegram vẫn tràn sau khi cắt bớt; giảm lệnh plugin/kỹ năng/tùy chỉnh hoặc tắt menu gốc
  • setMyCommands failed với lỗi mạng/lấy thường có nghĩa là DNS/HTTPS ra ngoài tới api.telegram.org bị chặn.

Lệnh ghép nối thiết bị (plugin device-pair)

Khi plugin device-pair được cài đặt:
  1. /pair tạo mã thiết lập
  2. dán mã vào ứng dụng iOS
  3. /pair pending liệt kê các yêu cầu đang chờ xử lý (bao gồm vai trò/phạm vi)
  4. phê duyệt yêu cầu:
    • /pair approve <requestId> để phê duyệt rõ ràng
    • /pair approve khi chỉ có một yêu cầu đang chờ xử lý
    • /pair approve latest cho yêu cầu gần nhất
Nếu một thiết bị thử lại với chi tiết xác thực đã thay đổi (ví dụ vai trò/phạm vi/khóa công khai), yêu cầu đang chờ xử lý trước đó sẽ bị thay thế và yêu cầu mới sử dụng một requestId khác. Chạy lại /pair pending trước khi phê duyệt.Thêm chi tiết: Ghép nối.
Cấu hình phạm vi bàn phím nội tuyến:
{
  channels: {
    telegram: {
      capabilities: {
        inlineButtons: "allowlist",
      },
    },
  },
}
Ghi đè theo tài khoản:
{
  channels: {
    telegram: {
      accounts: {
        main: {
          capabilities: {
            inlineButtons: "allowlist",
          },
        },
      },
    },
  },
}
Phạm vi:
  • off
  • dm
  • group
  • all
  • allowlist (mặc định)
capabilities: ["inlineButtons"] cũ ánh xạ tới inlineButtons: "all".Ví dụ hành động tin nhắn:
{
  action: "send",
  channel: "telegram",
  to: "123456789",
  message: "Chọn một tùy chọn:",
  buttons: [
    [
      { text: "Có", callback_data: "yes" },
      { text: "Không", callback_data: "no" },
    ],
    [{ text: "Hủy", callback_data: "cancel" }],
  ],
}
Các lần nhấp callback được chuyển đến agent dưới dạng văn bản: callback_data: <value>
Các hành động công cụ Telegram bao gồm:
  • sendMessage (to, content, tùy chọn mediaUrl, replyToMessageId, messageThreadId)
  • react (chatId, messageId, emoji)
  • deleteMessage (chatId, messageId)
  • editMessage (chatId, messageId, content)
  • createForumTopic (chatId, name, tùy chọn iconColor, iconCustomEmojiId)
Các hành động tin nhắn kênh cung cấp các bí danh tiện dụng (send, react, delete, edit, sticker, sticker-search, topic-create).Kiểm soát cổng:
  • channels.telegram.actions.sendMessage
  • channels.telegram.actions.deleteMessage
  • channels.telegram.actions.reactions
  • channels.telegram.actions.sticker (mặc định: tắt)
Lưu ý: edittopic-create hiện được bật theo mặc định và không có các chuyển đổi channels.telegram.actions.* riêng biệt. Các lần gửi khi chạy sử dụng ảnh chụp nhanh cấu hình/bí mật đang hoạt động (khởi động/tải lại), vì vậy các đường dẫn hành động không thực hiện giải quyết lại SecretRef theo từng lần gửi.Ngữ nghĩa loại bỏ phản ứng: /tools/reactions
Telegram hỗ trợ các thẻ luồng trả lời rõ ràng trong đầu ra được tạo:
  • [[reply_to_current]] trả lời tin nhắn kích hoạt
  • [[reply_to:<id>]] trả lời một ID tin nhắn Telegram cụ thể
channels.telegram.replyToMode kiểm soát xử lý:
  • off (mặc định)
  • first
  • all
Lưu ý: off vô hiệu hóa luồng trả lời ngầm định. Các thẻ [[reply_to_*]] rõ ràng vẫn được tôn trọng.
Siêu nhóm diễn đàn:
  • khóa phiên chủ đề thêm :topic:<threadId>
  • trả lời và gõ nhắm vào chủ đề
  • đường dẫn cấu hình chủ đề: channels.telegram.groups.<chatId>.topics.<threadId>
Trường hợp đặc biệt chủ đề chung (threadId=1):
  • gửi tin nhắn bỏ qua message_thread_id (Telegram từ chối sendMessage(...thread_id=1))
  • hành động gõ vẫn bao gồm message_thread_id
Thừa kế chủ đề: các mục chủ đề thừa kế cài đặt nhóm trừ khi bị ghi đè (requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy). agentId chỉ dành cho chủ đề và không thừa kế từ mặc định nhóm.Định tuyến agent theo chủ đề: Mỗi chủ đề có thể định tuyến đến một agent khác nhau bằng cách thiết lập agentId trong cấu hình chủ đề. Điều này cho phép mỗi chủ đề có không gian làm việc, bộ nhớ và phiên riêng biệt. Ví dụ:
{
  channels: {
    telegram: {
      groups: {
        "-1001234567890": {
          topics: {
            "1": { agentId: "main" },      // Chủ đề chung → agent chính
            "3": { agentId: "zu" },        // Chủ đề phát triển → agent zu
            "5": { agentId: "coder" }      // Đánh giá mã → agent coder
          }
        }
      }
    }
  }
}
Mỗi chủ đề sau đó có khóa phiên riêng: agent:zu:telegram:group:-1001234567890:topic:3Liên kết chủ đề ACP bền vững: Các chủ đề diễn đàn có thể ghim các phiên harness ACP thông qua các liên kết ACP kiểu cấp cao nhất:
  • bindings[] với type: "acp"match.channel: "telegram"
Ví dụ:
{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
      },
    ],
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "telegram",
        accountId: "default",
        peer: { kind: "group", id: "-1001234567890:topic:42" },
      },
    },
  ],
  channels: {
    telegram: {
      groups: {
        "-1001234567890": {
          topics: {
            "42": {
              requireMention: false,
            },
          },
        },
      },
    },
  },
}
Điều này hiện được giới hạn cho các chủ đề diễn đàn trong các nhóm và siêu nhóm.Khởi tạo ACP theo chủ đề từ chat:
  • /acp spawn <agent> --thread here|auto có thể liên kết chủ đề Telegram hiện tại với một phiên ACP mới.
  • Các tin nhắn chủ đề tiếp theo định tuyến trực tiếp đến phiên ACP đã liên kết (không cần /acp steer).
  • OpenClaw ghim tin nhắn xác nhận khởi tạo trong chủ đề sau khi liên kết thành công.
  • Yêu cầu channels.telegram.threadBindings.spawnAcpSessions=true.
Ngữ cảnh mẫu bao gồm:
  • MessageThreadId
  • IsForum
Hành vi luồng DM:
  • các cuộc trò chuyện riêng với message_thread_id giữ định tuyến DM nhưng sử dụng khóa phiên nhận thức chủ đề/mục tiêu trả lời.

Tin nhắn âm thanh

Telegram phân biệt giữa ghi chú giọng nói và tệp âm thanh.
  • mặc định: hành vi tệp âm thanh
  • thẻ [[audio_as_voice]] trong câu trả lời agent để buộc gửi ghi chú giọng nói
Ví dụ hành động tin nhắn:
{
  action: "send",
  channel: "telegram",
  to: "123456789",
  media: "https://example.com/voice.ogg",
  asVoice: true,
}

Tin nhắn video

Telegram phân biệt giữa tệp video và ghi chú video.Ví dụ hành động tin nhắn:
{
  action: "send",
  channel: "telegram",
  to: "123456789",
  media: "https://example.com/video.mp4",
  asVideoNote: true,
}
Ghi chú video không hỗ trợ chú thích; văn bản tin nhắn được cung cấp được gửi riêng.

Nhãn dán

Xử lý nhãn dán đến:
  • WEBP tĩnh: tải xuống và xử lý (chỗ giữ chỗ <media:sticker>)
  • TGS động: bỏ qua
  • WEBM video: bỏ qua
Trường ngữ cảnh nhãn dán:
  • Sticker.emoji
  • Sticker.setName
  • Sticker.fileId
  • Sticker.fileUniqueId
  • Sticker.cachedDescription
Tệp bộ nhớ cache nhãn dán:
  • ~/.openclaw/telegram/sticker-cache.json
Nhãn dán được mô tả một lần (khi có thể) và được lưu vào bộ nhớ cache để giảm các cuộc gọi tầm nhìn lặp lại.Bật hành động nhãn dán:
{
  channels: {
    telegram: {
      actions: {
        sticker: true,
      },
    },
  },
}
Hành động gửi nhãn dán:
{
  action: "sticker",
  channel: "telegram",
  to: "123456789",
  fileId: "CAACAgIAAxkBAAI...",
}
Tìm kiếm nhãn dán đã lưu vào bộ nhớ cache:
{
  action: "sticker-search",
  channel: "telegram",
  query: "cat waving",
  limit: 5,
}
Phản ứng Telegram đến dưới dạng cập nhật message_reaction (tách biệt với tải trọng tin nhắn).Khi được bật, OpenClaw xếp hàng các sự kiện hệ thống như:
  • Telegram reaction added: 👍 by Alice (@alice) on msg 42
Cấu hình:
  • channels.telegram.reactionNotifications: off | own | all (mặc định: own)
  • channels.telegram.reactionLevel: off | ack | minimal | extensive (mặc định: minimal)
Ghi chú:
  • own có nghĩa là phản ứng của người dùng đối với các tin nhắn do bot gửi chỉ (nỗ lực tốt nhất qua bộ nhớ cache tin nhắn đã gửi).
  • Các sự kiện phản ứng vẫn tôn trọng các kiểm soát truy cập Telegram (dmPolicy, allowFrom, groupPolicy, groupAllowFrom); người gửi không được phép bị loại bỏ.
  • Telegram không cung cấp ID chủ đề trong các cập nhật phản ứng.
    • các nhóm không phải diễn đàn định tuyến đến phiên trò chuyện nhóm
    • các nhóm diễn đàn định tuyến đến phiên chủ đề chung của nhóm (:topic:1), không phải chủ đề gốc chính xác
allowed_updates cho polling/webhook tự động bao gồm message_reaction.
ackReaction gửi một emoji xác nhận trong khi OpenClaw đang xử lý một tin nhắn đến.Thứ tự giải quyết:
  • channels.telegram.accounts.<accountId>.ackReaction
  • channels.telegram.ackReaction
  • messages.ackReaction
  • emoji nhận dạng agent dự phòng (agents.list[].identity.emoji, nếu không có thì ”👀”)
Ghi chú:
  • Telegram mong đợi emoji unicode (ví dụ ”👀”).
  • Sử dụng "" để tắt phản ứng cho một kênh hoặc tài khoản.
Ghi cấu hình kênh được bật theo mặc định (configWrites !== false).Các ghi được kích hoạt bởi Telegram bao gồm:
  • sự kiện di chuyển nhóm (migrate_to_chat_id) để cập nhật channels.telegram.groups
  • /config set/config unset (yêu cầu bật lệnh)
Tắt:
{
  channels: {
    telegram: {
      configWrites: false,
    },
  },
}
Mặc định: long polling.Chế độ webhook:
  • thiết lập channels.telegram.webhookUrl
  • thiết lập channels.telegram.webhookSecret (bắt buộc khi URL webhook được thiết lập)
  • tùy chọn channels.telegram.webhookPath (mặc định /telegram-webhook)
  • tùy chọn channels.telegram.webhookHost (mặc định 127.0.0.1)
  • tùy chọn channels.telegram.webhookPort (mặc định 8787)
Trình nghe cục bộ mặc định cho chế độ webhook liên kết với 127.0.0.1:8787.Nếu điểm cuối công khai của bạn khác, hãy đặt một proxy ngược phía trước và trỏ webhookUrl đến URL công khai. Thiết lập webhookHost (ví dụ 0.0.0.0) khi bạn cố ý cần ingress bên ngoài.
  • channels.telegram.textChunkLimit mặc định là 4000.
  • channels.telegram.chunkMode="newline" ưu tiên ranh giới đoạn văn (dòng trống) trước khi chia độ dài.
  • channels.telegram.mediaMaxMb (mặc định 100) giới hạn kích thước phương tiện Telegram đến và đi.
  • channels.telegram.timeoutSeconds ghi đè thời gian chờ của khách hàng API Telegram (nếu không được đặt, áp dụng mặc định của grammY).
  • lịch sử ngữ cảnh nhóm sử dụng channels.telegram.historyLimit hoặc messages.groupChat.historyLimit (mặc định 50); 0 vô hiệu hóa.
  • Kiểm soát lịch sử DM:
    • channels.telegram.dmHistoryLimit
    • channels.telegram.dms["<user_id>"].historyLimit
  • cấu hình channels.telegram.retry áp dụng cho các trợ giúp gửi Telegram (CLI/công cụ/hành động) cho các lỗi API gửi đi có thể khôi phục.
Mục tiêu gửi CLI có thể là ID chat dạng số hoặc tên người dùng:
openclaw message send --channel telegram --target 123456789 --message "hi"
openclaw message send --channel telegram --target @name --message "hi"
Các cuộc thăm dò Telegram sử dụng openclaw message poll và hỗ trợ các chủ đề diễn đàn:
openclaw message poll --channel telegram --target 123456789 \
  --poll-question "Ship it?" --poll-option "Yes" --poll-option "No"
openclaw message poll --channel telegram --target -1001234567890:topic:42 \
  --poll-question "Pick a time" --poll-option "10am" --poll-option "2pm" \
  --poll-duration-seconds 300 --poll-public
Các cờ thăm dò chỉ dành cho Telegram:
  • --poll-duration-seconds (5-600)
  • --poll-anonymous
  • --poll-public
  • --thread-id cho các chủ đề diễn đàn (hoặc sử dụng mục tiêu :topic:)
Gửi Telegram cũng hỗ trợ:
  • --buttons cho bàn phím nội tuyến khi channels.telegram.capabilities.inlineButtons cho phép
  • --force-document để gửi hình ảnh và GIF gửi đi dưới dạng tài liệu thay vì tải lên ảnh hoặc phương tiện động nén
Kiểm soát hành động:
  • channels.telegram.actions.sendMessage=false vô hiệu hóa các tin nhắn Telegram gửi đi, bao gồm cả các cuộc thăm dò
  • channels.telegram.actions.poll=false vô hiệu hóa việc tạo cuộc thăm dò Telegram trong khi vẫn để lại các lần gửi thông thường được bật
Telegram hỗ trợ phê duyệt thực thi trong DM của người phê duyệt và có thể tùy chọn đăng lời nhắc phê duyệt trong chat hoặc chủ đề gốc.Đường dẫn cấu hình:
  • channels.telegram.execApprovals.enabled
  • channels.telegram.execApprovals.approvers
  • channels.telegram.execApprovals.target (dm | channel | both, mặc định: dm)
  • agentFilter, sessionFilter
Người phê duyệt phải là ID người dùng Telegram dạng số. Khi enabled là false hoặc approvers trống, Telegram không hoạt động như một khách hàng phê duyệt thực thi. Các yêu cầu phê duyệt quay lại các tuyến phê duyệt cấu hình khác hoặc chính sách dự phòng phê duyệt thực thi.Quy tắc giao hàng:
  • target: "dm" chỉ gửi lời nhắc phê duyệt đến DM của người phê duyệt được cấu hình
  • target: "channel" gửi lời nhắc trở lại chat/chủ đề Telegram gốc
  • target: "both" gửi đến DM của người phê duyệt và chat/chủ đề gốc
Chỉ những người phê duyệt được cấu hình mới có thể phê duyệt hoặc từ chối. Những người không phải người phê duyệt không thể sử dụng /approve và không thể sử dụng các nút phê duyệt Telegram.Giao hàng kênh hiển thị văn bản lệnh trong chat, vì vậy chỉ bật channel hoặc both trong các nhóm/chủ đề đáng tin cậy. Khi lời nhắc hạ cánh trong một chủ đề diễn đàn, OpenClaw bảo toàn chủ đề cho cả lời nhắc phê duyệt và theo dõi sau phê duyệt.Các nút phê duyệt nội tuyến cũng phụ thuộc vào channels.telegram.capabilities.inlineButtons cho phép bề mặt mục tiêu (dm, group, hoặc all).Tài liệu liên quan: Phê duyệt thực thi

Khắc phục sự cố

  • Nếu requireMention=false, chế độ riêng tư của Telegram phải cho phép khả năng hiển thị đầy đủ.
    • BotFather: /setprivacy -> Tắt
    • sau đó xóa và thêm lại bot vào nhóm
  • openclaw channels status cảnh báo khi cấu hình mong đợi tin nhắn nhóm không nhắc đến.
  • openclaw channels status --probe có thể kiểm tra ID nhóm dạng số rõ ràng; ký tự đại diện "*" không thể được kiểm tra thành viên.
  • kiểm tra phiên nhanh: /activation always.
  • khi channels.telegram.groups tồn tại, nhóm phải được liệt kê (hoặc bao gồm "*")
  • xác minh thành viên bot trong nhóm
  • xem lại nhật ký: openclaw logs --follow để biết lý do bỏ qua
  • ủy quyền danh tính người gửi của bạn (ghép nối và/hoặc allowFrom dạng số)
  • ủy quyền lệnh vẫn áp dụng ngay cả khi chính sách nhóm là open
  • setMyCommands failed với BOT_COMMANDS_TOO_MUCH có nghĩa là menu gốc có quá nhiều mục; giảm lệnh plugin/kỹ năng/tùy chỉnh hoặc tắt menu gốc
  • setMyCommands failed với lỗi mạng/lấy thường chỉ ra các vấn đề về khả năng truy cập DNS/HTTPS tới api.telegram.org
  • Node 22+ + fetch/proxy tùy chỉnh có thể kích hoạt hành vi hủy bỏ ngay lập tức nếu các loại AbortSignal không khớp.
  • Một số máy chủ giải quyết api.telegram.org thành IPv6 trước; egress IPv6 bị hỏng có thể gây ra lỗi API Telegram không liên tục.
  • Nếu nhật ký bao gồm TypeError: fetch failed hoặc Network request for 'getUpdates' failed!, OpenClaw hiện thử lại những lỗi này như các lỗi mạng có thể khôi phục.
  • Trên các máy chủ VPS với egress/TLS trực tiếp không ổn định, định tuyến các cuộc gọi API Telegram qua channels.telegram.proxy:
channels:
  telegram:
    proxy: socks5://<user>:<password>@proxy-host:1080
  • Node 22+ mặc định là autoSelectFamily=true (trừ WSL2) và dnsResultOrder=ipv4first.
  • Nếu máy chủ của bạn là WSL2 hoặc hoạt động tốt hơn rõ ràng với hành vi chỉ IPv4, buộc chọn họ:
channels:
  telegram:
    network:
      autoSelectFamily: false
  • Ghi đè môi trường (tạm thời):
    • OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1
    • OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1
    • OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
  • Xác thực câu trả lời DNS:
dig +short api.telegram.org A
dig +short api.telegram.org AAAA
Thêm trợ giúp: Khắc phục sự cố kênh.

Tham khảo cấu hình Telegram

Tham khảo chính:
  • channels.telegram.enabled: bật/tắt khởi động kênh.
  • channels.telegram.botToken: token bot (BotFather).
  • channels.telegram.tokenFile: đọc token từ đường dẫn tệp thông thường. Symlink bị từ chối.
  • channels.telegram.dmPolicy: pairing | allowlist | open | disabled (mặc định: pairing).
  • channels.telegram.allowFrom: danh sách cho phép DM (ID người dùng Telegram dạng số). allowlist yêu cầu ít nhất một ID người gửi. open yêu cầu "*". openclaw doctor --fix có thể chuyển đổi các mục @username cũ thành ID và có thể khôi phục các mục danh sách cho phép từ các tệp pairing-store trong các luồng di chuyển danh sách cho phép.
  • channels.telegram.actions.poll: bật hoặc tắt việc tạo cuộc thăm dò Telegram (mặc định: bật; vẫn yêu cầu sendMessage).
  • channels.telegram.defaultTo: mục tiêu Telegram mặc định được sử dụng bởi CLI --deliver khi không có --reply-to rõ ràng được cung cấp.
  • channels.telegram.groupPolicy: open | allowlist | disabled (mặc định: allowlist).
  • channels.telegram.groupAllowFrom: danh sách cho phép người gửi nhóm (ID người dùng Telegram dạng số). openclaw doctor --fix có thể chuyển đổi các mục @username cũ thành ID. Các mục không phải số bị bỏ qua khi xác thực. Xác thực nhóm không sử dụng dự phòng pairing-store DM (2026.2.25+).
  • Ưu tiên đa tài khoản:
    • Khi hai hoặc nhiều ID tài khoản được cấu hình, thiết lập channels.telegram.defaultAccount (hoặc bao gồm channels.telegram.accounts.default) để làm cho định tuyến mặc định rõ ràng.
    • Nếu không có cái nào được thiết lập, OpenClaw quay lại ID tài khoản đầu tiên đã chuẩn hóa và openclaw doctor cảnh báo.
    • channels.telegram.accounts.default.allowFromchannels.telegram.accounts.default.groupAllowFrom chỉ áp dụng cho tài khoản default.
    • Các tài khoản được đặt tên thừa kế channels.telegram.allowFromchannels.telegram.groupAllowFrom khi các giá trị cấp tài khoản không được thiết lập.
    • Các tài khoản được đặt tên không thừa kế channels.telegram.accounts.default.allowFrom / groupAllowFrom.
  • channels.telegram.groups: mặc định theo nhóm + danh sách cho phép (sử dụng "*" cho mặc định toàn cầu).
    • channels.telegram.groups.<id>.groupPolicy: ghi đè theo nhóm cho groupPolicy (open | allowlist | disabled).
    • channels.telegram.groups.<id>.requireMention: mặc định kiểm soát nhắc đến.
    • channels.telegram.groups.<id>.skills: bộ lọc kỹ năng (bỏ qua = tất cả kỹ năng, trống = không có).
    • channels.telegram.groups.<id>.allowFrom: ghi đè danh sách cho phép người gửi theo nhóm.
    • channels.telegram.groups.<id>.systemPrompt: lời nhắc hệ thống bổ sung cho nhóm.
    • channels.telegram.groups.<id>.enabled: vô hiệu hóa nhóm khi false.
    • channels.telegram.groups.<id>.topics.<threadId>.*: ghi đè theo chủ đề (trường nhóm + chỉ chủ đề agentId).
    • channels.telegram.groups.<id>.topics.<threadId>.agentId: định tuyến chủ đề này đến một agent cụ thể (ghi đè định tuyến cấp nhóm và liên kết).
  • channels.telegram.groups.<id>.topics.<threadId>.groupPolicy: ghi đè theo chủ đề cho groupPolicy (open | allowlist | disabled).
  • channels.telegram.groups.<id>.topics.<threadId>.requireMention: ghi đè kiểm soát nhắc đến theo chủ đề.
  • bindings[] cấp cao nhất với type: "acp" và ID chủ đề chuẩn chatId:topic:topicId trong match.peer.id: trường liên kết chủ đề ACP bền vững (xem Agent ACP).
  • channels.telegram.direct.<id>.topics.<threadId>.agentId: định tuyến các chủ đề DM đến một agent cụ thể (cùng hành vi như các chủ đề diễn đàn).
  • channels.telegram.execApprovals.enabled: bật Telegram làm khách hàng phê duyệt thực thi dựa trên chat cho tài khoản này.
  • channels.telegram.execApprovals.approvers: ID người dùng Telegram được phép phê duyệt hoặc từ chối yêu cầu thực thi. Bắt buộc khi phê duyệt thực thi được bật.
  • channels.telegram.execApprovals.target: dm | channel | both (mặc định: dm). channelboth bảo toàn chủ đề Telegram gốc khi có.
  • channels.telegram.execApprovals.agentFilter: bộ lọc ID agent tùy chọn cho các lời nhắc phê duyệt được chuyển tiếp.
  • channels.telegram.execApprovals.sessionFilter: bộ lọc khóa phiên tùy chọn (chuỗi con hoặc regex) cho các lời nhắc phê duyệt được chuyển tiếp.
  • channels.telegram.accounts.<account>.execApprovals: ghi đè theo tài khoản cho định tuyến phê duyệt thực thi Telegram và ủy quyền người phê duyệt.
  • channels.telegram.capabilities.inlineButtons: off | dm | group | all | allowlist (mặc định: allowlist).
  • channels.telegram.accounts.<account>.capabilities.inlineButtons: ghi đè theo tài khoản.
  • channels.telegram.commands.nativeSkills: bật/tắt lệnh kỹ năng gốc Telegram.
  • channels.telegram.replyToMode: off | first | all (mặc định: off).
  • channels.telegram.textChunkLimit: kích thước khối gửi đi (ký tự).
  • channels.telegram.chunkMode: length (mặc định) hoặc newline để chia trên các dòng trống (ranh giới đoạn văn) trước khi chia độ dài.
  • channels.telegram.linkPreview: bật/tắt xem trước liên kết cho các tin nhắn gửi đi (mặc định: true).
  • channels.telegram.streaming: off | partial | block | progress (xem trước luồng trực tiếp; mặc định: partial; progress ánh xạ tới partial; block là chế độ tương thích xem trước cũ). Phát trực tiếp xem trước Telegram sử dụng một tin nhắn xem trước duy nhất được chỉnh sửa tại chỗ.
  • channels.telegram.mediaMaxMb: giới hạn phương tiện Telegram đến/đi (MB, mặc định: 100).
  • channels.telegram.retry: chính sách thử lại cho các trợ giúp gửi Telegram (CLI/công cụ/hành động) trên các lỗi API gửi đi có thể khôi phục (lần thử, minDelayMs, maxDelayMs, jitter).
  • channels.telegram.network.autoSelectFamily: ghi đè Node autoSelectFamily (true=bật, false=tắt). Mặc định là bật trên Node 22+, với WSL2 mặc định là tắt.
  • channels.telegram.network.dnsResultOrder: ghi đè thứ tự kết quả DNS (ipv4first hoặc verbatim). Mặc định là ipv4first trên Node 22+.
  • channels.telegram.proxy: URL proxy cho các cuộc gọi Bot API (SOCKS/HTTP).
  • channels.telegram.webhookUrl: bật chế độ webhook (yêu cầu channels.telegram.webhookSecret).
  • channels.telegram.webhookSecret: bí mật webhook (bắt buộc khi webhookUrl được thiết lập).
  • channels.telegram.webhookPath: đường dẫn webhook cục bộ (mặc định /telegram-webhook).
  • channels.telegram.webhookHost: máy chủ liên kết webhook cục bộ (mặc định 127.0.0.1).
  • channels.telegram.webhookPort: cổng liên kết webhook cục bộ (mặc định 8787).
  • channels.telegram.actions.reactions: cổng phản ứng công cụ Telegram.
  • channels.telegram.actions.sendMessage: cổng gửi tin nhắn công cụ Telegram.
  • channels.telegram.actions.deleteMessage: cổng xóa tin nhắn công cụ Telegram.
  • channels.telegram.actions.sticker: cổng hành động nhãn dán Telegram — gửi và tìm kiếm (mặc định: false).
  • channels.telegram.reactionNotifications: off | own | all — kiểm soát phản ứng nào kích hoạt sự kiện hệ thống (mặc định: own khi không được thiết lập).
  • channels.telegram.reactionLevel: off | ack | minimal | extensive — kiểm soát khả năng phản ứng của agent (mặc định: minimal khi không được thiết lập).
  • Tham khảo cấu hình - Telegram
Các trường tín hiệu cao cụ thể của Telegram:
  • khởi động/xác thực: enabled, botToken, tokenFile, accounts.* (tokenFile phải trỏ đến một tệp thông thường; symlink bị từ chối)
  • kiểm soát truy cập: dmPolicy, allowFrom, groupPolicy, groupAllowFrom, groups, groups.*.topics.*, bindings[] cấp cao nhất (type: "acp")
  • phê duyệt thực thi: execApprovals, accounts.*.execApprovals
  • lệnh/menu: commands.native, commands.nativeSkills, customCommands
  • luồng/trả lời: replyToMode
  • phát trực tiếp: streaming (xem trước), blockStreaming
  • định dạng/gửi: textChunkLimit, chunkMode, linkPreview, responsePrefix
  • phương tiện/mạng: mediaMaxMb, timeoutSeconds, retry, network.autoSelectFamily, proxy
  • webhook: webhookUrl, webhookSecret, webhookPath, webhookHost
  • hành động/khả năng: capabilities.inlineButtons, actions.sendMessage|editMessage|deleteMessage|reactions|sticker
  • phản ứng: reactionNotifications, reactionLevel
  • ghi/lịch sử: configWrites, historyLimit, dmHistoryLimit, dms.*.historyLimit

Liên quan

Last modified on March 22, 2026