跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.qoder.com/llms.txt

Use this file to discover all available pages before exploring further.

GET /v1/sessions/{session_id}/events/stream 通过 Server-Sent Events (SSE) 实时接收 Session 中的所有事件。连接建立后,服务端会推送该 Session 的完整事件历史,并在有新事件产生时继续推送。

请求头

头部必选说明
AuthorizationBearer <PAT>
Accept推荐text/event-stream

路径参数

参数类型必选说明
session_idstringSession ID(sess_ 前缀)

查询参数

参数类型必选说明
after_idstring仅接收该事件 ID 之后的事件

示例请求

curl -N -X GET "https://openapi.qoder.sh/api/v1/cloud/sessions/sess_019e392c0d1e74e095d21ea4c6b41def/events/stream" \
  -H "Authorization: Bearer $QODER_PAT" \
  -H "Accept: text/event-stream"

示例响应

HTTP 200 OK Content-Type: text/event-stream 每个事件遵循 SSE 标准格式:
id: <event_id>
event: <event_type>
data: <json_payload>

SSE 格式示例

用户消息:
id: evt_019e392c0d787cfaa21bda98e06cd913
event: user.message
data: {"id": "evt_019e392c0d787cfaa21bda98e06cd913", "type": "user.message", "content": "你好", "turn_id": "turn_019e392c0d787ceea6bb62943f9ac3ec", "created_at": "2026-05-18T03:40:48.888851795Z", "session_id": "sess_019e392c0d1e74e095d21ea4c6b41def", "processed_at": "2026-05-18T03:40:48.888851795Z", "schema_version": "1.0"}
会话调度:
id: evt_771c1195bcbd4a07834d4ed4dd6450ca
event: session.status_rescheduled
data: {"id": "evt_771c1195bcbd4a07834d4ed4dd6450ca", "type": "session.status_rescheduled", "turn_id": "turn_019e392c0d787ceea6bb62943f9ac3ec", "created_at": "2026-05-18T03:40:50.321Z", "session_id": "sess_019e392c0d1e74e095d21ea4c6b41def", "processed_at": "2026-05-18T03:40:50.321Z", "schema_version": "1.0"}
Agent 回复:
id: evt_f8599c68e7784f2d8c490af1b3056716
event: agent.message
data: {"id": "evt_f8599c68e7784f2d8c490af1b3056716", "type": "agent.message", "content": [{"text": "收到!消息已成功接收。", "type": "text"}], "turn_id": "turn_019e392d6aad7158b377c039c6ba5db3", "created_at": "2026-05-18T03:42:41.194Z", "session_id": "sess_019e392c0d1e74e095d21ea4c6b41def", "processed_at": "2026-05-18T03:42:41.194Z", "schema_version": "1.0"}
会话空闲(Turn 完成):
id: evt_a289470296c94e7ba8d7ea562efe5925
event: session.status_idle
data: {"id": "evt_a289470296c94e7ba8d7ea562efe5925", "type": "session.status_idle", "usage": {"input_tokens": 150, "output_tokens": 42, "cache_read_input_tokens": 0, "cache_creation_input_tokens": 0}, "status": "idle", "turn_id": "turn_019e392d6aad7158b377c039c6ba5db3", "created_at": "2026-05-18T03:42:41.195Z", "session_id": "sess_019e392c0d1e74e095d21ea4c6b41def", "stop_reason": {"type": "end_turn"}, "processed_at": "2026-05-18T03:42:41.195Z", "schema_version": "1.0"}

事件类型

完整事件类型列表:
event (SSE field)说明
user.message用户发送的消息
session.status_rescheduledAgent 开始被调度处理
span.model_request_start模型推理请求开始
agent.thinkingAgent 思考中(内部推理)
agent.messageAgent 生成的回复消息
session.status_idle处理完成,Session 回到空闲
span.model_request_end模型推理请求结束
session.error处理过程中发生错误
terminatedTurn 被终止

典型事件流生命周期

一次完整的对话 Turn 通常按以下顺序接收事件:
  1. user.message — 用户消息入队
  2. session.status_rescheduled — Agent 被调度
  3. span.model_request_start — 开始模型调用
  4. agent.thinking — Agent 内部推理
  5. agent.message — Agent 生成回复
  6. session.status_idle — Turn 完成,回到空闲(含 usage 统计)
  7. span.model_request_end — 模型调用结束

客户端实现建议

  • 使用 EventSource API 或支持 SSE 的 HTTP 客户端
  • 监听 session.status_idle 事件判断一轮对话是否结束
  • 通过 turn_id 字段关联同一轮对话的所有事件
  • 连接会保持打开直到客户端断开,服务端持续推送新事件

错误码

HTTPtype触发条件
401authentication_errorPAT 无效或过期
404not_found_errorSession 不存在
完整错误信封说明详见 错误参考