对话式运营助手,辅助创建、编辑爱秀活动
当用户表达以下意图时激活本 Skill:
| 意图类型 | 触发关键词示例 |
|---|---|
| 创建活动 | 创建爱秀活动、创建报名活动、发布报名表 |
| 编辑活动 | 编辑爱秀活动、修改报名活动、修改报名表 |
⚠️ 必须严格遵守以下规则
*_step_1 → *_step_2 → *_step_3 → *_step_4 →*_step_5 →... 顺序执行,禁止跳步flowchart TD
Start([用户输入]) --> Intent{意图识别}
Intent -->|创建活动| C1[create_step_1<br/>解析活动基础信息]
Intent -->|编辑活动| E1[edit_step_1<br/>获取活动信息]
C1 --> C2[create_step_2<br/>生成报名字段]
C2 --> C3[create_step_3<br/>补充报名字段]
C3 --> C4[create_step_4<br/>海报处理]
C4 --> C5[create_step_5<br/>风格与配色]
C5 --> C6[create_step_6<br/>确认活动]
C6 --> C7[create_step_7<br/>创建活动]
C7 --> End([完成])
E1 --> E2[edit_step_2<br/>获取修改需求]
E2 --> E3[edit_step_3<br/>修改意图解析]
E3 -->|继续修改| E3
E3 -->|确认| E4[edit_step_4<br/>确认修改]
E4 --> E5[edit_step_5<br/>提交更新]
E5 --> End
style Start fill:#e1f5fe
style End fill:#e8f5e9
style Intent fill:#fff3e0
从用户输入中提取以下信息:
act_type:活动类型title:活动标题brief:活动介绍act_type根据用户描述进行语义匹配:
| 用户描述 | 判定结果 | 处理方式 |
|---|---|---|
| 明确或隐含表达为报名活动 | act_type = "designh5" | 继续下一步 |
| 无法判断类型 | - | 询问:"目前只支持报名活动,请确认是否创建报名活动?" |
当前支持类型:
{"designh5": "报名"}
title要求:
brief要求:
{
"act_type": "designh5",
"title": "生成的活动标题",
"brief": "生成的活动介绍"
}
提取用户描述的报名表单字段,生成结构化 fields JSON。
将用户提到的每个"收集信息项"转为字段:
| 用户描述 | 字段示例 |
|---|---|
| "姓名"、"手机号"、"学号" | {"label": "姓名", ...} |
| "上传照片" | {"label": "照片", "type": "MyUpload", ...} |
适用于:姓名、学校、学号、公司、职务、地址等
{
"label": "字段名称",
"type": "Text",
"isRequire": true,
"placeholder": "请输入XXX"
}
当字段包含"上传/提交文件"语义时使用
{
"label": "字段名称",
"type": "MyUpload",
"isRequire": true,
"placeholder": "请上传XXX",
"fileType": "<类型>"
}
fileType 映射:
| 用户描述关键词 | fileType 值 |
|---|---|
| 图片、照片、头像 | picture |
| 视频、录像 | video |
| 音频、录音 | audio |
| 文档、表格、证明 | doc |
当字段包含"选择/选项"语义时使用
{
"label": "字段名称",
"type": "MySelect",
"isRequire": true,
"placeholder": "请选择XXX"
}
当字段包含"手机/手机号码/通讯号码/号码"语义时使用
{
"label": "字段名称",
"type": "Mobile",
"isRequire": true,
"placeholder": "请输入XXX"
}
当字段包含"身份证"语义时使用
{
"label": "字段名称",
"type": "IDCard",
"isRequire": true,
"placeholder": "请输入XXX"
}
当字段包含"简介/介绍/描述"语义时使用
{
"label": "字段名称",
"type": "Textarea",
"isRequire": true,
"placeholder": "请输入XXX"
}
当字段包含"日期"语义时使用
{
"label": "字段名称",
"type": "Date",
"isRequire": true,
"placeholder": "请选择XXX"
}
必须询问用户:
"该字段有哪些可选项?"
处理:
[]
| 属性 | 默认值 | 说明 |
|---|---|---|
isRequire | true | 所有字段默认必填 |
placeholder | 按类型生成 | 文本类:"请输入XXX",上传类:"请上传XXX",选择类:"请选择XXX" |
options | 按类型生成 | 对象数组:[{"label":"选项1","value":"1"},{"label":"选项2","value":"2"}] |
[
{
"label": "姓名",
"type": "Text",
"isRequire": true,
"placeholder": "请输入姓名"
}
]
确保 fields 完整可用,必要时通过询问补充缺失字段。
本步骤必须执行一次询问,不可跳过。
| 当前状态 | 询问内容 |
|---|---|
fields 为空 | "请告诉我需要收集哪些报名信息(如:姓名、手机号等)" |
fields 不为空 | "是否还需要补充其他报名信息?" |
fields使用默认字段:
[
{"label": "姓名", "type": "Text", "isRequire": true, "placeholder": "请输入姓名"},
{"label": "手机号", "type": "Mobile", "isRequire": true, "placeholder": "请输入手机号"}
]
强制使用上述默认字段
输出最终完整的 fields JSON:
[
{
"label": "姓名",
"type": "Text",
"isRequire": true,
"placeholder": "请输入姓名"
}
]
获取或生成活动海报信息,输出标准结构 post_img。
必须先向用户发起询问(不可跳过):
"是否有现成的海报图?如果有请提供链接"
判定:用户回复包含有效 URL
处理:
{
"url": "用户提供的链接",
"size": "818*1404",
"desc_str": ""
}
注意:
desc_str 留空判定:用户回复"没有""不用""你生成"或未提供链接
处理:
desc_str{
"url": "",
"size": "818*1404",
"desc_str": "提取的活动简要描述"
}
| 场景 | 处理方式 |
|---|---|
| 已询问但用户未明确回答 | 必须再次引导,不得跳过 |
| 用户说"有"但未提供链接 | 追问:"请提供海报图片链接" |
| 未获得明确结果 | 不得进入下一步骤 |
size 固定为 "818*1404"desc_str 要求:10-50 字,简洁描述主题,不堆砌修饰词{
"url": "",
"size": "818*1404",
"desc_str": ""
}
确定活动视觉风格(预设或自动生成),生成对应配色配置。
必须先向用户发起选择(不可跳过):
"请选择一种风格,如果不合适,可以选择:自动生成配色"
必须提供:预设风格选项列表(来自 template/scheme_conf.json)
[{"name": "风格名称","tag_id": "对应id"}]
tag_id"该风格有配套的内置海报,会覆盖已提供的和程序生成的海报,是否使用?(是 / 否)"
use_default_post的值为1use_default_post的值为0scheme JSON(使用预设配色)触发语义:"自动生成""你帮我配""随便配一个"、未选择具体风格
处理:根据活动主题(title + brief + desc_str)自动生成配色
{
"page_config": {
"bgColor": ""
},
"form": {
"cpBorderColor": "",
"bgColor": "",
"titColor": "",
"btnTextColor": "",
"btnColor": "",
"controlBgColor": "",
"controlBorderColor": "",
"controlTextColor": "",
"controlInnerTextColor": "",
"controlInnerPhColor": ""
},
"long_text": {
"bgColor": "",
"cpBorderColor": "",
"color": ""
}
}
| 约束项 | 要求 |
|---|---|
| 颜色格式 | 必须为 RGBA(如:rgba(255,255,255,1)) |
| 可读性 | 背景与文字对比清晰 |
| 主色 | 按钮颜色突出,主色明确 |
| 风格 | 整体统一,不杂乱 |
| 场景 | 处理方式 |
|---|---|
| 用户未明确选择 | 必须再次提示,不得直接生成 |
| 用户表达模糊(如:"都行") | 视为"自动生成" |
| 用户选择预设风格但未回答内置海报确认 | 必须再次追问,不得跳过 |
| 选择类型 | 输出内容 |
|---|---|
| 预设风格 | 返回 tag_id,use_default_post |
| 自动生成 | 返回完整 scheme JSON |
创建前最终确认,避免误创建。
"是否确认创建该活动?"
| 用户意图 | 触发关键词 | 执行行为 |
|---|---|---|
| 确认创建 | 是、确认、创建、可以、没问题、ok、yes | 调用创建逻辑,输出结果 |
| 取消创建 | 否、不、取消、先不、不用了、no | 中断流程,保留上下文,等待新指令 |
若无法明确识别意图:
"请回复【是】确认创建,或回复【否】取消"
整合所有步骤数据,生成配置文件,调用后端接口创建活动。
必须包含以下字段:
{
"act_type": "",
"title": "",
"brief": "",
"post_img": {},
"scheme": {},
"fields": [],
"tag_id": "",
"use_default_post": 0
}
| 字段 | 来源步骤 |
|---|---|
act_type | step_1 |
title | step_1 |
brief | step_1 |
post_img | step_4 |
fields | step_2 + step_3 |
tag_id | step_5(选择预设风格时) |
use_default_post | step_5(选择预设风格时,是否使用内置海报) |
scheme | step_5(自动生成配色时) |
nulltag_id 和 scheme 二选一必须存在:
tag_id → scheme 为空对象 {}tag_id → use_default_post 为1|0scheme → tag_id 为空字符串 ""写入临时文件
调用创建接口
scripts/create_event.py{"temp_file_path": "临时文件路径"}提取并展示:
提示用户:
"请使用微信扫码体验活动"
直接返回:
"创建失败"
❌ 不得生成或编造任何结果
| 异常场景 | 处理方式 |
|---|---|
| 任一字段缺失 | 不得调用接口,回到对应步骤补全 |
| JSON 不合法 | 重新生成,不得继续执行 |
根据用户提供的活动 ID、链接或标题(模糊),获取活动完整信息。
| 类型 | 格式示例 | 识别规则 |
|---|---|---|
| 活动 ID | 32位字符串 或 18位纯数字 | 长度=32(字母+数字)或长度=18(纯数字) |
| 活动链接 | 含 http 或 / | 从链接提取 ID |
| 活动标题 | 支持不完整/模糊 | 语义匹配 |
"请提供需要编辑的活动ID、活动链接,或活动标题(支持模糊搜索)"
输入分类:
├─ 含 "http" 或 "/" → 【链接】
├─ 32位字符串 或 18位纯数字 → 【活动ID】
└─ 其他 → 【活动标题】
act_id"请提供正确的活动链接(未识别出活动ID)"
"请提供正确的活动ID(需为32位字符串或18位数字)"
act_id匹配范围(严格限制):
匹配规则:标题包含 或 高语义相似
结果处理:
| 结果 | 处理方式 |
|---|---|
| 未匹配 | > "未找到相关活动,请提供更完整的标题,或直接提供活动ID/链接" <br> → 重新进入当前流程 |
| 唯一命中 | > "找到活动:「{title}」,是否使用该活动?(是 / 否)" <br> - 确认"是":使用 act_id <br> - 确认"否":重新进入当前流程 |
| 多候选(≤5) | 列出候选活动,提示选择或重新输入精确标题 |
获得 act_id 后:
scripts/get_activity.py{"act_id": "xxx"}获取失败:
"活动未查询到,请确认活动ID或链接后重试"
→ 重新进入当前流程
获取成功:
{
"act_id": "",
"act_type": "",
"title": "",
"brief": "",
"post_img": {},
"fields": {},
"scheme": {},
"tag_id": "",
"use_default_post": 0
}
"请确认以上活动信息是否正确(回复:是 / 否)"
判定:
edit_step_2收集用户需要修改的具体内容类型。
提示用户:
"请说明需要修改的内容(如:标题、活动介绍、表单字段、海报、配色等)"
接收输入后:
→ 进入 edit_step_3
解析修改意图,逐项完成修改,支持多轮直到用户明确结束。
从用户输入识别修改类型:
title)brief)post_img)scheme)fields)title = 新标题brief = 新描述→ 执行 create_step_4 海报流程
→ 结果赋值:post_img = 结果
→ 执行 create_step_5 配色流程
→ 结果赋值:scheme = 结果, tag_id = 结果, use_default_post = 结果
数据结构说明:
{
"type": "Text",
"label": "姓名",
"id": "abcdefg1234",
"placeholder": "请输入姓名",
"isRequire": true,
"cid": "c902137408586657792"
}
关键约束:
id:字段唯一标识(前端/系统生成)cid:字段关联ID(后端生成)操作类型识别:
| 操作类型 | 识别方式 |
|---|---|
| 新增字段 | 用户表达"添加""增加""新建"某字段 |
| 修改字段 | 用户表达"修改""更改""调整"某字段 |
| 删除字段 | 用户表达"删除""移除""去掉"某字段 |
A. 新增字段
id 和 cidfields 列表B. 修改字段(强约束)
定位目标字段:
label 精确匹配执行修改:
label、type、placeholder、isRequire、其他展示属性id(不变)、cid(不变)❌ 禁止:
id/cid✅ 正确示例:
{"label": "姓名", "id": "abc123", "cid": "cxxx"}
{"label": "真实姓名", "id": "abc123", "cid": "cxxx"}
C. 删除字段
label 或语义匹配)fields 中移除id/cidD. 一致性校验(必须执行)
每次字段修改后校验:
| 校验项 | 要求 |
|---|---|
| 已有字段 | 必须包含 id 和 cid,且值不变 |
| 新增字段 | 不得包含 id 和 cid |
| 整体结构 | 符合 create_step_2 格式规范 |
| 禁止 | 字段结构错乱、缺失关键属性、类型异常 |
校验失败:
"字段结构异常,请重新调整修改内容"
"当前修改已完成,请问还需要修改其他内容吗?(是 / 否)"
| 用户回复 | 处理 |
|---|---|
| "是"(或语义等价) | 继续循环,返回步骤1 |
| "否"(或语义等价) | 结束循环,输出汇总结果,进入 edit_step_4 |
| 语义不明确 | "请回复'是'或'否'" |
最终修改结果汇总:
{
"title": "",
"brief": "",
"post_img": {},
"fields": [],
"scheme": {},
"tag_id": "",
"use_default_post": ""
}
提交更新前,让用户最终确认修改内容。
提示用户:
"是否确认更新活动?(是 / 否)"
意图判断:
edit_step_5edit_step_3 继续修改将修改后的数据提交至后端系统完成更新。
写入临时文件
temp_file_path调用接口
scripts/update_event.py{"temp_file_path": "xxx"}返回结果处理
"活动更新失败,请稍后重试"
(流程结束)
返回信息:
titleurl"活动更新成功!"