Reports

Create Reports

Asleep.createReports: Sleep Tracking에 대한 결과를 가져오기 위한 Reports를 생성합니다.

fun createReports(asleepConfig: AsleepConfig?): Reports?
Parameter NameTypeDescription
asleepConfigAsleepConfig?initAsleepConfig 호출에서 콜백 받은 설정 값을 입력

Get Single Report

Asleep.Reports.getReport: sessionId에 해당하는 Report를 가져옵니다.

fun getReport(sessionId: String, reportListener: ReportListener)
Parameter NameTypeDescription
sessionIdStringSleep Tracking을 정지할 때 받을 수 있는 sessionId의 값
reportListenerReportListenerReport를 콜백 받을 리스너

Asleep.Reports.ReportListener

interface ReportListener {
    fun onSuccess(report: Report?)
    fun onFail(errorCode: Int, detail: String)
}

성공 시, 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 NameTypeDescription
timezoneString타임존 (Timezone List)
peculiaritiesList<String>해당 수면 세션의 특이사항을 설명하는 필드. 여러 개의 라벨 포함 가능.
missingDataRatioFloat오디오 업로드 누락 등의 이유로 인한 수면 분석 결과 오류율
sessionSession?세션 분석 정보
statStat?분석 통계 정보
analysisAnalysis?서버가 분석한 구간 정보. 세션이 아직 측정 중이면 구간이 정해지지 않아 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 NameTypeDescription
idString수면 세션 id
stateString세션의 상태 (OPEN, CLOSED or COMPLETE)
startTimeString분석 구간의 시작 시각. 구간을 지정하지 않았다면 측정 시작 시각과 같습니다
endTimeString?분석 구간의 종료 시각. 구간을 지정하지 않았다면 측정 종료 시각과 같습니다
sleepStagesList<Int>?수면 단계
breathStagesList<Int>?호흡 안정성 단계
snoringStagesList<Int>?코골이
createdTimezoneString세션이 생성된 타임존
unexpectedEndTimeString?비정상 종료된 경우의 종료 시각
sleepStageProbsList<List<Float>>?수면 단계별 확률값
snoringStageProbsList<List<Float>>?코골이 단계별 확률값
breathStageProbsList<List<Float>>?호흡 단계별 확률값
measurementStartTimeString?분석 구간과 관계없이 실제로 측정(녹음)이 시작된 시각
measurementEndTimeString?분석 구간과 관계없이 실제로 측정(녹음)이 종료된 시각

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 NameTypeDescription
breathingIndexFloat?호흡 지수
breathingPatternString?호흡 패턴
deepRatioFloat?수면 단계 도중 deep 수면의 비율
lightRatioFloat?수면 단계 도중 light 수면의 비율
remRatioFloat?rem sleep 비율
sleepEfficiencyFloat?수면 측정 시간 중 실제로 잠든 시간의 비율
sleepLatencyInt?잠들때까지 걸린 시간
sleepRatioFloat?수면 단계 도중 깨지 않고 잔 시간의 비율
sleepTimeString?잠이 든 시각
stableBreathRatioFloat?안정 호흡 시간의 비율
timeInBedInt?수면 측정 시작 시각부터 수면 측정 종료 시각 까지의 시간
timeInDeepInt?수면 단계가 deep로 진행된 총 시간
timeInLightInt?수면 단계가 light 로 진행된 총 시간
timeInRemInt?수면 단계가 rem 으로 진행된 총 시간
timeInSleepInt?수면 측정 시간 중 실제로 수면 중이었던 시간
timeInSleepPeriodInt?수면 측정 시간 중 수면 측정 시작으로부터 잠들기 까지 걸린 시간과 잠에서 깨어난 후로부터 수면 측정을 종료하기까지 걸린 시간을 제외한 시간 (time_in_bed - sleep_latency - wakeup_latency)
timeInStableBreathInt?안정 호흡이었던 총 시간
timeInUnstableBreathInt?불안정 호흡이었던 총 시간
timeInWakeInt?수면 도중에 깬 시간
unstableBreathRatioFloat?불안정 호흡 시간의 비율
wakeRatioFloat?수면 단계 도중 중간에 깬 시간의 비율
wakeTimeString?잠에서 깨어난 시각
wakeupLatencyInt?잠에서 깨어난 후 수면 측정을 종료하기까지 걸린 시간
sleepCycleInt?수면 주기 1회당 평균 시간
sleepCycleCountInt?수면 주기의 횟수
wasoCountInt?수면 구간 중 wake가 발생한 횟수
longestWasoInt?수면 구간 중 가장 긴 wake의 시간
unstableBreathCountInt?불안정 호흡 구간이 발생한 횟수
lightLatencyInt?첫 수면 시작으로부터 첫 번째 light가 발생하기까지의 시간
remLatencyInt?첫 수면 시작으로부터 첫 번째 rem이 발생하기까지의 시간
deepLatencyInt?첫 수면 시작으로부터 첫 번째 deep이 발생하기까지의 시간
sleepIndexInt?수면 지수
timeInSnoringInt?코골이가 발생한 총 시간
timeInNoSnoringInt?코골이가 발생하지 않은 총 시간
snoringRatioFloat?수면 단계 도중 코골이었던 시간의 비율
noSnoringRatioFloat?수면 단계 도중 코골이가 아니었던 시간의 비율
snoringCountInt?코골이 구간의 발생한 횟수
sleepCycleTimeList<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
}
PropertyTypeDescription
startEpochIndexInt분석 구간의 첫 epoch 번호 (측정 전체 기준, 포함)
endEpochIndexInt분석 구간의 마지막 epoch 다음 번호 (미포함)
epochDurationsList<Int>구간 안 각 epoch의 길이(초). 구간 경계가 epoch 경계와 맞지 않으면 첫 · 마지막 값이 30보다 작을 수 있습니다
totalEpochCountInt측정 전체의 epoch 수
epochCountInt구간에 포함된 epoch 수
contains(seq)Boolean측정 전체 기준 epoch 번호 seq가 분석 구간에 포함되는지 여부. 녹음 파일의 구간 번호와 맞추어볼 때 사용합니다
🚧

