跳至主要内容
小龙虾小龙虾AI
🤖

飞书 Bitable 查询

使用服务器端过滤器、排序、字段选择和多种输出格式查询飞书 Bitable(多维表格)。当使用条件查询 bitable 记录时激活...

下载52
星标0
版本1.0.0
效率工具
安全通过
⚙️脚本

技能说明


name: feishu-bitable-query description: Query Feishu Bitable (多维表格) with server-side filter, sort, field selection, and multiple output formats. Activate when querying bitable records with conditions, filtering multidimensional table data, or when data volume is large and client-side filtering is inefficient. Preferred over feishu_bitable_list_records tool when filter expressions or full pagination is needed.

Feishu Bitable Query

Use scripts/feishu_bitable_query.py to query Bitable tables with server-side filtering. This avoids pulling all records into context and handles pagination automatically.

When to Use This Script vs the Built-in Tool

  • Use this script when: filter conditions are needed, data volume is large (>100 records), need specific output format (TSV/JSONL), or need to pipe results to other scripts
  • Use the built-in tool (feishu_bitable_list_records) when: simple reads, small tables, or no filter needed

Quick Reference

SCRIPT="scripts/feishu_bitable_query.py"

# Count records matching a filter
python3 $SCRIPT --app-token APP --table-id TBL --filter 'EXPR' --count

# Query with filter, compact output
python3 $SCRIPT --app-token APP --table-id TBL \
  --filter 'EXPR' \
  --compact-fields '["字段1","字段2"]' \
  --all-pages 2>/dev/null

# Query with view (uses view's built-in filter/sort)
python3 $SCRIPT --app-token APP --table-id TBL --view-id VIEW --all-pages

# TSV output for readability
python3 $SCRIPT --app-token APP --table-id TBL \
  --compact-fields '["描述","状态"]' --format tsv --all-pages 2>/dev/null

# JSONL for piping to other tools
python3 $SCRIPT --app-token APP --table-id TBL --format jsonl --all-pages 2>/dev/null

Key Options

OptionDescription
--filter飞书 filter 表达式 (server-side)
--sortSort expression
--fieldsAPI 层面只返回指定字段 (JSON array)
--view-id使用视图的筛选排序
--compact-fields输出时只显示指定字段,自动格式化 (JSON array)
--formatjson (default), jsonl, tsv
--all-pages自动翻页拉取全部
--count只输出匹配总数
--include-id输出中包含 record_id
--time-filter本地时间过滤 (可多次), 格式见下方
--page-size每页条数 1-500, default 500

Filter 两种模式

模式 1: 公式语法 --filter(GET List API)

CurrentValue.[字段名]="值"
AND(CurrentValue.[字段名]="值", CurrentValue.[字段2]="值2")
CurrentValue.[Owner].contains("张三")

优点:Link 字段返回完整 text。缺点:日期字段不支持范围比较。

模式 2: JSON 结构体 --filter-json(POST Search API)

--filter-json '{
  "conjunction": "and",
  "conditions": [
    {"field_name": "进度 Owner", "operator": "contains", "value": ["ou_xxx"]},
    {"field_name": "结束时间", "operator": "isGreater", "value": ["ExactDate", "1770000000000"]}
  ]
}'

支持的 operator: is, isNot, contains, doesNotContain, isEmpty, isNotEmpty, isGreater, isLess, isGreaterEqual, isLessEqual

日期字段 value 格式: ["ExactDate", "毫秒时间戳"], ["Today"], ["TheLastMonth"], ["TheNextWeek"]

优点:支持日期范围过滤(服务端)。缺点:DuplexLink 字段不返回 text(只返回 record_id)。

选择建议

  • 需要 Link 字段文本(如「所属任务」名称)→ 用 --filter + --time-filter(本地时间过滤)
  • 大量数据只需日期过滤(不关心 Link 文本)→ 用 --filter-json(服务端过滤更高效)
  • 两者结合:先用 --filter-json 做粗筛,再用 --time-filter 做精细过滤

Time Filter (本地时间过滤)

飞书 API 不支持对时间戳字段做范围比较,--time-filter 在本地过滤(拉取后过滤)。

格式:字段名:规则,可多次使用。

# 前后 N 天
--time-filter '结束时间:14d'

# 未来 N 天
--time-filter '结束时间:14d+'

# 过去 N 天
--time-filter '更新:30d-'

# 晚于/早于指定日期
--time-filter '结束时间:>2026-02-16'
--time-filter '结束时间:<2026-03-16'

# 日期范围
--time-filter '结束时间:2026-02-16~2026-03-16'

# 组合多个时间过滤
--time-filter '结束时间:14d' --time-filter '更新:30d-'

Field Auto-Formatting

--compact-fields 自动处理常见字段类型:

  • User 字段: [{name: "张三"}]"张三"
  • 时间戳字段 (更新/创建时间/开始时间/结束时间): 1770574521000"2026-02-09"
  • MultiSelect: ["opt1", "opt2"]"opt1, opt2"
  • Link 字段: [{text: "xxx"}]"xxx"

Piping Pattern

# Query → filter locally → format
python3 $SCRIPT --app-token APP --table-id TBL \
  --filter 'CurrentValue.[Owner].contains("张三")' \
  --compact-fields '["描述","状态","更新"]' \
  --format jsonl --all-pages 2>/dev/null \
  | python3 -c "
import json,sys
for line in sys.stdin:
    r = json.loads(line)
    if r.get('状态') == '执行中':
        print(f'  - {r[\"描述\"]} ({r[\"更新\"]})')
"

Auth

Script reads credentials from ~/.openclaw/openclaw.jsonchannels.feishu.appId/appSecret automatically. No manual token needed.

Stderr vs Stdout

  • stderr: pagination progress (Page 1: 500 records...)
  • stdout: query results only

Always use 2>/dev/null when piping to suppress progress output.

如何使用「飞书 Bitable 查询」?

  1. 打开小龙虾AI(Web 或 iOS App)
  2. 点击上方「立即使用」按钮,或在对话框中输入任务描述
  3. 小龙虾AI 会自动匹配并调用「飞书 Bitable 查询」技能完成任务
  4. 结果即时呈现,支持继续对话优化

相关技能