weplay_go_adventure
SKILL.md
威仔GO奇遇记活动配置生成器
根据运营需求文档,自动生成威仔GO奇遇记活动的 JSON 配置。
必要信息收集
启动时检查以下信息,缺少则询问:
| 信息 | 说明 | 获取方式 |
|---|---|---|
| 活动ID (act_id) | 后台创建活动后获得的数字ID | 必须由用户提供 |
| 所属区服 | 决定 region、project_id、碎片名称翻译 | 优先从文档标题/内容推断,推断不到再询问 |
| 飞书需求文档 | 包含活动期数、时间、奖励的运营文档 | 飞书链接或直接粘贴内容 |
区服推断规则: 文档标题或内容通常包含区服标识(如"华服第X期"、"韩服第X期"),可直接推断。若文档中无法确认,再询问用户。
询问话术(一次性问完缺少的项):
请提供以下信息以生成威仔GO奇遇记配置:
1. 活动ID(act_id):后台创建活动后的数字ID
(如文档中能看出区服则无需额外提供,否则请说明区服)
2. 活动需求文档:飞书链接或直接粘贴文档内容
区服映射表
| 区服名称 | region | project_id | 碎片1名称(奇遇幣) |
|---|---|---|---|
| 华服 | C | 323 | 奇遇幣 |
| 日服 | J | 323 | アドベンチャーコイン |
| 韩服 | K | 323 | 모험코인 |
| 越南服 | V | 323 | Xu Đụng Độ |
| 马尼服 | M | 323 | Coin Lucky Chest |
| 泰服 | T | 323 | เหรียญมหัศจรรย์ |
| 菲律宾服 | P | 323 | Adventure Coin |
| 俄语服 | R | 323 | Монета приключений |
⚠️ 如果区服不在上表中,或碎片名称有误,请告知用户补充 region、project_id 和碎片名称。
文档解析 —— 必须从文档提取的所有字段
原则:凡是和活动内容相关的 ID、数量、时间、名称,全部从文档提取,不硬编码。
基本信息
- 活动期数 N →
activity_name、desc、message_config_key 后缀(period{N}) - 区服 → 从文档推断,用于填充
region、project_id、collect_chip[0].name(见区服映射表) - 活动开始/结束时间 →
start_time/end_time(格式:YYYY-MM-DD HH:mm:ss,结束时间为当天 00:00:00) - 常驻礼盒名称 →
desc(如 "华服第20期威仔GO常驻礼盒-提線木偶") - 活动文档链接 →
doc_url
活动礼物(gift)
- 活动礼物 gift_id →
collect_gifts[0].gift_id、gift_list[0]、rank 条件、task send_gift 条件、send_gift_hooker_v2 的键
3个英雄皮肤(king_of_impact)
- 新期英雄(有 reward_message 广播)→ reward_id、female_reward_id
- 旧期英雄1 → reward_id、female_reward_id
- 旧期英雄2 → reward_id、female_reward_id
- 每个英雄的附赠道具(prop)→ reward_id、female_reward_id(reward_val 通常为 7,以文档为准)
兑换商店(exchange_store)
- 英雄兑换条目(fe_id 1-3):英雄 ID、附赠道具 ID、消耗奇遇幣数量(以文档为准)
- 小道具兑换条目(fe_id 4+):每个小道具的 reward_id、消耗奇遇幣数量、reward_val,全部从文档提取
抽奖概率池(lottery)
- 礼盒连击概率池(gift_box_lot_1 / gift_box_lot_2):
- 3个英雄的 reward_id、权重(lot_1 通常10,lot_2 通常20,以文档为准)
- 所有公共道具的 reward_id、reward_val、reward_weight,全部从文档提取
- 奇遇幣抽奖(gift_lottery):guarantee 值(通常5,以文档为准)
任务配置(tasks)
所有任务的条件阈值、奖励 ID、奖励数量全部从文档提取:
- task1 送礼返奖:各阶段送礼数量阈值(1/10/30/50 或文档定义的值)、各阶段奖励 reward_id 和 reward_val
- task2 访问活动页面:奖励类型(固定为 collect_chip chip_id=2,即 flag)
- task3 首次获得碎片提醒:无奖励(none),结构固定
- task4 送礼增加榜单分:
no_send_board_trigger: true,score_rule 用gift_coin.divisor=1(按金币价值计分,无需区服隔离),reward_type=weplay_go_rank,reward_val 固定为 1 - task5 登录app:无奖励(none),结构固定
奖励类型识别规则
文档表格中的奖励 ID 通常带有链接,以链接 URL 路径后缀判断 reward_type 和 reward_id:
| 链接格式 | reward_type | 说明 |
|---|---|---|
.../global/title/detail/{id} |
"title" |
称号(无论1级/2级/3级,均为 title) |
.../global/prop-manage/detail/{id} |
"prop" |
道具 |
URL 中最后的数字即为 reward_id。未带链接时,根据奖励名称常识判断(如"礼物卡"为 prop)。
排行榜(rank)
- 排名奖励:各名次段的 reward_id、reward_val(以文档为准);奖励类型按上方"奖励类型识别规则"从链接判断
- 排行榜计分倍数:
score_rule.gift.list[0].multiple(以文档为准)
关键字段类型规范
生成 JSON 时必须严格按照以下类型,否则配置无法解析:
| 字段 | 类型 | 说明 |
|---|---|---|
顶层 act_id |
int | 如 888,不加引号 |
chip_notify[].chip_num_meta_list[].act_id |
int | 同上 |
exchange_store[].exchange[].cost_chip_meta[].act_id |
int | 同上 |
lottery[].reward_config.random_rewards[].act_id |
int | 同上 |
send_gift_hooker_v2 各 hooker 的 act_id |
int | 同上 |
tasks[].stages[].reward_config.rewards[].act_id |
int | 同上 |
tasks[].condition_config 中 chip.list[].act_id |
int | 同上 |
collect_gifts[].gift_id |
int | 如 1209218,不加引号 |
gift_list[] 元素 |
int | 如 1209218 |
score_rule.gift.list[].gift_id(tasks/rank) |
int | 同上 |
reward_id / female_reward_id |
int | 如 1720688 |
chip_num / reward_val / reward_weight |
int | 数值均不加引号 |
project_id |
int | 如 323 |
exchange_type |
string | 始终加引号,如 "1720688" |
rules[].act_id.data / rules[].gift_id.data |
string | condition rules 中的 data 始终加引号 |
send_gift_hooker_v2 的 map key(gift_id) |
string | JSON key 始终是 string |
结构固定字段(不依赖文档,直接使用)
仅以下框架性字段固定不变:
| 字段 | 固定值 |
|---|---|
name |
"威仔GO!奇遇記" |
act_type |
"营收活动" |
open |
"2" |
offset |
0 |
level |
"B" |
version |
1 |
template_list |
["weplay_go_box"] |
is_resident_act |
false |
join_act_crowd |
{crowd_type_ids:[1], is_multiple:true} |
collect_chip 结构 |
2个chip:奇遇幣(chip_id=1) + flag(chip_id=2) |
special_info.weplay_go_box_config.limit_times |
10 |
special_info.weplay_go_box_config.limit_lottery_types |
["gift_box_lot_1","gift_box_lot_2"] |
send_gift_hooker_v2 连击阈值 |
lot_1: 0-9,lot_2: 10+ |
chip_notify[1].message.message_config_key |
"chip_notify_key" |
tasks[0].message.message_config_key |
"level_msg" |
tasks[2].message.message_config_key |
"recv_chip_msg" |
rank[0].checkout_configs[].message.message_config_key |
"rank_msg" |
task_groups |
id:1,task_ids:[1,2,3,4,5] |
fe_config |
{} |
redis_cmd_list |
[] |
act_id 替换位置清单
以下所有位置必须填入新 act_id(字符串或数字按原格式):
- 顶层
act_id act_url中的两处 act_id 参数chip_notify[0/1].chip_num_meta_list[0].act_idexchange_store[0].exchange[0-2].cost_chip_meta[0].act_id(英雄兑换3个)lottery[0].reward_config.random_rewards[0].act_id(奇遇币抽奖)send_gift_hooker_v2键下3个 hooker 的act_idtasks[1].condition_configrules 中的act_id.datatasks[1].stages[0].reward_config.rewards[0].act_idtasks[2].condition_configrules 中的act_id.data和chip.list[0].act_idtasks[3].stages[0].reward_config.rewards[0].act_id
message_config_key 期数后缀规则
| 位置 | 格式 |
|---|---|
chip_notify[0].message.message_config_key |
last_12h_msg_period{N} |
lottery[1/2].reward_config.random_rewards[0].reward_message.message_config_key |
new_hero_period{N} |
tasks[4].message.message_config_key |
login_msg_period{N} |
执行步骤
Step 1: 检查必要信息是否齐全(act_id、区服、文档),缺少则询问
Step 2: 读取飞书文档(使用 feishu2stdout skill)
Step 3: 从文档提取所有字段(见"文档解析"章节)
Step 4: 以 references/template.json 为结构骨架,填入提取的值
Step 5: 判断调用模式,写入文件或直接返回 JSON
调用模式判断(Step 5 执行前)
通过检查远程服务器路径是否存在来判断:
test -d /usr/local/wejoy/src/repo_for_aicr && echo "remote" || echo "local"
本地模式(路径不存在)
使用 Write 工具将 JSON 写入:
./workspace/weplay_go_configs/weplay_go_{区服}_{期数}_act{act_id}.json
示例:./workspace/weplay_go_configs/weplay_go_华服_第18期_act888.json
写入完成后告知用户:
✅ 配置已生成:./workspace/weplay_go_configs/weplay_go_华服_第18期_act888.json
远程模式(路径存在)
直接将完整 JSON 输出到对话中返回给调用方,不写文件。
输出格式
1. 完整 JSON 配置(远程模式直接返回,本地模式写文件)
2. 待确认清单
列出所有从文档中提取但不确定是否正确的字段,例如:
⚠️ 以下字段请人工核对:
- [ ] gift_id: XXXX(活动礼物)
- [ ] 英雄1 reward_id / female_reward_id
- [ ] 英雄2 reward_id / female_reward_id
- [ ] 英雄3 reward_id / female_reward_id
- [ ] 各英雄附赠道具 prop_id
- [ ] 兑换商店小道具 ID 列表
- [ ] 概率池道具 ID 和权重
- [ ] 送礼返奖各阶段奖励
- [ ] 排名奖励 ID
参考模板
参见本 skill 目录下 references/template.json。该文件仅作为 JSON 结构骨架参考,所有带 [PLACEHOLDER] 的字段必须替换为从文档提取的实际值。