feishu-bitable-creator

ClawSkills 作者 clawskills

Create and populate Feishu (Lark) Bitable (multidimensional tables) with automated cleanup. Use when the user needs to: 1. Create a new Bitable from scratch with clean structure (no placeholder rows/columns) 2. Batch create fields and records in a Bitable 3. Convert structured data into a Bitable format 4. Create data tables for research, comparison, or tracking purposes Automatically handles: empty placeholder row cleanup, default column removal, intelligent primary field naming, and batch record creation.

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install clawskills:clawskills~gaowanqi08141999-feishu-bitable-creator
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Aclawskills~gaowanqi08141999-feishu-bitable-creator/file -o gaowanqi08141999-feishu-bitable-creator.md
# Feishu Bitable Creator

Creates clean, ready-to-use Feishu Bitable tables with automatic cleanup and data population.

## Authentication & Permissions

This skill requires a **pre-configured Feishu (Lark) integration** via OpenClaw's channel system. It does not accept API keys directly from the user.

### How Authentication Works

1. **Feishu Channel Configuration**: Your OpenClaw instance must have the Feishu channel enabled and configured with a valid app ID and app secret in `~/.openclaw/openclaw.json`:
   ```json
   {
     "channels": {
       "feishu": {
         "enabled": true,
         "appId": "cli_xxxxxxxxxxxxxxxx",
         "appSecret": "your-app-secret"
       }
     }
   }
   ```

2. **Token Management**: OpenClaw's Feishu extension automatically handles token acquisition and refresh using the configured app credentials. No manual token management is required.

3. **User Consent**: When creating a table, the tool uses the **agent's own identity** (the Feishu app/bot). The `addBitableAdmin()` function requires the owner's explicit `user_id` obtained from the conversation context, ensuring consent.

### Required Feishu App Permissions

Your Feishu app must have these permissions granted:

| Permission | Purpose |
|------------|---------|
| `bitable:app` | Create and manage Bitable apps |
| `drive:permission:manage` | Add users as admins to documents |
| `drive:drive:read` | Read drive contents |

### Security Notes

- ⚠️ **No User-Supplied Credentials**: This skill does NOT accept API keys, tokens, or secrets from user prompts. All authentication is handled through OpenClaw's secure channel configuration.
- ⚠️ **Scope Limitation**: The skill only performs actions on Bitable tables it creates. It cannot access existing tables without explicit sharing.
- ⚠️ **Admin Addition Requires Explicit User ID**: Adding an admin requires the specific `user_id` from conversation context — the agent cannot arbitrarily add unknown users.

### Setup Instructions

Before using this skill, ensure your OpenClaw host admin has:

1. Created a Feishu app at https://open.feishu.cn/app
2. Enabled the required permissions in the Feishu app console
3. Configured the app ID and secret in `~/.openclaw/openclaw.json`
4. Restarted the OpenClaw gateway to apply changes

For detailed setup, see: https://docs.openclaw.ai/channels/feishu

**Problem with default Bitable creation:**
- Feishu creates 10 empty placeholder rows by default
- Creates 4 default columns (文本, 单选, 日期, 附件) that are often unused
- Primary field is always named "文本" which is not descriptive
- Creator has full control, but human owner has no permissions

**This skill solves these issues:**
- ✅ Automatically deletes empty placeholder rows and default columns
- ✅ Intelligently renames primary field based on table name
- ✅ Adds owner as admin with full permissions
- ✅ Provides clean slate for your actual data

## Quick Start

```typescript
// 1. Create table (auto-cleans placeholder rows & default columns)
const table = await feishu_bitable_create_app({ name: "项目名称清单" });
// Returns: { app_token, url, table_id, primary_field_name, cleaned_placeholder_rows, cleaned_default_fields }

// 2. Add owner as admin (REQUIRED - get user_id from conversation context)
await addBitableAdmin({
  app_token: table.app_token,
  user_id: "ou_xxxxxxxxxxxxxxxx"  // Get from conversation context or Feishu user profile
});

// 3. Create RICH fields with tags/categories (建议根据场景选择)
// 参考 "Designing Rich Fields" 章节,选择适合的维度字段

// 4. Add records with complete tag information
await feishu_bitable_create_record({
  app_token: table.app_token,
  table_id: table.table_id,
  fields: {
    [table.primary_field_name]: "项目A",
    "标签": ["AI", "开源"],           // MultiSelect for filtering
    "分类": "技术",                   // SingleSelect for grouping
    "状态": "进行中",                 // SingleSelect for workflow
    "优先级": "高"                   // SingleSelect for sorting
  }
});

return table.url;
```

## Designing Rich Fields (发挥多维表格价值)

**💡 核心建议**: 为了让多维表格真正发挥作用,建议设计丰富的标签/分类字段,但**根据实际场景灵活选择**。

### 推荐的字段设计思路

根据数据类型,**考虑**添加以下维度字段:

| 数据场景 | 建议字段 | 用途 |
|---------|---------|------|
| **项目管理** | 状态、优先级、负责人、截止日期 | 追踪进展,分配任务 |
| **研究/调研** | 分类、标签、来源、评分 | 归类信息,评估价值 |
| **产品/功能** | 模块、优先级、状态、负责人 | 产品规划,迭代管理 |
| **客户/用户** | 类型、阶段、标签、负责人 | 客户分层,跟进管理 |
| **竞品分析** | 分类、评分、标签、来源 | 对比分析,筛选查看 |

