香山此时此刻 · 积木快递
<!-- user-view: 面向使用者净版,由发布管线生成,请勿手改 -->
香山园内「此刻在卖什么」的实时雷达,加上一份随身可问的香山攻略。
同一个技能,两种用法:
- 你是园区商家:拍一张照片说「上新」,就能把商品、价格、位置发到雷达地图,24 小时有效;随时改价、下架、续期。
- 你是游客:问「东门附近有什么吃的」「玉华岫旁边有卖水的吗」「香山门票多少钱」「带老人半天怎么逛」,会得到带网页直达链接的回答,还能查 11 处景点讲解与一日游路线。
> 信息由商家自行发布,24 小时后自动失效,所以叫「此时此刻」。价格与库存一律以现场为准。
开始使用
安装后直接对 WorkBuddy 说话即可,不必记命令:
| 你想做的事 | 直接说 |
|---|---|
| 商家上新 | 「香山此时此刻,我要上新」+ 一张商品照片 |
| 改价 / 下架 | 「看看我发的」「把驴肉火烧改成 30」「下架这条」 |
| 找吃的 | 「东门附近有什么好吃的」 |
| 找景点周边 | 「玉华岫附近有吃的吗」 |
| 查攻略 | 「香山门票多少钱」「几点开门」「怎么避开人流」 |
| 排行程 | 「只有 3 小时,带老人怎么逛」 |
| 打开地图 | 「打开香山雷达」 |
第一次上新时会自动为你生成店家编码,之后无需重复设置。
意图路由
角色不是身份,是意图。按用户输入特征路由;无法判定时追问一句。
| 意图 | 触发特征 | 动作 |
|---|---|---|
| 商家·上新 | 输入含照片,或说「上新/上传/发布/摆摊」 | 结构化 → 确认 → upload |
| 商家·管理 | 「看看我发的/改价格/删掉/下架/续期」 | list --mine → 确认 → patch / delete |
| 游客·查询 | 「附近好吃的/最近的市集/我想买 X/有卖 Y 吗」 | search → 信息卡片 + 深链 |
| 游客·浏览 | 「打开香山雷达/看看网页」 | 返回网页地址 |
| 游客·问攻略 | 「门票多少钱/几点开门/怎么去/怎么看红叶/有什么避坑」 | 读资料索引 → 按对应文件作答;涉购票票价必附避坑提示 |
| 游客·行程参谋 | 「帮我规划行程/只有 X 小时/带老人小孩/路线怎么选」 | 读路线资料 → 生成带时点表的个性化行程 |
| 游客·周边联动 | 「玉华岫附近有吃的吗/双清别墅周边/XX 景点旁边有什么」 | search --near "景点名" → 补给列表 + 深链 |
商家 · 上新
- 收到照片后查看图片,提取店名、商品(名称/价格/单位/卖点)、品类标签(快餐/茶饮/中餐/商店/水果/小吃)。
- 过滤广告法极限词(最、第一、独家等改写为客观描述),把结构化草案交给商家确认。
- 确认后执行:
bash
node scripts/xs_cli.js keygen --shop "店名" # 仅第一次需要
node scripts/xs_cli.js upload --shop "店名" \
--item "鲜肉鸡蛋汉堡|15|元/个|只用一整颗鲜鸡蛋" \
--tag 快餐 --image /path/to/photo.jpg \
--landmark "东门" # 或 --lat 39.991134 --lng 116.196717
- 回传给商家:店家编码、卡片链接、过期时间(24 小时)。
位置怎么定(优先级从高到低):
--mapx 0.48 --mapy 0.87:人工指定底图坐标,直接生效。--landmark "东门":查服务端地标表拿权威经纬度,再换算成底图坐标。--lat xx --lng xx:直接用给定经纬度换算,与口述地标走同一套算法,不再落到地图中心。- 三者都不给:落在地图中心,并在结果里注明「未指定位置,仅作示意」。
换算用与网页完全相同的标定数据,因此同一坐标每次发布落点都一致;标定接口不可用的工具会报 XS-E012 并停止,不会随机猜一个位置。仅接入园区官方市集与持照商户,请勿代发无证兜售信息。
商家 · 管理
node scripts/xs_cli.js list --mine # 列出本人有效卡片
node scripts/xs_cli.js patch --id <card_id> --item "驴肉火烧|30|元/个|现卤现烤" # 修改即续期 24h
node scripts/xs_cli.js delete --id <card_id> # 下架
找不到本人卡片时,提示「您还没有通过本技能上架过信息」,绝不代改他人卡片。patch 传 --lat/--lng 时同样按标定换算新落点。
游客 · 查询
- 先问位置:「您在哪个门 / 哪个地标附近?」能用手机 GPS 时优先 GPS。
- 执行:
bash
node scripts/xs_cli.js search --q "汉堡" --near "东门"
node scripts/xs_cli.js search --q "好吃" --near "市集" # 好吃/美食 → 快餐/中餐/小吃
- 回复格式:信息卡片(店名 / 商品 / 价格 / 距离 / 剩余有效时间)+ 网页链接(直达店铺页)+ 一句「信息 24 小时有效,以现场为准」。
--near的地标没匹配上时,工具会给出XS-E005提示并说明「本次结果未按距离排序」,请改用地标全名或--lat/--lng,不要当作已按距离排好。- 命中为空时如实告知此刻无匹配,附网页地址供浏览全部,不虚构在售信息。
游客 · 周边联动(景点 × 店铺)
服务端地标表已含 11 处讲解词景点的真实坐标,与店铺查询共用一套距离排序机制。
- 识别游客提到的景点名(勤政殿 / 静翠湖 / 双清别墅 / 玉华岫 / 香雾窟 / 香炉峰 / 碧云寺 / 香山寺 / 见心斋 / 昭庙 / 西山晴雪)。
- 执行:
bash
node scripts/xs_cli.js search --near "玉华岫" --q "好吃"
node scripts/xs_cli.js search --near "碧云寺" --q "水"
- 回复格式:景点名 + 在售补给列表(店名 / 商品 / 价格 / 距景点距离 / 剩余时效)+ 深链;再附一句景点亮点,点到为止。
- 命中为空时如实说明该景点周边此刻没有在线店铺,附网页与攻略页链接。
游客 · 攻略与行程
资料放在 references/,按需加载,不要整包读入:
| 文件 | 内容 |
|---|---|
| 官方口径基准 | 票价 / 时间 / 优惠 / 入园预约,一切数字的锚 |
| 路线与一日游 | 一日游时序表、老幼与时长分岔、错峰三层法 |
| 景点讲解词 | 11 处景点讲解词,与地图绿色圆点同源 |
| 避坑与票务 | 渠道三档、五大避坑、交通与便民设施 |
| 黄栌科普与天气观 | 黄栌辨识、变色机理、天气与观赏关系 |
| 错误码速查 | 报错编号、白话解释与下一步 |
| 完整对话示例 | 三段端到端示范:上新 / 查附近 / 改价失败 |
先看 资料索引 定位。回答纪律:数字以官方口径基准为锚、行程给时点表、讲解词点到为止。
购票避坑强制附注(凡涉购票/票价必做)
回答末尾必须附:
> ⚠️ 避坑提示:第三方平台(OTA / 小程序代售)会把门票与园中园打包加价,购票请认准官方渠道——「香山公园服务号」微信小程序或现场窗口。票价、淡旺季分档、儿童免票与各类优惠条件,一律以 官方口径基准 为准,并请以官方渠道当日公告为准。
依据见 避坑与票务。此规则为强制项,不得省略;附注里不要自行填写金额或身高数字,避免与基准卡漂移。
一段完整对话(示例)
> 游客:东门附近有什么好吃的?
>
> 助手:我先按「东门」查一下此刻在售的店。
> node scripts/xs_cli.js search --q "好吃" --near "东门"
>
> 工具返回:「好吃」命中 2 家(按距东门排序):【山下小铺】快餐 · 距 120m · 剩余 6h / 鲜肉鸡蛋汉堡 ¥15/个 …
>
> 助手:东门附近有 2 家在卖吃的,最近的是山下小铺(约 120 米,鲜肉鸡蛋汉堡 ¥15/个),卡片还剩 6 小时有效:打开店铺页。另一家是…
更多场景(商家上新、改价失败并带错误码)见 完整对话示例。
报错时怎么办
工具出错会给出统一编号 XS-E001—XS-E012,格式是「编号 + 白话解释 + 下一步 + 技术信息」。把编号告诉客服或写进反馈,能直接定位问题。完整对照见 错误码速查,常见几条:
| 编号 | 含义 | 下一步 |
|---|---|---|
| XS-E002 | 还没生成店家身份 | 执行一次 keygen --shop "店名" |
| XS-E005 | 地标名没匹配上 | 换成地标全名,或直接用 --lat/--lng |
| XS-E009 | 卡片找不到或已过期 | 用 list --mine 查当前有效卡片 |
| XS-E012 | 地图标定数据暂时取不到 | 稍后重试;仍失败可用 --mapx/--mapy 指定位置 |
你的身份与隐私
- 首次使用执行
keygen,会生成一对 Ed25519 密钥;私钥只存在你本机的data/profile.json,永不外传。 - 店家编码(8 位)由公钥哈希派生,是管理自己信息的凭证,请记下来。
- 每张卡片都由私钥签名,服务端验签后才落位;只有持有私钥的人能修改或下架自己的卡片。
- 私钥丢失即身份丢失,请自行备份
data/profile.json;换设备需重新生成身份。 - 你发布的商品文字与图片会存到服务端并对所有游客公开可读——这正是它有用的前提;24 小时后自动清理。
- 对游客不做任何「保证现货」的表述。
服务地址与配置
网页与接口地址写在随包的 config.json:
{ "version": "1.0.1", "api_base": "https://jimu-express.online/xiangshan", "web_url": "https://jimu-express.online/xiangshan/" }
- 直接打开
web_url就是雷达地图;api_base供命令行工具调用(末尾不带斜杠)。 - 需要指向自己的服务时不必改文件,设置环境变量
XS_API/XS_WEB即可覆盖。 - 命令行工具需要 Node.js 18 或更高版本(仅用标准库,无需安装依赖)。
常见问题
| 现象 | 错误码 | 怎么处理 |
|---|---|---|
| 提示连不上服务 | XS-E003 | 检查网络后重试;也可直接打开网页地址确认服务是否在线 |
| 提示「尚未生成身份」 | XS-E002 | 商家执行一次 keygen --shop "店名" 即可 |
| 搜不到任何商品 | — | 信息 24 小时失效属正常,可打开地图浏览此刻全部在售 |
| 换了电脑,店家编码变了 | XS-E002 | 每台设备独立身份;把旧设备的 data/profile.json 备份过来即可沿用 |
| 想改价格但提示被拒绝 | XS-E011 | 只能修改自己私钥签发的卡片,请确认用的是同一台设备 |
| 地标名没匹配上 | XS-E005 | 改用地标全名,或改用 --lat/--lng |
| 卡片找不到 | XS-E009 | 用 list --mine 查当前有效卡片,过期需重新上新 |
安全红线
- 私钥文件任何情况下不进对话、不进日志、不外发。
- 验签失败或重放请求由服务端拒绝并留痕,如实转告,不重试伪造。
- 信息 24 小时有效,可能已售罄或收摊;价格与库存以现场为准。