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

This commit is contained in:
2026-03-20 11:16:26 +08:00
parent 52cf5e0122
commit c2cce1e82e
8 changed files with 166 additions and 41 deletions

View File

@@ -0,0 +1,75 @@
{
"title": "3月20日最赚钱一月·职场闭环·金融坏账心态·投流返点·正反馈坚持",
"subtitle": "Soul派对第129场",
"date": "2026-03-20",
"time": "06:30",
"duration": "约3小时20分妙记",
"participants_count": "250+",
"location": "Soul派对早场",
"speakers": [
{"name": "卡若(房主)", "role": "主持人", "topics": "AI手机与微信生态·金融过桥骗局·坏账率心态·漫剧投流·天乐老吴返点逻辑·派对正反馈·129场复盘"},
{"name": "连麦伙伴", "role": "运动/视频号垂类", "topics": "视频号运动博主·刻意练习·小程序分发一块钱的正反馈"}
],
"modules": [
{
"title": "AI 手机 × 微信:云端控制与定价区间",
"color": "blue",
"items": [
{"title": "产品方向", "points": ["豆包手机迭代:注册/解封/聊天自动化,点赞评论转发+朋友圈分析", "与服务端联动远程控机,偏 B 端与高客单", "意向价位带:约 7k2 万(未定),对算力与稳定性要求高"]},
{"title": "合作观察", "points": ["技术公司老板洽淡合作,销售能力强", "市面完全闭环产品仍少,窗口期在能力与合规"]}
]
},
{
"title": "金融助贷「过桥」骗局:一栋楼薅七家",
"color": "red",
"items": [
{"title": "套路拆解", "points": ["用已过户/抵押物业包装成「过桥」借款人,绕开银行尽调", "同一标的向多家助贷各借约等额本金,本案约 170 万×7 家", "证件齐全、带看物业 → 很难当场识破权属已转移"]},
{"title": "房主结论", "points": ["定性骗本金,已走举报/诉讼", "做金融必有坏账率,心态上按 5%10% 年化的不良来预留", "审核再老也会中招,只能靠流程与交叉验证减损"]}
]
},
{
"title": "漫剧、投流与「看不见的钱」",
"color": "purple",
"items": [
{"title": "漫剧模型", "points": ["批量生产测品ROI 可行就拉满投流,平台规则收紧后换下一波", "金主不缺钱,缺可放大项目"]},
{"title": "天乐老吴类 IP", "points": ["卖课可见收入≠全部利润:千川/巨量返点、代投、人群包加价", "大品牌品宣可「亏着投曝光」,代运营+返点组合才是现金牛"]}
]
},
{
"title": "腾讯私域:小程序与资金沉淀成本",
"color": "teal",
"items": [
{"title": "规则变化", "points": ["客服入口收紧、收款与运营户隔离、预充值分润", "公户缴税+手续费+账期,现金流压力上升"]},
{"title": "策略", "points": ["仍得在腾讯体系内做生意,但要把税与沉淀算进模型", "垂直号先做透一个平台,别多线耗散"]}
]
},
{
"title": "正反馈:为什么能连开 129 场",
"color": "green",
"items": [
{"title": "房主心法", "points": ["正反馈不一定是钱:心情、省钱、链接对人、阶段里程碑都算", "派对里「甩链接赚一两块」是最小闭环,背后才是会员/沙龙/项目", "小程序短时间到 800+ 人访问,说明简单动作重复+链路设计有效"]},
{"title": "对创作者", "points": ["运动/学习类内容:先定变现闭环再扩内容,否则易空转", "能「迭代」比只会「循环执行」稀缺"]}
]
}
],
"highlights": [
{"title": "一栋楼骗七家助贷", "time": "开场段", "content": "用无真实所有权的物业重复「过桥借款」,专薅非银助贷不经银行审批的漏洞。", "insight": "风控要假设「证件齐全也可能是叙事」,交叉查权属与多家征信。", "color": "red"},
{"title": "坏账率与心态", "time": "中段", "content": "房主以年尺度看 170 万损失,仍在可控不良区间内;负责人 12 年经验也会踩坑。", "insight": "做金融=接受概率损失,用制度减频率,用储备金减击穿。", "color": "orange"},
{"title": "投流返点才是大头", "time": "中后段", "content": "头部 IP 背后往往是代投返点、人群包与品牌品宣预算,而不是课程零售价。", "insight": "看生意要拆「表面 SKU」和「现金流结构」。", "color": "purple"},
{"title": "129 场的本质", "time": "末段", "content": "房主自述:能坚持是因为多层正反馈,不是单一收入。", "insight": "运营 Soul 房=设计最小正反馈单元,再叠长期产品。", "color": "green"}
],
"takeaways": [
{"title": "风险", "color": "red", "points": ["助贷过桥:权属穿透+同业信息共享", "灰产:短周期高回报默认不可持续"]},
{"title": "增长", "color": "green", "points": ["正反馈设计:从一块钱分润到会员沙龙", "垂直平台 all in36 个月试一个主战场"]},
{"title": "本场数据(表内口径)", "color": "blue", "points": ["约 200 分钟·250 进房·人均 14 分·187 互动·21 关注·峰值 31"]}
],
"actions": [
{"content": "有 AI 硬件/私域合作可上麦或私信房主;派对主题覆盖 AI+创业+认知。", "note": "每天早场连麦;小程序「卡若创业派对」"},
{"content": "做投流或漫剧:先算平台规则半衰期,再定测品节奏与资金回撤线。", "note": "返点与代运营合同单独审"}
]
}