구간을 지정하면 stage 배열의 인덱스는 측정 시작 기준이 아닙니다.

sleepStages[i]는 측정 전체에서 startEpochIndex + i번째 epoch(30초)입니다.

배열 인덱스로 시각을 계산하거나 녹음 파일과 매칭할 때는 startEpochIndex를 더해주세요.


실패 시, onFail()이 호출됩니다.

Parameter NameTypeDescription
errorCodeIntAsleepErrorCode 참조
detailStringerrorCode에 관련된 메시지

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 NameTypeDescription
fromDateString (YYYY-MM-DD)조회 시작 날짜
toDateString (YYYY-MM-DD)조회 마지막 날짜
orderByStringDESC: 내림차순 정렬
ASC: 오름차순 정렬
offsetInt스킵할 Report 개수 (default: 0)
limitInt최대 받을 Report 개수 (0~100, default: 20)
reportsListenerReportsListener?Report 목록을 콜백 받을 리스너

Asleep.Reports.ReportsListener

interface ReportsListener {
    fun onSuccess(reports: List<SleepSession>?)
    fun onFail(errorCode: Int, detail: String)
}

성공 시, 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 NameTypeDescription
sessionIdString?세션 ID
lastReceivedSeqNumInt?마지막으로 업로드 받은 오디오 파일의 순서 번호
sessionEndTimeString?세션 종료 시각
sessionStartTimeString?세션 시작 시각
stateString?수면 세션 상태 (OPEN, CLOSED, COMPLETE)
timeInBedInt?침대에 있었던 시간
createdTimezoneString세션이 생성된 타임존 (Timezone List)
unexpectedEndTimeString?비정상 세션 종료 시각. 추후 initAsleepConfig될 때의 시각이 저장.

실패 시, onFail()이 호출됩니다.

Parameter NameTypeDescription
errorCodeIntAsleepErrorCode 참조
detailStringerrorCode에 관련된 메시지

Average-stats

Asleep.Reports.getAverageReport: 사용자의 특정 기간 내 수면 메트릭들의 평균을 확인할 수 있습니다.

fun getAverageReport(fromDate: String, toDate: String, averageReportListener: AverageReportListener?)
Parameter NameTypeDescription
fromDateString평균을 확인하고자 하는 기간의 시작 시간
toDateString평균을 확인하고자 하는 기간의 종료 시간
averageReportListenerAverageReportListenerAverage Report를 콜백 받을 listener

Asleep.Reports.AverageReportListener

interface AverageReportListener {
    fun onSuccess(averageReport: AverageReport?)
    fun onFail(errorCode: Int, detail: String)
}

성공 시, onSuccess()가 호출됩니다.

