name: feishu-cli-chat
description: >-
飛書會話瀏覽、訊息互動與群聊管理。檢視聊天記錄、獲取群聊歷史訊息、搜尋群聊、
獲取訊息詳情、Reaction 表情回應、Pin 置頂/取消置頂、刪除訊息、
群聊資訊查詢與管理(獲取/更新/解散/成員管理)。
支援普通群和話題群兩種模式,話題群自動獲取執行緒回覆。所有命令需要 User Token。
當用戶請求"檢視聊天記錄"、"看和某人的訊息"、"群聊歷史"、"群訊息"、"搜尋群聊"、
"查群資訊"、"群成員"、"最近訊息"、"聊天記錄"、"Reaction"、"表情回應"、
"置頂訊息"、"Pin"、"刪除訊息"、"獲取訊息"、"訊息詳情"、
"和誰聊了什麼"、"群裡說了什麼"、"總結群訊息"、"話題回覆"、"執行緒回覆"、
"thread replies"時使用。
也適用於:使用者給出一個群聊名稱或 chat_id 並希望瀏覽其訊息的場景,
即使沒有明確說"聊天記錄"。當用戶想了解某個群最近在討論什麼、
想找和某人的對話內容、或想對訊息進行互動操作時,都應使用此技能。
argument-hint:
通過 feishu-cli 瀏覽飛書單聊/群聊訊息歷史、搜尋會話、管理群聊資訊和成員。
本技能的核心命令必須使用 User Token,使用前需先登入。chat create、chat link、msg read-users 使用 App Token,屬於 feishu-cli-toolkit 技能。
feishu-cli auth login
未登入時命令會直接報錯並提示登入方式。登入後 token 自動載入,無需手動傳參。
| 身份 | 使用場景 |
|---|---|
| User Token(必須) | 本技能所有讀取/管理命令:chat get/update/delete、member list/add/remove、msg get/history/list/pins/reaction/search-chats、search messages |
| App Token | 僅 chat create、chat link、msg read-users(這三個命令不屬於本技能核心流程) |
User Token 能力: - 檢視 bot 不在的群聊訊息 - 檢視私聊(p2p)訊息 - 搜尋使用者有許可權的所有會話
當使用 User Token 呼叫 msg history / msg list 時,如果 bot 不在目標群中,API 會返回空結果。CLI 會自動檢測這種情況並降級為 search + get 方式獲取訊息:
list API 返回空 + has_more=true → 自動切換到搜尋模式 → 逐條獲取訊息內容
這個過程對使用者透明,無需手動干預。
這是最常見的場景——使用者想看某個群最近在聊什麼。
如果使用者給了群名而不是 chat_id,先搜尋:
feishu-cli msg search-chats --query "群名關鍵詞" -o json
輸出中的 chat_id(形如 oc_xxx)就是後續命令需要的標識。
# 獲取最近 50 條訊息(API 單次上限 50)
feishu-cli msg history \
--container-id oc_xxx \
--container-id-type chat \
--page-size 50 \
--sort-type ByCreateTimeDesc \
-o json
# 按時間範圍獲取(--start-time 為毫秒級時間戳,僅返回該時間之後的訊息)
feishu-cli msg history \
--container-id oc_xxx \
--container-id-type chat \
--page-size 50 \
--start-time 1773778860000 \
--sort-type ByCreateTimeDesc \
-o json
# 獲取更早的訊息(使用上一次返回的 page_token 翻頁)
feishu-cli msg history \
--container-id oc_xxx \
--container-id-type chat \
--page-size 50 \
--page-token "上一頁返回的token" \
-o json
飛書群聊分為普通群和話題群兩種,訊息結構和獲取策略完全不同。
觀察 msg history 返回的訊息欄位:
| 群型別 | 特徵 | 示例 |
|---|---|---|
| 話題群 | 每條訊息都有 thread_id(形如 omt_xxx),主訊息流僅包含每個話題的首條訊息 |
泰國華商群 |
| 普通群 | 獨立訊息無 thread_id,僅被回覆的訊息和回覆訊息才有 thread_id |
Claude Code閒聊群 |
| 欄位 | 說明 | 出現條件 |
|---|---|---|
thread_id |
執行緒/話題 ID(形如 omt_xxx) |
話題群所有訊息 / 普通群中參與執行緒的訊息 |
root_id |
執行緒根訊息 ID(即話題首條訊息) | 執行緒回覆訊息 |
parent_id |
直接上級訊息 ID(被回覆的那條訊息) | 執行緒回覆訊息 |
普通群的 msg history 返回所有訊息(獨立訊息 + 執行緒回覆),平鋪在同一列表中。通過 root_id/parent_id 可重建回覆關係,不需要額外獲取執行緒。
獨立訊息: 無 thread_id、無 root_id
被回覆的訊息: 有 thread_id(被回覆後自動產生)
執行緒回覆: 有 thread_id + root_id + parent_id
話題群的 msg history --container-id-type chat 僅返回每個話題的首條訊息,執行緒回覆不在主訊息流中。必須按 thread_id 逐個獲取:
# 獲取單個話題的所有回覆(按時間正序,方便閱讀)
feishu-cli msg history \
--container-id omt_xxx \
--container-id-type thread \
--page-size 50 \
--sort-type ByCreateTimeAsc \
-o json
完整的話題群獲取流程:
# 1. 獲取主訊息流(每個話題的首條訊息)
feishu-cli msg history \
--container-id oc_xxx \
--container-id-type chat \
--page-size 50 \
--sort-type ByCreateTimeDesc \
-o json
# 2. 從返回結果中提取所有 thread_id
# 3. 對每個 thread_id 獲取回覆(可併發執行,提高效率)
feishu-cli msg history --container-id omt_xxx --container-id-type thread --page-size 50 --sort-type ByCreateTimeAsc -o json
feishu-cli msg history --container-id omt_yyy --container-id-type thread --page-size 50 --sort-type ByCreateTimeAsc -o json
# ... 多個話題可並行獲取
效能提示:話題群中活躍話題可能有 10-20 個,建議併發獲取多個話題的回覆。飛書 API 對
msg history無嚴格 QPS 限制(不同於搜尋 API),可以安全併發。
API 返回的訊息 body.content 是 JSON 字串,常見格式:
| msg_type | content 格式 | 說明 |
|---|---|---|
| text | {"text":"訊息內容"} |
純文本,@_user_1 是 at 佔位符 |
| post | 富文本 JSON | 包含標題和段落結構 |
| image | {"image_key":"xxx"} |
圖片 |
| interactive | 卡片 JSON | 互動式卡片 |
| share_calendar_event | {"summary":"會議名","start_time":"ms","end_time":"ms",...} |
日曆事件分享 |
| sticker | {"sticker_key":"xxx"} |
表情包 |
| file | {"file_key":"xxx","file_name":"..."} |
檔案 |
用 Python 提取文本內容的常用方式:
import json
content = json.loads(msg['body']['content'])
text = content.get('text', '')
# 1. 搜尋群聊
feishu-cli msg search-chats --query "Go討論區" -o json
# 2. 獲取訊息(迴圈翻頁直到夠數)
feishu-cli msg history \
--container-id oc_xxx \
--container-id-type chat \
--page-size 50 \
--sort-type ByCreateTimeDesc \
-o json > /tmp/chat_page1.json
# 3. 提取 page_token 獲取下一頁
# ... 迴圈直到獲取足夠訊息
注意:Search API 的 page_size 與 List API 不同,降級模式下每頁實際返回數量可能少於請求值。建議迴圈翻頁直到
has_more=false或達到目標數量。
飛書 Open API 不支援直接按使用者查詢 p2p 聊天記錄。需要通過搜尋 API 間接實現。
# 搜尋私聊訊息
feishu-cli search messages "關鍵詞" \
--chat-type p2p_chat \
-o json
# 如果知道對方的 open_id,可以按傳送者篩選
feishu-cli search messages "關鍵詞" \
--chat-type p2p_chat \
--from-ids ou_xxx \
-o json
# 獲取單條訊息詳情
feishu-cli msg get om_xxx -o json
如果使用者只給了郵箱或手機號,可以查詢對應的 open_id:
# 通過郵箱查詢使用者
feishu-cli user search --email user@example.com -o json
# 通過手機號查詢使用者
feishu-cli user search --mobile 13800138000 -o json
注意:
user search僅支援--mobile精確查詢,不支援按姓名模糊搜尋。
query 引數不能為空,至少需要一個空格 " "msg search-chats 搜尋(該 API 只搜尋群聊)msg get 獲取完整內容msg get 對私聊訊息可能返回 230001 錯誤(API 限制:部分私聊訊息不支援通過 Get API 獲取詳情),此時只能依賴搜尋結果中的摘要資訊# 按關鍵詞搜尋群聊
feishu-cli msg search-chats --query "關鍵詞" -o json
# 分頁獲取所有群
feishu-cli msg search-chats --page-size 100 -o json
# 在指定群中搜索訊息
feishu-cli search messages "關鍵詞" --chat-ids oc_xxx -o json
更多搜尋功能(按時間範圍、訊息型別、傳送者、跨模組搜尋文件/應用等)請使用 feishu-cli-search 技能,提供完整的篩選引數和 Token 排錯指南。
feishu-cli chat get oc_xxx
預設輸出 JSON 格式,包含群名、描述、群主、群型別、成員數量等。
# 獲取成員列表
feishu-cli chat member list oc_xxx
# 指定 ID 型別
feishu-cli chat member list oc_xxx --member-id-type user_id
# 分頁獲取(大群)
feishu-cli chat member list oc_xxx --page-size 100 --page-token "xxx"
Scope 要求:使用 User Token 時需要
im:chat:readonly或im:chat.members:readscope。若報 99991679 錯誤,需通過auth login --scopes "... im:chat:readonly"重新授權。7w4.net提供免費和付費技能下載。
# 改群名
feishu-cli chat update oc_xxx --name "新群名"
# 改群描述
feishu-cli chat update oc_xxx --description "新的群描述"
# 轉讓群主
feishu-cli chat update oc_xxx --owner-id ou_xxx
# 新增成員
feishu-cli chat member add oc_xxx --id-list ou_xxx,ou_yyy
# 移除成員
feishu-cli chat member remove oc_xxx --id-list ou_xxx
# 使用 user_id 型別
feishu-cli chat member add oc_xxx --id-list user_xxx --member-id-type user_id
feishu-cli chat create --name "新群聊" --user-ids ou_xxx,ou_yyy
注意:
chat create和chat link(獲取分享連結)僅支援 App Token(租戶身份),不支援 User Token。
feishu-cli chat delete oc_xxx
# 會要求確認,不可逆操作
feishu-cli msg get om_xxx -o json
feishu-cli msg read-users om_xxx -o json
限制:僅支援查詢 bot 自己傳送的、7 天內的訊息,且 bot 必須在會話內。此命令僅使用 App Token。
feishu-cli msg pins --chat-id oc_xxx -o json
# 置頂訊息
feishu-cli msg pin <message_id>
# 取消置頂
feishu-cli msg unpin <message_id>
# 新增表情
feishu-cli msg reaction add <message_id> --emoji-type THUMBSUP
# 刪除表情
feishu-cli msg reaction remove <message_id> --reaction-id <REACTION_ID>
# 查詢表情列表
feishu-cli msg reaction list <message_id> [--emoji-type THUMBSUP] [--page-size 20]
常用 emoji-type:THUMBSUP(點贊)、SMILE(微笑)、LAUGH(大笑)、HEART(愛心)、JIAYI(加一)、OK、FIRE
僅能刪除機器人自己傳送的訊息,不可恢復。
feishu-cli msg delete <message_id>
| 使用者意圖 | 命令 | Token |
|---|---|---|
| 看某群最近訊息 | msg history --container-id oc_xxx --container-id-type chat |
User |
| 看話題群的執行緒回覆 | msg history --container-id omt_xxx --container-id-type thread |
User |
| 看和某人的聊天 | search messages " " --chat-type p2p_chat --from-ids ou_xxx |
User |
| 搜尋群聊 | msg search-chats --query "關鍵詞" |
User |
| 在群內搜尋訊息 | search messages "關鍵詞" --chat-ids oc_xxx |
User |
| 查群資訊 | chat get oc_xxx |
User |
| 查群成員 | chat member list oc_xxx |
User |
| 改群名/群主 | chat update oc_xxx --name "新名" |
User |
| 加/刪群成員 | chat member add/remove oc_xxx --id-list xxx |
User |
| 查訊息詳情 | msg get om_xxx |
User |
| 看置頂訊息 | msg pins --chat-id oc_xxx |
User |
| 置頂/取消置頂 | msg pin/unpin <message_id> |
User |
| 新增 Reaction | msg reaction add <message_id> --emoji-type THUMBSUP |
User |
| 刪除訊息 | msg delete <message_id> |
User |
| 查訊息已讀 | msg read-users om_xxx |
App(僅 bot 訊息) |
| 建立群聊 | chat create --name "群名" |
App |
| 獲取群連結 | chat link oc_xxx |
App |
標記 User 的命令必須先
auth login,未登入會報錯。標記 App 的命令使用應用身份,無需登入。
當需要獲取並分析大量訊息(如 100+ 條)時:
-o json 輸出,重定向到檔案HasMore 和 PageToken,迴圈獲取直到滿足條件body.content 提取文本msg history 限頻較寬鬆,可安全併發create_time 是毫秒級時間戳,需除以 1000 轉為秒thread_id 單獨呼叫 msg history --container-id-type thread,建議並行呼叫多個話題以提高效率(實測 10-20 個併發無問題)deleted: true 的訊息內容為 "This message was recalled",彙總時應跳過import json
from datetime import datetime
# 解析訊息時間
ts = int(msg['create_time']) / 1000
dt = datetime.fromtimestamp(ts)
time_str = dt.strftime('%Y-%m-%d %H:%M')
# 提取文本內容
content = json.loads(msg['body']['content'])
text = content.get('text', '')
| scope | 說明 | 對應命令 |
|---|---|---|
im:message:readonly |
訊息讀取 | msg get/history/list |
im:message.group_msg:get_as_user |
User 身份讀取群訊息 | msg history/list(讀群訊息必需) |
im:message.pins |
訊息置頂管理 | msg pin/unpin/pins |
im:message.reactions |
訊息 Reaction | msg reaction add/remove/list |
im:message |
訊息讀寫 | msg delete |
im:chat:read |
群聊搜尋 | msg search-chats |
im:chat:readonly |
群聊資訊只讀 | chat get、chat member list |
im:chat.members:read |
群成員讀取 | chat member list |
im:chat |
群聊管理 | chat update/delete |
im:chat.members |
群成員管理 | chat member add/remove |
search:message |
訊息搜尋 | search messages |
| 場景 | 使用技能 |
|---|---|
| 瀏覽聊天記錄、搜尋群聊、群資訊/成員管理、Reaction/Pin/刪除/獲取訊息 | feishu-cli-chat(本技能) |
| 傳送訊息、回覆、轉發/合併轉發 | feishu-cli-msg |
| 搜尋文件/應用、高階訊息搜尋(多條件篩選) | feishu-cli-search |
| 表格、日曆、任務、檔案、知識庫等其他模組 | feishu-cli-toolkit |
| OAuth 登入、Token 管理 | feishu-cli-auth |
這個 Skill 質量不錯,文件寫得詳細清晰,能滿足檢視聊天記錄、管理群聊、搜尋訊息、新增表情互動等多種需求。內容按場景分類,容易理解,速查表和許可權說明也很實用。不過目前只有文字文件,沒有示例檔案,實際使用前可能需要自己動手試錯。總體來說功能較全、指引明確,是一款實用的飛書聊天管理工具。