Skill: wanderen/feishu-crm-automation (version 1.0.0)

--- name: feishu-crm-automation description: 飞书CRM自动化技能。当用户提到客户管理、销售跟进、CRM录入、飞书表格自动填充、跟进提醒、生成本周客户报告时使用。功能：客户信息录入多维表格、超期未跟进自动提醒、客户周报生成。 version: 1.0.0 --- # 飞书CRM自动化技能 ## 快速开始 ### 核心功能 1. **客户录入** - 将客户信息写入飞书多维表格 2. **跟进提醒** - 自动找出超过N天未跟进的客户 3. **周报生成** - 生成本周新增客户汇总 ### 前提条件 - 飞书多维表格（Bitable）已创建，包含以下字段： - 客户名称（文本） - 联系方式（文本） - 客户需求（文本） - 最近跟进日期（日期） - 销售负责人（用户） - 状态（单选：潜在客户/跟进中/已成交/流失） ## 使用场景 ### 场景1：录入新客户 ``` 用户：添加客户 张三，手机 13800138000，需要买我们的企业版 我：提取信息并写入飞书多维表格 ``` ### 场景2：检查待跟进客户 ``` 用户：有哪些客户超过3天没跟进？ 我：查询多维表格，返回超期客户列表，并询问是否发送飞书提醒 ``` ### 场景3：生成本周周报 ``` 用户：生成本周客户周报 我：查询本周新增客户，生成摘要，包含：新增客户数、各状态分布、待跟进数量 ``` ## 工具调用 使用 `feishu_bitable_*` 系列工具操作多维表格： ```python # 1. 获取表格元信息 feishu_bitable_get_meta(url="飞书多维表格URL") # 2. 列出所有记录 feishu_bitable_list_records(app_token="xxx", table_id="xxx") # 3. 创建新记录 feishu_bitable_create_record(app_token="xxx", table_id="xxx", fields={ "客户名称": "张三", "联系方式": "13800138000", "客户需求": "企业版采购", "最近跟进日期": 1743004800000, # 毫秒时间戳 "销售负责人": [{"id": "ou_xxx"}], "状态": "潜在客户" }) # 4. 更新记录 feishu_bitable_update_record(app_token="xxx", table_id="xxx", record_id="xxx", fields={ "最近跟进日期": 1743091200000, "状态": "跟进中" }) ``` ## 关键参数格式 ### 日期字段 - 飞书日期字段需要毫秒时间戳 - Python转换：`int(datetime.timestamp() * 1000)` ### 用户字段 ```python {"id": "飞书open_id"} # 单个用户 [{"id": "ou_xxx"}, {"id": "ou_yyy"}] # 多个用户 ``` ### 日期计算（跟进超期判断） ```python from datetime import datetime, timedelta # 判断是否超过N天未跟进 def is_overdue(last_followup_ts, days=3): last_date = datetime.fromtimestamp(last_followup_ts / 1000) return (datetime.now() - last_date).days > days ``` ## 默认多维表格配置 如用户未指定表格，使用此默认配置引导创建： | 字段名 | 类型 | 说明 | |--------|------|------| | 客户名称 | 文本 | 必填 | | 联系方式 | 文本 | 手机号/微信/邮箱 | | 客户需求 | 文本 | 简要描述需求 | | 最近跟进日期 | 日期 | 上次跟进时间 | | 销售负责人 | 用户 | 责任人 | | 状态 | 单选 | 潜在客户/跟进中/已成交/流失 | | 创建时间 | 创建时间 | 自动填充 | ## 飞书CRM表格配置 **表格URL**: https://my.feishu.cn/base/KgoqbzS5ZaTwLRskzKxcVucvn0e **app_token**: KgoqbzS5ZaTwLRskzKxcVucvn0e **table_id**: tblzrBS1Gb73OhIS ### 字段ID映射 | 字段名 | field_id | 类型 | |--------|----------|------| | CRM客户管理 | fldKtf8UQz | 文本（主字段） | | 联系方式 | fldTnmsqI8 | 文本 | | 客户需求 | fldFObE09f | 文本 | | 最近跟进日期 | fld153WFu1 | 日期 | | 销售负责人 | fldK7mPBKS | 用户 | | 状态 | fld0I7rChc | 单选 | ## 参考文档 详细实现逻辑见： - [跟进提醒逻辑](references/跟进提醒逻辑.md) - [周报生成逻辑](references/周报生成逻辑.md) ## 注意事项 - 所有时间使用Asia/Shanghai时区 - 跟进提醒默认超期天数：3天（可配置） - 录入新客户时，状态默认为"潜在客户"

path: references/周报生成逻辑.md
content: # 周报生成逻辑

## 客户周报生成

```
用户问：生成本周客户周报
```

### 实现步骤

1. 计算本周时间范围（周一00:00 ~ 周日23:59）
2. 调用 feishu_bitable_list_records 获取所有记录
3. 筛选出本周创建的客户
4. 按状态分组统计
5. 生成摘要文字

### 代码逻辑