### 字段类型选择指南

| 字段名 | 类型 | 适用场景 |
|--------|------|---------|
| **标签** | MultiSelect | 一个项目可属于多个类别,用于交叉筛选 |
| **分类** | SingleSelect | 一级分类,用于分组统计 |
| **状态** | SingleSelect | 有明确流转阶段,如待办→进行中→完成 |
| **优先级** | SingleSelect | 需要排序或区分重要性 |
| **负责人** | User | 需要分配到人 |
| **日期** | DateTime | 有时间节点要求 |
| **评分** | Number | 需要量化评估 |
| **来源** | SingleSelect | 需要追踪信息出处 |

### 实际设计示例

**示例1:开源大模型研究**
```typescript
const fields = [
  { name: "模型名称", type: 1 },
  { name: "开发团队", type: 1 },
  { name: "参数量", type: 1 },
  // 维度字段(根据数据特点选择)
  { name: "技术标签", type: 4 },      // ["MoE", "多语言", "代码", "轻量级"]
  { name: "地区", type: 3 },          // "美国"/"中国"/"欧洲"
  { name: "模型类型", type: 3 },      // "通用"/"代码"/"推理"
  { name: "适用场景", type: 4 },      // ["企业部署", "端侧运行", "科研"]
  { name: "开源协议", type: 3 },      // "Apache-2.0"/"MIT"
  { name: "发布日期", type: 5 },
  { name: "特点描述", type: 1 }
];
```

**示例2:工作任务清单**
```typescript
const fields = [
  { name: "任务名称", type: 1 },
  { name: "描述", type: 1 },
  // 维度字段
  { name: "分类", type: 3 },          // "技术"/"产品"/"运营"
  { name: "状态", type: 3 },          // "待办"/"进行中"/"已完成"
  { name: "优先级", type: 3 },        // "P0"/"P1"/"P2"
  { name: "负责人", type: 11 },       // @username
  { name: "截止日期", type: 5 },
  { name: "标签", type: 4 }           // ["紧急", "重要", "外部依赖"]
];
```

### 设计原则

1. **先想怎么用**:先思考用户会如何筛选/分组/排序数据
2. **适度原则**:字段不是越多越好,选择真正能区分数据的维度
3. **数据可得**:确保收集数据时能填上这些字段,不要设计无法获取的维度
4. **灵活调整**:如果某个字段使用率很低,后续可以删除或修改

### 检验标准

设计完字段后,问自己:
- ❓ 用户能按哪些维度筛选数据?
- ❓ 能按哪些维度分组查看?
- ❓ 能按哪些维度排序?
- ❓ 数据收集时这些字段是否容易获取?

如果以上问题都有明确答案,说明字段设计合理!

### 实际示例:开源大模型表格

```typescript
// 创建表格
const table = await feishu_bitable_create_app({ name: "全球开源大模型TOP10" });

// 添加管理员
await addBitableAdmin({ app_token: table.app_token, user_id: bossUserId });

// 创建丰富的字段(带标签/分类)
const fields = [
  { name: "排名", type: 2 },                                    // Number
  { name: "模型名称", type: 1 },                                // Text
  { name: "开发团队", type: 1 },                                // Text
  { name: "参数量", type: 1 },                                  // Text
  { name: "标签", type: 4, property: { options: [              // MultiSelect
    { name: "MoE" }, { name: "多语言" }, { name: "代码" }, 
    { name: "轻量级" }, { name: "推理优化" }, { name: "国产" }
  ]}},
  { name: "地区", type: 3, property: { options: [              // SingleSelect
    { name: "美国" }, { name: "中国" }, { name: "欧洲" }, 
    { name: "中东" }, { name: "其他" }
  ]}},
  { name: "类型", type: 3, property: { options: [               // SingleSelect
    { name: "通用模型" }, { name: "代码模型" }, { name: "推理模型" }
  ]}},
  { name: "开源协议", type: 3, property: { options: [           // SingleSelect
    { name: "Apache-2.0" }, { name: "MIT" }, { name: "Llama License" },
    { name: "Qwen License" }
  ]}},
  { name: "GitHub星标", type: 2 },                              // Number
  { name: "发布日期", type: 5 },                                // DateTime
  { name: "特点", type: 1 },                                    // Text
  { name: "适用场景", type: 4, property: { options: [           // MultiSelect
    { name: "企业部署" }, { name: "端侧运行" }, { name: "科学研究" },
    { name: "商业应用" }, { name: "教育学习" }
  ]}}
];

for (const field of fields) {
  await feishu_bitable_create_field({
    app_token: table.app_token,
    table_id: table.table_id,
    field_name: field.name,
    field_type: field.type,
    property: field.property
  });
}

// 添加带完整标签的数据
await feishu_bitable_create_record({
  app_token: table.app_token,
  table_id: table.table_id,
  fields: {
    [table.primary_field_name]: "Llama 3",
    "模型名称": "Llama 3",
    "排名": 1,
    "开发团队": "Meta",
    "参数量": "8B/