세션 & 대화 이어쓰기
대화는 세션(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시간) 내로 제한됩니다.