```python
from datetime import datetime, timedelta

def get_week_range():
    """获取本周一和下周一的时间戳（毫秒）"""
    today = datetime.now()
    # 本周一 00:00
    monday = today - timedelta(days=today.weekday())
    monday_start = monday.replace(hour=0, minute=0, second=0, microsecond=0)
    # 下周一 00:00（用于过滤）
    next_monday_start = monday_start + timedelta(days=7)
    
    return {
        "week_start": int(monday_start.timestamp() * 1000),
        "week_end": int(next_monday_start.timestamp() * 1000),
        "week_start_str": monday_start.strftime("%Y-%m-%d"),
        "week_end_str": (next_monday_start - timedelta(days=1)).strftime("%Y-%m-%d")
    }

def filter_this_week_clients(records, week_start_ms):
    """筛选本周新增的客户"""
    this_week = []
    
    for rec in records:
        # 飞书创建时间字段: CreatedTime (1001)
        # 如果没有这个字段，用其他方式判断
        fields = rec["fields"]
        # 多维表格的创建时间需要在fields里获取
        # 如果没有created_time字段，跳过这条判断
        
        # 简化：检查是否有"创建时间"字段
        created = fields.get("创建时间") or fields.get("fldCreatedTime")
        if created and created >= week_start_ms:
            this_week.append(rec)
    
    return this_week

def generate_weekly_report(records, week_range):
    """生成本周客户周报"""
    # 如果没有精确的创建时间字段，改用"最近跟进日期"来估算
    # 策略：本周有过跟进或新建的客户都算
    
    this_week_clients = []
    status_stats = {"潜在客户": 0, "跟进中": 0, "已成交": 0, "流失": 0}
    total_followups = 0
    
    week_start = week_range["week_start"]
    
    for rec in records:
        fields = rec["fields"]
        last_followup = fields.get("最近跟进日期")
        status = fields.get("状态", "未知")
        name = fields.get("CRM客户管理", "未知")
        
        # 统计各状态数量
        if status in status_stats:
            status_stats[status] += 1
        
        # 本周有跟进或新建的客户
        if last_followup and last_followup >= week_start:
            this_week_clients.append(name)
            total_followups += 1
    
    # 生成报告
    report_lines = [
        f"📊 **CRM客户周报**",
        f"📅 {week_range['week_start_str']} ~ {week_range['week_end_str']}\n",
        f"**本周概况**",
        f"- 本周活跃客户：{len(set(this_week_clients))} 位",
        f"- 本周跟进次数：{total_followups} 次\n",
        f"**客户状态分布**",
        f"- 潜在客户：{status_stats['潜在客户']} 位",
        f"- 跟进中：{status_stats['跟进中']} 位",
        f"- 已成交：{status_stats['已成交']} 位",
        f"- 流失：{status_stats['流失']} 位\n",
    ]
    
    return "\n".join(report_lines)
```


path: references/跟进提醒逻辑.md
content: # 跟进提醒逻辑

## 查询超期未跟进客户

```
用户问：有哪些客户超过3天没跟进？
```

### 实现步骤

1. 调用 feishu_bitable_list_records 获取所有客户记录
2. 遍历每条记录，找到"最近跟进日期"字段
3. 计算 (今天 - 最近跟进日期) > 3天
4. 返回超期客户列表

### 代码逻辑

```python
from datetime import datetime, timedelta

def get_overdue_customers(records, days=3):
    """返回超过N天未跟进的客户列表"""
    today = datetime.now()
    overdue = []
    
    for rec in records:
        fields = rec["fields"]
        followup_date = fields.get("最近跟进日期")
        
        if not followup_date:
            # 没有跟进记录，算超期
            overdue.append({
                "record_id": rec["id"],
                "客户名": fields.get("CRM客户管理"),
                "状态": "从未跟进",
                "超期天数": "未知"
            })
            continue
        
        # 飞书日期是毫秒时间戳
        last_date = datetime.fromtimestamp(followup_date / 1000)
        days_since = (today - last_date).days
        
        if days_since > days:
            overdue.append({
                "record_id": rec["id"],
                "客户名": fields.get("CRM客户管理"),
                "状态": fields.get("状态", {}),
                "超期天数": days_since,
                "最后跟进": last_date.strftime("%Y-%m-%d")
            })
    
    return overdue
```

## 生成提醒消息

```python
def format_overdue_message(overdue_list):
    """格式化超期客户为飞书消息"""
    if not overdue_list:
        return "🎉 太棒了！所有客户都有及时跟进"
    
    lines = [f"⚠️ 以下 {len(overdue_list)} 位客户超过3天未跟进：\n"]
    
    for i, c in enumerate(overdue_list, 1):
        name = c.get("客户名", "未知")
        days = c.get("超期天数", "?")
        status = c.get("状态", "")
        lines.append(f"{i}. **{name}**")
        lines.append(f"   超期 {days} 天 | 状态: {status}\n")
    
    lines.append("\n建议：尽快联系客户，保持跟进节奏 📞")
    return "\n".join(lines)
```


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: malicious | SkillSpector: suspicious (MEDIUM)