Table of Contents
7.5 创建追问【未授权拦截通过,待登录态联调】
POST /tieup/api/v1/questions/{question_id}/follow-ups
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
question_id |
integer | 是 | 会话链内问题 ID,推荐始终传主问题 ID;服务端自动寻找该链最新问题作为追问父节点 |
鉴权:需要 Authorization: Bearer <access_token>。
请求头:
Idempotency-Key: follow_up_question_10001_20260602143000_x7f9k2
请求体:
{
"question_content": "可以再详细说一下吗?",
"attachments": []
}
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
question_content |
string | 是 | 粉丝付费提问或追问内容 |
attachments |
array | 否 | 上传接口返回的附件 URL 或业务文件标识列表 |
响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
id |
integer | 追问 ID |
question_no |
string | 追问编号 |
parent_question_id |
integer | 上一条问题 ID |
root_question_id |
integer | 会话链根问题 ID |
fan_user_id |
integer | 粉丝用户 ID |
fan_nickname |
string | 粉丝昵称 |
fan_avatar |
string | 粉丝头像 URL |
artist_id |
integer | 艺人 ID |
artist_user_id |
integer | 艺人关联用户 ID |
artist_name |
string | 艺人名称 |
artist_avatar |
string | 艺人头像,严格读取独立维护的 tieup_artist.avatar;未配置时返回空字符串,不回退绑定账号的用户头像 |
business_type |
string | 固定为 follow_up_question |
question_content |
string | 追问内容 |
attachments |
array | 追问附件 URL/key 列表 |
price_candy_amount |
string | 本次追问消耗糖果数量 |
answer_content |
string/null | 回答内容,未回答为空 |
answer_attachments |
array | 回答附件 URL/key 列表 |
status |
integer | 提问状态:1=待回答,2=已回答,3=已拒绝,4=已退款,5=已取消 |
submitted_at |
string/null | 提交时间 |
answered_at |
string/null | 回答时间 |
rejected_at |
string/null | 拒绝时间 |
refunded_at |
string/null | 退款时间 |
reject_reason |
string/null | 拒绝原因 |
refund_no |
string/null | 退款单号 |
created_at |
string/null | 创建时间 |
thread_status |
integer | 会话链最新问题状态 |
thread_latest_question_id |
integer | 会话链最新问题 ID |
thread_items |
array | 完整问答链,按提问、回答、追问、回答顺序排列 |
parent_question |
object/null | 上一条问题完整快照 |
响应示例:
{
"code": 200,
"message": "成功",
"data": {
"id": 50002,
"question_no": "Q202606170002",
"parent_question_id": 50001,
"root_question_id": 50001,
"fan_user_id": 10001,
"fan_nickname": "Tieup用户",
"fan_avatar": "https://cdn.example.com/avatar.png",
"artist_id": 20001,
"artist_user_id": 20002,
"artist_name": "示例艺人",
"artist_avatar": "https://cdn.example.com/artist.png",
"business_type": "follow_up_question",
"question_content": "还想了解每天练习多久",
"attachments": [],
"price_candy_amount": "50.00",
"answer_content": null,
"answer_attachments": [],
"status": 1,
"submitted_at": "2026-06-17 10:05:00",
"answered_at": null,
"rejected_at": null,
"refunded_at": null,
"reject_reason": null,
"refund_no": null,
"created_at": "2026-06-17 10:05:00",
"thread_status": 1,
"thread_latest_question_id": 50002,
"thread_items": [
{
"id": 50001,
"question_no": "Q202606170001",
"parent_question_id": null,
"root_question_id": 50001,
"fan_user_id": 10001,
"fan_nickname": "Tieup用户",
"fan_avatar": "https://cdn.example.com/avatar.png",
"artist_id": 20001,
"artist_user_id": 20002,
"artist_name": "示例艺人",
"artist_avatar": "https://cdn.example.com/artist.png",
"business_type": "question",
"question_content": "可以分享练习建议吗?",
"attachments": [],
"price_candy_amount": "20.00",
"answer_content": "建议先从 20 分钟基础练习开始",
"answer_attachments": [],
"status": 2,
"submitted_at": "2026-06-17 10:00:00",
"answered_at": "2026-06-17 10:03:00",
"rejected_at": null,
"refunded_at": null,
"reject_reason": null,
"refund_no": null,
"created_at": "2026-06-17 10:00:00"
},
{
"id": 50002,
"question_no": "Q202606170002",
"parent_question_id": 50001,
"root_question_id": 50001,
"fan_user_id": 10001,
"fan_nickname": "Tieup用户",
"fan_avatar": "https://cdn.example.com/avatar.png",
"artist_id": 20001,
"artist_user_id": 20002,
"artist_name": "示例艺人",
"artist_avatar": "https://cdn.example.com/artist.png",
"business_type": "follow_up_question",
"question_content": "还想了解每天练习多久",
"attachments": [],
"price_candy_amount": "50.00",
"answer_content": null,
"answer_attachments": [],
"status": 1,
"submitted_at": "2026-06-17 10:05:00",
"answered_at": null,
"rejected_at": null,
"refunded_at": null,
"reject_reason": null,
"refund_no": null,
"created_at": "2026-06-17 10:05:00"
}
],
"parent_question": {
"id": 50001,
"question_no": "Q202606170001",
"parent_question_id": null,
"root_question_id": 50001,
"fan_user_id": 10001,
"fan_nickname": "Tieup用户",
"fan_avatar": "https://cdn.example.com/avatar.png",
"artist_id": 20001,
"artist_user_id": 20002,
"artist_name": "示例艺人",
"artist_avatar": "https://cdn.example.com/artist.png",
"business_type": "question",
"question_content": "可以分享练习建议吗?",
"attachments": [],
"price_candy_amount": "20.00",
"answer_content": "建议先从 20 分钟基础练习开始",
"answer_attachments": [],
"status": 2,
"submitted_at": "2026-06-17 10:00:00",
"answered_at": "2026-06-17 10:03:00",
"rejected_at": null,
"refunded_at": null,
"reject_reason": null,
"refund_no": null,
"created_at": "2026-06-17 10:00:00"
}
}
}
业务规则:
- 路径参数推荐始终传主问题 ID;兼容传入同一会话链内任一追问 ID,服务端都会按
root_question_id自动寻找 ID 最大的最新节点。 - 只能追问当前粉丝自己的会话链;最新节点必须为已回答状态,最新追问未回答时不能继续追问。
- 粉丝仍必须对该偶像存在有效订阅。
- 每次追问都是新的付费行为,追问价格取
tieup_business_config.basic.follow_up_question_candy,成功创建时独立扣减糖果。 - 追问同样写入
tieup_question,通过parent_question_id关联上一条已回答问题,通过root_question_id归属同一条问答链,糖果扣减使用business_type = follow_up_question。 - 同一会话链创建追问时会锁定主问题行并在事务内重查最新节点;并发请求不会从同一已回答节点创建两条分叉追问。
- 同一
Idempotency-Key只能复用同一会话链、同一追问内容和同一附件快照;换会话链、换内容或换附件会返回422,提示该幂等键已用于其他提问。