Install
openclaw skills install amap-road-book当用户想把自然语言旅行想法生成高德/Amap 路书,或生成可公网访问的 HTML/Excel/JSON 路书产物时使用。本 skill 会先反问缺失信息,再进行地点解析、POI 搜索、路线规划、每日时间线、天气提醒、假设说明,并默认发布到公网静态目录以便访问和下载。需要用户配置高德 Web Service API Key、JavaScript API Key 和 JS 安全密钥。
openclaw skills install amap-road-bookGitHub 仓库预览效果: zuo-wentao/Amap-Roadbook-Skill
根据用户的自然语言旅行计划,生成一份可执行的地图路书。路书应结合高德 API、路线规划、天气信息、每日时间线和可用于地图渲染的结构化数据。
亮点:
publishId 覆盖更新,让预览链接保持不变。.xlsx 下载地址,方便同行人查看、打印或二次编辑。在生成路书前,必须确认最低规划信息是否齐全。如果关键信息缺失,先提出简洁的澄清问题并停止,不要编造日期、出发地、目的地或必去地点。
最低必需信息:
强烈建议确认的信息:
每次最多问 3-5 个问题。优先询问能让第一版路书成立的最少问题。
完整反问策略见 references/clarification-policy.md。
用户需要配置自己的高德 Key。不要把作者的 Key 写死进 skill、脚本或示例输出。
AMAP_WEB_SERVICE_KEY:高德 Web Service API Key,用于地理编码、POI 搜索、路径规划、天气等服务。AMAP_JS_API_KEY:高德 JavaScript API Key,用于交互式地图渲染。AMAP_JS_SECURITY_CODE:高德 JavaScript API 安全密钥,用于前端地图渲染。脚本 scripts/plan-roadbook.mjs 中的 resolveKey() 按以下优先级读取 Key:
~/.openclaw/openclaw.json 中的 skills.entries.amap-roadbook.env.<KEY_NAME>⚠️ 注意:脚本读取的是
~/.openclaw/openclaw.json,不是gateway.json。如果你在 gateway 配置配了 Key,需要同步写到 openclaw.json 的对应位置,否则脚本拿不到。
{
skills: {
entries: {
"amap-roadbook": {
enabled: true,
env: {
AMAP_WEB_SERVICE_KEY: "YOU_AMAP_WEB_SERVICE_KEY",
AMAP_JS_API_KEY: "YOUR_AMAP_JS_API_KEY",
AMAP_JS_SECURITY_CODE: "YOUR_AMAP_JS_SECURITY_CODE"
}
}
}
}
}
不建议只配置 apiKey 便捷字段;本 skill 需要同时读取三个环境变量。
如果你是本地开发、并且需要让 OpenClaw 扫描额外目录,再单独加:
{
skills: {
load: {
extraDirs: [
"/path/to/amap-roadbook/parent-dir"
]
}
}
}
export AMAP_WEB_SERVICE_KEY="你的高德 Web Service Key"
export AMAP_JS_API_KEY="你的高德 JS API Key"
export AMAP_JS_SECURITY_CODE="你的高德 JS 安全密钥"
运行脚本时,第一行日志会打印 Key 状态:
🔑 Key 状态:WEB=✅ JS=✅ SECCODE=✅
如果某个 Key 为 ❌,对应字段会有详细提示(配置文件路径、缺失字段名、解析错误等)。也可以直接运行路书生成验证:
cd /path/to/amap-roadbook
node scripts/plan-roadbook.mjs --input input/sample.json --output-dir /tmp/check
scripts/plan-roadbook.mjs --publish --excel 发布到公网静态目录。output/。publishId 覆盖同一发布目录,让链接保持不变。默认发布配置:
output/<publishId>/http://120.46.7.129:30002/publish/opt/openclaw-publish/<publishId>/http://120.46.7.129:30001http://120.46.7.129:30001/<publishId>/http://120.46.7.129:30001/<publishId>/roadbook.xlsx默认生成并发布:
node scripts/plan-roadbook.mjs --input input/roadbook-input.json --publish --excel
会话内修改已有发布结果时,使用上一次的 publishId:
node scripts/plan-roadbook.mjs --input input/roadbook-input.json --publish --publish-id <previousPublishId> --excel
发布模式会生成:
output/<publishId>/
index.html
roadbook.json
roadbook.xlsx
然后通过 Node 上传服务写入服务器:
POST http://120.46.7.129:30002/publish
Nginx 只负责静态访问;上传服务只接收 index.html、roadbook.json、roadbook.xlsx 并保存到 /opt/openclaw-publish/<publishId>/。
发布客户端需要配置:
ROADBOOK_PUBLISH_TOKEN:必填,上传服务鉴权 token。ROADBOOK_PUBLISH_ENDPOINT:可选,默认 http://120.46.7.129:30002/publish。服务端运行 scripts/publish-server.mjs,需要配置:
ROADBOOK_PUBLISH_TOKEN:可选,必须和客户端一致(默认无需 token)。ROADBOOK_PUBLISH_PORT:默认 30002。ROADBOOK_PUBLISH_ROOT:默认 .(当前目录)。ROADBOOK_PUBLIC_BASE_URL:默认 http://120.46.7.129:30001。发布后必须主动在回答中返回可打开/可下载的产物地址,不要只说“已生成”:
publishId如果脚本生成了 roadbook.html、index.html 或 roadbook.xlsx,回答里必须明确列出对应地址或文件路径;如果某个产物生成失败,必须直接说明失败原因或缺失项。
必须提醒用户:发布链接公网可访问,可能包含出行日期、住宿区域、同行人和预算等信息,只分享给可信对象。用户明确要求不发布时,使用本地模式。
运行脚本时加 --excel 可额外生成格式化的 .xlsx 表格:
node scripts/plan-roadbook.mjs --input input/roadbook-input.json --publish --excel
生成的 roadbook.xlsx 包含 5 个 Sheet:
| Sheet | 内容 |
|---|---|
| 总览 | 目的地、日期、天气、预算、假设、提醒 |
| 每日行程 | 每日时间线,停靠点 + 交通衔接,按交通方式着色 |
| 路线段 | 起点→终点、方式、耗时、距离 |
| 预算 | 分项估算 + 合计,与预算对比 |
| 景点信息 | 电话、评分、营业时间(来自高德 POI 数据) |
也可以单独运行导出脚本:
node scripts/export-excel.mjs --input output/roadbook.json --output output/roadbook.xlsx
只有当用户明确要求“不发布”或“仅本地生成”时,使用本地模式:
node scripts/plan-roadbook.mjs --input input/roadbook-input.json --output-dir output --excel
本地模式会生成 roadbook.html、roadbook.json 和可选的 roadbook.xlsx,不会返回公网链接。回答中仍然必须主动返回本地 HTML 和 XLSX 文件路径,方便用户直接打开或下载。
以下事实应优先来自高德 API:
不要编造高德 API 不覆盖的实时事实。酒店价格、景区门票、机票价格、火车票价格、班次和营业时间,除非有可靠来源,否则必须标注为"需另行确认""用户提供"或"估算"。
API 选择细节见 references/amap-api-map.md。
输出应包含:
references/roadbook-schema.md 的地图可渲染 JSON。publishId 和服务器路径。回答要像一个实用的旅行执行助理,不要像营销文案。好的结果应该说明:
当前 skill 默认生成公网可访问的 JSON/HTML/Excel 产物。只有用户明确要求不发布时,才生成本地 JSON/HTML/Excel 产物用于演示。除非用户明确要求做页面渲染,否则不要把精力放在网页细节实现上。
用户:"我明天去北京,想去圆明园、大兴机场和迪士尼,玩三天。"
应反问:
"我可以把它做成高德路书。生成前先确认 4 个信息:1. 你从哪里出发?2. 北京住宿已经确定了吗,还是需要我推荐住宿区域?3. 城际交通偏好是高铁、飞机,还是都可以?4. 每天希望轻松一点还是尽量多打卡?"
用户:"使用 $amap-roadbook。我 6 月 15 日从合肥出发去北京玩 4 天,偏好高铁,住海淀附近,想轻松安排圆明园、北京环球度假区、大兴机场和半天咖啡/书店。"
此时可以继续构造路书请求,并生成结构化路书结果或本地产物。