49c0e5559c
Co-Authored-By: Claude Code <noreply@anthropic.com>
4.5 KiB
4.5 KiB
AI 客服询盘推送接口 · 对接文档(v1)
本文档交给 AI 客服项目侧实现。约定:AI 客服系统将询盘主动推送到本系统(UniService),本系统负责归档与后续导入。 对接开通时我方提供:生产域名 + X-Api-Key 密钥。文档版本 v1(2026-09-28)。
1. 接口定义
| 项 | 值 |
|---|---|
| 端点 | POST /open/v1/inquiry/push |
| 鉴权 | 请求头 X-Api-Key: <开通时分配> |
| 格式 | JSON,UTF-8 |
| 批量 | 单次 ≤ 50 条 |
| 幂等 | 按每条的 external_key——重复推送不会重复入库,请放心重试 |
2. 请求体
{
"messages": [
{
"event": "new",
"external_key": "ai-20260928-000123",
"occurred_at": "2026-09-28T10:30:00+08:00",
"contact": {
"name": "Ivan",
"phone": "+254722111117",
"whatsapp": "+254722111117",
"email": "ivan@example.com",
"wechat": null,
"skype": null
},
"intent_level": "high",
"intent_reason": "客户主动询问库存与价格,三天内两次跟进",
"profile": { "country": "肯尼亚", "source": "官网", "语言": "英语" },
"conversation": [
{"role": "customer", "text": "Do you have this car in stock?", "at": "2026-09-28T10:29:11+08:00"},
{"role": "ai", "text": "Yes, could you leave your phone number?", "at": "2026-09-28T10:29:20+08:00"}
],
"summary": "肯尼亚客户询库存车,已留手机号",
"attachments": [
{"filename": "chat.png", "content_b64": "<base64>"}
]
}
]
}
字段说明
必填
| 字段 | 类型 | 说明 |
|---|---|---|
messages[].event |
string | new=新询盘;update=更正(按 external_key 更新同一条询盘的内容) |
messages[].external_key |
string | 贵系统内该询盘的唯一 id(幂等键)。同一 id 重复推送=计重复,不报错、不入库 |
messages[].occurred_at |
string | 询盘发生时间。一律正 8 区:2026-09-28T10:30:00+08:00 或北京时间字面值;不要发 UTC |
messages[].contact |
object | 联系方式结构(见下)。phone / whatsapp / email 至少一个非空且有效,否则该条被拒 |
contact 结构(name/wechat/skype 可空)
| 字段 | 说明 |
|---|---|
name |
客户称呼(可空) |
phone |
手机号,带国际区号(可空) |
whatsapp |
WhatsApp 号,带国际区号(可空) |
email |
邮箱(可空) |
wechat / skype |
可空 |
选填(强烈建议提供,原样归档不留丢失)
| 字段 | 说明 |
|---|---|
intent_level |
意向等级:high / medium / low / unknown |
intent_reason |
意向评估理由原文 |
profile |
客户画像,任意 JSON 对象,原样透传(贵系统什么结构就传什么) |
conversation |
完整对话记录数组,每条 `{role: "customer" |
summary |
一句话摘要,≤200 字 |
attachments |
附件数组 {filename, content_b64};单文件 ≤5MB、单条 ≤5 个 |
3. 响应
HTTP 200——单条数据有问题不会挂掉整包,逐条返回结果:
{
"success": true,
"data": {
"accepted": 9,
"duplicated": 1,
"failed": [
{"external_key": "ai-20260928-000131", "reason": "无有效联系方式(phone/whatsapp/email 至少一个)"}
]
}
}
| 项 | 含义 |
|---|---|
accepted |
新入库条数 |
duplicated |
幂等键重复跳过条数(不是错误) |
failed |
被拒条目及原因(修正后可用同 external_key 重推,按新数据处理) |
错误码
| HTTP | 场景 | 是否重试 |
|---|---|---|
401 |
密钥错误/缺失 | 否(检查密钥) |
400 |
报文结构错误(JSON 解析失败、缺 messages 等) | 否(修正报文) |
5xx / 超时 |
我方侧异常 | 请重试(幂等保证安全) |
4. 重试建议
- 5xx / 网络超时:指数退避重试,重试窗口 24 小时
- 单条
failed:修正数据后带同 external_key 重推
5. 对接流程
- 我方提供:生产域名 + X-Api-Key
- 贵方按本文档实现推送(建议先推 1-2 条真实样本联调)
- 双方核对
accepted/duplicated/failed与归档内容 - 转正式定时推送(频率由贵方定,建议询盘产生后准实时或小时级批量)
本文档由 UniService 后端维护;接口问题反馈给 UniService 后端侧。