Skip to content
Back to skills

Uupt Delivery

BSecurity

UU跑腿同城配送服务。支持帮我送、帮我取、帮我买、帮我办等多种服务,覆盖订单询价、发单下单、查询订单、取消订单、跑男实时追踪、领取优惠券。当用户要真实发起同城配送、代办交易或领取UU跑腿优惠券时使用:「同城配送」「同城急送」「同城快送」「同城跑腿」「跑腿」「发单」「帮送/帮取/帮买」「代购」「代取号」「代排队」「陪诊」「取寄快递」「送文件」「送钥匙」「送花」「送蛋糕」「取东西」「取快递」「取文件」「去XX取」「帮我买」「买奶茶」「买咖啡」「买药」「买饭」「买烟」「搬东西」「装卸」「小时工」「打扫卫生」「布置场地」「琐事代办」「领优惠券」「领券」「领取优惠券」「有优惠券吗」「有什么优惠」「有什么活动」「有活动吗」「参加活动」等。

  • 417 stars
  • 0 votes
  • 0 copies
  • 17 views
  • Added September 8, 2026
developmentjavascriptpythonjavabashnodegitapi

Works with

  • api
  • mcp

Security analysis

B84/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 13 files and shows the line behind each finding

Scanned November 8, 2026

npx -y skills add infometa/workbuddyskills --skill uupt-delivery --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Uupt Delivery?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Uupt Delivery
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/infometa-uupt-delivery/badge)](https://www.skillsdirectory.com/skills/infometa-uupt-delivery)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: uupt-delivery
description: >-
  UU跑腿同城配送服务。支持帮我送、帮我取、帮我买、帮我办等多种服务,覆盖订单询价、发单下单、查询订单、取消订单、跑男实时追踪、领取优惠券。当用户要真实发起同城配送、代办交易或领取UU跑腿优惠券时使用:「同城配送」「同城急送」「同城快送」「同城跑腿」「跑腿」「发单」「帮送/帮取/帮买」「代购」「代取号」「代排队」「陪诊」「取寄快递」「送文件」「送钥匙」「送花」「送蛋糕」「取东西」「取快递」「取文件」「去XX取」「帮我买」「买奶茶」「买咖啡」「买药」「买饭」「买烟」「搬东西」「装卸」「小时工」「打扫卫生」「布置场地」「琐事代办」「领优惠券」「领券」「领取优惠券」「有优惠券吗」「有什么优惠」「有什么活动」「有活动吗」「参加活动」等。
version: 1.1.0
metadata:
  openclaw:
    requires:
      env: []
      bins:
        - node
        - python3
    homepage: https://open.uupt.com
    install:
      - kind: node
        package: axios
        bins: []
      - kind: python
        package: requests
        bins: []
---

# UU跑腿同城配送服务 Skill

UU跑腿同城配送服务。支持帮我送、帮我取、帮我买、帮我办等多种服务,覆盖订单询价、发单下单、查询订单、取消订单、跑男实时追踪、领取优惠券。当用户要真实发起同城配送、代办交易或领取UU跑腿优惠券时使用:「同城配送」「同城急送」「同城快送」「同城跑腿」「跑腿」「发单」「帮送/帮取/帮买」「代购」「代取号」「代排队」「陪诊」「取寄快递」「送文件」「送钥匙」「送花」「送蛋糕」「取东西」「取快递」「取文件」「去XX取」「帮我买」「买奶茶」「买咖啡」「买药」「买饭」「买烟」「搬东西」「装卸」「小时工」「打扫卫生」「布置场地」「琐事代办」「领优惠券」「领券」「领取优惠券」「有优惠券吗」「有什么优惠」「有什么活动」「有活动吗」「参加活动」等。

## 功能特性

- 📱 手机号一键注册(首次使用自动引导)
- 💰 订单询价(计算配送/帮帮服务费用)
- 📦 创建跑腿配送订单(帮送 / 帮取 / 帮买,从A地到B地)
- 🤝 创建帮帮服务订单(陪诊、代办、搬抬装卸、小时工、琐事代办等现场协助)
- 💳 在线支付(余额不足时提供支付链接,支持微信/支付宝)
- 📋 查询订单详情
- ❌ 取消订单
- 🏃 跑男实时位置追踪
- 🎟️ 一键领取优惠券(每日可领,符合条件时附主题活动入口)

## 运行环境

本 skill 同时提供 **Node.js** 和 **Python** 两种版本,Agent 自动检测可用环境。

| 环境 | 依赖安装 | 脚本入口 |
|------|---------|---------|
| Node.js | `npm install` | `scripts/*.js`、`index.js` |
| Python | `pip install -r requirements.txt` | `uupt_delivery.py` |

> **命令格式约定**:下文命令示例默认使用 Node.js 版本,Python 版本只需将脚本路径换为 `python uupt_delivery.py <command>`,参数名中的 `--camelCase` 换为 `--kebab-case`(如 `--fromAddress` → `--from-address`),参数含义完全相同,不再重复列出。

## 触发条件与场景判断

收到用户请求后,先判断场景。Agent 需智能识别**跑腿配送(SEND)** vs **帮帮服务(HELP)**:

| 用户表达 | 识别为 | 判断依据 |
|---------|--------|---------|
| "从A送到B"、"把X寄到Y"、"帮我送一下"、"配送" | 跑腿配送(SEND) | 两个不同地点之间的物品传递(帮送) |
| "帮我去A取XX送到B"、"取快递送到家里" | 跑腿配送(SEND) | 取件后再送到另一地点(帮取) |
| "帮我买个X送到Y"、"代购/帮买" | 跑腿配送(SEND) | 购买地到收货地,本质仍是 A→B |
| "送文件/合同/证件"、"送鲜花/蛋糕"、"送餐" | 跑腿配送(SEND) | 同城急送常见品类 |
| "帮我在X地点..."、"帮我搬/扔/装/打扫..." | 帮帮服务(HELP) | 只有一个地点,跑男在现场提供协助 |
| "陪诊"、"陪护"、"代去医院" | 帮帮服务(HELP) | 现场陪同协助,不涉及物品配送 |
| "异地代办"、"政务大厅取资料/盖章"、"琐事代办" | 帮帮服务(HELP) | 到指定地点代办事务 |
| "代去现场"、"代排队"、"代取号" | 帮帮服务(HELP) | 到场排队/到场办事 |
| "布置场地"、"小时工"、"临时工"、"打扫卫生" | 帮帮服务(HELP) | 按需到场提供劳务 |
| "家具/电器搬抬"、"货物装卸" | 帮帮服务(HELP) | 现场搬抬装卸劳务 |
| "帮我去快递站取/寄件"(用户不要求再送到别处) | 帮帮服务(HELP) | 业务代办类现场事务 |
| "帮我取快递送到家里" | 跑腿配送(SEND) | 取件后还需送到另一地点 |

**判断原则**:核心是从A到B传递物品(含代买后送达) → 跑腿配送;核心是在某地点提供现场协助/代办/劳务 → 帮帮。

### 跑腿配送场景分类

对照 UU 跑腿「帮送 / 帮取 / 帮买」能力,配送订单统一走 `orderType=send`(默认),需确认**起始地址 + 目的地址 + 收件人电话**。物品说明可写入可选 `--note`,帮买场景建议必写购买要求。

| 分类 | 子场景 | 典型用户表达 | 地址怎么填 | note 示例(可选,帮买建议填写) |
|------|--------|-------------|-----------|--------------------------------|
| 帮送 | 文件证件 | "合同忘公司了,帮我从金水路这边送到二七广场那家公司" | from=寄件地,to=收件地 | 牛皮纸袋装合同 1 份,请当面交给前台 |
| 帮送 | 餐饮餐食 | "我点的火锅外卖到了店里,帮我取了送到绿地中心 18 楼" | from=商家/取餐点,to=收餐地址 | 火锅外卖 1 份,保温袋别洒,送到前台喊一下 |
| 帮送 | 鲜花礼品 | "花店那束玫瑰,帮我送到万达广场 B 座,别说是谁送的" | from=花店,to=收花地址 | 玫瑰花束 1 束,轻拿轻放,保密配送 |
| 帮送 | 蛋糕烘焙 | "好利来那个 8 寸蛋糕,帮我送到希尔顿酒店 1208 房间" | from=蛋糕店,to=收货地址 | 生日蛋糕 1 个,防震直立拿,送到房间门口 |
| 帮送 | 数码设备 | "手机坏了,帮我从家里送到苹果授权店维修" | from=寄件地,to=售后点 | 手机 1 部(已装箱),到店交给店员签收 |
| 帮送 | 样品物料 | "仓库那箱样品,帮我送到客户写字楼前台" | from=仓库/门店,to=客户地址 | 样品纸箱 1 个(约 5 公斤),放前台即可 |
| 帮取 | 文件资料 | "去文印店把我打印好的标书取回来送到家" | from=打印店,to=用户地址 | 取已打印标书 1 份(已付款),袋装别折 |
| 帮取 | 快递代取送 | "菜鸟驿站有个快递,取件码 8821,帮我取了送到家门口" | from=驿站,to=家 | 取件码 8821,取回后放门口就行 |
| 帮取 | 门店取货 | "药店药已经配好了,帮我取了送到公司前台" | from=药店,to=公司 | 报手机号取药,药盒别压碎,放到前台 |
| 帮买 | 代购美食 | "帮我去旁边瑞幸买杯生椰拿铁,送到正弘城写字楼" | from=门店,to=收货地 | 生椰拿铁热杯 1 杯,少糖;送到 B 座前台 |
| 帮买 | 代购生鲜百货 | "去盒马买两盒草莓和一提抽纸,送到家里冰箱旁" | from=超市,to=家 | 草莓 2 盒(挑熟一点的)+ 抽纸 1 提 |
| 帮买 | 代购药品 | "我在酒店发烧了,帮我去最近药店买盒感冒药送过来" | from=药店,to=酒店 | 成人感冒颗粒 1 盒;如缺货先电话问我 |
| 帮买 | 代购急需 | "宿舍没吃的了,便利店买桶泡面和火腿肠马上送来" | from=便利店,to=宿舍 | 泡面 1 桶 + 火腿肠 2 根,越快越好 |

> 未说清起止地址时先追问;帮买未指定购买地点时,可按用户所在城市就近门店确认后再询价。物品易碎/保温/保密等要求写入 `note`。

### 帮帮服务场景分类

对照「UU万能帮手」能力,帮帮订单覆盖以下常见场景。下单时统一走 `orderType=help`,并把具体事项写入 `--note`:

| 分类 | 子场景 | 典型用户表达 | note 示例 |
|------|--------|-------------|-----------|
| 热门服务 | 陪诊陪护 | "妈明天去人民医院看病,我去不了,能不能找个人陪着挂号取药" | 郑州人民医院东院区陪诊,协助挂号、缴费、取药;预计上午 |
| 热门服务 | 异地代办 | "我人不在郑州,帮我去工商局交一下营业执照材料" | 代去市场监管局提交营业执照材料,材料已放前台 |
| 热门服务 | 代去现场 | "售楼部要排队领资料,帮我去排一下,领到就行" | 代去某售楼部排队领楼书/资料,领到后电话联系 |
| 热门服务 | 布置场地 | "今晚停车楼求婚,帮我按图片把车尾花和气球布置好" | 地下停车场车尾鲜花+气球布置,按微信图片效果摆放 |
| 搬抬装卸 | 家具搬抬 | "买了个沙发,三楼没电梯,帮我抬上楼" | 小区 3 楼无电梯,沙发从一楼抬至三楼,需 2 人 |
| 搬抬装卸 | 货物装卸 | "货车到仓库门口了,帮我把货卸下来码整齐" | 仓库门口卸货约 20 箱,码放到指定货架旁 |
| 搬抬装卸 | 电器搬抬 | "新冰箱到了,帮我从一楼搬到五楼厨房位置" | 冰箱搬至 5 楼厨房(有电梯),轻拿轻放防磕碰 |
| 小时工 | 临时工 | "店里人手不够,找个人来干两个小时杂活" | 临时工 2 小时,到店听从店长安排打杂 |
| 小时工 | 布置场地 | "会议室明天开会,帮我把桌椅和背景板摆好" | 会议室摆 10 套桌椅 + 背景板,按现场指示摆放 |
| 小时工 | 打扫卫生 | "出租屋退租前,帮我把两室一厅简单打扫一遍" | 两室一厅日常保洁:扫地拖地、清理厨房卫生间 |
| 业务代办 | 琐事代办 | "政务大厅有份材料要盖章,我抽不开身,帮我跑一趟" | 市民之家 3 楼窗口取资料并盖章,需带身份证复印件 |
| 业务代办 | 取寄快递 | "帮我去楼下菜鸟驿站把快递取了,放我家门口就行" | 代取快递(取件码/手机号后四位),放门口即可 |
| 其他协助 | 自定义帮帮 | "也没啥固定服务,就是想找个人帮我干件小事…" | 按用户原话写清:在哪、干什么、大概多久、有无特殊要求 |

> 未命中上表时,仍按帮帮处理:确认服务地点 + 电话 + 具体内容后发单;`note` 尽量写清地点、事项、时长/人数、特殊要求。

**六大场景**:

| 场景 | 触发条件 | 所需信息 |
|------|---------|---------|
| 场景零:首次注册 | 执行脚本输出 `[REGISTRATION_REQUIRED]` | 手机号 |
| 场景一:订单询价 | 用户想知道费用 | 地址信息(配送需起止地址,帮帮只需地点) |
| 场景二:创建订单 | 用户确认发单 | priceToken、收件人电话;(帮帮必填 note,帮买建议 note) |
| 场景三:查询订单 | 用户想看订单状态 | 订单编号 |
| 场景四:取消订单 | 用户要取消订单 | 订单编号 |
| 场景五:跑男追踪 | 用户想看跑男位置 | 订单编号 |
| 场景六:领取优惠券 | 用户要领券/问优惠(「领券」「领优惠券」「有优惠券吗」「有什么优惠」) | 无(需先注册) |

---

## 跨平台图片展示(通用约定)

不同宿主平台的图片渲染/发送能力不同。**Agent 先对当前环境做一次运行时自检:确认自己能否真实打开并发送这张本地图片,再决定用本地文件还是远程引用**,避免「先试错再补救」的无效往返。平台能力速查表仅作快速参考,**最终以运行时自检结果为准**。

### Agent 运行时自检(权威判定)

拿到本地图片文件(如 `QRCODE_FILE` / `THURSDAY_QRCODE_FILE`)后,按顺序自检当前环境能否真实展示这张本地图片:

1. **文件可访问**:本地路径存在、可读,用文件读取工具能打开且内容非空;
2. **本地发送机制可用**:当前环境存在本地图片交付工具(如豆包 `present_files`、OpenClaw `send_file` 等),且调用能成功返回;
3. **发送后可见**:已按本地方式发送后用户仍反馈看不到图,视为本地不可用。

- **自检通过**(文件可打开 + 本地发送可用)→ 用本地文件,一步到位;
- **自检不通过**(文件打不开 / 无本地发送机制 / 发送后不显示)→ 改用远程 URL 引用(如 `THURSDAY_QRCODE_URL`)渲染;远程也不显示则输出说明文字 + 可点击链接。

### 平台能力速查(快速参考)

| 平台 | 远程 Markdown 图片(`![xx](URL)`) | 本地文件图片(present_files / send_file 等) | 应采用方式 |
|------|----------------------------------|---------------------------------------------|-----------|
| WorkBuddy | ✅ 可显示 | ❌ skill 本地文件不在其工作区,客户端访问不到 | 远程 URL(唯一例外) |
| 豆包 Doubao | ❌ 不渲染远程链接 | ✅ 支持(present_files) | 本地文件 |
| 千问 Qwen | ❌ 不渲染远程链接 | ✅ 需要本地 | 本地文件 |
| OpenClaw 等 | ✅ 可显示 | ✅ 支持(send_file) | 先本地,失败退远程 |
| 其他未知平台 | 不确定 | 不确定 | 先本地,失败退远程 |

### 判定与执行规则(按自检结果)

1. **自检通过(本地可用)**(豆包 / 千问 / OpenClaw 等)→ 直接用本地文件(如 `QRCODE_FILE`),一步到位,不要先试远程链接;
2. **自检不通过、但远程可显示**(如 WorkBuddy:skill 不在其工作区,客户端读不到本地路径)→ 用远程 URL(如 `THURSDAY_QRCODE_URL`)渲染;脚本只给了本地路径时,先通过文件上传工具转成远程 URL 再渲染;
3. **自检不通过、远程也无法确认**(未知平台)→ 按「先本地后远程」:先尝试本地发送,失败再退远程 URL;
4. **两者都不可用** → 输出图片/活动的说明文字 + 可直接点击的 URL 链接,引导用户自行打开。

> 通用原则:**图片必须真实展示给用户,不能只输出路径/URL 文本就当作完成**。若脚本只给了本地路径而当前环境无法发送本地图片,可先通过文件上传工具把本地文件转成远程 URL 再渲染;反之若只有远程 URL 而平台不渲染,则用本地文件兜底。

---

## 场景零:首次注册

当执行任何脚本输出 `[REGISTRATION_REQUIRED]` 时自动触发,通过手机号短信验证完成注册。

### Step 1: 手机号注册

询问用户手机号,发送短信验证码:

```bash
node scripts/register.js --mobile="用户手机号"
```

处理结果:
- `[SMS_SENT]` → 验证码已发送,进入 Step 2
- `[IMAGE_CAPTCHA_REQUIRED]` → 输出包含 `IMAGE_DATA=data:image/png;base64,...`,将 base64 图片展示给用户识别数字后重试:
  ```bash
  node scripts/register.js --mobile="手机号" --imageCode="用户输入的数字"
  ```

### Step 2: 输入验证码完成授权

```bash
node scripts/register.js --mobile="手机号" --smsCode="用户输入的验证码"
```

处理结果:
- `[REGISTRATION_SUCCESS]` → 注册成功,openId 已保存,**立即继续执行用户最初的功能**
- `[REGISTRATION_FAILED]` → 从 Step 1 重试(无需重新输入手机号),最多 3 次
- `[CONFIG_SAVE_FAILED]` → 授权已成功但脚本写配置文件失败。输出中包含 `OPEN_ID=` 和 `CONFIG_FILE=` 两个字段,**Agent 应直接用文件写入工具将 `{"openId": "<OPEN_ID>"}` 写入 CONFIG_FILE 路径**(目录不存在则先创建),然后继续执行用户最初的功能;仅当 Agent 也无法写入时,才提示用户设置环境变量 `UUPT_OPEN_ID`

---

## 场景一:订单询价

计算配送/帮帮服务费用,用户可只询价不发单。

### 执行步骤

1. 判断订单类型(配送 vs 帮帮)
2. 获取地址:配送需起止地址,帮帮只需地点
3. 执行询价脚本,如输出 `[REGISTRATION_REQUIRED]` 则进入场景零后重试

### 命令

**跑腿配送:**
```bash
node scripts/order-price.js --fromAddress="起始地址" --toAddress="目的地址" --cityName="郑州市"
```

**帮帮服务:**
```bash
node scripts/order-price.js --fromAddress="帮帮地点" --toAddress="帮帮地点" --orderType="help"
```

| 参数 | 说明 | 必填 |
|------|------|------|
| `--fromAddress` | 起始地址(帮帮时为帮帮地点) | 是 |
| `--toAddress` | 目的地址(帮帮时为帮帮地点) | 是 |
| `--cityName` | 城市名称(需带"市"字,默认"郑州市") | 否 |
| `--orderType` | `send`=配送(默认),`help`=帮帮 | 否 |

### 回复模板

```
💰 {跑腿配送/帮帮服务}费用查询结果:

{起点/服务地点}:{fromAddress}
{终点(仅配送):{toAddress}}
预估费用:{price/100} 元

📝 如需下单,请提供收件人电话{帮帮订单加:和具体帮帮内容}。
```

> 返回包含 `priceToken` 和价格信息(单位:分,展示时除以 100 转元)。

---

## 场景二:创建订单(发单)

用户明确要发单时,**询价后直接创建订单,无需二次确认**。

### 订单类型对比

| 维度 | 跑腿配送(SEND) | 帮帮服务(HELP) |
|------|---------------|---------------|
| 核心行为 | 物品从A送到B(含帮送/帮取/帮买) | 跑男在现场提供协助/代办/劳务 |
| 地址 | 起始 ≠ 目的 | 起始 = 目的(同一地点) |
| 必填参数 | fromAddress, toAddress, receiverPhone | fromAddress, receiverPhone, **note** |
| 常见场景 | 文件证件、餐饮、鲜花、蛋糕、数码、快递代取送、代购美食/百货/药品等 | 陪诊陪护、异地代办、代去现场、布置场地、家具/电器搬抬、货物装卸、临时工、打扫卫生、琐事代办、取寄快递、其他自定义协助 |
| note | 可选(帮买/易碎品建议填写) | **必填** |

### 执行步骤

1. 获取必要信息(配送:起止地址 + 电话;帮帮:地点 + 电话 + 内容)
2. 调用询价接口获取 priceToken(参照场景一命令)
3. **立即创建订单**,不询问确认
4. 处理返回结果

### 创建订单命令

```bash
# 跑腿配送
node scripts/create-order.js --priceToken="xxx" --receiverPhone="13800138000"

# 跑腿配送(可选 note:物品说明 / 帮买要求)
node scripts/create-order.js --priceToken="xxx" --receiverPhone="13800138000" --note="瑞幸生椰拿铁热一杯"

# 帮帮服务(必须带 --note)
node scripts/create-order.js --priceToken="xxx" --receiverPhone="13800138000" --note="帮帮内容描述"

# 微信渠道:追加 --channel="wechat" 生成二维码
```

| 参数 | 说明 | 必填 |
|------|------|------|
| `--priceToken` | 询价返回的 token | 是 |
| `--receiverPhone` | 收件人手机号 | 是 |
| `--channel` | 渠道(wechat/feishu/dingtalk 等) | 否 |
| `--note` | 物品说明或帮帮内容;帮帮必填,帮买/易碎品建议填写 | 帮帮必填 |

### 返回结果处理

**情况一:余额充足(订单创建成功)**

```
订单创建成功!

订单编号:{order_code}
{帮帮订单:帮帮内容:{note} | 服务地点:{fromAddress}}
配送费用:{price/100} 元

跑男正在接单中,请保持电话畅通。
```

**情况二:余额不足(`[PAYMENT_REQUIRED]`)**

关键输出:`ORDER_CODE`、`PAYMENT_URL`、`QRCODE_FILE`(仅 `--channel="wechat"` 时)。

**微信渠道**(链接无法直接打开,必须发二维码图片):

```
message(action=send, channel="wechat", path="{QRCODE_FILE}", message="请扫码支付 {price/100} 元")
```

**其他渠道**:直接发送支付链接 `{PAYMENT_URL}`(支持微信/支付宝)。

用户返回后询问支付状态,确认后查询订单详情:

```bash
node scripts/order-detail.js --orderCode="{order_code}"
```

### 完整流程示例

```
# —— 跑腿配送 ——
用户:帮我从金水区送到二七区德化街,电话 13800138000
Agent:识别帮送 → 询价 → 创建订单 → 余额充足则返回成功,不足则引导支付

用户:把花园路花店的一束玫瑰送到正弘城,电话 13900001111
Agent:识别帮送(鲜花) → 确认起止地址 → 询价 → 可选 note="玫瑰一束,轻拿轻放" → 发单

用户:去郑州大学北门菜鸟驿站取个快递送到宿舍楼下,取件码 8876
Agent:识别帮取(快递) → from=驿站 to=宿舍 → note 写取件码 → 询价发单

用户:帮我买杯瑞幸送到绿地中心A座前台
Agent:识别帮买 → 确认门店与收货地址、饮品要求写入 note → 询价发单

用户:帮我去药店买盒感冒药送到如家酒店前台
Agent:识别帮买(药品) → 确认药店与酒店地址 → note 写清品名与缺货联系方式 → 询价发单

# —— 帮帮服务 ——
用户:帮我在郑州人民医院挂个号
Agent:识别帮帮服务 → 询价 → 获取电话与 note → 创建订单(带 --note)

用户:帮我去医院陪诊
Agent:识别帮帮(陪诊陪护) → 确认医院地点 → 询价 → 电话 + note="陪诊陪护…" → 发单

用户:帮我把冰箱搬上楼
Agent:识别帮帮(电器搬抬) → 确认地址与楼层/电梯情况写入 note → 询价发单

用户:帮我去政务大厅取资料盖章
Agent:识别帮帮(琐事代办) → 确认具体大厅地点 → note 写清取件/盖章要求 → 询价发单

用户:帮我去驿站取个快递放到门口就行
Agent:识别帮帮(取寄快递) → 同一地点代办;若还要求送到另一地址则改判为配送
```

---

## 场景三:查询订单详情

```bash
node scripts/order-detail.js --orderCode="UU123456789"
```

| 参数 | 说明 | 必填 |
|------|------|------|
| `--orderCode` | 订单编号 | 是 |

回复模板:
```
📋 订单详情:
订单编号:{order_code} | 状态:{status}
起点:{from_address} | 终点:{to_address}
配送费:{price/100} 元
跑男:{driver_name} {driver_phone}
```

---

## 场景四:取消订单

```bash
node scripts/cancel-order.js --orderCode="UU123456789" --reason="取消原因(可选)"
```

| 参数 | 说明 | 必填 |
|------|------|------|
| `--orderCode` | 订单编号 | 是 |
| `--reason` | 取消原因 | 否 |

---

## 场景五:跑男实时追踪

```bash
node scripts/driver-track.js --orderCode="UU123456789"
```

| 参数 | 说明 | 必填 |
|------|------|------|
| `--orderCode` | 订单编号 | 是 |

回复模板:
```
跑男实时位置:
跑男:{driver_name} | 电话:{driver_phone}
当前位置:{current_location} | 预计送达:{estimated_time}
```

---

## 场景六:领取优惠券

用户要领券或询问优惠时直接执行,无需额外信息;首次使用输出 `[REGISTRATION_REQUIRED]` 时先走场景零注册后重试。

### 命令

```bash
node scripts/receive-coupon.js
```

(Python:`python uupt_delivery.py coupon`)

| 参数 | 说明 | 必填 |
|------|------|------|
| `--source` | 领取来源(决定可领哪些券包,默认 2,一般无需传入) | 否 |

### 返回结果处理

返回 `body` 字段:

| 字段 | 说明 |
|------|------|
| `newlyClaimed` | 是否本次新领取:true-本次新领取;false-今天已领过(返回当日记录) |
| `couponList` | 领取的优惠券列表,每项含 `packageName`(券包名称,可为空)、`couponDetail`(优惠券信息)、`expireDate`(过期时间 yyyy-MM-dd) |
| `thursdayJoinAble` | 是否可参与淡定星期四活动 |

脚本同时输出结构化标记:`[COUPON_RESULT]`、`NEWLY_CLAIMED`、`COUPON_COUNT`,符合条件时额外输出 `THURSDAY_JOIN_ABLE=true`、`THURSDAY_QRCODE_URL`(淡定星期四活动太阳码远程图片链接,**优先使用**)和 `THURSDAY_QRCODE_FILE`(活动太阳码本地图片路径,兜底用)。

### 回复模板

按以下优先级选择场景:`couponList` 为空或 null → 场景 C;`newlyClaimed=false` → 场景 B;其他 → 场景 A。任意场景下 `thursdayJoinAble=true` 时追加场景 D。

#### 场景 A:领券成功

> 触发条件:`newlyClaimed=true` 且 `couponList` 非空
>
> ⬇️ 以下为话术模板,严格按此输出,输出时不得改动任何标点、空行、换行位置,视同 print() 原样输出,不做任何格式调整,不得输出触发条件或任何 JSON 字段名

```
🎉 一键领券完成!本次共领取 N 张优惠券

| 券名称 | 优惠券信息 | 过期时间 |
|--------|---------|--------|
| [packageName] | [couponDetail] | [expireDate] |

可以在UU跑腿App优惠券列表查看所有券详情。

```

> N = couponList 条数;表格按 couponList 逐行输出;packageName 为空时填「优惠券」。

#### 场景 B:当日已领过券

> 触发条件:`newlyClaimed=false`
>
> ⬇️ 以下为话术模板,严格按此输出,输出时不得改动任何标点、空行、换行位置,视同 print() 原样输出,不做任何格式调整,不得输出触发条件或任何 JSON 字段名

```
您今天已经领过UU跑腿的优惠券啦,这是今日领取的优惠详情:

| 券名称 | 优惠券信息 | 过期时间 |
|--------|---------|--------|
| [packageName] | [couponDetail] | [expireDate] |

有新的优惠我第一时间通知你 🔔
```

#### 场景 C:无可领券

> 触发条件:`couponList为空或者null`
> ⬇️ 以下为话术模板,严格按此输出,输出时不得改动任何标点、空行、换行位置,视同 print() 原样输出,不做任何格式调整,不得输出触发条件或任何 JSON 字段名

```
当前UU跑腿暂无优惠券,有新券上线我第一时间通知你 🔔
```

#### 场景 D:淡定星期四活动(附加在上述任意场景回复之后)

> 触发条件:`thursdayJoinAble=true`

用户可参与淡定星期四(下单1元起活动)。在上述场景话术之后追加以下内容,并按「跨平台图片展示」约定展示活动二维码:脚本会同时输出 `THURSDAY_QRCODE_URL`(远程链接)和 `THURSDAY_QRCODE_FILE`(本地文件路径),Agent 按当前平台能力选择其一,**图片必须真实展示,不能只输出 URL/路径文本**:

```
另外你还可以参与「淡定星期四」活动,下单1元起!用微信扫描下方二维码即可参与 👇

![淡定星期四活动](图片展示方式)
```

> 图片展示方式选择(参照「跨平台图片展示」章节,**先做运行时自检**):
> - **自检**:用文件读取工具确认 `THURSDAY_QRCODE_FILE` 本地文件能打开,且当前环境存在本地图片发送机制(如豆包 `present_files`);
> - **自检通过** → 直接用 `THURSDAY_QRCODE_FILE` 本地文件发送,**不要先试远程链接**;
> - **自检不通过**(打不开 / 无本地发送机制 / 发送后不显示,如 WorkBuddy)→ 用 `THURSDAY_QRCODE_URL` 渲染;
> - **两者都不可用** → 输出活动说明文字 + `THURSDAY_QRCODE_URL` 可点击链接,引导用户微信自行打开。

### 完整流程示例

```
用户:帮我领个优惠券
Agent:直接执行领券脚本 → newlyClaimed=true 且 couponList 非空 → 按场景 A 话术输出领券成功表格

用户:有优惠券吗 / 有什么优惠
Agent:识别为领券诉求 → 执行领券脚本 → 按返回值选择场景 A/B/C 话术输出

用户:今天又让我领券,领过了吧
Agent:执行领券脚本 → newlyClaimed=false → 按场景 B 话术输出今日已领的券详情

用户:先领张券,然后帮我从金水区送份文件到二七广场,电话 13800138000
Agent:先领券(按场景 A/B/C 输出)→ 再转场景一询价 → 场景二发单

用户:领券(返回 thursdayJoinAble=true)
Agent:按场景 A/B/C 输出券后,追加淡定星期四活动话术并用 THURSDAY_QRCODE_URL 渲染图片(平台不支持远程图片时退回 THURSDAY_QRCODE_FILE + 平台图片发送机制)

用户:未注册状态下要求领券
Agent:脚本输出 [REGISTRATION_REQUIRED] → 先走场景零手机号注册 → 注册成功后重新执行领券
```

---

## 配置管理

配置分为两层,优先级:**环境变量 > config.json > defaults.json > 内置默认值**。

| 文件 | 内容 | 说明 |
|------|------|------|
| `defaults.json`(skill 目录) | appId、apiUrl | 内置凭证,**请勿修改** |
| `~/.uupt-delivery/config.json` | openId | 手机号注册成功后自动生成,保存在用户主目录 |

### 环境变量

| 变量 | 说明 |
|------|------|
| `UUPT_APP_ID` | 应用 ID(可选覆盖) |
| `UUPT_OPEN_ID` | 用户唯一标识 |
| `UUPT_API_URL` | API 地址(可选,默认生产环境) |

### API 环境

| 环境 | URL |
|------|-----|
| 生产环境 | `https://api-open.uupt.com` |

---

## 在代码中使用

### Node.js

```javascript
const { orderPrice, createOrder, orderDetail, cancelOrder, driverTrack, receiveCouponPackages } = require('./index');

// 配送询价
const price = await orderPrice({ fromAddress: '...', toAddress: '...', cityName: '郑州市' });
// 帮帮询价
const helpPrice = await orderPrice({ fromAddress: '...', orderType: 'help' });
// 创建订单
const order = await createOrder({ priceToken: price.body.priceToken, receiverPhone: '13800138000' });
// 帮帮订单(带 note)
const helpOrder = await createOrder({ priceToken: helpPrice.body.priceToken, receiverPhone: '13800138000', note: '帮帮内容' });
// 余额不足检测
if (order.body.orderUrl) console.log('支付链接:', order.body.orderUrl);
// 查询订单
const detail = await orderDetail({ orderCode: order.body.orderCode });
// 领取优惠券
const coupon = await receiveCouponPackages({ source: 2 });
```

### Python

```python
from uupt_delivery import order_price, create_order, order_detail, cancel_order, driver_track, receive_coupon_packages

# 配送询价
price = order_price(from_address='...', to_address='...', city_name='郑州市')
# 帮帮询价
help_price = order_price(from_address='...', order_type='help')
# 创建订单
order = create_order(price_token=price['body']['priceToken'], receiver_phone='13800138000')
# 帮帮订单(带 note)
help_order = create_order(price_token=help_price['body']['priceToken'], receiver_phone='13800138000', note='帮帮内容')
# 余额不足检测
if order['body'].get('orderUrl'): print('支付链接:', order['body']['orderUrl'])
# 查询订单
detail = order_detail(order_code=order['body']['orderCode'])
# 领取优惠券
coupon = receive_coupon_packages(source=2)
```

---

## 注意事项

- **首次使用**:需通过手机号验证获取授权,之后无需重复。注册失败自动重试,最多 3 次(无需重新输入手机号)
- **图片验证码**:短信发送时若返回 `[IMAGE_CAPTCHA_REQUIRED]`,展示 base64 图片给用户识别后重试
- **询价有效期**:priceToken 有时效性,建议获取后尽快创建订单
- **价格单位**:API 返回的价格单位是分,展示时除以 100 转换为元
- **地址完整性**:地址越完整配送越准确。未指定城市默认"郑州市"
- **余额不足**:`[PAYMENT_REQUIRED]` 时,微信渠道用 `message` 发送二维码图片附件,其他渠道发送支付链接
- **帮帮订单**:必须传 `--note` 参数,fromAddress = toAddress;务必先确认服务地点与帮帮内容再下单。`note` 建议包含:事项类型(如陪诊/搬抬/保洁)、具体动作、时长或人数、特殊要求
- **跑腿配送**:必须有不同的起止地址;帮买场景建议用 `--note` 写清商品与规格;鲜花/蛋糕等易碎品可在 note 注明轻拿轻放、保温防震等要求
- **领取优惠券**:需先完成注册(未注册时输出 `[REGISTRATION_REQUIRED]` 先走场景零);同一用户同一来源当天只能新领一次,重复领券返回当日记录(`newlyClaimed=false`);回复严格按场景六话术模板输出;`thursdayJoinAble=true` 时必须按「跨平台图片展示」约定展示活动二维码(豆包等支持本地图片的平台直接用 `THURSDAY_QRCODE_FILE` 发送,WorkBuddy 等仅支持远程渲染的平台用 `THURSDAY_QRCODE_URL`,图片必须真实展示)
- **配置文件**:`defaults.json` 为内置凭证,请勿修改或删除

## 相关链接

- [UU跑腿开放平台](https://open.uupt.com/#/development/ai/agentSkill)
- [GitHub地址](https://github.com/uupt-mcp/uupt-delivery-skill)

Files in this skill

  • SKILL.md12.7 KB
  • config.example.json217 B
  • defaults.json154 B
  • index.js12.4 KB
  • package.json720 B
  • requirements.txt60 B
  • scripts/cancel-order.js1.6 KB
  • scripts/create-order.js5 KB
  • scripts/driver-track.js1.7 KB
  • scripts/order-detail.js2.1 KB
  • scripts/order-price.js2.7 KB
  • scripts/register.js4.1 KB
  • uupt_delivery.py26.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.