Reports
Create Reports
Asleep.createReports: Sleep Tracking에 대한 결과를 가져오기 위한 Reports를 생성합니다.
fun createReports(asleepConfig: AsleepConfig?): Reports?| Parameter Name | Type | Description |
|---|---|---|
asleepConfig | AsleepConfig? | initAsleepConfig 호출에서 콜백 받은 설정 값을 입력 |
Get Single Report
Asleep.Reports.getReport: sessionId에 해당하는 Report를 가져옵니다.
fun getReport(sessionId: String, reportListener: ReportListener)| Parameter Name | Type | Description |
|---|---|---|
sessionId | String | Sleep Tracking을 정지할 때 받을 수 있는 sessionId의 값 |
reportListener | ReportListener | Report를 콜백 받을 리스너 |
Asleep.Reports.ReportListener
Asleep.Reports.ReportListenerinterface ReportListener {
fun onSuccess(report: Report?)
fun onFail(errorCode: Int, detail: String)
}성공 시, onSuccess()가 호출됩니다.
onSuccess()가 호출됩니다.data class Report(
val timezone: String,
val peculiarities: List<String>,
val missingDataRatio: Float,
val session: Session?,
val stat: Stat?,
val analysis: Analysis? = null
)| Parameter Name | Type | Description |
|---|---|---|
timezone | String | 타임존 (Timezone List) |
peculiarities | List<String> | 해당 수면 세션의 특이사항을 설명하는 필드. 여러 개의 라벨 포함 가능. |
missingDataRatio | Float | 오디오 업로드 누락 등의 이유로 인한 수면 분석 결과 오류율 |
session | Session? | 세션 분석 정보 |
stat | Stat? | 분석 통계 정보 |
analysis | Analysis? | 서버가 분석한 구간 정보. 세션이 아직 측정 중이면 구간이 정해지지 않아 null |
Session
data class Session(
val id: String,
val state: String,
val startTime: String,
val endTime: String?,
val sleepStages: List<Int>?,
val breathStages: List<Int>?,
val snoringStages: List<Int>?,
val createdTimezone: String,
val unexpectedEndTime: String?,
val sleepStageProbs: List<List<Float>>?,
val snoringStageProbs: List<List<Float>>?,
val breathStageProbs: List<List<Float>>?,
val measurementStartTime: String?,
val measurementEndTime: String?
)| Parameter Name | Type | Description |
|---|---|---|
id | String | 수면 세션 id |
state | String | 세션의 상태 (OPEN, CLOSED or COMPLETE) |
startTime | String | 분석 구간의 시작 시각. 구간을 지정하지 않았다면 측정 시작 시각과 같습니다 |
endTime | String? | 분석 구간의 종료 시각. 구간을 지정하지 않았다면 측정 종료 시각과 같습니다 |
sleepStages | List<Int>? | 수면 단계 |
breathStages | List<Int>? | 호흡 안정성 단계 |
snoringStages | List<Int>? | 코골이 |
createdTimezone | String | 세션이 생성된 타임존 |
unexpectedEndTime | String? | 비정상 종료된 경우의 종료 시각 |
sleepStageProbs | List<List<Float>>? | 수면 단계별 확률값 |
snoringStageProbs | List<List<Float>>? | 코골이 단계별 확률값 |
breathStageProbs | List<List<Float>>? | 호흡 단계별 확률값 |
measurementStartTime | String? | 분석 구간과 관계없이 실제로 측정(녹음)이 시작된 시각 |
measurementEndTime | String? | 분석 구간과 관계없이 실제로 측정(녹음)이 종료된 시각 |
Stat
data class Stat(
val breathingIndex: Float?,
val breathingPattern: String?,
val deepRatio: Float?,
val lightRatio: Float?,
val remRatio: Float?,
val sleepEfficiency: Float?,
val sleepLatency: Int?,
val sleepRatio: Float?,
val sleepTime: String?,
val stableBreathRatio: Float?,
val timeInBed: Int?,
val timeInDeep: Int?,
val timeInLight: Int?,
val timeInRem: Int?,
val timeInSleep: Int?,
val timeInSleepPeriod: Int?,
val timeInStableBreath: Int?,
val timeInUnstableBreath: Int?,
val timeInWake: Int?,
val unstableBreathRatio: Float?,
val wakeRatio: Float?,
val wakeTime: String?,
val wakeupLatency: Int?,
val sleepCycle: Int?,
val sleepCycleCount: Int?,
val wasoCount: Int?,
val longestWaso: Int?,
val unstableBreathCount: Int?,
val lightLatency: Int?,
val remLatency: Int?,
val deepLatency: Int?,
val sleepIndex: Int?,
val timeInSnoring: Int?,
val timeInNoSnoring: Int?,
val snoringRatio: Float?,
val noSnoringRatio: Float?,
val snoringCount: Int?,
val sleepCycleTime: List<String>?
)| Parameter Name | Type | Description |
|---|---|---|
breathingIndex | Float? | 호흡 지수 |
breathingPattern | String? | 호흡 패턴 |
deepRatio | Float? | 수면 단계 도중 deep 수면의 비율 |
lightRatio | Float? | 수면 단계 도중 light 수면의 비율 |
remRatio | Float? | rem sleep 비율 |
sleepEfficiency | Float? | 수면 측정 시간 중 실제로 잠든 시간의 비율 |
sleepLatency | Int? | 잠들때까지 걸린 시간 |
sleepRatio | Float? | 수면 단계 도중 깨지 않고 잔 시간의 비율 |
sleepTime | String? | 잠이 든 시각 |
stableBreathRatio | Float? | 안정 호흡 시간의 비율 |
timeInBed | Int? | 수면 측정 시작 시각부터 수면 측정 종료 시각 까지의 시간 |
timeInDeep | Int? | 수면 단계가 deep로 진행된 총 시간 |
timeInLight | Int? | 수면 단계가 light 로 진행된 총 시간 |
timeInRem | Int? | 수면 단계가 rem 으로 진행된 총 시간 |
timeInSleep | Int? | 수면 측정 시간 중 실제로 수면 중이었던 시간 |
timeInSleepPeriod | Int? | 수면 측정 시간 중 수면 측정 시작으로부터 잠들기 까지 걸린 시간과 잠에서 깨어난 후로부터 수면 측정을 종료하기까지 걸린 시간을 제외한 시간 (time_in_bed - sleep_latency - wakeup_latency) |
timeInStableBreath | Int? | 안정 호흡이었던 총 시간 |
timeInUnstableBreath | Int? | 불안정 호흡이었던 총 시간 |
timeInWake | Int? | 수면 도중에 깬 시간 |
unstableBreathRatio | Float? | 불안정 호흡 시간의 비율 |
wakeRatio | Float? | 수면 단계 도중 중간에 깬 시간의 비율 |
wakeTime | String? | 잠에서 깨어난 시각 |
wakeupLatency | Int? | 잠에서 깨어난 후 수면 측정을 종료하기까지 걸린 시간 |
sleepCycle | Int? | 수면 주기 1회당 평균 시간 |
sleepCycleCount | Int? | 수면 주기의 횟수 |
wasoCount | Int? | 수면 구간 중 wake가 발생한 횟수 |
longestWaso | Int? | 수면 구간 중 가장 긴 wake의 시간 |
unstableBreathCount | Int? | 불안정 호흡 구간이 발생한 횟수 |
lightLatency | Int? | 첫 수면 시작으로부터 첫 번째 light가 발생하기까지의 시간 |
remLatency | Int? | 첫 수면 시작으로부터 첫 번째 rem이 발생하기까지의 시간 |
deepLatency | Int? | 첫 수면 시작으로부터 첫 번째 deep이 발생하기까지의 시간 |
sleepIndex | Int? | 수면 지수 |
timeInSnoring | Int? | 코골이가 발생한 총 시간 |
timeInNoSnoring | Int? | 코골이가 발생하지 않은 총 시간 |
snoringRatio | Float? | 수면 단계 도중 코골이었던 시간의 비율 |
noSnoringRatio | Float? | 수면 단계 도중 코골이가 아니었던 시간의 비율 |
snoringCount | Int? | 코골이 구간의 발생한 횟수 |
sleepCycleTime | List<String>? | 수면 주기의 시각 목록 |
Analysis
data class Analysis(
val startEpochIndex: Int,
val endEpochIndex: Int,
val epochDurations: List<Int>,
val totalEpochCount: Int
) {
val epochCount: Int
fun contains(seq: Int): Boolean
}| Property | Type | Description |
|---|---|---|
startEpochIndex | Int | 분석 구간의 첫 epoch 번호 (측정 전체 기준, 포함) |
endEpochIndex | Int | 분석 구간의 마지막 epoch 다음 번호 (미포함) |
epochDurations | List<Int> | 구간 안 각 epoch의 길이(초). 구간 경계가 epoch 경계와 맞지 않으면 첫 · 마지막 값이 30보다 작을 수 있습니다 |
totalEpochCount | Int | 측정 전체의 epoch 수 |
epochCount | Int | 구간에 포함된 epoch 수 |
contains(seq) | Boolean | 측정 전체 기준 epoch 번호 seq가 분석 구간에 포함되는지 여부. 녹음 파일의 구간 번호와 맞추어볼 때 사용합니다 |
구간을 지정하면 stage 배열의 인덱스는 측정 시작 기준이 아닙니다.
sleepStages[i]는 측정 전체에서startEpochIndex + i번째 epoch(30초)입니다.배열 인덱스로 시각을 계산하거나 녹음 파일과 매칭할 때는
startEpochIndex를 더해주세요.
실패 시, onFail()이 호출됩니다.
onFail()이 호출됩니다.| Parameter Name | Type | Description |
|---|---|---|
errorCode | Int | AsleepErrorCode 참조 |
detail | String | errorCode에 관련된 메시지 |
Get Multiple Reports
Asleep.Reports.getReports: 입력한 날짜의 범위 내에 있는 Report 목록을 가져옵니다.
fun getReports(
fromDate: String,
toDate: String,
orderBy: String = "DESC",
offset: Int = 0,
limit: Int = 20,
reportsListener: ReportsListener?)| Parameter Name | Type | Description |
|---|---|---|
fromDate | String (YYYY-MM-DD) | 조회 시작 날짜 |
toDate | String (YYYY-MM-DD) | 조회 마지막 날짜 |
orderBy | String | DESC: 내림차순 정렬 ASC: 오름차순 정렬 |
offset | Int | 스킵할 Report 개수 (default: 0) |
limit | Int | 최대 받을 Report 개수 (0~100, default: 20) |
reportsListener | ReportsListener? | Report 목록을 콜백 받을 리스너 |
Asleep.Reports.ReportsListener
Asleep.Reports.ReportsListenerinterface ReportsListener {
fun onSuccess(reports: List<SleepSession>?)
fun onFail(errorCode: Int, detail: String)
}성공 시, onSuccess()가 호출됩니다.
onSuccess()가 호출됩니다.data class SleepSession(
val sessionId: String?,
val lastReceivedSeqNum: Int?,
val sessionEndTime: String?,
val sessionStartTime: String?,
val state: String?,
val timeInBed: Int?,
val createdTimezone: String,
val unexpectedEndTime: String?
)| Parameter Name | Type | Description |
|---|---|---|
sessionId | String? | 세션 ID |
lastReceivedSeqNum | Int? | 마지막으로 업로드 받은 오디오 파일의 순서 번호 |
sessionEndTime | String? | 세션 종료 시각 |
sessionStartTime | String? | 세션 시작 시각 |
state | String? | 수면 세션 상태 (OPEN, CLOSED, COMPLETE) |
timeInBed | Int? | 침대에 있었던 시간 |
createdTimezone | String | 세션이 생성된 타임존 (Timezone List) |
unexpectedEndTime | String? | 비정상 세션 종료 시각. 추후 initAsleepConfig될 때의 시각이 저장. |
실패 시, onFail()이 호출됩니다.
onFail()이 호출됩니다.| Parameter Name | Type | Description |
|---|---|---|
errorCode | Int | AsleepErrorCode 참조 |
detail | String | errorCode에 관련된 메시지 |
Average-stats
Asleep.Reports.getAverageReport: 사용자의 특정 기간 내 수면 메트릭들의 평균을 확인할 수 있습니다.
fun getAverageReport(fromDate: String, toDate: String, averageReportListener: AverageReportListener?)| Parameter Name | Type | Description |
|---|---|---|
fromDate | String | 평균을 확인하고자 하는 기간의 시작 시간 |
toDate | String | 평균을 확인하고자 하는 기간의 종료 시간 |
averageReportListener | AverageReportListener | Average Report를 콜백 받을 listener |
Asleep.Reports.AverageReportListener
Asleep.Reports.AverageReportListenerinterface AverageReportListener {
fun onSuccess(averageReport: AverageReport?)
fun onFail(errorCode: Int, detail: String)
}성공 시, onSuccess()가 호출됩니다.
onSuccess()가 호출됩니다.data class AverageReport (
val period: Period,
val peculiarities: List<String>,
val averageStats: AverageStats?,
val neverSleptSessions: List<NeverSleptSessions>,
val sleptSessions: List<SleptSessions>
)| Parameter Name | Type | Description |
|---|---|---|
period | Period | 타임존 |
peculiarities | List<String> | 수면 세션들의 평균을 구할 때 특이사항 |
averageStats | AverageStats? | sleptSessions의 수면 메트릭들의 평균들을 가지는 객체 |
neverSleptSessions | List<NeverSleptSession> | 세션 측정시간 동안 전혀 잠을 자지 않았다고 판단 되는 세션들의 목록 |
sleptSessions | List<SleptSession> | 세션 측정시간 동안 잠을 잤다고 판단 되는 세션들의 목록 |
Period
Perioddata class Period (
val timezone: String,
val endDate: String,
val startDate: String,
)| Parameter Name | Type | Description |
|---|---|---|
timezone | String | 요청한 타임존 예. UTC, Asia/Seoul |
startDate | String | 요청한 시작 시간 |
endDate | String | 요청한 종료 시간 |
AverageStats
AverageStatsdata class AverageStats(
val startTime: String,
val endTime: String,
val sleepTime: String,
val wakeTime: String,
val sleepLatency: Int,
val wakeupLatency: Int,
val timeInBed: Int,
val timeInSleepPeriod: Int,
val timeInSleep: Int,
val timeInWake: Int,
val timeInLight: Int?,
val timeInDeep: Int?,
val timeInRem: Int?,
val sleepEfficiency: Float,
val wakeRatio: Float,
val sleepRatio: Float,
val lightRatio: Float?,
val deepRatio: Float?,
val remRatio: Float?,
val wasoCount: Int?,
val longestWaso: Int?,
val sleepCycleCount: Int?,
val timeInSnoring: Int?,
val timeInNoSnoring: Int?,
val snoringRatio: Float?,
val noSnoringRatio: Float?,
val snoringCount: Int?
)| Parameter Name | Type | Description |
|---|---|---|
startTime | String | 세션 시작 시각 |
endTime | String | 세션 종료 시각 |
sleepTime | String | 잠이 든 시각 |
wakeTime | String | 잠에서 깨어각난 시각 |
sleepLatency | Int | 잠들때까지 걸린 시간 |
wakeupLatency | Int | 잠에서 깨어난 후 수면 측정을 종료하기까지 걸린 시간 |
timeInBed | Int | 수면 측정 시작 시각부터 수면 측정 종료 시각 까지의 시간 |
timeInSleepPeriod | Int | 수면 측정 시간 중 수면 측정 시작으로부터 잠들기 까지 걸린 시간과 잠에서 깨어난 후로부터 수면 측정을 종료하기까지 걸린 시간을 제외한 시간 (time_in_bed - sleep_latency - wakeup_latency) |
timeInSleep | Int | 수면 측정 시간 중 실제로 수면 중이었던 시간 이 시간이 deep, light, rem의 3단계로 구분됨 |
timeInWake | Int | 수면 도중에 깬 시간 |
timeInLight | Int? | 면 단계가 light 로 진행된 총 시간 |
timeInDeep | Int? | 수면 단계가 deep로 진행된 총 시간 |
timeInRem | Int? | 수면 단계가 rem 으로 진행된 총 시간 |
sleepEfficiency | Float | 수면 측정 시간 중 실제로 잠든 시간의 비율 |
wakeRatio | Float | 수면 단계 도중 중간에 깬 시간의 비율 |
sleepRatio | Float | 수면 단계 도중 깨지 않고 잔 시간의 비율 |
lightRatio | Float? | 수면 단계 도중 light 수면의 비율 |
deepRatio | Float? | 수면 단계 도중 deep 수면의 비율 |
remRatio | Float? | rem sleep 비율 |
wasoCount | Int? | 수면 구간 중 wake가 발생한 횟수 |
longestWaso | Int? | 수면 구간 중 가장 긴 wake의 시간 |
sleepCycleCount | Int? | 수면 주기의 횟수 |
timeInSnoring | Int? | 코골이가 발생한 총 시간 |
timeInNoSnoring | Int? | 코골이가 발생하지 않은 총 시간 |
snoringRatio | Float? | 수면 단계 도중 코골이었던 시간의 비율 |
noSnoringRatio | Float? | 수면 단계 도중 코골이가 아니었던 시간의 비율 |
snoringCount | Int? | 코골이 구간의 발생한 횟수 |
NeverSleptSessions
NeverSleptSessionsdata class NeverSleptSessions (
val id: String,
val startTime: String,
val endTime: String,
val completedTime: String
)| Parameter Name | Type | Description |
|---|---|---|
id | String | session id |
startTime | String | 세션 시작 시각 |
endTime | String | 세션 종료 시각 |
completedTime | String | 세션 분석 완료 시각 |
SleptSessions
SleptSessionsdata class SleptSessions (
val id: String,
val createdTimezone: String,
val startTime: String,
val endTime: String,
val completedTime: String,
val sleepEfficiency: Float,
val sleepLatency: Int?,
val sleepTime: String?,
val wakeupLatency: Int?,
val wakeTime: String?,
val lightLatency: Int?,
val deepLatency: Int?,
val remLatency: Int?,
val timeInWake: Int,
val timeInSleepPeriod: Int,
val timeInSleep: Int,
val timeInBed: Int,
val timeInRem: Int?,
val timeInLight: Int?,
val timeInDeep: Int?,
val wakeRatio: Float,
val sleepRatio: Float,
val remRatio: Float?,
val lightRatio: Float?,
val deepRatio: Float?,
val sleepCycle: Int?,
val sleepCycleCount: Int?,
val wasoCount: Int?,
val longestWaso: Int?,
val timeInSnoring: Int?,
val timeInNoSnoring: Int?,
val snoringRatio: Float?,
val noSnoringRatio: Float?,
val snoringCount: Int?,
)| Parameter Name | Type | Description |
|---|---|---|
id | String | session id |
createdTimezone | String | 세션이 생성된 타임존 (Timezone List) |
startTime | String | 세션 종료 시각 |
endTime | String | 세션 종료 시각 |
completedTime | String | 세션 분석 완료 시각 |
sleepEfficiency | Float | 수면 측정 시간 중 실제로 잠든 시간의 비율 |
sleepLatency | Int? | 잠들때까지 걸린 시각 |
sleepTime | String? | 수면 측정 시작 후 잠들기 까지 걸린 시간 |
wakeupLatency | Int? | 잠에서 깨어난 후 수면 측정을 종료하기까지 걸린 시간 |
wakeTime | String? | 잠에서 깨어난 시각 |
lightLatency | Int? | 첫 수면 시작으로부터 첫 번째 light가 발생하기까지의 시간 |
deepLatency | Int? | 첫 수면 시작으로부터 첫 번째 deep이 발생하기까지의 시간 |
remLatency | Int? | 첫 수면 시작으로부터 첫 번째 rem이 발생하기까지의 시간 |
timeInWake | Int | 수면 도중에 깬 시간 |
timeInSleepPeriod | Int | 수면 측정 시간 중 수면 측정 시작으로부터 잠들기 까지 걸린 시간과 잠에서 깨어난 후로부터 수면 측정을 종료하기까지 걸린 시간을 제외한 시간 (time_in_bed - sleep_latency - wakeup_latency) |
timeInSleep | Int | 수면 측정 시간 중 실제로 수면 중이었던 시간 이 시간이 deep, light, rem의 3단계로 구분됨 |
timeInBed | Int | 수면 측정 시작 시각부터 수면 측정 종료 시각 까지의 시간 |
timeInRem | Int? | 수면 단계가 rem 으로 진행된 총 시간 |
timeInLight | Int? | 수면 단계가 light 로 진행된 총 시간 |
timeInDeep | Int? | 수면 단계가 deep로 진행된 총 시간 |
wakeRatio | Float | 수면 단계 도중 중간에 깬 시간의 비율 |
sleepRatio | Float | 수면 단계 도중 깨지 않고 잔 시간의 비율 |
remRatio | Float? | rem sleep 비율 |
lightRatio | Float? | 수면 단계 도중 light 수면의 비율 |
deepRatio | Float? | 수면 단계 도중 deep 수면의 비율 |
sleepCycle | Int? | 수면 주기 1회당 평균 시간 |
sleepCycleCount | Int? | 수면 주기의 횟수 |
wasoCount | Int? | 수면 구간 중 wake가 발생한 횟수 |
longestWaso | Int? | 수면 구간 중 가장 긴 wake의 시간 |
timeInSnoring | Int? | 코골이가 발생한 총 시간 |
timeInNoSnoring | Int? | 코골이가 발생하지 않은 총 시간 |
snoringRatio | Float? | 수면 단계 도중 코골이었던 시간의 비율 |
noSnoringRatio | Float? | 수면 단계 도중 코골이가 아니었던 시간의 비율 |
snoringCount | Int? | 코골이 구간의 발생한 횟수 |
Delete Report
Asleep.deleteReport: sessionId에 해당하는 Report를 삭제합니다.
fun deleteReport(sessionId: String, deleteReportListener: DeleteReportListener)| Parameter Name | Type | Description |
|---|---|---|
sessionId | String | 삭제할 sessionId의 값 |
deleteReportListener | DeleteReportListener | Report 삭제에 대한 콜백을 받을 리스너 |
Asleep.Reports.DeleteReportListener
Asleep.Reports.DeleteReportListenerinterface DeleteReportListener {
fun onSuccess(sessionId: String?)
fun onFail(errorCode: Int, detail: String)
}성공 시, onSuccess()가 호출됩니다.
onSuccess()가 호출됩니다.| Parameter Name | Type | Description |
|---|---|---|
sessionId | String? | 삭제된 sessionId의 값 |
실패 시, onFail()이 호출됩니다.
onFail()이 호출됩니다.| Parameter Name | Type | Description |
|---|---|---|
errorCode | Int | AsleepErrorCode 참조 |
detail | String | errorCode에 관련된 메시지 |
Reanalyze
이미 종료된 세션을 다시 분석합니다. 분석 구간(시작 · 종료 시각)을 지정하면 그 구간만 다시 분석합니다. 예를 들어 측정이 끝난 뒤 사용자가 “잠든 시각 ~ 일어난 시각”을 고친 경우에 사용합니다.
Asleep.Reports.reanalyze()
val reports = Asleep.createReports(asleepConfig)
// 구간 지정
reports?.reanalyze(sessionId, analysisStartTime, analysisEndTime,
object : Reports.ReanalyzeListener {
override fun onSuccess(sessionId: String) { }
override fun onFail(errorCode: Int, detail: String) { }
})
// 측정 전체 다시 분석
reports?.reanalyze(sessionId, object : Reports.ReanalyzeListener {
override fun onSuccess(sessionId: String) { }
override fun onFail(errorCode: Int, detail: String) { }
})| Parameter | Type | Description |
|---|---|---|
sessionId | String | 다시 분석할 세션 ID |
analysisStartTime | Date | 분석 시작 시각 |
analysisEndTime | Date | 분석 종료 시각. analysisStartTime보다 늦어야 합니다 |
reanalyzeListener | ReanalyzeListener | 결과를 받을 리스너 |
Asleep.Reports.ReanalyzeListener
Asleep.Reports.ReanalyzeListenerinterface ReanalyzeListener {
fun onSuccess(sessionId: String)
fun onFail(errorCode: Int, detail: String)
}알아두세요
onSuccess는 재분석 요청이 접수됐다는 뜻입니다. 갱신된 결과는getReport(sessionId)로 조회하고,session.state == "COMPLETE"로 분석이 끝났는지 확인하세요.- 분석 구간은 요청할 때마다 새로 정해집니다. 구간 없이
reanalyze(sessionId, listener)를 호출하면 이전에 지정한 구간이 유지되지 않고 측정 전체로 다시 분석됩니다. 구간을 유지하려면 같은 구간을 다시 넘기세요. - 같은 구간으로 다시 요청하면 서버는 아무 작업도 하지 않고 성공을 돌려줍니다. 앱은 “새로 분석됨”과 “이미 분석됨”을 구분할 수 없으니, 결과를 바꾸려면 다른 구간을 지정하세요.
AsleepConfig에 userId가 있어야 합니다. 없으면 요청을 보내지 않고onFail(30000)입니다.
재분석으로 구간을 바꿔도 녹음 파일은 따라오지 않습니다.녹음 파일은 첫 분석이 끝나는 시점에 그때의 분석 구간을 기준으로 정리되며, 구간 밖의 파일은 그때 삭제됩니다. 재분석은 서버에만 요청을 보내고 기기에 저장된 파일은 건드리지 않으므로, 이미 삭제된 구간의 녹음은 다시 생기지 않습니다.
- 구간을 넓히면 넓어진 부분의 녹음은 없습니다
- 첫 구간과 겹치지 않는 구간으로 바꾸면 녹음이 하나도 없습니다
- 첫 구간의 일부로 좁히면, 그 안에서 원래 남아 있던 파일만 조회됩니다
audio_segments.json에는 측정 전체 구간의 행이 그대로 남고 파일이 없는 구간만 경로가 비어 있습니다. 앱에서는 "녹음이 원래 없던 구간"과 "정리되어 삭제된 구간"을 구분할 수 없습니다.넓은 구간의 녹음이 필요하다면 측정을 종료할 때 그 구간으로 분석을 요청하세요.
에러 코드
| Code | Name | 상황 |
|---|---|---|
11009 | ERR_INVALID_PARAMETER | 시작 시각이 종료 시각보다 늦거나 같음 (요청 전 확인) |
30000 | ERR_REANALYZE_FAILED | 재분석 실패, 네트워크 오류, userId 없음 |
30400 | ERR_REANALYZE_BAD_REQUEST | 잘못된 시작 · 종료 시각 |
30401 | ERR_REANALYZE_UNAUTHORIZED | 인증 실패 |
30403 | ERR_REANALYZE_FORBIDDEN | 재분석 권한 없음 |
30404 | ERR_REANALYZE_NOT_FOUND | 세션을 찾을 수 없음 |
30409 | ERR_REANALYZE_CONFLICT | 지금은 재분석할 수 없음 (이미 재분석 중 등) |
30410 | ERR_REANALYZE_GONE | 데이터 보관 기간 만료 |
30422 | ERR_REANALYZE_UNPROCESSABLE | 아직 측정 중인 세션 |
30500 | ERR_REANALYZE_SERVER_ERROR | 서버 오류 |
30409를 받았을 때 무한 재시도는 피하세요. 재분석이 진행 중일 때뿐 아니라 재분석할 수 없는 세션에서도 계속 반환될 수 있습니다. 재시도한다면 2~3회 정도로 제한하고, 그래도 안 되면 실패로 처리하세요.
Updated 12 days ago
