Chuyển đến nội dung chính
LINE kết nối với OpenClaw qua LINE Messaging API. Plugin chạy như một bộ nhận Webhook trên Gateway và dùng channel access token + channel secret của bạn để xác thực. Trạng thái: Plugin có thể tải xuống. Tin nhắn trực tiếp, trò chuyện nhóm, phương tiện, vị trí, tin nhắn Flex, tin nhắn mẫu và trả lời nhanh được hỗ trợ. Phản ứng và luồng không được hỗ trợ.

Cài đặt

Cài đặt LINE trước khi cấu hình kênh:
openclaw plugins install @openclaw/line
Checkout cục bộ (khi chạy từ repo git):
openclaw plugins install ./path/to/local/line-plugin

Thiết lập

  1. Tạo tài khoản LINE Developers và mở Console: https://developers.line.biz/console/
  2. Tạo (hoặc chọn) một Provider và thêm một kênh API nhắn tin.
  3. Sao chép Channel access tokenChannel secret từ phần cài đặt kênh.
  4. Bật Use webhook trong phần cài đặt Messaging API.
  5. Đặt URL Webhook thành endpoint Gateway của bạn (bắt buộc HTTPS):
https://gateway-host/line/webhook
Gateway phản hồi xác minh Webhook của LINE (GET) và xác nhận các sự kiện inbound đã ký (POST) ngay sau khi xác thực chữ ký và payload; quá trình xử lý của agent tiếp tục bất đồng bộ. Nếu bạn cần đường dẫn tùy chỉnh, hãy đặt channels.line.webhookPath hoặc channels.line.accounts.<id>.webhookPath rồi cập nhật URL tương ứng. Ghi chú bảo mật:
  • Việc xác minh chữ ký LINE phụ thuộc vào body (HMAC trên body thô), vì vậy OpenClaw áp dụng giới hạn body trước xác thực và thời gian chờ nghiêm ngặt trước khi xác minh.
  • OpenClaw xử lý sự kiện Webhook từ các byte yêu cầu thô đã được xác minh. Các giá trị req.body đã bị middleware phía upstream biến đổi sẽ bị bỏ qua để bảo đảm toàn vẹn chữ ký.

Cấu hình

Cấu hình tối thiểu:
{
  channels: {
    line: {
      enabled: true,
      channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN",
      channelSecret: "LINE_CHANNEL_SECRET",
      dmPolicy: "pairing",
    },
  },
}
Cấu hình DM công khai:
{
  channels: {
    line: {
      enabled: true,
      channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN",
      channelSecret: "LINE_CHANNEL_SECRET",
      dmPolicy: "open",
      allowFrom: ["*"],
    },
  },
}
Biến môi trường (chỉ tài khoản mặc định):
  • LINE_CHANNEL_ACCESS_TOKEN
  • LINE_CHANNEL_SECRET
Tệp token/secret:
{
  channels: {
    line: {
      tokenFile: "/path/to/line-token.txt",
      secretFile: "/path/to/line-secret.txt",
    },
  },
}
tokenFilesecretFile phải trỏ tới tệp thông thường. Symlink bị từ chối. Nhiều tài khoản:
{
  channels: {
    line: {
      accounts: {
        marketing: {
          channelAccessToken: "...",
          channelSecret: "...",
          webhookPath: "/line/marketing",
        },
      },
    },
  },
}

Kiểm soát truy cập

Tin nhắn trực tiếp mặc định dùng ghép nối. Người gửi chưa biết sẽ nhận được mã ghép nối và tin nhắn của họ bị bỏ qua cho đến khi được phê duyệt.
openclaw pairing list line
openclaw pairing approve line <CODE>
Danh sách cho phép và chính sách:
  • channels.line.dmPolicy: pairing | allowlist | open | disabled
  • channels.line.allowFrom: ID người dùng LINE được cho phép cho DM; dmPolicy: "open" yêu cầu ["*"]
  • channels.line.groupPolicy: allowlist | open | disabled
  • channels.line.groupAllowFrom: ID người dùng LINE được cho phép cho nhóm
  • Ghi đè theo từng nhóm: channels.line.groups.<groupId>.allowFrom
  • Có thể tham chiếu nhóm truy cập người gửi tĩnh từ allowFrom, groupAllowFromallowFrom theo từng nhóm bằng accessGroup:<name>.
  • Ghi chú runtime: nếu channels.line hoàn toàn thiếu, runtime sẽ fallback về groupPolicy="allowlist" cho kiểm tra nhóm (ngay cả khi channels.defaults.groupPolicy được đặt).
