🔄 卡若AI 同步 2026-03-20 12:22 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个

This commit is contained in:
2026-03-20 12:22:13 +08:00
parent 5bb1b9496c
commit f1e3a7ae22
5 changed files with 54 additions and 17 deletions

View File

@@ -8,7 +8,8 @@
python3 feishu_write_minutes_to_sheet.py [内部会议图片路径] [派对总结图片路径]
python3 feishu_write_minutes_to_sheet.py --party-image <图> --sheet-id bJR5sA --date-col 4 # 今日总结
python3 feishu_write_minutes_to_sheet.py --team-image <图> --sheet-id bJR5sA --date-col 20 # 团队会议
可同时传 --party-image 与 --team-image同一 date-col。本脚本不发飞书群。
python3 feishu_write_minutes_to_sheet.py --internal-image <图> --sheet-id bJR5sA --date-col 20 # 内部会议纪要
可同时传 --party-image、--team-image、--internal-image同一 date-col。本脚本不发飞书群。
"""
import os
import sys
@@ -113,25 +114,29 @@ def _resize_image_if_needed(path, max_bytes=MAX_IMAGE_BYTES):
def _find_col_and_rows_for_sheet(token, sheet_id, date_col):
"""返回 (col_idx 0-based, row_party, row_team) 或失败时 (None, None, None)"""
"""返回 (col_idx 0-based, row_party, row_team, row_internal) 或失败时 (None, None, None, None)"""
vals = read_range(token, f'{sheet_id}!A1:AG50')
if not vals or len(vals) < 2:
return None, None, None
return None, None, None, None
header = vals[0]
col_idx = None
for idx, cell in enumerate(header):
if str(cell).strip() == str(date_col).strip():
col_idx = idx
break
row_party = row_team = None
row_party = row_team = row_internal = None
for ri, row in enumerate(vals):
a1 = (row[0] if row and len(row) > 0 else '')
a1 = str(a1 or '').strip()
if '今日总结' in a1:
row_party = ri + 1
if '团队会议' in a1 or ('团队' in a1 and '会议' in a1) or ('内部会议' in a1 and '纪要' in a1):
if '团队会议' in a1 or ('团队' in a1 and '会议' in a1 and '内部' not in a1):
row_team = ri + 1
return col_idx, row_party, row_team
if '内部会议' in a1 and ('纪要' in a1 or '智要' in a1):
row_internal = ri + 1
elif '内部会议纪要' in a1 or '内部会议智要' in a1:
row_internal = ri + 1
return col_idx, row_party, row_team, row_internal
def write_image_to_cell(token, range_str, image_path, name=None):
@@ -169,6 +174,7 @@ def main():
parser.add_argument('image_party', nargs='?', default=DEFAULT_IMAGE_PARTY, help='派对总结图片路径')
parser.add_argument('--party-image', dest='party_image_override', type=str, help='派对「今日总结」行图片路径')
parser.add_argument('--team-image', dest='team_image_override', type=str, help='「团队会议」行图片路径')
parser.add_argument('--internal-image', dest='internal_image_override', type=str, help='「内部会议纪要」行图片路径')
parser.add_argument('--sheet-id', dest='sheet_id_override', type=str, help='工作表 ID如 3 月用 bJR5sA')
parser.add_argument('--date-col', dest='date_col_override', type=str, help='日期列号(表头单元格值),如 115 场用 4')
args = parser.parse_args()
@@ -179,6 +185,7 @@ def main():
date_col = args.date_col_override
party_image_override = (args.party_image_override or '').strip()
team_image_override = (args.team_image_override or '').strip()
internal_image_override = (args.internal_image_override or '').strip()
def _upload_one_image(token, col_idx, row_num, img_path, label):
if row_num is None:
@@ -196,7 +203,7 @@ def main():
print(f'❌ 「{label}」上传失败:', code, body)
return False
if (party_image_override or team_image_override) and sheet_id and date_col:
if (party_image_override or team_image_override or internal_image_override) and sheet_id and date_col:
token = load_token() or refresh_token()
if not token:
print('❌ 无法获取飞书 Token')
@@ -207,7 +214,10 @@ def main():
if team_image_override and not os.path.exists(team_image_override):
print('❌ 团队会议图片不存在:', team_image_override)
sys.exit(1)
col_idx, row_party, row_team = _find_col_and_rows_for_sheet(token, sheet_id, date_col)
if internal_image_override and not os.path.exists(internal_image_override):
print('❌ 内部会议纪要图片不存在:', internal_image_override)
sys.exit(1)
col_idx, row_party, row_team, row_internal = _find_col_and_rows_for_sheet(token, sheet_id, date_col)
if col_idx is None:
print('❌ 未找到日期列', date_col)
sys.exit(1)
@@ -222,6 +232,11 @@ def main():
ok_any = True
else:
sys.exit(1)
if internal_image_override:
if _upload_one_image(token, col_idx, row_internal, internal_image_override, '内部会议纪要'):
ok_any = True
else:
sys.exit(1)
if ok_any:
print('(未发飞书群)')
return

View File

@@ -63,8 +63,8 @@ ROWS = {
'127': [ '占卜玄学 AI职业定位TOKEN', 127, 0, 174, 10, 60, 18, 69, 14, 32 ],
# 128场 2026-03-19关闭页 187min/236成员/37最高/19新增/2礼物/29灵魂力小助手 185min建房/233进房/13人均/102互动/19关注话题知识
'128': [ '分享最赚钱一个月-知识节奏', 187, 0, 233, 13, 102, 2, 29, 19, 37 ],
# 129场 2026-03-20关闭页 200min/252成员/31最高/21新增/4礼物/561灵魂力/灵果+5257小助手 200min建房/250进房/14人均/187互动/21关注话题职场
'129': [ '分享最赚钱一月职场', 200, 0, 250, 14, 187, 4, 561, 21, 31 ],
# 129场 2026-03-20关闭页 200min/252成员/31最高/21新增/4礼物/561灵魂力/灵果+5257小助手 200min建房/250进房/14人均/187互动/21关注话题职场主题从妙记TXT分析AI手机、金融坏账、投流返点、正反馈
'129': [ 'AI手机金融坏账投流', 200, 0, 250, 14, 187, 4, 561, 21, 31 ],
}
# 场次→按日期列填写时的日期(表头为当月日期 1~31
SESSION_DATE_COLUMN = {'105': '20', '106': '21', '107': '23', '113': '2', '114': '3', '115': '4', '116': '5', '117': '6', '118': '7', '119': '8', '124': '14', '126': '17', '127': '18', '128': '19', '129': '20'}

View File

@@ -5,8 +5,8 @@ triggers: 运营报表、派对填表、派对截图填表发群、会议纪要
parent: 飞书管理
owner: 水桥
group: 水
version: "3.0"
updated: "2026-03-04"
version: "3.1"
updated: "2026-03-20"
---
# Soul 派对运营报表 · 基因胶囊
@@ -61,7 +61,7 @@ flowchart LR
| 1 | 填效果数据+小程序+派对录屏;(发群需显式开启) | 场次号 115 | `cd 飞书管理/脚本 && python3 soul_party_to_feishu_sheet.py 115` | 默认**不**发群;需发群时先 `export SOUL_PARTY_PUSH_GROUP=1` 再执行,控制台见「已写入」;见「已同步推送到飞书群」 |
| 2 | 纪要文本入表(可选) | TXT 路径、日期列 4 | `python3 write_party_minutes_from_txt.py "/path/to/soul 派对 115场 20260304.txt" 4` | 控制台见「已写入派对智能纪要到今日总结」 |
| 3 | 生成纪要图 | 见智能纪要 Skill | JSON→HTML→截图输出到 `卡若Ai的文件夹/报告/soul_115场_智能纪要_20260304.png` | 得到 PNG 文件 |
| 4 | 今日总结图 + 团队会议图入表 | 张 PNG、sheet-id、date-col | `python3 feishu_write_minutes_to_sheet.py --party-image "<派对纪要.png>" --team-image "<团队会议.png>" --sheet-id bJR5sA --date-col 4` | 可只传其一;**本脚本不发群** |
| 4 | 今日总结图 + 团队会议图 + 内部会议纪要图入表 | 张 PNG、sheet-id、date-col | `python3 feishu_write_minutes_to_sheet.py --party-image "<派对纪要.png>" --team-image "<团队会议.png>" --internal-image "<内部会议纪要.png>" --sheet-id bJR5sA --date-col 4` | 可只传其一或组合**本脚本不发群** |
| 5 | 纪要图发群(需你确认后再做) | PNG 路径 | `cd 智能纪要/脚本 && python3 send_to_feishu.py --image "…png"` | 飞书群收到长图 |
**路径约定**:飞书管理脚本目录 = `02_卡人/水桥_平台对接/飞书管理/脚本/`;智能纪要脚本 = `02_卡人/水桥_平台对接/智能纪要/脚本/`;报告输出 = `卡若Ai的文件夹/报告/`
@@ -87,9 +87,20 @@ python3 write_party_minutes_from_txt.py "$TXT" 4
### 0.5 新场次从零到完成清单
1. **在 `soul_party_to_feishu_sheet.py` 中**添加 `ROWS['116']``SESSION_DATE_COLUMN['116']``SESSION_MONTH['116']`,以及在 `_maybe_send_group``date_label``src_date` 中加 `'116'`;若需派对录屏则填 `PARTY_VIDEO_LINKS['116']`;若需小程序则填 `MINIPROGRAM_EXTRA_3['5']`3 月 5 日)。
2. **执行填表**`python3 soul_party_to_feishu_sheet.py 116`
3. **可选**:纪要文本 `write_party_minutes_from_txt.py "<txt>" 5`;纪要图按智能纪要生成后 `feishu_write_minutes_to_sheet.py --party-image <png> --sheet-id bJR5sA --date-col 5`,再 `send_to_feishu.py --image <png>`
1. **在 `soul_party_to_feishu_sheet.py` 中**
- 添加 `ROWS['116']`主题从妙记TXT分析提取关键词+对话内容≤12字含干货如「AI手机金融坏账投流」
- 添加 `SESSION_DATE_COLUMN['116']``SESSION_MONTH['116']`
-`_maybe_send_group``date_label``src_date` 中加 `'116'`
- 若需派对录屏则填 `PARTY_VIDEO_LINKS['116']`
- 若需团队会议链接:从「售商品」系统获取最近一次团队会议妙记链接,填入 `TEAM_MEETING_LINKS['116']`
- 若需小程序则填 `MINIPROGRAM_EXTRA_3['5']`3 月 5 日)
2. **执行填表**`python3 soul_party_to_feishu_sheet.py 116`(默认不发群,需发群时先 `export SOUL_PARTY_PUSH_GROUP=1`)。
3. **可选**
- 纪要文本 `write_party_minutes_from_txt.py "<txt>" 5`
- 今日总结图:`feishu_write_minutes_to_sheet.py --party-image <png> --sheet-id bJR5sA --date-col 5`
- 团队会议图:`feishu_write_minutes_to_sheet.py --team-image <png> --sheet-id bJR5sA --date-col 5`
- 内部会议纪要图按「目标结果」格式写MD → 转HTML → 截图 → `feishu_write_minutes_to_sheet.py --internal-image <png> --sheet-id bJR5sA --date-col 5`
- 发群:`send_to_feishu.py --image <png>`
### 0.6 故障排查速查
@@ -111,7 +122,7 @@ python3 write_party_minutes_from_txt.py "$TXT" 4
|:---|:---|:---|
| **1** | **填数据 + 发群(文字)** | `cd 飞书管理/脚本`<br/>`python3 soul_party_to_feishu_sheet.py 115`<br/>→ 效果数据写入当月表对应日期列,并**自动推送竖状文字到飞书群**(含报表链接) |
| **2** | **生成会议纪要图** | 按 **智能纪要 Skill**`02_卡人/水桥_平台对接/智能纪要/SKILL.md`txt → JSON → HTML → 截图 PNG输出到 `卡若Ai的文件夹/报告/` |
| **3** | **填图片到报表** | `cd 飞书管理/脚本`<br/>`python3 feishu_write_minutes_to_sheet.py --party-image "<报告路径>/soul_115场_智能纪要_20260304.png" --sheet-id bJR5sA --date-col 4`<br/>纪要图写入运营报表「今日总结」对应3 月 115 场 = 第 4 列) |
| **3** | **填图片到报表** | `cd 飞书管理/脚本`<br/>`python3 feishu_write_minutes_to_sheet.py --party-image "<报告路径>/soul_115场_智能纪要_20260304.png" --team-image "<报告路径>/团队会议_115场_20260304.png" --internal-image "<报告路径>/内部会议纪要_115场_20260304.png" --sheet-id bJR5sA --date-col 4`<br/>可同时上传今日总结、团队会议、内部会议纪要三张图到对应3 月 115 场 = 第 4 列) |
| **4** | **把纪要图发到飞书群** | `cd 智能纪要/脚本`<br/>`python3 send_to_feishu.py --image "<报告路径>/soul_115场_智能纪要_20260304.png"`<br/>→ 默认 Webhook 为**运营报表同一飞书群**,群内会收到纪要长图 |
**执行顺序**1 → 2 → 3 → 4即可完成「数据入表 + 纪要图入表 + 群内先收文字再收纪要图」。
@@ -208,6 +219,14 @@ python3 write_miniprogram_batch.py
填表时若在 `soul_party_to_feishu_sheet.py` 中配置了 `PARTY_VIDEO_LINKS[场次]`(飞书妙记完整 URL会**自动**写入「派对录屏」行对应列(如 115 场 → E29。新场次需在脚本中补全链接后重新执行该场次填表。
### 2.5 团队会议链接(自动写入)
填表时若在 `soul_party_to_feishu_sheet.py` 中配置了 `TEAM_MEETING_LINKS[场次]`(飞书妙记完整 URL会**自动**写入「团队会议」行对应列(如 129 场 → U31。**获取方式**:从「售商品」系统获取最近一次团队会议妙记链接,填入配置后重新执行该场次填表。
### 2.6 内部会议纪要图片(手动上传)
按「目标结果」格式(目标→结果→关键决策→待办)编写 Markdown → 转 HTML → 截图 PNG → 使用 `feishu_write_minutes_to_sheet.py --internal-image <png> --sheet-id bJR5sA --date-col <日期列>` 上传到「内部会议纪要」行Row 33表格中显示为「内部会议智要」
### 2.4 小程序运营数据(自动写入)
每日填表时,若在 `soul_party_to_feishu_sheet.py` 中配置了 **2 月** `MINIPROGRAM_EXTRA`**3 月** `MINIPROGRAM_EXTRA_3`,会**自动**把当日小程序三核心数据写入对应日期列。数据需从 **Soul 小程序 / 微信公众平台 → 小程序 → 统计 → 实时访问、概况** 获取后填入配置:
@@ -279,6 +298,7 @@ MINIPROGRAM_EXTRA_3 = {
```python
# 格式:'场次号': [主题, 时长, 推流, 进房, 人均, 互动, 礼物, 灵魂力, 关注, 最高在线]
# 主题提取规则从妙记TXT的「关键词」行与对话内容分析优先取AI手机、金融坏账、投流返点、正反馈等核心话题≤12字含干货
'107': ['主题关键词 ≤12字', 140, 35000, 400, 8, 90, 3, 25, 10, 45],
```

View File

@@ -400,3 +400,4 @@
| 2026-03-20 11:03:08 | 🔄 卡若AI 同步 2026-03-20 11:02 | 更新Cursor规则、总索引与入口、金仓Gitea脚本与配置、金仓、水桥平台对接、水溪整理归档、卡木、运营中枢、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-20 11:16:31 | 🔄 卡若AI 同步 2026-03-20 11:16 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-20 11:26:44 | 🔄 卡若AI 同步 2026-03-20 11:26 | 更新Cursor规则、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-20 11:27:30 | 🔄 卡若AI 同步 2026-03-20 11:27 | 更新:水溪整理归档、运营中枢工作台 | 排除 >20MB: 11 个 |

View File

@@ -403,3 +403,4 @@
| 2026-03-20 11:03:08 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-20 11:02 | 更新Cursor规则、总索引与入口、金仓Gitea脚本与配置、金仓、水桥平台对接、水溪整理归档、卡木、运营中枢、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-20 11:16:31 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-20 11:16 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-20 11:26:44 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-20 11:26 | 更新Cursor规则、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-20 11:27:30 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-20 11:27 | 更新:水溪整理归档、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |