Trạng thái: sẵn sàng cho production qua WhatsApp Web (Baileys). Gateway sở hữu các phiên đã liên kết.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.
Cài đặt (khi cần)
- Onboarding (
openclaw onboard) vàopenclaw channels add --channel whatsappnhắc cài đặt Plugin WhatsApp vào lần đầu bạn chọn nó. openclaw channels login --channel whatsappcũng cung cấp luồng cài đặt khi Plugin chưa có.- Kênh dev + git checkout: mặc định dùng đường dẫn Plugin cục bộ.
- Stable/Beta: dùng gói npm
@openclaw/whatsappkhi một gói hiện hành đã được phát hành.
Ghép nối
Khắc phục sự cố kênh
Cấu hình Gateway
Thiết lập nhanh
Liên kết WhatsApp (QR)
Mẫu triển khai
Số chuyên dụng (khuyến nghị)
Số chuyên dụng (khuyến nghị)
- danh tính WhatsApp riêng cho OpenClaw
- allowlist DM và ranh giới định tuyến rõ ràng hơn
- giảm khả năng nhầm lẫn khi tự trò chuyện
Dự phòng bằng số cá nhân
Dự phòng bằng số cá nhân
dmPolicy: "allowlist"allowFrombao gồm số cá nhân của bạnselfChatMode: true
allowFrom.Phạm vi kênh chỉ dùng WhatsApp Web
Phạm vi kênh chỉ dùng WhatsApp Web
Baileys) trong kiến trúc kênh OpenClaw hiện tại.Không có kênh nhắn tin Twilio WhatsApp riêng trong registry kênh trò chuyện tích hợp sẵn.Mô hình runtime
- Gateway sở hữu socket WhatsApp và vòng lặp kết nối lại.
- Watchdog kết nối lại dùng hoạt động transport của WhatsApp Web, không chỉ khối lượng tin nhắn ứng dụng đến, nên một phiên thiết bị đã liên kết yên lặng không bị khởi động lại chỉ vì gần đây không ai gửi tin nhắn. Một giới hạn im lặng ứng dụng dài hơn vẫn buộc kết nối lại nếu các frame transport tiếp tục đến nhưng không có tin nhắn ứng dụng nào được xử lý trong cửa sổ watchdog; sau một lần kết nối lại tạm thời cho một phiên vừa hoạt động gần đây, kiểm tra im lặng ứng dụng đó dùng thời gian chờ tin nhắn bình thường cho cửa sổ khôi phục đầu tiên.
- Thời lượng socket Baileys được khai báo rõ dưới
web.whatsapp.*:keepAliveIntervalMskiểm soát ping ứng dụng WhatsApp Web,connectTimeoutMskiểm soát thời gian chờ bắt tay mở kết nối, vàdefaultQueryTimeoutMskiểm soát thời gian chờ truy vấn Baileys. - Gửi ra ngoài yêu cầu một trình lắng nghe WhatsApp đang hoạt động cho tài khoản đích.
- Trò chuyện trạng thái và broadcast bị bỏ qua (
@status,@broadcast). - Watchdog kết nối lại theo dõi hoạt động transport của WhatsApp Web, không chỉ khối lượng tin nhắn ứng dụng đến: các phiên thiết bị đã liên kết yên lặng vẫn hoạt động khi frame transport tiếp tục, nhưng transport bị treo sẽ buộc kết nối lại sớm hơn nhiều so với đường ngắt kết nối từ xa muộn hơn.
- Trò chuyện trực tiếp dùng quy tắc phiên DM (
session.dmScope; mặc địnhmaingộp DM vào phiên chính của agent). - Phiên nhóm được tách biệt (
agent:<agentId>:whatsapp:group:<jid>). - Transport WhatsApp Web tôn trọng các biến môi trường proxy chuẩn trên máy chủ Gateway (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ các biến viết thường tương ứng). Ưu tiên cấu hình proxy cấp máy chủ hơn cài đặt proxy WhatsApp riêng theo kênh. - Khi
messages.removeAckAfterReplyđược bật, OpenClaw xóa phản ứng ack WhatsApp sau khi phản hồi hiển thị được gửi.
Hook Plugin và quyền riêng tư
Tin nhắn WhatsApp đến có thể chứa nội dung tin nhắn cá nhân, số điện thoại, định danh nhóm, tên người gửi và các trường tương quan phiên. Vì lý do đó, WhatsApp không broadcast payload hookmessage_received đến các Plugin
trừ khi bạn chủ động chọn tham gia:
Kiểm soát truy cập và kích hoạt
- Chính sách DM
- Chính sách nhóm + allowlist
- Nhắc đến + /activation
channels.whatsapp.dmPolicy kiểm soát quyền truy cập trò chuyện trực tiếp:pairing(mặc định)allowlistopen(yêu cầuallowFrombao gồm"*")disabled
allowFrom chấp nhận các số theo kiểu E.164 (được chuẩn hóa nội bộ).Ghi đè nhiều tài khoản: channels.whatsapp.accounts.<id>.dmPolicy (và allowFrom) được ưu tiên hơn các mặc định cấp kênh cho tài khoản đó.Chi tiết hành vi runtime:- các ghép cặp được lưu trong allow-store của kênh và được hợp nhất với
allowFromđã cấu hình - nếu không cấu hình allowlist, số tự liên kết được cho phép theo mặc định
- OpenClaw không bao giờ tự động ghép cặp DM
fromMegửi đi (tin nhắn bạn gửi cho chính mình từ thiết bị đã liên kết)
Hành vi số cá nhân và tự trò chuyện
Khi số tự liên kết cũng có trongallowFrom, các biện pháp bảo vệ tự trò chuyện của WhatsApp được kích hoạt:
- bỏ qua biên nhận đã đọc cho các lượt tự trò chuyện
- bỏ qua hành vi tự kích hoạt bằng JID nhắc đến vốn có thể tự ping chính bạn
- nếu chưa đặt
messages.responsePrefix, trả lời tự trò chuyện mặc định là[{identity.name}]hoặc[openclaw]
Chuẩn hóa tin nhắn và ngữ cảnh
Phong bì gửi đến + ngữ cảnh trả lời
Phong bì gửi đến + ngữ cảnh trả lời
ReplyToId, ReplyToBody, ReplyToSender, JID/E.164 của người gửi).Placeholder phương tiện và trích xuất vị trí/liên hệ
Placeholder phương tiện và trích xuất vị trí/liên hệ
<media:image><media:video><media:audio><media:document><media:sticker>
<media:audio>, vì vậy việc nói lời nhắc đến bot trong ghi âm thoại có thể
kích hoạt trả lời. Nếu bản chép lời vẫn không nhắc đến bot,
bản chép lời được giữ trong lịch sử nhóm đang chờ thay vì placeholder thô.Nội dung vị trí dùng văn bản tọa độ ngắn gọn. Nhãn/bình luận vị trí và chi tiết liên hệ/vCard được hiển thị dưới dạng siêu dữ liệu không tin cậy trong khối fenced, không phải văn bản prompt nội tuyến.Chèn lịch sử nhóm đang chờ
Chèn lịch sử nhóm đang chờ
- giới hạn mặc định:
50 - cấu hình:
channels.whatsapp.historyLimit - dự phòng:
messages.groupChat.historyLimit 0sẽ tắt
[Chat messages since your last reply - for context][Current message - respond to this]
Biên nhận đã đọc
Biên nhận đã đọc
Phân phối, chia đoạn và phương tiện
Chia đoạn văn bản
Chia đoạn văn bản
- giới hạn đoạn mặc định:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- chế độ
newlineưu tiên ranh giới đoạn văn (dòng trống), sau đó quay về chia đoạn an toàn theo độ dài
Hành vi phương tiện gửi đi
Hành vi phương tiện gửi đi
- hỗ trợ tải trọng hình ảnh, video, âm thanh (ghi chú thoại PTT) và tài liệu
- phương tiện âm thanh được gửi qua tải trọng
audiocủa Baileys vớiptt: true, nên các máy khách WhatsApp hiển thị dưới dạng ghi chú thoại nhấn-để-nói - tải trọng trả lời giữ nguyên
audioAsVoice; đầu ra ghi chú thoại TTS cho WhatsApp vẫn đi theo đường PTT này ngay cả khi nhà cung cấp trả về MP3 hoặc WebM - âm thanh Ogg/Opus gốc được gửi dưới dạng
audio/ogg; codecs=opusđể tương thích với ghi chú thoại - âm thanh không phải Ogg, bao gồm đầu ra MP3/WebM của Microsoft Edge TTS, được chuyển mã bằng
ffmpegsang Ogg/Opus đơn âm 48 kHz trước khi gửi PTT /tts latestgửi câu trả lời mới nhất của trợ lý dưới dạng một ghi chú thoại và chặn gửi lặp lại cho cùng câu trả lời;/tts chat on|off|defaultđiều khiển auto-TTS cho cuộc trò chuyện WhatsApp hiện tại- phát lại GIF động được hỗ trợ qua
gifPlayback: truekhi gửi video - chú thích được áp dụng cho mục phương tiện đầu tiên khi gửi tải trọng trả lời đa phương tiện, ngoại trừ ghi chú thoại PTT gửi âm thanh trước và văn bản hiển thị riêng vì các máy khách WhatsApp không hiển thị chú thích ghi chú thoại một cách nhất quán
- nguồn phương tiện có thể là HTTP(S),
file://hoặc đường dẫn cục bộ
Giới hạn kích thước phương tiện và hành vi dự phòng
Giới hạn kích thước phương tiện và hành vi dự phòng
- giới hạn lưu phương tiện gửi vào:
channels.whatsapp.mediaMaxMb(mặc định50) - giới hạn gửi phương tiện gửi đi:
channels.whatsapp.mediaMaxMb(mặc định50) - ghi đè theo từng tài khoản dùng
channels.whatsapp.accounts.<accountId>.mediaMaxMb - hình ảnh được tự động tối ưu hóa (thay đổi kích thước/quét chất lượng) để nằm trong giới hạn
- khi gửi phương tiện thất bại, dự phòng mục đầu tiên sẽ gửi cảnh báo bằng văn bản thay vì âm thầm bỏ phản hồi
Trích dẫn trả lời
WhatsApp hỗ trợ trích dẫn trả lời gốc, trong đó câu trả lời gửi đi hiển thị phần trích dẫn tin nhắn gửi vào. Điều khiển bằngchannels.whatsapp.replyToMode.
| Giá trị | Hành vi |
|---|---|
"off" | Không bao giờ trích dẫn; gửi như tin nhắn thường |
"first" | Chỉ trích dẫn đoạn trả lời gửi đi đầu tiên |
"all" | Trích dẫn mọi đoạn trả lời gửi đi |
"batched" | Trích dẫn các câu trả lời theo lô đang xếp hàng trong khi để các câu trả lời tức thời không trích dẫn |
"off". Ghi đè theo từng tài khoản dùng channels.whatsapp.accounts.<id>.replyToMode.
Mức phản ứng
channels.whatsapp.reactionLevel điều khiển mức độ rộng rãi mà agent dùng phản ứng emoji trên WhatsApp:
| Mức | Phản ứng ack | Phản ứng do agent khởi tạo | Mô tả |
|---|---|---|---|
"off" | Không | Không | Hoàn toàn không có phản ứng |
"ack" | Có | Không | Chỉ phản ứng ack (biên nhận trước khi trả lời) |
"minimal" | Có | Có (thận trọng) | Ack + phản ứng của agent với hướng dẫn thận trọng |
"extensive" | Có | Có (khuyến khích) | Ack + phản ứng của agent với hướng dẫn được khuyến khích |
"minimal".
Ghi đè theo từng tài khoản dùng channels.whatsapp.accounts.<id>.reactionLevel.
Phản ứng xác nhận
WhatsApp hỗ trợ phản ứng ack tức thời khi nhận tin nhắn gửi vào quachannels.whatsapp.ackReaction.
Phản ứng ack được kiểm soát bởi reactionLevel — chúng bị chặn khi reactionLevel là "off".
- được gửi ngay sau khi tin nhắn gửi vào được chấp nhận (trước khi trả lời)
- lỗi được ghi nhật ký nhưng không chặn việc gửi trả lời bình thường
- chế độ nhóm
mentionsphản ứng ở các lượt được kích hoạt bởi lượt nhắc đến; kích hoạt nhómalwayshoạt động như đường vòng cho kiểm tra này - WhatsApp dùng
channels.whatsapp.ackReaction(messages.ackReactioncũ không được dùng ở đây)
Nhiều tài khoản và thông tin xác thực
Chọn tài khoản và mặc định
Chọn tài khoản và mặc định
- id tài khoản đến từ
channels.whatsapp.accounts - chọn tài khoản mặc định:
defaultnếu có, nếu không thì dùng id tài khoản được cấu hình đầu tiên (đã sắp xếp) - id tài khoản được chuẩn hóa nội bộ để tra cứu
Đường dẫn thông tin xác thực và tương thích cũ
Đường dẫn thông tin xác thực và tương thích cũ
- đường dẫn xác thực hiện tại:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - tệp sao lưu:
creds.json.bak - xác thực mặc định cũ trong
~/.openclaw/credentials/vẫn được nhận diện/di chuyển cho các luồng tài khoản mặc định
Hành vi đăng xuất
Hành vi đăng xuất
openclaw channels logout --channel whatsapp [--account <id>] xóa trạng thái xác thực WhatsApp cho tài khoản đó.Trong các thư mục xác thực cũ, oauth.json được giữ lại trong khi các tệp xác thực Baileys bị xóa.Công cụ, hành động và ghi cấu hình
- Hỗ trợ công cụ của agent bao gồm hành động phản ứng WhatsApp (
react). - Cổng hành động:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Ghi cấu hình do kênh khởi tạo được bật theo mặc định (tắt qua
channels.whatsapp.configWrites=false).
Khắc phục sự cố
Chưa liên kết (cần QR)
Chưa liên kết (cần QR)
Đã liên kết nhưng bị ngắt kết nối / vòng lặp kết nối lại
Đã liên kết nhưng bị ngắt kết nối / vòng lặp kết nối lại
status=408 Request Time-out Connection was lost, hãy tinh chỉnh
thời gian socket Baileys trong web.whatsapp. Bắt đầu bằng cách rút ngắn
keepAliveIntervalMs xuống thấp hơn thời gian chờ nhàn rỗi của mạng và tăng
connectTimeoutMs trên các liên kết chậm hoặc mất gói:channels login.Đăng nhập QR hết thời gian chờ sau proxy
Đăng nhập QR hết thời gian chờ sau proxy
openclaw channels login --channel whatsapp thất bại trước khi hiển thị mã QR dùng được với status=408 Request Time-out hoặc ngắt kết nối socket TLS.Đăng nhập WhatsApp Web dùng môi trường proxy tiêu chuẩn của máy chủ gateway (HTTPS_PROXY, HTTP_PROXY, các biến chữ thường tương ứng, và NO_PROXY). Xác minh tiến trình gateway kế thừa env proxy và NO_PROXY không khớp với mmg.whatsapp.net.Không có trình lắng nghe hoạt động khi gửi
Không có trình lắng nghe hoạt động khi gửi
Tin nhắn nhóm bị bỏ qua ngoài dự kiến
Tin nhắn nhóm bị bỏ qua ngoài dự kiến
groupPolicygroupAllowFrom/allowFrom- mục allowlist
groups - cổng nhắc đến (
requireMention+ mẫu nhắc đến) - khóa trùng lặp trong
openclaw.json(JSON5): mục phía sau ghi đè mục phía trước, vì vậy hãy giữ mộtgroupPolicyduy nhất cho mỗi phạm vi
Cảnh báo runtime Bun
Cảnh báo runtime Bun
Prompt hệ thống
WhatsApp hỗ trợ prompt hệ thống kiểu Telegram cho nhóm và cuộc trò chuyện trực tiếp qua các mapgroups và direct.
Thứ bậc phân giải cho tin nhắn nhóm:
Map groups hiệu lực được xác định trước: nếu tài khoản định nghĩa groups riêng, nó thay thế hoàn toàn map groups gốc (không gộp sâu). Sau đó tra cứu prompt chạy trên một map duy nhất thu được:
- Prompt hệ thống theo nhóm cụ thể (
groups["<groupId>"].systemPrompt): được dùng khi mục nhóm cụ thể tồn tại trong map và khóasystemPromptcủa nó được định nghĩa. NếusystemPromptlà chuỗi rỗng (""), wildcard bị chặn và không áp dụng prompt hệ thống. - Prompt hệ thống wildcard cho nhóm (
groups["*"].systemPrompt): được dùng khi mục nhóm cụ thể hoàn toàn vắng mặt trong map, hoặc khi nó tồn tại nhưng không định nghĩa khóasystemPrompt.
direct hiệu lực được xác định trước: nếu tài khoản định nghĩa direct riêng, nó thay thế hoàn toàn map direct gốc (không gộp sâu). Sau đó tra cứu prompt chạy trên một map duy nhất thu được:
- Prompt hệ thống theo trực tiếp cụ thể (
direct["<peerId>"].systemPrompt): được dùng khi mục peer cụ thể tồn tại trong map và khóasystemPromptcủa nó được định nghĩa. NếusystemPromptlà chuỗi rỗng (""), wildcard bị chặn và không áp dụng prompt hệ thống. - Prompt hệ thống wildcard cho trực tiếp (
direct["*"].systemPrompt): được dùng khi mục peer cụ thể hoàn toàn vắng mặt trong map, hoặc khi nó tồn tại nhưng không định nghĩa khóasystemPrompt.
dms vẫn là vùng chứa ghi đè lịch sử nhẹ theo từng DM (dms.<id>.historyLimit). Ghi đè prompt nằm dưới direct.groups gốc được cố ý chặn cho tất cả tài khoản trong thiết lập nhiều tài khoản — ngay cả các tài khoản không định nghĩa groups riêng — để ngăn bot nhận tin nhắn nhóm từ các nhóm mà nó không thuộc về. WhatsApp không áp dụng biện pháp bảo vệ này: groups gốc và direct gốc luôn được kế thừa bởi các tài khoản không định nghĩa ghi đè cấp tài khoản, bất kể có bao nhiêu tài khoản được cấu hình. Trong thiết lập WhatsApp nhiều tài khoản, nếu bạn muốn prompt nhóm hoặc trực tiếp theo từng tài khoản, hãy định nghĩa rõ ràng toàn bộ map dưới mỗi tài khoản thay vì dựa vào mặc định cấp gốc.
Hành vi quan trọng:
channels.whatsapp.groupsvừa là map cấu hình theo từng nhóm vừa là allowlist nhóm cấp cuộc trò chuyện. Ở phạm vi gốc hoặc tài khoản,groups["*"]nghĩa là “tất cả nhóm được chấp nhận” cho phạm vi đó.- Chỉ thêm wildcard nhóm
systemPromptkhi bạn đã muốn phạm vi đó chấp nhận tất cả nhóm. Nếu bạn vẫn muốn chỉ một tập cố định các ID nhóm đủ điều kiện, đừng dùnggroups["*"]cho mặc định prompt. Thay vào đó, lặp lại prompt trên từng mục nhóm được allowlist rõ ràng. - Tiếp nhận nhóm và ủy quyền người gửi là các kiểm tra riêng biệt.
groups["*"]mở rộng tập nhóm có thể đi tới xử lý nhóm, nhưng bản thân nó không ủy quyền mọi người gửi trong các nhóm đó. Quyền truy cập của người gửi vẫn được điều khiển riêng bởichannels.whatsapp.groupPolicyvàchannels.whatsapp.groupAllowFrom. channels.whatsapp.directkhông có cùng tác dụng phụ cho DM.direct["*"]chỉ cung cấp cấu hình trò chuyện trực tiếp mặc định sau khi DM đã được chấp nhận bởidmPolicycùng vớiallowFromhoặc quy tắc kho ghép nối.
Con trỏ tham chiếu cấu hình
Tham chiếu chính: Các trường WhatsApp quan trọng:- quyền truy cập:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - gửi:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - nhiều tài khoản:
accounts.<id>.enabled,accounts.<id>.authDir, ghi đè cấp tài khoản - vận hành:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.*,web.whatsapp.* - hành vi phiên:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit - lời nhắc:
groups.<id>.systemPrompt,groups["*"].systemPrompt,direct.<id>.systemPrompt,direct["*"].systemPrompt