ID LINE phân biệt chữ hoa chữ thường. ID hợp lệ có dạng:
  • Người dùng: U + 32 ký tự hex
  • Nhóm: C + 32 ký tự hex
  • Phòng: R + 32 ký tự hex

Hành vi tin nhắn

  • Văn bản được chia thành các đoạn 5000 ký tự.
  • Định dạng Markdown bị loại bỏ; khối mã và bảng được chuyển thành thẻ Flex khi có thể.
  • Phản hồi streaming được đệm; LINE nhận các đoạn đầy đủ kèm hoạt ảnh tải trong khi agent làm việc.
  • Tải xuống phương tiện bị giới hạn bởi channels.line.mediaMaxMb (mặc định 10).
  • Phương tiện inbound được lưu dưới ~/.openclaw/media/inbound/ trước khi được chuyển cho agent, khớp với kho phương tiện dùng chung được các Plugin kênh tích hợp khác sử dụng.

Dữ liệu kênh (tin nhắn phong phú)

Dùng channelData.line để gửi trả lời nhanh, vị trí, thẻ Flex hoặc tin nhắn mẫu.
{
  text: "Here you go",
  channelData: {
    line: {
      quickReplies: ["Status", "Help"],
      location: {
        title: "Office",
        address: "123 Main St",
        latitude: 35.681236,
        longitude: 139.767125,
      },
      flexMessage: {
        altText: "Status card",
        contents: {
          /* Flex payload */
        },
      },
      templateMessage: {
        type: "confirm",
        text: "Proceed?",
        confirmLabel: "Yes",
        confirmData: "yes",
        cancelLabel: "No",
        cancelData: "no",
      },
    },
  },
}
Plugin LINE cũng cung cấp lệnh /card cho các preset tin nhắn Flex:
/card info "Welcome" "Thanks for joining!"

Hỗ trợ ACP

LINE hỗ trợ ràng buộc cuộc trò chuyện ACP (Agent Communication Protocol):
  • /acp spawn <agent> --bind here ràng buộc cuộc trò chuyện LINE hiện tại với một phiên ACP mà không tạo luồng con.
  • Các ràng buộc ACP đã cấu hình và phiên ACP đang hoạt động được ràng buộc với cuộc trò chuyện hoạt động trên LINE giống các kênh hội thoại khác.
Xem agent ACP để biết chi tiết.

Phương tiện outbound

Plugin LINE hỗ trợ gửi hình ảnh, video và tệp âm thanh qua công cụ tin nhắn của agent. Phương tiện được gửi qua đường dẫn phân phối riêng cho LINE với xử lý bản xem trước và theo dõi phù hợp:
  • Hình ảnh: được gửi dưới dạng tin nhắn hình ảnh LINE với tạo bản xem trước tự động.
  • Video: được gửi với xử lý bản xem trước và content-type rõ ràng.
  • Âm thanh: được gửi dưới dạng tin nhắn âm thanh LINE.
URL phương tiện outbound phải là URL HTTPS công khai. OpenClaw xác thực hostname đích trước khi chuyển URL cho LINE và từ chối các đích loopback, link-local và mạng riêng. Gửi phương tiện chung sẽ fallback về tuyến chỉ hình ảnh hiện có khi không có đường dẫn riêng cho LINE.

Khắc phục sự cố

  • Xác minh Webhook không thành công: đảm bảo URL Webhook là HTTPS và channelSecret khớp với console LINE.
  • Không có sự kiện inbound: xác nhận đường dẫn Webhook khớp với channels.line.webhookPath và Gateway có thể được LINE truy cập.
  • Lỗi tải xuống phương tiện: tăng channels.line.mediaMaxMb nếu phương tiện vượt quá giới hạn mặc định.

Liên quan