본문으로 건너뛰기

세션 & 대화 이어쓰기

대화는 세션(session) 단위로 묶입니다. 세션을 재사용하면 이전 맥락을 기억한 채 대화를 이어갈 수 있어요.

맥락 이어가기: caller_id vs session_id

메시지를 보낼 때 둘 중 하나로 세션을 지정합니다.

  • caller_id — 호출자 쪽 불투명 식별자(예: 최종 사용자 ID). 같은 값으로 계속 보내면 session_key=api:{caller_id}같은 세션을 재사용해 맥락이 이어집니다. daiops는 이 값을 불투명하게만 다뤄요.
  • session_id — 특정 세션을 명시적으로 지정(소유권 검증). caller_id보다 우선합니다.
# 첫 메시지 — caller_id로 세션 시작
-d '{"command": "3분기 매출 요약", "caller_id": "user-42"}'
# 이어지는 메시지 — 같은 caller_id → 맥락 유지
-d '{"command": "그걸 표로 만들어줘", "caller_id": "user-42"}'

caller_id/session_id 없이 보내면 매번 독립 세션이 되어 맥락이 이어지지 않습니다.

세션 목록 조회

외부에서 과거 세션 ID를 발견하려면:

curl "https://daiops.com/api/v1/workspaces/$WS/sessions?limit=20" \
  -H "Authorization: Bearer $KEY"   # sessions:read
# → { "data": { "items": [{ id, title, channel, message_count, created_at }], "total", "has_more" } }

channel로 필터(?channel=api)하거나 offset/limit으로 페이지네이션할 수 있어요.

과거 대화 & 산출물 다시 보기

응답을 놓쳤어도 세션의 메시지와 그때 만든 파일을 다시 조회할 수 있습니다.

curl "https://daiops.com/api/v1/workspaces/$WS/sessions/$SESSION/messages?limit=50" \
  -H "Authorization: Bearer $KEY"   # sessions:read
# → { "data": { "items": [{ id, role, content, created_at, attachments? }], "total", "has_more" } }

각 메시지의 attachments에는 그 답변이 만든 산출물의 7일 다운로드 URL이 들어 있어, 웹 뷰어처럼 "대화 열기 → 파일 목록 → 다운로드"를 구성할 수 있습니다. → 파일 주고받기

끊긴 스트림 재접속 (Last-Event-ID)

SSE 연결이 끊기면 마지막으로 받은 이벤트 id(seq)로 재접속해 이어받습니다.

curl -N "https://daiops.com/api/v1/workspaces/$WS/sessions/$SESSION/events" \
  -H "Authorization: Bearer $KEY" \
  -H "Last-Event-ID: 42"    # 또는 ?last_event_id=42
  • 42 이후 누락분을 replay한 뒤 실시간으로 이어집니다.
  • 진행 중(thinking)인 세션만 재개하며, 이미 끝났으면 즉시 done.
  • 표준 EventSource는 이 재접속을 자동으로 처리합니다.
  • 재접속 유예는 이벤트 버퍼 보존 기간(약 24시간) 내로 제한됩니다.

다음 단계