소스 정보
- 저장소
- Aquarius-mu/FeiShubot_Gp_Agent
- 최근 소스 활동
- 2026년 4월 17일 05:05
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 1
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
SOC 직업 분류 기준
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/Aquarius-mu/FeiShubot_Gp_Agent --skill feishu-lark-cli명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
飞书交互卡片(schema 2.0):构建和发送卡片消息,含 @提及、流式思考态、原地更新、按钮/选择器交互。通过 lark-cli --as bot 发送,无需手动管理 token。
飞书Bot文件操作安全规范:白名单写入 ~/feishu_bot/cache/,禁止操作敏感路径和脚本文件,所有写入必须 flock+jq 原子替换。
飞书Bot缓存管理:读写 ~/feishu_bot/cache/ 下的 tokens/groups/users JSON,含TTL校验、flock并发写入、name_cache同步、旧cache.json迁移。
| name | feishu-lark-cli |
| version | 1.0.0 |
| description | 飞书 lark-cli 操作完整指南:消息/文档/表格/群组/用户/日历/任务,内嵌所有关键规则和典型流程。 |
| metadata | {"requires":{"bins":["lark-cli","jq","python3"]},"cliHelp":"lark-cli --help"} |
LARK=/home/jiadongsun/nodejs/node22.15/bin/lark-cli
# 或直接用 lark-cli(已在 PATH)
| 场景 | 身份 |
|---|---|
| 发消息到群/私聊 | --as bot(+messages-send 必须 bot) |
| 搜索群、搜索用户、读文档 | --as user |
| 获取群成员、读日历、创建任务 | --as user |
| 回复消息 | --as bot |
lark-cli schema im.messages.create
lark-cli schema contact.users.get
# 正确
lark-cli im chat.members get --params '{"chat_id":"oc_xxx"}' --as user --page-all
# 错误 ❌
lark-cli im chat.members get --chat-id oc_xxx
| 消息类型 | @语法 | 示例 |
|---|---|---|
卡片 interactive lark_md | <at id="ou_xxx">姓名</at> | <at id="ou_abc">张三</at> |
文本 text | <at user_id="ou_xxx">姓名</at> | <at user_id="ou_abc">张三</at> |
--text "姓名" | 纯文本无@效果 ❌ | — |
# 卡片 lark_md
"<at id=\"all\">所有人</at>"
# 文本
'{"text": "<at user_id=\"all\">所有人</at> 内容"}'
CONTENT=$(python3 -c "import json; print(json.dumps({'text': '消息内容'}))")
lark-cli im +messages-send \
--chat-id oc_xxx \
--msg-type text \
--content "$CONTENT" \
--as bot
CARD=$(python3 -c "
import json
card = {
'schema': '2.0',
'header': {'title': {'tag': 'plain_text', 'content': '标题'}, 'template': 'blue'},
'config': {'streaming_mode': False},
'body': {'elements': [
{'tag': 'markdown', 'content': '内容'}
]}
}
print(json.dumps(card))
")
lark-cli im +messages-send \
--chat-id oc_xxx \
--msg-type interactive \
--content "$CARD" \
--as bot
CARD=$(python3 -c "
import json
card = {
'schema': '2.0',
'header': {'title': {'tag': 'plain_text', 'content': '【通知】'}, 'template': 'green'},
'body': {'elements': [
{'tag': 'markdown', 'content': '<at id=\"ou_aaa\">张三</at> <at id=\"ou_bbb\">李四</at>\n请查收~'}
]}
}
print(json.dumps(card))
")
lark-cli im +messages-send --chat-id oc_xxx --msg-type interactive --content "$CARD" --as bot
CONTENT=$(python3 -c "import json; print(json.dumps({'text': '回复内容'}))")
lark-cli im +messages-reply \
--message-id om_xxx \
--msg-type text \
--content "$CONTENT" \
--as bot
lark-cli im +messages-send \
--user-id ou_xxx \
--msg-type text \
--content '{"text":"私聊内容"}' \
--as bot
lark-cli wiki +search --query "关键词" --as user
# wiki URL: /wiki/{node_token}
lark-cli wiki spaces get_node \
--params '{"token":"IU9ywLNvEi5WLDkEehAc0alwn5b"}' \
--as user
# 返回 obj_token(即 spreadsheet_token 或 docx_token)
lark-cli doc +content --document-token xxx --as user
lark-cli sheets +info --spreadsheet-token xxx --as user
lark-cli sheets +read \
--spreadsheet-token xxx \
--sheet-id yyy \
--range "A1:Z100" \
--as user
Step 1:获取 metainfo(找 blockToken)
lark-cli api GET /open-apis/sheets/v2/spreadsheets/{spreadsheetToken}/metainfo --as user
# 返回各 sheet 的 blockInfo.blockToken,格式:{base_token}_{table_id}
Step 2:解析 blockToken
BvXLbhpxPaybGNsfCTucV6VfnDb_tblshNr3dE1oWqU0
→ base_token = BvXLbhpxPaybGNsfCTucV6VfnDb
→ table_id = tblshNr3dE1oWqU0
Step 3:读 bitable 记录
lark-cli base +record-list \
--base-token BvXLbhpxPaybGNsfCTucV6VfnDb \
--table-id tblshNr3dE1oWqU0 \
--limit 100 \
--as user
禁止走的错误路径:
lark-cli base +table-list --base-token {spreadsheet_token} # ❌ 91402 NOTEXIST
lark-cli sheets +read --sheet-id {bitable_sheet_id} # ❌ sheetId not found
lark-cli base +record-list --base-token {sheet_id} # ❌ 91402 NOTEXIST
{
"data": {
"fields": ["字段名1", "字段名2"],
"data": [["值1", "值2"], ["值1", "值2"]],
"has_more": false
}
}
多字段时不传 --field-id(它只支持单个字段),拿全量本地提取。
lark-cli base records create \
--params '{"app_token":"xxx","table_id":"tblyyy"}' \
--data '{"fields":{"字段名":"值"}}' \
--as user
lark-cli im +chat-search --query "群名关键词" --as user
lark-cli im +chats-get --chat-id oc_xxx --as bot
lark-cli im chat.members get \
--params '{"chat_id":"oc_xxx"}' \
--as user \
--page-all
lark-cli contact +search-user --query "张三" --as user
lark-cli contact +get-user \
--user-id ou_xxx \
--user-id-type open_id \
--as user \
--jq '.data.user | {name,en_name,email,department_ids}'
lark-cli calendar +agenda --as user
lark-cli calendar +event-create \
--summary "会议名称" \
--start "2026-04-17T10:00:00+08:00" \
--end "2026-04-17T11:00:00+08:00" \
--as user
lark-cli task +get-my-tasks --as user
lark-cli task +create \
--summary "任务标题" \
--due "2026-04-20T18:00:00+08:00" \
--as user
返回 code != 0 时读 msg 字段告知用户,不静默忽略:
result=$(lark-cli im +messages-send ... 2>&1)
code=$(echo "$result" | jq -r '.code // 0')
if [[ "$code" != "0" ]]; then
msg=$(echo "$result" | jq -r '.msg // "未知错误"')
echo "Error $code: $msg"
fi
常见错误码:
| code | 含义 |
|---|---|
| 91402 | bitable/base token 不存在,检查是否用了错误的 token |
| 99991663 | access token 过期,重新 lark-cli auth login |
| 230002 | 没有操作权限,检查 --as bot/user |
# Step 1: 搜知识库,找到 node_token
lark-cli wiki +search --query "MLA配置确认表" --as user | jq '.data.items[0]'
# Step 2: 解析 node_token → obj_token(spreadsheet_token)
NODE_TOKEN="IU9ywLNvEi5WLDkEehAc0alwn5b"
OBJ_TOKEN=$(lark-cli wiki spaces get_node \
--params "{\"token\":\"$NODE_TOKEN\"}" --as user \
--jq '.data.node.obj_token')
# Step 3: 看 sheet 列表,找嵌入的 bitable
lark-cli sheets +info --spreadsheet-token "$OBJ_TOKEN" --as user
# Step 4: 获取 metainfo → 提取 blockToken
METAINFO=$(lark-cli api GET /open-apis/sheets/v2/spreadsheets/${OBJ_TOKEN}/metainfo --as user)
BLOCK_TOKEN=$(echo "$METAINFO" | jq -r '.data.sheets[] | select(.title=="目标sheet名") | .blockInfo.blockToken')
# Step 5: 解析 base_token + table_id
BASE_TOKEN=${BLOCK_TOKEN%_*}
TABLE_ID=${BLOCK_TOKEN#*_}
# Step 6: 读 bitable 记录
lark-cli base +record-list \
--base-token "$BASE_TOKEN" \
--table-id "$TABLE_ID" \
--limit 200 --as user
# Step 7: 整理负责人 open_id,构建卡片发群
CARD=$(python3 -c "
import json, sys
card = {
'schema': '2.0',
'header': {'title': {'tag': 'plain_text', 'content': '通知'}, 'template': 'green'},
'body': {'elements': [{'tag': 'markdown', 'content': '<at id=\"ou_aaa\">张三</at> 请处理~'}]}
}
print(json.dumps(card))
")
lark-cli im +messages-send --chat-id oc_xxx --msg-type interactive --content "$CARD" --as bot