data class AverageReport (
    val period: Period,
    val peculiarities: List<String>,
    val averageStats: AverageStats?,
    val neverSleptSessions: List<NeverSleptSessions>,
    val sleptSessions: List<SleptSessions>
)
Parameter NameTypeDescription
periodPeriod타임존
peculiaritiesList<String>수면 세션들의 평균을 구할 때 특이사항
averageStatsAverageStats?sleptSessions의 수면 메트릭들의 평균들을 가지는 객체
neverSleptSessionsList<NeverSleptSession>세션 측정시간 동안 전혀 잠을 자지 않았다고 판단 되는 세션들의 목록
sleptSessionsList<SleptSession>세션 측정시간 동안 잠을 잤다고 판단 되는 세션들의 목록

Period

data class Period (
    val timezone: String,
    val endDate: String,
    val startDate: String,
)
Parameter NameTypeDescription
timezoneString요청한 타임존 예. UTC, Asia/Seoul
startDateString요청한 시작 시간
endDateString요청한 종료 시간

AverageStats

data 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 NameTypeDescription
startTimeString세션 시작 시각
endTimeString세션 종료 시각
sleepTimeString잠이 든 시각
wakeTimeString잠에서 깨어각난 시각
sleepLatencyInt잠들때까지 걸린 시간
wakeupLatencyInt잠에서 깨어난 후 수면 측정을 종료하기까지 걸린 시간
timeInBedInt수면 측정 시작 시각부터 수면 측정 종료 시각 까지의 시간
timeInSleepPeriodInt수면 측정 시간 중 수면 측정 시작으로부터 잠들기 까지 걸린 시간과 잠에서 깨어난 후로부터 수면 측정을 종료하기까지 걸린 시간을 제외한 시간 (time_in_bed - sleep_latency - wakeup_latency)
timeInSleepInt수면 측정 시간 중 실제로 수면 중이었던 시간 이 시간이 deep, light, rem의 3단계로 구분됨
timeInWakeInt수면 도중에 깬 시간
timeInLightInt?면 단계가 light 로 진행된 총 시간
timeInDeepInt?수면 단계가 deep로 진행된 총 시간
timeInRemInt?수면 단계가 rem 으로 진행된 총 시간
sleepEfficiencyFloat수면 측정 시간 중 실제로 잠든 시간의 비율
wakeRatioFloat수면 단계 도중 중간에 깬 시간의 비율
sleepRatioFloat수면 단계 도중 깨지 않고 잔 시간의 비율
lightRatioFloat?수면 단계 도중 light 수면의 비율
deepRatioFloat?수면 단계 도중 deep 수면의 비율
remRatioFloat?rem sleep 비율
wasoCountInt?수면 구간 중 wake가 발생한 횟수
longestWasoInt?수면 구간 중 가장 긴 wake의 시간
sleepCycleCountInt?수면 주기의 횟수
timeInSnoringInt?코골이가 발생한 총 시간
timeInNoSnoringInt?코골이가 발생하지 않은 총 시간
snoringRatioFloat?수면 단계 도중 코골이었던 시간의 비율
noSnoringRatioFloat?수면 단계 도중 코골이가 아니었던 시간의 비율
snoringCountInt?코골이 구간의 발생한 횟수

NeverSleptSessions

data class NeverSleptSessions (
    val id: String,
    val startTime: String,
    val endTime: String,
    val completedTime: String
)
Parameter NameTypeDescription
idStringsession id
startTimeString세션 시작 시각
endTimeString세션 종료 시각
completedTimeString세션 분석 완료 시각

SleptSessions

