File and image sending works normally; the sending issues actually encountered are all file-path issues;
File and image receiving works normally in group chats, including sendWithResponse("get_group_file_url", { group_id: groupId, file_id: seg.data?.file_id, busid: seg.data?.busid });; it does not work in private chats, where there are only the filename and file_id, and no file URL;
Solution:
Call sendWithResponse("get_file", { file_id: seg.data.file_id }); and set seg.data.url;
Main drawbacks:
NapCat’s file downloads are saved in .config/QQ/NapCat/temp, and /NapCat/temp cannot be changed; when using Docker you must mount .config/QQ. If openclaw is also deployed with Docker, it likewise needs to mount .config/QQ; at that point you are very likely to run into invalid paths—failures when sending files and images are for the same reason.
Difficulty:
When sending files, you can set up a shared directory for napcat to mount, but when receiving files napcat will forcibly download to /NapCat/temp; without modifying the NapCat side, the easiest solution is instead to align to a shared directory on the host and directly use the original path:
napcat:shared-data:/root/.config/QQ/NapCat/temp;
openclaw:shared-data:/root/.config/QQ/NapCat/temp;