back
loading skill details...
室内智能设计skill,分步式对话完成户型确认→风格选择→布局确认→渲染出图。
---
name: ai-kujiale-design
description: 室内智能设计skill,分步式对话完成户型确认→风格选择→布局确认→渲染出图。
version: 0.0.4
author: ManycoreTech
tags: [aiDesign, kujiale, coohom]
---
# 室内智能设计
## 说明
必须严格根据本文档流程来执行,不能自作主张发散。
## 初始化配置
首次使用需在项目根目录创建 `.kjlconfig.json` 文件(参考 `.kjlconfig-example.json`),配置 access_token。
若无 token,引导用户访问 https://www.kujiale.com/skills 生成并保存 `.kjlconfig.json`,key 是access_token,value
是用户复制的值,`.kjlconfig.json`要保存在`.kjlconfig-example.json`同一目录下。
## Token 读取
所有脚本调用前,先从 `.kjlconfig.json` 读取 access_token字段作为 token:
## 版本校验
每次执行前调用:`node ./scripts/versionCheck.js --token=${token} --version=0.0.4`
- action=1:继续
- action=2:提示"版本已过时,建议更新"
- action=3:终止,提示"版本已废弃,需重新安装"
## 输出规则
- 进度反馈通过 `message(action=send)` 发送
- 最终结果只输出渲染图、全景图和设计亮点,最终结果要严格按照./outputs/result.md输出
- 已发送的消息不重复输出
---
## 分步流程
### 阶段1:户型获取与确认
**触发条件**:用户提到要做室内设计/装修设计
**步骤1.1**:询问户型来源
> "请问您有户型信息吗?
> - 输入小区名搜索户型
> - 或直接上传户型图"
**路径A:文字搜索户型**
**步骤1.2a**:询问城市
> "请问房子在哪个城市?"
**步骤1.3a**:询问小区
> "请问是哪个小区?户型信息(几室几厅、面积)也可以一起告诉我。"
**步骤1.4a**:搜索户型
```
node ./scripts/searchPlan.js --token=<token> --query=<小区名> --areaId=<城市id> --start=0 --num=20
```
展示结果让用户选择:
> "找到以下户型,请回复数字选择:
> 1. {小区名} {面积}㎡ {户型结构}
> 2. ..."
用户选择后获得 planId。
**步骤1.5a**:获取户型图并展示给用户确认
```
node ./scripts/getFloorplanInfo.js --planId=<planId>
```
解析返回结果:
- 若 `floorplanInfos` 为空数组:提示"户型图获取失败,请重新选择或上传户型图",返回步骤1.4a
- 若有数据:取 `floorplanInfos[0].planImage` 展示给用户,直接展示图片
> "户型已生成,请查看户型图:
> [展示 planImage 图片]
> 面积:{realArea}㎡
> 请确认是否满意?
> - 回复「确认」继续创建方案
> - 回复「重新生成」重新搜索户型
> - 回复「上传图片」改为上传户型图"
等待用户回复:
- 若用户确认满意 → 进入步骤1.6创建方案
- 若用户不满意 → 根据用户选择重新执行路径A或路径B
**路径B:上传户型图**
同时监听 `~\.openclaw\media\inbound` 是否有新图片(每5秒检查)。
**步骤1.2b**:识别户型图
检测到图片后:
> "检测到您上传了图片,正在识别户型..."
**步骤1.3b**:上传图片
```
node ./scripts/getUploadToken.js --token=<token>
```
按 ./docs/upload.md 执行上传获取 url。
**步骤1.4b**:创建临摹任务
```
node ./scripts/createBitmapTask.js --token=<token> --bitmap=<url>
```
轮询结果:
```
node ./scripts/getBitmapTaskResult.js --token=<token> --taskId=<taskId>
```
获得 planId。
**步骤1.5b**:获取户型图并展示给用户确认
```
node ./scripts/getFloorplanInfo.js --planId=<planId>
```
解析返回结果:
- 若 `floorplanInfos` 为空数组:提示"户型图识别失败,请重新上传或搜索户型",返回步骤1.2b
- 若有数据:取 `floorplanInfos[0].planImage` 展示给用户
> "户型已识别生成,请查看户型图:
> [展示 planImage 图片]
> 面积:{realArea}㎡
> 请确认是否满意?
> - 回复「确认」继续创建方案
> - 回复「重新生成」重新上传户型图
> - 回复「搜索户型」改为文字搜索"
等待用户回复:
- 若用户确认满意 → 进入步骤1.6创建方案
- 若用户不满意 → 根据用户选择重新执行路径A或路径B
**步骤1.6**:创建方案(两种路径合并)
```
node ./scripts/createDesign.js --token=<token> --planId=<planId>
```
获得 designId。
**步骤1.7**:确认户型
> "已确认户型:{户型信息},接下来选择您喜欢的风格~"
---
### 阶段2:风格选择(标签+硬装风格)
**触发条件**:户型已确认
**步骤2.1**:获取标签并展示选项
```
node ./scripts/getTags.js --token=<token>
```
解析返回的标签列表,展示给用户:
> "请选择您的偏好:(单选,回复数字如'1')
> 1. {标签项1名称}
> 2. {标签项2名称}
> 3. ...
> 或直接描述您的喜好"
用户选择后获得 tagItemIds 列表。
**步骤2.2**:查询硬装风格
```
node ./scripts/getStyles.js --token=<token> --tagItemIds=<id1,id2,...>
```
**步骤2.3**:风格选择
- 若返回多个风格:展示封面图让用户选择
> "以下硬装风格可选,请回复数字选择:"
> 展示每个风格的 coverUrl 图片 + styleName,如果非Webchat渠道,直接展示图片
- 若返回单个风格:默认选择
> "已为您匹配{风格名}风格"
获得 styleId,进入下一阶段。
---
### 阶段3:布局生成与确认
**触发条件**:风格已确认。
**步骤3.1**:使用 message(action=send) 发送"开始布局,请稍等"
**步骤3.2**:执行智能布局(POST,参考 ./docs/layout.md)
参数:designId、tagIds、styleId、applyDecorationStyle=true、buildCeiling=true、autoDesign=true、platform=3
**步骤3.3**:等待并查询布局结果
```
node ./scripts/getLayoutResult.js --token=<token> --designId=<designId>
```
若 c!=0 则每10秒重复查询。
**步骤3.4**:展示布局结果并等待用户确认
使用 message(action=send) 发送布局信息:
> "布局已生成!以下是各房间的布局情况:
> - {房间名1}:{家具列表}
> - {房间名2}:{家具列表}
> ...
直接进入阶段4渲染出图
---
### 阶段4:渲染出图
**触发条件**:布局已确认
**步骤4.1**:使用 message(action=send) 发送:"开始渲染,请稍等"
**步骤4.2**:触发渲染
```
node ./scripts/trigger-render.js --obsDesignId=<designId> --xToken=<token>
```
发送:`"正在生成效果图,预计几分钟..."`
**步骤4.3**:等待10秒后查询渲染结果
```
node ./scripts/getRenderResult.js --token=<token> --designId=<designId>
```
提取 pictype=0 的 img(渲染图)和 pictype=1 的 panoLink(全景图)。若空则每分钟重试,超5分钟反馈失败。
**步骤4.4**:输出最终结果
发送:`"效果图已生成!"`
严格按 ./outputs/result.md 格式输出:
- 设计亮点(根据第一张渲染图总结)
- 渲染图(按房间优先级:客餐厅→主卧→次卧→其他)
- 全景图链接
- 方案详情链接(https://www.kujiale.com/pcenter/design/{designId}/setting?from=skills)
---
## 渠道规则
- Webchat:直接发送图片链接
- 飞书:推送格式 `MEDIA:图片url`,即直接展示图片
## 结果排序
客餐厅 → 主卧 → 次卧 → 其他
## 接口文档
- 户型搜索:./docs/planSearch.md
- 户型图信息:./docs/floorplanInfo.md
- 生成方案:./docs/createDesign.md
- 硬装风格库:./docs/hardStyle.md
- 客户标签:./docs/customTag.md
- 智能布局:./docs/layout.md
- 布局结果:./docs/layoutResult.md
- 布局候选:./docs/layoutCandidates.md
- 渲染结果:./docs/renderResult.md
- 上传:./docs/upload.md
- 临摹导入:./docs/planUrlCreate.md
- 临摹轮询:./docs/planUrlCreateResult.md
- 版本校验:./docs/versionCheck.mddon't have the plugin yet? install it then click "run inline in claude" again.