wecomcli-msg
Original:🇨🇳 Chinese
Translated
WeCom message skill. It provides capabilities including session list query, message record pulling (supports text/image/file/voice/video), multimedia file acquisition and text message sending. It is triggered when users need to "view messages", "check chat records", "send a message to someone", "what are the recent messages", "send a message to the group", "see what pictures/files have been sent".
22installs
Sourcewecomteam/wecom-cli
Added on
NPX Install
npx skill4agent add wecomteam/wecom-cli wecomcli-msgTags
Translated version includes tags in frontmatterSKILL.md Content (Chinese)
View Translation Comparison →WeCom Message Skill
is a command line program provided by WeCom, all operations are completed by executingwecom-clicommands.wecom-cli
Interact with WeCom message system through .
wecom-cli msg <interface name> '<json input parameters>'Interface List
get_msg_chat_list — Get session list
bash
wecom-cli msg get_msg_chat_list '{"begin_time": "2026-03-11 00:00:00", "end_time": "2026-03-17 23:59:59"}'Query the list of sessions with messages by time range, pagination is supported. See API Details.
get_message — Pull session messages
bash
wecom-cli msg get_message '{"chat_type": 1, "chatid": "zhangsan", "begin_time": "2026-03-17 09:00:00", "end_time": "2026-03-17 18:00:00"}'Pull message records within the specified time range according to session type and ID, pagination is supported. Supports text/image/file/voice/video message types, only supports messages within 7 days. See API Details.
get_msg_media — Get message file content
bash
wecom-cli msg get_msg_media '{"media_id": "MEDIAID_xxxxxx"}'Automatically download the file to local according to the file ID, return the local path (), name, type, size and MIME type of the file. It is used to obtain the actual content of non-text messages such as pictures, files, voice, videos, etc. See API Details.
local_pathsend_message — Send text message
bash
wecom-cli msg send_message '{"chat_type": 1, "chatid": "zhangsan", "msgtype": "text", "text": {"content": "hello world"}}'Send text messages to private chats or group chats. See API Details.
Core Rules
Time Range Rules
- Format: All time parameters use format
YYYY-MM-DD HH:mm:ss - Default range: When not specified by the user, the default is the last 7 days (counting back 7 days from the current time)
- Limit: The start time cannot be earlier than 7 days before the current time, and cannot be later than the current time
- Relative time support: Supports automatic calculation for "yesterday", "last three days", etc.
chatid Search Rules
- When the user provides a person name or group name instead of ID:
- Call to get the session list (the time range is consistent with the target query)
get_msg_chat_list - Match by in
chat_namechats - Matching strategy:
- Exact match with unique result: use directly
- Fuzzy match with multiple results: display candidate list for user to choose
- No matching result: inform the user that no match is found
- Call
- chat_type judgment: The return of does not contain the session type field, which needs to be inferred from context: use
get_msg_chat_listwhen the user explicitly mentions "group", otherwise default tochat_type=2(private chat)chat_type=1
userid to name Conversion
Process:
- Call of
get_userlistskill to get user listwecomcli-contact - Establish mapping relationship from userid to name
- Display strategy:
- Exact match: display name
- No match: keep displaying userid
Mandatory Interaction Steps (Cannot be skipped)
The following steps must be executed one by one when non-text message download is involved, and shall not be merged, omitted or skipped, even if the user does not actively ask:
- Must actively inform the file location: After the download is completed, you must immediately show the user the full path and storage directory of all files
- Must ask whether to delete: After informing the location, you must immediately ask the user whether to clean up the temporary files
Typical Workflows
View Session List
User query examples:
- "See what chats I have had in the last week"
- "Who sent me messages these days"
Execution process:
- Determine the time range (specified by the user or default to the last 7 days)
- Call to get the session list
get_msg_chat_list - Display session name, last message time, and number of messages
- If is
has_more, inform the user that there are more sessions available for further viewingtrue
View Chat Records
User query examples:
- "Help me check the recent chat records with Zhang San"
- "Check the recent messages in the project group"
Execution process:
- Determine the time range (specified by the user or default to the last 7 days)
- Determine the and
chatidof the target session according to chatid search ruleschat_type - Call to pull the message list
get_message - Call of
get_userlistskill to get the address book, and establish userid→name mappingwecomcli-contact - Count non-text messages: Traverse the message list, count the number and type of messages with not
msgtype(image/file/voice/video)text - Replace with readable name when displaying messages, format:
userid- Text message:
Name [Time]: Content - Image message:
Name [Time]:[Image] - File message:
Name [Time]:[File] File name - Voice message:
Name [Time]:[Voice] Voice content - Video message:
Name [Time]:[Video]
- Text message:
- Non-text message processing: After displaying the messages, if there are non-text messages:
- Actively ask whether to download: Inform the user of the number and type of non-text messages (e.g.: "The above chat contains 2 pictures and 1 file, do you need to download them to local?")
- After user confirmation, call interface one by one, the interface will automatically download the file and return
get_msg_medialocal_path - Check file suffix: After each file is downloaded, check whether the file corresponding to has the correct suffix:
local_path- Judge according to (MIME type) and
content_typefield returned byname:get_msg_media- If the file name lacks a suffix (e.g. instead of
screenshot), automatically add the correct suffix according toscreenshot.png(e.g.content_type→image/png,.png→application/pdf,.pdf→audio/amr,.amr→video/mp4).mp4 - If the file name suffix is inconsistent with , correct it based on
content_typecontent_type
- If the file name lacks a suffix (e.g.
- After completing or correcting the suffix, rename the file to the correct file name
- Confirm that the file can be read normally (file size > 0), if the file is empty or damaged, inform the user that the file download is abnormal
- Judge according to
- ⚠️ Do not use command for downloaded files: These files are historical attachments downloaded from chat records, you only need to inform the user of the local storage path, it is strictly forbidden to resend them to the user through
MEDIA:commandMEDIA:
- ⚠️ Must actively inform the file location (this step cannot be skipped): After all files are downloaded and checked, you must immediately and actively display the file storage directory and the full path of each file to the user in a summary form, do not wait for the user to ask. Example:
📁 Files have been downloaded to the following locations:
- Image:
xxx/yyy.png - File:
xxx/yyy.pdf
You can find all downloaded files in thedirectory.xxx/yyy/ - Image:
- ⚠️ Must ask whether to delete (this step cannot be skipped): After informing the file location, you must immediately and actively ask the user whether to delete the downloaded temporary files (e.g.: "If you no longer need these files, do you want me to clean them up for you?")
- After the user confirms deletion, delete the file corresponding to
local_path - Keep the file if the user does not need to delete it
- After the user confirms deletion, delete the file corresponding to
- If is not empty, inform the user that there are more messages available for further viewing
next_cursor
Send Message
User query examples:
- "Help me send a message to Zhang San: Tomorrow's meeting is rescheduled to 3 PM"
- "Send a message in the project group: There is a meeting at 3 PM today"
Execution process:
- Determine the and
chatidof the target session according to chatid search ruleschat_type - Confirmation before sending: Confirm the sending object and content with the user (e.g.: "About to send to Zhang San: 'Tomorrow's meeting is rescheduled to 3 PM', confirm to send?"), execute after user confirmation
- Call to send (
send_messageis fixed asmsgtype)text - Display the sending result
View Messages and Reply
User query example:
- "See what Zhang San sent me, then help me reply received"
Execution process:
- First execute the "View chat records" process (reuse the obtained and
chatid)chat_type - After displaying the messages, execute the "Send message" process (need to confirm before sending)
Error Handling
- Time range exceeded: Inform the user of the 7-day limit and adjust to the valid range
- Session not found: Clearly inform the user that the corresponding session is not found
- API error: Display specific error information, retry if necessary
- Network problem: Actively retry up to 3 times when HTTP error occurs