data 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 NameTypeDescription
idStringsession id
createdTimezoneString세션이 생성된 타임존 (Timezone List)
startTimeString세션 종료 시각
endTimeString세션 종료 시각
completedTimeString세션 분석 완료 시각
sleepEfficiencyFloat수면 측정 시간 중 실제로 잠든 시간의 비율
sleepLatencyInt?잠들때까지 걸린 시각
sleepTimeString?수면 측정 시작 후 잠들기 까지 걸린 시간
wakeupLatencyInt?잠에서 깨어난 후 수면 측정을 종료하기까지 걸린 시간
wakeTimeString?잠에서 깨어난 시각
lightLatencyInt?첫 수면 시작으로부터 첫 번째 light가 발생하기까지의 시간
deepLatencyInt?첫 수면 시작으로부터 첫 번째 deep이 발생하기까지의 시간
remLatencyInt?첫 수면 시작으로부터 첫 번째 rem이 발생하기까지의 시간
timeInWakeInt수면 도중에 깬 시간
timeInSleepPeriodInt수면 측정 시간 중 수면 측정 시작으로부터 잠들기 까지 걸린 시간과 잠에서 깨어난 후로부터 수면 측정을 종료하기까지 걸린 시간을 제외한 시간 (time_in_bed - sleep_latency - wakeup_latency)
timeInSleepInt수면 측정 시간 중 실제로 수면 중이었던 시간 이 시간이 deep, light, rem의 3단계로 구분됨
timeInBedInt수면 측정 시작 시각부터 수면 측정 종료 시각 까지의 시간
timeInRemInt?수면 단계가 rem 으로 진행된 총 시간
timeInLightInt?수면 단계가 light 로 진행된 총 시간
timeInDeepInt?수면 단계가 deep로 진행된 총 시간
wakeRatioFloat수면 단계 도중 중간에 깬 시간의 비율
sleepRatioFloat수면 단계 도중 깨지 않고 잔 시간의 비율
remRatioFloat?rem sleep 비율
lightRatioFloat?수면 단계 도중 light 수면의 비율
deepRatioFloat?수면 단계 도중 deep 수면의 비율
sleepCycleInt?수면 주기 1회당 평균 시간
sleepCycleCountInt?수면 주기의 횟수
wasoCountInt?수면 구간 중 wake가 발생한 횟수
longestWasoInt?수면 구간 중 가장 긴 wake의 시간
timeInSnoringInt?코골이가 발생한 총 시간
timeInNoSnoringInt?코골이가 발생하지 않은 총 시간
snoringRatioFloat?수면 단계 도중 코골이었던 시간의 비율
noSnoringRatioFloat?수면 단계 도중 코골이가 아니었던 시간의 비율
snoringCountInt?코골이 구간의 발생한 횟수

Delete Report

❗️

데이터 삭제 주의
세션 데이터 삭제 요청에 따라 에이슬립 서버에서 세션 데이터가 삭제된 경우, 추후 과금 사용량 분석 시 삭제된 세션에 대한 구체적인 근거 제공이 어렵습니다.

Asleep.deleteReport: sessionId에 해당하는 Report를 삭제합니다.

fun deleteReport(sessionId: String, deleteReportListener: DeleteReportListener)
Parameter NameTypeDescription
sessionIdString삭제할 sessionId의 값
deleteReportListenerDeleteReportListenerReport 삭제에 대한 콜백을 받을 리스너

Asleep.Reports.DeleteReportListener

interface DeleteReportListener {
    fun onSuccess(sessionId: String?)
    fun onFail(errorCode: Int, detail: String)
}

성공 시, onSuccess()가 호출됩니다.

Parameter NameTypeDescription
sessionIdString?삭제된 sessionId의 값

실패 시, onFail()이 호출됩니다.

Parameter NameTypeDescription
errorCodeIntAsleepErrorCode 참조
detailStringerrorCode에 관련된 메시지


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) { }
})
ParameterTypeDescription
sessionIdString다시 분석할 세션 ID
analysisStartTimeDate분석 시작 시각
analysisEndTimeDate분석 종료 시각. analysisStartTime보다 늦어야 합니다
reanalyzeListenerReanalyzeListener결과를 받을 리스너

Asleep.Reports.ReanalyzeListener

interface 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 에는 측정 전체 구간의 행이 그대로 남고 파일이 없는 구간만 경로가 비어 있습니다. 앱에서는 "녹음이 원래 없던 구간"과 "정리되어 삭제된 구간"을 구분할 수 없습니다.

넓은 구간의 녹음이 필요하다면 측정을 종료할 때 그 구간으로 분석을 요청하세요.

에러 코드

CodeName상황
11009ERR_INVALID_PARAMETER시작 시각이 종료 시각보다 늦거나 같음 (요청 전 확인)
30000ERR_REANALYZE_FAILED재분석 실패, 네트워크 오류, userId 없음
30400ERR_REANALYZE_BAD_REQUEST잘못된 시작 · 종료 시각
30401ERR_REANALYZE_UNAUTHORIZED인증 실패
30403ERR_REANALYZE_FORBIDDEN재분석 권한 없음
30404ERR_REANALYZE_NOT_FOUND세션을 찾을 수 없음
30409ERR_REANALYZE_CONFLICT지금은 재분석할 수 없음 (이미 재분석 중 등)
30410ERR_REANALYZE_GONE데이터 보관 기간 만료
30422ERR_REANALYZE_UNPROCESSABLE아직 측정 중인 세션
30500ERR_REANALYZE_SERVER_ERROR서버 오류
🚧

30409를 받았을 때 무한 재시도는 피하세요. 재분석이 진행 중일 때뿐 아니라 재분석할 수 없는 세션에서도 계속 반환될 수 있습니다. 재시도한다면 2~3회 정도로 제한하고, 그래도 안 되면 실패로 처리하세요.


Did this page help you?