闲鱼数字商品客服和自动发货技能,支持拉取会话、查询订单、自动发货、补发、风险升级。 Use when: 需要在闲鱼场景中处理售前咨询、已付款发货、补发、退款投诉升级。 NOT for: 自动议价、绕过付款直接发货、处理高风险纠纷结论判定。
运行环境:Python 3.11+;mock 模式无需额外依赖;真实模式需
pip install playwright并执行playwright install chromium。 默认为 mock 模式(XIANYU_MOCK_MODE=true),数据存储在assets/data/*.json。
重置 mock 数据(将 seeds 复制到 data):
python scripts/reset_data.py
真实模式——保存登录态(仅需运行一次):
python scripts/browser_login.py
python scripts/pull_inbox.py --limit 5
返回按 last_message_at 倒序的会话列表。取第一条获得 session_id,进入步骤 2。
python scripts/get_conversation.py --session-id <session_id> --limit 20
返回 messages 数组和 item_context(商品信息),用于判断买家意图。
python scripts/evaluate_risk.py --session-id <session_id>
need_human: true → 跳到步骤 7(升级人工)need_human: false → 根据买家意图进入步骤 4 / 5 / 6python scripts/search_faq.py --session-id <session_id> --query "<买家问题关键词>" --limit 3
python scripts/send_message.py --session-id <session_id> --message "<FAQ答案>"
python scripts/find_order.py --session-id <session_id>
python scripts/deliver_order.py --order-id <order_id>
python scripts/send_message.py --session-id <session_id> --message "<发货结果消息>"
发货幂等:相同
order_id多次调用只发一次,返回首次 payload(idempotent: true)。
python scripts/resend_delivery.py --order-id <order_id> --reason link_expired
python scripts/send_message.py --session-id <session_id> --message "<新链接或兑换码>"
--reason 可选值:link_expired | code_invalid | manual_request
python scripts/escalate_ticket.py \
--session-id <session_id> \
--reason refund_request \
--summary "<问题摘要>" \
[--order-id <order_id>]
--reason 可选值:refund_request | platform_intervention | complaint | other
pull_inbox → get_conversation → evaluate_risk
├─ low risk + 售前咨询 → search_faq → send_message
├─ low risk + 已付款 → find_order → deliver_order → send_message
├─ low risk + 补发请求 → resend_delivery → send_message
└─ high risk → escalate_ticket
| 脚本 | 用途 | 必填参数 |
|---|---|---|
reset_data.py | 重置 mock 数据 | — |
browser_login.py | 保存真实登录态 | — |
pull_inbox.py | 拉取未读会话 | [--limit] |
get_conversation.py | 获取会话消息上下文 | --session-id |
evaluate_risk.py | 风险评估 | --session-id |
search_faq.py | 搜索商品 FAQ | --session-id --query |
send_message.py | 发送消息 | --session-id --message |
find_order.py | 查询订单 | --session-id 或 --buyer-id |
deliver_order.py | 自动发货(幂等) | --order-id |
resend_delivery.py | 补发 | --order-id --reason |
escalate_ticket.py | 升级人工工单 | --session-id --reason --summary |
simulate_message.py | 模拟买家消息(联调) | --session-id --message |
# ① 重置数据
python scripts/reset_data.py
# ② 拉取会话
python scripts/pull_inbox.py --limit 2
# ③ 模拟买家发消息后再查看会话
python scripts/simulate_message.py --session-id s_001 --message "链接失效了"
python scripts/get_conversation.py --session-id s_001
# ④ 风险评估 → 发货
python scripts/evaluate_risk.py --session-id s_001
python scripts/find_order.py --session-id s_001
python scripts/deliver_order.py --order-id o_001
python scripts/send_message.py --session-id s_001 --message "已为你发货,请查收。"
node scripts/run-action.js xianyu-resend-delivery orderId=ord_1001 reason=link_expired
node scripts/run-action.js xianyu-escalate-ticket sessionId=s_001 reason=refund_request summary=买家投诉退款
node scripts/browser-login.js
## Output Format
所有 action 返回统一 JSON:
```jsonc
{
"success": true, // boolean - 是否成功
"message": "拉取未读会话成功", // string - 人类可读描述
"data": { ... } // object - 业务数据,失败时为 null
}
[
{
"session_id": "s_001",
"buyer_id": "buyer_001",
"buyer_name": "小王",
"item_id": "item_2001",
"unread_count": 2,
"last_message_at": "2025-01-15T10:30:00Z"
}
]
{
"session_id": "s_001",
"messages": [
{ "role": "buyer", "content": "PS 安装包还能下不?" },
{ "role": "seller", "content": "您好,链接稳定可下载。" }
],
"item_context": { "item_id": "item_2001", "title": "PS2025 完整版 Win" }
}
{ "success": true, "mode": "mock" }
[
{
"order_id": "ord_1001",
"sku": "PS2025-WIN",
"payment_status": "paid",
"delivery_status": "pending",
"amount": 29.9
}
]
{
"order_id": "ord_1001",
"delivery_status": "success",
"message_to_buyer": "感谢购买!下载链接: https://... 有效期72小时",
"payload": {
"type": "text",
"messageToBuyer": "...",
"link": "https://..."
}
}
{
"order_id": "ord_1001",
"delivery_status": "resent",
"message_to_buyer": "已为您补发新链接...",
"payload": { "type": "text", "messageToBuyer": "...", "link": "https://..." }
}
{ "ticket_id": "T-20250115-s_001" }
{
"level": "high",
"needHuman": true,
"matchedKeywords": ["退款"]
}
[
{
"sku": "PS2025-WIN",
"question": "下载链接打不开怎么办?",
"answer": "请关闭代理/VPN 后重试...",
"score": 0.85
}
]