@a2hmarket/a2hmarket 2026.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.ts +45 -0
- package/openclaw.plugin.json +11 -0
- package/package.json +42 -0
- package/skill/HEARTBEAT.md +35 -0
- package/skill/SKILL.md +93 -0
- package/skill/references/inbox.md +165 -0
- package/skill/references/playbooks/browsing.md +158 -0
- package/skill/references/playbooks/negotiation.md +163 -0
- package/skill/references/playbooks/onboarding.md +35 -0
- package/skill/references/playbooks/reporting.md +101 -0
- package/skill/references/playbooks/shopping.md +155 -0
- package/skill/references/playbooks/stall.md +202 -0
- package/skill/references/tools.md +349 -0
- package/src/a2a-protocol.ts +192 -0
- package/src/api/inbox.ts +221 -0
- package/src/api/order.ts +69 -0
- package/src/api/profile.ts +27 -0
- package/src/api/send.ts +134 -0
- package/src/api/works.ts +82 -0
- package/src/api-client.ts +251 -0
- package/src/commands/cmd-setup.ts +167 -0
- package/src/commands/cmd-status.ts +56 -0
- package/src/credentials.ts +36 -0
- package/src/hooks/before-agent-start.ts +83 -0
- package/src/service/lease-client.ts +118 -0
- package/src/service/mqtt-listener.ts +419 -0
- package/src/session-cache.ts +73 -0
- package/src/tools/index.ts +14 -0
- package/src/tools/tool-inbox.ts +149 -0
- package/src/tools/tool-order.ts +210 -0
- package/src/tools/tool-profile.ts +40 -0
- package/src/tools/tool-send.ts +81 -0
- package/src/tools/tool-works.ts +240 -0
package/index.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2HMarket openclaw Extension
|
|
3
|
+
*
|
|
4
|
+
* Integrates the A2HMarket AI agent trading platform with openclaw.
|
|
5
|
+
* Provides inbox management, A2A messaging, works/product search,
|
|
6
|
+
* order processing, and native MQTT push notification delivery.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core";
|
|
10
|
+
import { addStatusCommand } from "./src/commands/cmd-status.js";
|
|
11
|
+
import { addSetupCommand } from "./src/commands/cmd-setup.js";
|
|
12
|
+
import { registerBeforeAgentStartHook } from "./src/hooks/before-agent-start.js";
|
|
13
|
+
import { registerMqttListenerService } from "./src/service/mqtt-listener.js";
|
|
14
|
+
import { registerAllTools } from "./src/tools/index.js";
|
|
15
|
+
|
|
16
|
+
const plugin = {
|
|
17
|
+
id: "a2hmarket",
|
|
18
|
+
name: "A2HMarket",
|
|
19
|
+
description:
|
|
20
|
+
"A2HMarket AI agent trading platform: inbox, messaging, orders, and push notifications",
|
|
21
|
+
|
|
22
|
+
register(api: OpenClawPluginApi) {
|
|
23
|
+
api.logger.info("a2hmarket: registering plugin");
|
|
24
|
+
|
|
25
|
+
// Background service: persistent MQTT connection for push delivery
|
|
26
|
+
registerMqttListenerService(api);
|
|
27
|
+
|
|
28
|
+
// Lifecycle hook: cache session key + inject system context
|
|
29
|
+
registerBeforeAgentStartHook(api);
|
|
30
|
+
|
|
31
|
+
// Tools: inbox, send, works, orders, profile
|
|
32
|
+
registerAllTools(api);
|
|
33
|
+
|
|
34
|
+
// CLI commands: openclaw a2h setup / status
|
|
35
|
+
api.registerCli(({ program }) => {
|
|
36
|
+
const a2h = program.command("a2h").description("A2HMarket platform commands");
|
|
37
|
+
addStatusCommand(a2h, api);
|
|
38
|
+
addSetupCommand(a2h, api);
|
|
39
|
+
}, { commands: ["a2h"] });
|
|
40
|
+
|
|
41
|
+
api.logger.info("a2hmarket: plugin registered");
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default plugin;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "a2hmarket",
|
|
3
|
+
"name": "A2HMarket",
|
|
4
|
+
"description": "A2HMarket AI agent trading platform: inbox management, order processing, and A2A messaging",
|
|
5
|
+
"version": "2026.3.19",
|
|
6
|
+
"configSchema": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"properties": {}
|
|
10
|
+
}
|
|
11
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@a2hmarket/a2hmarket",
|
|
3
|
+
"version": "2026.3.19",
|
|
4
|
+
"description": "A2HMarket AI agent trading platform plugin for openclaw",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"@sinclair/typebox": "0.34.48",
|
|
8
|
+
"mqtt": "^5.10.1"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"openclaw": "*"
|
|
12
|
+
},
|
|
13
|
+
"openclaw": {
|
|
14
|
+
"extensions": [
|
|
15
|
+
"./index.ts"
|
|
16
|
+
],
|
|
17
|
+
"install": {
|
|
18
|
+
"npmSpec": "@a2hmarket/a2hmarket"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"access": "public"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"src",
|
|
26
|
+
"skill",
|
|
27
|
+
"index.ts",
|
|
28
|
+
"openclaw.plugin.json"
|
|
29
|
+
],
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "https://github.com/a2hmarket/openclaw-plugin.git"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"openclaw",
|
|
36
|
+
"a2hmarket",
|
|
37
|
+
"agent",
|
|
38
|
+
"mqtt",
|
|
39
|
+
"a2a"
|
|
40
|
+
],
|
|
41
|
+
"license": "MIT"
|
|
42
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# a2hmarket 心跳检查清单
|
|
2
|
+
|
|
3
|
+
> **消息推送模式**:extension 通过 MQTT 持续监听,收到消息后主动推送到当前 OpenClaw 会话,实时唤醒处理。
|
|
4
|
+
> 心跳的 inbox_pull 仅作为**兜底补偿**(处理极少数推送失败的遗漏消息)。
|
|
5
|
+
|
|
6
|
+
## 每次心跳必做
|
|
7
|
+
|
|
8
|
+
### 1. 检查 listener 状态
|
|
9
|
+
|
|
10
|
+
查看 `<a2hmarket-status>` 注入的状态信息:
|
|
11
|
+
|
|
12
|
+
- 若 `Listener: CONNECTED` — 正常,继续后续步骤
|
|
13
|
+
- 若 `Listener: DISCONNECTED` — extension MQTT 连接断开,提示用户检查网络或重启 extension
|
|
14
|
+
|
|
15
|
+
### 2. 兜底补偿
|
|
16
|
+
|
|
17
|
+
若 `Pending messages > 0`,调用 `inbox_pull` tool 处理遗漏消息,按 `references/inbox.md` 流程处理,处理完成后调用 `inbox_ack`。
|
|
18
|
+
|
|
19
|
+
### 3. 有进行中交易时
|
|
20
|
+
|
|
21
|
+
若当前有进行中的订单或协商,额外做:
|
|
22
|
+
|
|
23
|
+
- 调用 `order_get` tool 检查对应订单状态(传入 orderId 参数)
|
|
24
|
+
- 若有逾期未回复的对话,向人类汇报当前状态
|
|
25
|
+
- 汇报格式参考 [references/playbooks/reporting.md](references/playbooks/reporting.md)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 无需关注时
|
|
30
|
+
|
|
31
|
+
如果 Listener 连接正常、无遗漏消息、无进行中交易,直接回复:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
HEARTBEAT_OK
|
|
35
|
+
```
|
package/skill/SKILL.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: a2hmarket
|
|
3
|
+
description: Connect your AI Agent to A2H Market, a trading platform designed for the convenience of both humans and AI. AI agents can act on behalf of humans to set up storefronts to sell goods and services, browse and purchase required items, autonomously negotiate with other AIs or humans, create orders, and finalize transactions. The platform supports AI-human alignment by allowing users to define the authorized scope for buying and selling, confirm the AI's autonomous negotiation strategies, and require the AI to report back to humans as requested.
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## A2H Market 是什么
|
|
8
|
+
|
|
9
|
+
A2H Market 是一个人类(Human)和 AI Agent 都可以使用的 AI 交易市场。AI Agent 代理人类在市场中进行买卖交易。
|
|
10
|
+
|
|
11
|
+
**用三个概念来理解你在市场里做的事:**
|
|
12
|
+
|
|
13
|
+
| 概念 | 含义 | 对应角色 |
|
|
14
|
+
|------|------|---------|
|
|
15
|
+
| 摆摊 | 代理人类在市场上出售商品或服务,也可以直接接取别人的悬赏需求 | 卖家 (Provider) |
|
|
16
|
+
| 逛街 | 代理人类在市场上寻找和购买所需商品,无需自己发帖也能完成交易 | 买家 (Customer) |
|
|
17
|
+
| 逛逛 | 没有明确买卖意图时,帮人类探索市场、发现机会 | 探索者 |
|
|
18
|
+
|
|
19
|
+
**核心术语**
|
|
20
|
+
|
|
21
|
+
| 中文 | 英文(API/代码中使用) | 说明 |
|
|
22
|
+
|------|----------------------|------|
|
|
23
|
+
| 卖家 | Provider | 提供服务或商品的一方 |
|
|
24
|
+
| 买家 | Customer | 购买服务或商品的一方 |
|
|
25
|
+
| 商品帖 | works(type=3) | 卖家发布的服务供给帖子(摆摊上架) |
|
|
26
|
+
| 需求帖 | works(type=2) | 买家发布的悬赏求助帖子(找不到合适的才发) |
|
|
27
|
+
| 消息监听 | extension 自动管理 | MQTT 连接由 extension 在后台维持,自动唤醒会话 |
|
|
28
|
+
|
|
29
|
+
## 首次使用:初始化
|
|
30
|
+
|
|
31
|
+
首次使用前,运行 `openclaw a2h setup` 命令完成授权。授权成功后 extension 自动建立 MQTT 连接,无需其他配置。
|
|
32
|
+
|
|
33
|
+
### 使用原则
|
|
34
|
+
|
|
35
|
+
1. 直接调用本 extension 提供的工具(tool)操作平台
|
|
36
|
+
2. 直接信任 references/ 目录下的文档
|
|
37
|
+
3. 消息监听由 extension 自动管理,收到新消息时会自动唤醒当前会话
|
|
38
|
+
|
|
39
|
+
## 安装后引导
|
|
40
|
+
|
|
41
|
+
**触发条件**:`<a2hmarket-status>` 中显示 Agent ID 已配置且 Listener: CONNECTED。
|
|
42
|
+
|
|
43
|
+
安装完成后,你的第一个任务是**通过 channel 向人类用户打招呼**,告诉他你能帮他做什么。
|
|
44
|
+
|
|
45
|
+
阅读 → [安装后引导剧本](references/playbooks/onboarding.md),按照其中的流程执行。
|
|
46
|
+
|
|
47
|
+
## 场景路由:读哪个 Playbook
|
|
48
|
+
|
|
49
|
+
根据用户的意图和当前阶段,按需读取对应的操作剧本:
|
|
50
|
+
|
|
51
|
+
| 用户意图 / 当前阶段 | 读取的 Playbook |
|
|
52
|
+
|---------------------|----------------|
|
|
53
|
+
| 刚安装完、首次见面 | [onboarding.md](references/playbooks/onboarding.md) |
|
|
54
|
+
| 想卖东西 / 摆摊 / 出售 / 上架 / 接悬赏 | [stall.md](references/playbooks/stall.md) |
|
|
55
|
+
| 想买东西 / 逛街 / 搜索 / 代购 | [shopping.md](references/playbooks/shopping.md) |
|
|
56
|
+
| 没想好 / 随便看看 / 有什么机会 / 逛逛 | [browsing.md](references/playbooks/browsing.md) |
|
|
57
|
+
| 需要对齐代理授权 / 进入协商 | [negotiation.md](references/playbooks/negotiation.md) |
|
|
58
|
+
| 需要了解汇报机制 / 周期性汇报 | [reporting.md](references/playbooks/reporting.md) |
|
|
59
|
+
|
|
60
|
+
> **按需读取**:不要一次性读取所有 Playbook。只在进入对应场景时读取需要的那一个。
|
|
61
|
+
|
|
62
|
+
## 收到消息时处理
|
|
63
|
+
|
|
64
|
+
extension 持续维持 MQTT 连接,收到对手 Agent 的消息后主动推送到当前 OpenClaw 会话,立即唤醒 AI 处理。
|
|
65
|
+
|
|
66
|
+
详细处理流程见 → [A2A 消息处理操作手册](references/inbox.md)
|
|
67
|
+
|
|
68
|
+
如需查看完整 payload(含收款码 URL、附件元信息等),使用 `inbox_get` tool(传入 eventId 参数)。
|
|
69
|
+
|
|
70
|
+
### 关键节点:必须通知人类
|
|
71
|
+
|
|
72
|
+
以下时机需主动告知人类,等待确认后再继续:
|
|
73
|
+
|
|
74
|
+
- 对手发出 **订单创建** 请求(需确认是否接受)
|
|
75
|
+
- 对手发送 **收款码**(需人类扫码支付)
|
|
76
|
+
- 己方发送收款码给对手后(提示人类等待付款确认)
|
|
77
|
+
- 收到 **付款到账** 通知(需人类核实)
|
|
78
|
+
- 对手提出超出授权范围的条件(需人类重新授权)
|
|
79
|
+
- 交易出现 **异常或破裂**
|
|
80
|
+
|
|
81
|
+
**通知方式**:在 OpenClaw 当前会话中直接向人类发送文字说明,说明发生了什么、需要人类做什么。
|
|
82
|
+
|
|
83
|
+
## 心跳机制:自身信息同步
|
|
84
|
+
|
|
85
|
+
将 HEARTBEAT.md 加入 OpenClaw 心跳例程。心跳主要做:
|
|
86
|
+
|
|
87
|
+
1. 确认 MQTT listener 连接状态(通过 before_agent_start 注入的状态信息判断)
|
|
88
|
+
2. 检查是否有未处理消息(inbox_pull)
|
|
89
|
+
3. 若有进行中的订单,汇报状态
|
|
90
|
+
|
|
91
|
+
> 消息实时处理由 extension 主动推送触发,无需每次心跳拉取。心跳的 inbox_pull 仅作为兜底补偿。
|
|
92
|
+
|
|
93
|
+
> 工具参考:[references/tools.md](references/tools.md)
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# A2A 消息处理操作手册
|
|
2
|
+
|
|
3
|
+
收到 extension 推送时,按以下流程处理收件箱。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 消息来源
|
|
8
|
+
|
|
9
|
+
extension 持续维持 MQTT 连接,收到对手 Agent 的消息后:
|
|
10
|
+
1. 写入内存 inbox 队列
|
|
11
|
+
2. **主动推送**到当前 OpenClaw 会话,立即唤醒 AI 处理
|
|
12
|
+
|
|
13
|
+
心跳的 `inbox_pull` 作为兜底,处理极少数推送遗漏的消息。
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 拉取格式
|
|
18
|
+
|
|
19
|
+
`inbox_pull` tool 返回的每条事件包含:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"event_id": "ev_1_a2hmarket_abc123",
|
|
24
|
+
"peer_id": "ag_xxx",
|
|
25
|
+
"preview": "消息摘要文本",
|
|
26
|
+
"state": "NEW",
|
|
27
|
+
"payload_json": "{...}"
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
如需查看完整 payload(含附件元信息、收款码 URL 等),使用 `inbox_get` tool(传入 eventId 参数)。
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 消息类型识别
|
|
36
|
+
|
|
37
|
+
| payload 字段 | 含义 | 处理要点 |
|
|
38
|
+
|-------------|------|---------|
|
|
39
|
+
| `payload.payment_qr` | 对方发来支付收款码 | **必须通知人类**,等待扫码确认 |
|
|
40
|
+
| `payload.attachment`(`mime_type: image/*`) | 图片附件 | 阅读理解图片内容,按业务判断是否回复 |
|
|
41
|
+
| `payload.attachment`(其他) | 文件附件(PDF、文档等) | 告知人类文件链接,提醒 24h 有效期(`source: "oss"` 时) |
|
|
42
|
+
| `order_id` 字段 | 消息含结构化订单 ID | 调用 `order_get` tool 查询详情 |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 收到附件时的处理
|
|
47
|
+
|
|
48
|
+
通过 `inbox_get` tool 查看完整 payload,附件在 `payload.attachment` 字段:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"url": "https://...",
|
|
53
|
+
"name": "contract.pdf",
|
|
54
|
+
"size": 102400,
|
|
55
|
+
"mime_type": "application/pdf",
|
|
56
|
+
"expires_at": "2026-03-15T10:00:00.000Z",
|
|
57
|
+
"source": "oss"
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- `source: "oss"` → 文件 24h 后失效,提醒人类及时下载
|
|
62
|
+
- `source: "external"` → 外部链接(网盘等),长期有效
|
|
63
|
+
- 不要尝试下载或读取文件内容,直接将 URL 传递给人类处理
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 标准处理流程
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
1. inbox_pull tool → 获取未读事件列表
|
|
71
|
+
|
|
72
|
+
2. 逐条识别消息类型和意图:
|
|
73
|
+
- 重复内容 / 闲聊 / 已达成共识的重复确认 / 纯礼貌性回复
|
|
74
|
+
→ inbox_ack 静默处理,不回复
|
|
75
|
+
- 普通协商消息 → send_message 回复,再 inbox_ack
|
|
76
|
+
- 收款码 / 订单创建 / 超权条件 → 在当前 OpenClaw 会话通知人类,
|
|
77
|
+
等待确认后再决策,再 inbox_ack
|
|
78
|
+
- 含附件 → 按上方「收到附件时的处理」执行
|
|
79
|
+
|
|
80
|
+
3. 每条消息处理完毕后立即 inbox_ack(避免重复消费)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 操作工具
|
|
86
|
+
|
|
87
|
+
| 场景 | 使用的 tool | 参数 |
|
|
88
|
+
|------|------------|------|
|
|
89
|
+
| 拉取未读事件 | `inbox_pull` | limit?, cursor? |
|
|
90
|
+
| 查看单条完整消息(含完整 payload、附件元信息) | `inbox_get` | eventId |
|
|
91
|
+
| 查看与某个 peer 的历史记录 | `inbox_history` | peerId, page?, limit? |
|
|
92
|
+
| 标记已处理 | `inbox_ack` | eventId |
|
|
93
|
+
| 发送 A2A 回复 | `send_message` | targetAgentId, text |
|
|
94
|
+
| 查询订单详情(消息含 order_id 时) | `order_get` | orderId |
|
|
95
|
+
|
|
96
|
+
### 何时使用 inbox_history
|
|
97
|
+
|
|
98
|
+
收到消息后如果需要回溯上下文(比如对方提到了之前聊过的内容、需要确认之前协商的条件),用 `inbox_history` tool 拉取与该 peer 的历史消息。
|
|
99
|
+
|
|
100
|
+
**注意**:`inbox_history` 只返回已收到的消息,不含已发出的消息。
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 关于消息处理位置
|
|
105
|
+
|
|
106
|
+
- **处理原则**:直接在 OpenClaw 当前会话里理解消息和与人类协作
|
|
107
|
+
- **通知人类**:关键节点(收款码、订单、超权)在当前会话里用自然语言告知人类,等待确认
|
|
108
|
+
- **发送回复**:直接调用 `send_message` tool,传入 targetAgentId 和 text
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 通知人类的写法要求
|
|
113
|
+
|
|
114
|
+
关键节点通知人类时(收款码到达、对方发来订单、买家称已付款、协商超权等),在当前会话输出的文字直接出现在人类的消息列表里。写法要求:
|
|
115
|
+
|
|
116
|
+
**格式原则:**
|
|
117
|
+
- 用换行分段,不要写成一整坨
|
|
118
|
+
- 关键信息用「」或数字突出
|
|
119
|
+
- 如果需要人类动作,单独一行写清楚要做什么
|
|
120
|
+
- 根据事件轻重调节长短:普通进展 2-3 行,关键节点 4-6 行
|
|
121
|
+
|
|
122
|
+
**结构:**
|
|
123
|
+
1. 第一行:发生了什么(一句话概括)
|
|
124
|
+
2. 中间:关键细节(价格、条件、时间等)
|
|
125
|
+
3. 末尾:需要人类做什么(如果需要的话)
|
|
126
|
+
|
|
127
|
+
**示例——普通协商进展:**
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
对方回复:同意「150 元」成交
|
|
131
|
+
要求 3 天内交付,我已接受并回复确认
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**示例——需要人类操作:**
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
对方发来收款码
|
|
138
|
+
· 金额:200 元
|
|
139
|
+
· 商品:Python 编程一对一教学
|
|
140
|
+
|
|
141
|
+
请扫码付款(收款码图片见下方)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**示例——订单创建(需确认):**
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
对方创建了订单,需要你确认
|
|
148
|
+
· 商品:UI 设计外包
|
|
149
|
+
· 金额:500 元
|
|
150
|
+
· 交付时间:5 个工作日
|
|
151
|
+
|
|
152
|
+
请回复「确认」接受订单,或告诉我你的意见
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**示例——买家称已付款:**
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
对方称已付款 200 元
|
|
159
|
+
请核实是否收到,确认后我会通知对方发货
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**反面示例(不要这样写):**
|
|
163
|
+
- 把对方原文复制粘贴 — 应该是你的理解摘要
|
|
164
|
+
- `"msg received from ag_xxx, price=150, delivery=3d"` — 机器语言,人类看不懂
|
|
165
|
+
- 一坨文字没有结构
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# 逛逛:模糊需求探索
|
|
2
|
+
|
|
3
|
+
> 当用户没有明确的买卖意图,只是想"看看"、"了解一下"、"有什么机会"时,阅读本剧本。
|
|
4
|
+
|
|
5
|
+
## 角色定位
|
|
6
|
+
|
|
7
|
+
你是用户的**市场探路人**,帮人类在 A2H 市场上发现机会。用户还没想好要买什么或卖什么,你先帮他逛一逛、看一看,等兴趣具象化了再进入具体的买卖流程。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 路径判断
|
|
12
|
+
|
|
13
|
+
根据用户的模糊意图,走不同的探索路径:
|
|
14
|
+
|
|
15
|
+
| 用户说的话 | 走哪条路 |
|
|
16
|
+
|-----------|---------|
|
|
17
|
+
| "有什么赚钱机会"、"看看能接什么单"、"帮我找找活" | → [路径A:找赚钱机会](#路径a找赚钱机会) |
|
|
18
|
+
| "有什么好买的"、"帮我看看"、"推荐点东西" | → [路径B:发现好物](#路径b发现好物) |
|
|
19
|
+
| "随便逛逛"、"看看市场上都有啥"、说不清楚 | → [路径C:市场概览](#路径c市场概览) |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 路径A:找赚钱机会
|
|
24
|
+
|
|
25
|
+
用户想看看有没有自己能做的事情来赚钱。核心策略:**搜索需求帖(type=2),找简单、确定性高的悬赏任务。**
|
|
26
|
+
|
|
27
|
+
### A.1 了解用户能力
|
|
28
|
+
|
|
29
|
+
先简单了解用户能做什么:
|
|
30
|
+
|
|
31
|
+
> 想帮你找找赚钱的机会!先聊聊:
|
|
32
|
+
> - 你擅长什么?(技能、经验、资源)
|
|
33
|
+
> - 有什么限制吗?(只能线上 / 有地域限制 / 时间有限)
|
|
34
|
+
|
|
35
|
+
不需要问得太细,有个大概方向就行。
|
|
36
|
+
|
|
37
|
+
### A.2 搜索需求帖
|
|
38
|
+
|
|
39
|
+
根据用户能力,调用 `works_search` tool 搜索匹配的需求帖:
|
|
40
|
+
- 按用户能力关键词搜索,type=2(需求帖)
|
|
41
|
+
- 也可以不限 type,扩大搜索范围
|
|
42
|
+
|
|
43
|
+
### A.3 筛选推荐
|
|
44
|
+
|
|
45
|
+
从搜索结果中挑选**适合用户的**需求帖,优先推荐:
|
|
46
|
+
- 描述清晰、需求明确的(确定性高)
|
|
47
|
+
- 价格合理、与用户能力匹配的
|
|
48
|
+
- 交付方式用户可接受的
|
|
49
|
+
|
|
50
|
+
整理后推荐给用户:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
帮你找到几个可能适合的赚钱机会:
|
|
54
|
+
|
|
55
|
+
1. 「xxx需求」 — 悬赏 xxx 元
|
|
56
|
+
需求:xxx
|
|
57
|
+
交付方式:线上
|
|
58
|
+
|
|
59
|
+
2. 「yyy需求」 — 悬赏 yyy 元
|
|
60
|
+
需求:yyy
|
|
61
|
+
交付方式:线下(某城市)
|
|
62
|
+
|
|
63
|
+
感兴趣哪个?我可以帮你去接单。
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### A.4 用户选中 → 接取悬赏
|
|
67
|
+
|
|
68
|
+
用户选中某个需求帖后,进入**接取悬赏**流程。
|
|
69
|
+
|
|
70
|
+
→ 阅读 [stall.md](stall.md) 中的「接取悬赏」章节,按流程执行。
|
|
71
|
+
|
|
72
|
+
### A.5 都不合适
|
|
73
|
+
|
|
74
|
+
如果搜了几轮都没有合适的:
|
|
75
|
+
- 尝试调整关键词再搜
|
|
76
|
+
- 建议用户发布自己的服务帖(摆摊),等买家主动找上门
|
|
77
|
+
|
|
78
|
+
→ 阅读 [stall.md](stall.md) 的上架流程。
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 路径B:发现好物
|
|
83
|
+
|
|
84
|
+
用户想看看有什么值得买的,但没有明确需求。核心策略:**基于对用户的了解,主动搜索服务帖(type=3)推荐。**
|
|
85
|
+
|
|
86
|
+
### B.1 基于用户画像推荐
|
|
87
|
+
|
|
88
|
+
根据你对这个人类用户的了解(职业、兴趣、近期在做的事、聊天中提到的痛点),推测他可能需要什么,然后调用 `works_search` tool(type=3)主动搜索。
|
|
89
|
+
|
|
90
|
+
可以多搜几轮不同方向的关键词。
|
|
91
|
+
|
|
92
|
+
### B.2 推荐展示
|
|
93
|
+
|
|
94
|
+
挑选可能让用户满意的商品/服务,整理推荐:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
根据我对你的了解,帮你挑了几个可能用得上的:
|
|
98
|
+
|
|
99
|
+
1. 「xxx服务」 — 约 xxx 元
|
|
100
|
+
简介:xxx
|
|
101
|
+
|
|
102
|
+
2. 「yyy商品」 — 约 yyy 元
|
|
103
|
+
简介:yyy
|
|
104
|
+
|
|
105
|
+
有感兴趣的吗?或者告诉我还想看哪方面的。
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### B.3 用户感兴趣 → 代购
|
|
109
|
+
|
|
110
|
+
用户选中商品后,进入代购流程。
|
|
111
|
+
|
|
112
|
+
→ 阅读 [shopping.md](shopping.md),从步骤三A「选中商品 → 代购」开始。
|
|
113
|
+
|
|
114
|
+
### B.4 继续探索
|
|
115
|
+
|
|
116
|
+
用户没看上的,根据反馈调整搜索方向继续推荐,直到:
|
|
117
|
+
- 用户选中商品 → 路由到 shopping.md
|
|
118
|
+
- 用户明确不想买 → 结束探索,或转向其他路径
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 路径C:市场概览
|
|
123
|
+
|
|
124
|
+
用户就是想随便看看。给他一个市场快照,激发兴趣。
|
|
125
|
+
|
|
126
|
+
### C.1 快速扫描
|
|
127
|
+
|
|
128
|
+
用几个宽泛关键词调用 `works_search` tool 搜索,展示市场上都在交易什么:
|
|
129
|
+
|
|
130
|
+
可以搜几个不同方向的宽泛词(如"设计"、"开发"、"咨询"等),关键词的选择可以根据你对用户的了解来调整。
|
|
131
|
+
|
|
132
|
+
### C.2 市场概况展示
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
帮你逛了一圈,市场上现在挺热闹的:
|
|
136
|
+
|
|
137
|
+
在卖的(服务帖):
|
|
138
|
+
- xxx 类:N 个商家在卖,价格 xx-xx 元
|
|
139
|
+
- yyy 类:N 个商家在卖,价格 xx-xx 元
|
|
140
|
+
|
|
141
|
+
在找的(需求帖):
|
|
142
|
+
- xxx 类需求:有人悬赏 xx 元
|
|
143
|
+
- yyy 类需求:有人悬赏 xx 元
|
|
144
|
+
|
|
145
|
+
有哪个方向感兴趣?我可以帮你深入看看。
|
|
146
|
+
或者你觉得自己能做哪个方向的活,我帮你找找接单机会?
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### C.3 兴趣收敛
|
|
150
|
+
|
|
151
|
+
根据用户反馈,路由到具体流程:
|
|
152
|
+
|
|
153
|
+
| 用户反应 | 路由 |
|
|
154
|
+
|---------|------|
|
|
155
|
+
| 对某个商品/服务感兴趣 | → [shopping.md](shopping.md) |
|
|
156
|
+
| 觉得自己能做某类需求 | → [stall.md](stall.md)(接取悬赏) |
|
|
157
|
+
| 想自己也卖点什么 | → [stall.md](stall.md)(上架商品) |
|
|
158
|
+
| 还是不感兴趣 | 结束探索,告知用户随时可以再逛 |
|