View File

@@ -6,7 +6,9 @@
不发飞书群。
用法:
python3 feishu_write_minutes_to_sheet.py [内部会议图片路径] [派对总结图片路径]
python3 feishu_write_minutes_to_sheet.py --party-image <图片路径> --sheet-id bJR5sA --date-col 4 # 3月115场
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。本脚本不发飞书群。
"""
import os
import sys
@@ -110,6 +112,28 @@ def _resize_image_if_needed(path, max_bytes=MAX_IMAGE_BYTES):
return data
def _find_col_and_rows_for_sheet(token, sheet_id, date_col):
"""返回 (col_idx 0-based, row_party, row_team) 或失败时 (None, None, None)"""
vals = read_range(token, f'{sheet_id}!A1:AG50')
if not vals or len(vals) < 2:
return 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
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):
row_team = ri + 1
return col_idx, row_party, row_team
def write_image_to_cell(token, range_str, image_path, name=None):
"""
飞书 v2 写入图片到单元格POST .../values_imagebody 为 JSONimage 为整数数组(字节流)。
@@ -143,7 +167,8 @@ def main():
parser = argparse.ArgumentParser(description='上传会议/派对纪要图片到飞书运营报表')
parser.add_argument('image_internal', nargs='?', default=DEFAULT_IMAGE_INTERNAL, help='内部会议图片路径')
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('--party-image', dest='party_image_override', type=str, help='派对「今日总结」行图片路径')
parser.add_argument('--team-image', dest='team_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()
@@ -153,47 +178,52 @@ def main():
sheet_id = args.sheet_id_override or SHEET_ID
date_col = args.date_col_override
party_image_override = (args.party_image_override or '').strip()
team_image_override = (args.team_image_override or '').strip()
if party_image_override and sheet_id and date_col:
# 单次上传:派对图片 → 指定 sheet 的「今日总结」行、指定日期列
def _upload_one_image(token, col_idx, row_num, img_path, label):
if row_num is None:
print(f'❌ 未找到「{label}」行')
return False
range_cell = f'{sheet_id}!{_col_letter(col_idx)}{row_num}:{_col_letter(col_idx)}{row_num}'
code, body = write_image_to_cell(token, range_cell, img_path, name=os.path.basename(img_path))
if code == 401 or body.get('code') in (99991677, 99991663):
t2 = refresh_token()
if t2:
code, body = write_image_to_cell(t2, range_cell, img_path, name=os.path.basename(img_path))
if code == 200 and body.get('code') in (0, None):
print(f'✅ 已上传图片到「{label}」→ 日期列 {date_col}{sheet_id}')
return True
print(f'❌ 「{label}」上传失败:', code, body)
return False
if (party_image_override or team_image_override) and sheet_id and date_col:
token = load_token() or refresh_token()
if not token:
print('❌ 无法获取飞书 Token')
sys.exit(1)
if not os.path.exists(party_image_override):
print('❌ 图片不存在:', party_image_override)
if party_image_override and not os.path.exists(party_image_override):
print('派对图片不存在:', party_image_override)
sys.exit(1)
vals = read_range(token, f'{sheet_id}!A1:AG50')
if not vals or len(vals) < 2:
print('❌ 读取表格失败')
if team_image_override and not os.path.exists(team_image_override):
print('❌ 团队会议图片不存在:', team_image_override)
sys.exit(1)
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 = 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
break
if col_idx is None or row_party is None:
print('❌ 未找到日期列', date_col, '或「今日总结」行')
sys.exit(1)
range_cell = f'{sheet_id}!{_col_letter(col_idx)}{row_party}:{_col_letter(col_idx)}{row_party}'
code, body = write_image_to_cell(token, range_cell, party_image_override, name=os.path.basename(party_image_override))
if code == 401 or body.get('code') in (99991677, 99991663):
token = refresh_token()
if token:
code, body = write_image_to_cell(token, range_cell, party_image_override, name=os.path.basename(party_image_override))
if code == 200 and body.get('code') in (0, None):
print(f'✅ 已上传派对智能纪要图片到「今日总结」→ {date_col} 列({sheet_id}')
else:
print('❌ 上传失败:', code, body)
col_idx, row_party, row_team = _find_col_and_rows_for_sheet(token, sheet_id, date_col)
if col_idx is None:
print('❌ 未找到日期列', date_col)
sys.exit(1)
ok_any = False
if party_image_override:
if _upload_one_image(token, col_idx, row_party, party_image_override, '今日总结'):
ok_any = True
else:
sys.exit(1)
if team_image_override:
if _upload_one_image(token, col_idx, row_team, team_image_override, '团队会议'):
ok_any = True
else:
sys.exit(1)
if ok_any:
print('(未发飞书群)')
return
token = load_token() or refresh_token()

View File

@@ -453,6 +453,10 @@ def main():
LABELS_GROUP = ['主题', '时长(分钟)', 'Soul推流人数', '进房人数', '人均时长(分钟)', '互动数量', '礼物', '灵魂力', '增加关注', '最高在线']
def _maybe_send_group(sess, raw_vals):
# 飞书群推送改为显式开启避免未确认就发群export SOUL_PARTY_PUSH_GROUP=1
if os.environ.get('SOUL_PARTY_PUSH_GROUP', '').strip() != '1':
print('⏭️ 已跳过飞书群推送(需 export SOUL_PARTY_PUSH_GROUP=1 后重跑本脚本才会推送运营数据到群)')
return
if sess not in ('105', '106', '107', '113', '114', '115', '116', '117', '118', '119', '124', '126', '127', '128', '129'):
return
date_label = {'105': '2月20日', '106': '2月21日', '107': '2月23日', '113': '3月2日', '114': '3月3日', '115': '3月4日', '116': '3月5日', '117': '3月6日', '118': '3月7日', '119': '3月8日', '124': '3月14日', '126': '3月17日', '127': '3月18日', '128': '3月19日', '129': '3月20日'}.get(sess, sess + '')

View File

@@ -58,11 +58,11 @@ flowchart LR
| 步 | 动作 | 输入 | 命令 | 输出/校验 |
|:---|:---|:---|:---|:---|
| 1 | 填效果数据+小程序+派对录屏+发群 | 场次号 115 | `cd 飞书管理/脚本 && python3 soul_party_to_feishu_sheet.py 115` | 控制台见「已写入」「已同步推送到飞书群」「已写入派对录屏链接」 |
| 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 "卡若Ai的文件夹/报告/soul_115场_智能纪要_20260304.png" --sheet-id bJR5sA --date-col 4` | 控制台见「已上传派对智能纪要图片」 |
| 5 | 纪要图发群 | PNG 路径 | `cd 智能纪要/脚本 && python3 send_to_feishu.py --image "卡若Ai的文件夹/报告/soul_115场_智能纪要_20260304.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` | 可只传其一;**本脚本不发群** |
| 5 | 纪要图发群(需你确认后再做) | PNG 路径 | `cd 智能纪要/脚本 && python3 send_to_feishu.py --image "png"` | 飞书群收到长图 |
**路径约定**:飞书管理脚本目录 = `02_卡人/水桥_平台对接/飞书管理/脚本/`;智能纪要脚本 = `02_卡人/水桥_平台对接/智能纪要/脚本/`;报告输出 = `卡若Ai的文件夹/报告/`

View File

@@ -1 +1,5 @@
placeholder
Soul 运营全链路技能包:请在本机终端运行永平项目中的打包脚本,会在「下载」生成 zip。
python3 "/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/scripts/pack_soul_operation_skills.py"
详细说明一场soul的创业实验-永平/scripts/README_Soul运营技能包.md

View File

@@ -1,6 +1,15 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""打包 Soul 运营全链路SKILL + 脚本 + Cursor 入口,供复制到另一台电脑。"""
"""
【已迁移】请改用永平项目内脚本(会输出 zip 到「下载」):
python3 "/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/scripts/pack_soul_operation_skills.py"
说明见同仓库scripts/README_Soul运营技能包.md
---
以下为旧版备份逻辑(与 pack_soul_operation_skills.py 等价,可自行删除本文件)。
打包 Soul 运营全链路SKILL + 脚本 + Cursor 入口,供复制到另一台电脑。
"""
from __future__ import annotations
import os
@@ -20,9 +29,10 @@ WORK_ROOT = KARUO_AI / "_Soul运营技能包导出" / BUNDLE_NAME
def ignore_common(dir_name: str, names: list[str]) -> set[str]:
skip = {"__pycache__", ".browser_state", "chromium_data", ".DS_Store"}
ignored = set()
for n in names:
if n == "__pycache__" or n.endswith(".pyc") or n == ".DS_Store":
if n in skip or n.endswith(".pyc"):
ignored.add(n)
return ignored

View File

@@ -397,3 +397,4 @@
| 2026-03-19 13:29:07 | 🔄 卡若AI 同步 2026-03-19 13:29 | 更新Cursor规则、金仓、卡人、水桥平台对接、火炬、总索引与入口、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-19 13:29:38 | 🔄 卡若AI 同步 2026-03-19 13:29 | 更新:水桥平台对接、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-19 13:43:52 | 🔄 卡若AI 同步 2026-03-19 13:43 | 更新:金仓、水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-20 11:03:08 | 🔄 卡若AI 同步 2026-03-20 11:02 | 更新Cursor规则、总索引与入口、金仓Gitea脚本与配置、金仓、水桥平台对接、水溪整理归档、卡木、运营中枢、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 |

View File

@@ -400,3 +400,4 @@
| 2026-03-19 13:29:07 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-19 13:29 | 更新Cursor规则、金仓、卡人、水桥平台对接、火炬、总索引与入口、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-19 13:29:38 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-19 13:29 | 更新:水桥平台对接、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-19 13:43:52 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-19 13:43 | 更新:金仓、水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 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) |