Bing Speech 문제 해결Troubleshooting Bing Speech

오류 HTTP 403 ForbiddenError HTTP 403 Forbidden

음성 인식 API를 사용할 때 HTTP 403 Forbidden 오류가 반환됩니다.When using speech recognition API, it returns an HTTP 403 Forbidden error.

원인Cause

이 오류는 종종 인증 문제로 인해 발생합니다.This error is often caused by authentication issues. 유효한 Ocp-Apim-Subscription-Key 또는 Authorization 헤더가 없는 연결 요청은 서비스에서 HTTP 403 Forbidden 응답과 함께 거부됩니다.Connection requests without valid Ocp-Apim-Subscription-Key or Authorization header are rejected by the service with an HTTP 403 Forbidden response.

인증에 구독 키를 사용하는 경우 그 이유는 다음과 같을 수 있습니다.If you are using subscription key for authentication, the reason could be

  • 구독 키가 없거나 잘못되었습니다.the subscription key is missing or invalid
  • 구독 키의 사용 할당량이 초과되었습니다.the usage quota of the subscription key is exceeded
  • REST API가 호출될 때 Ocp-Apim-Subscription-Key 필드가 요청 헤더에 설정되지 않았습니다.the Ocp-Apim-Subscription-Key field is not set in the request header, when REST API is called

인증에 권한 부여 토큰을 사용하는 경우 다음과 같은 이유로 이 오류가 발생할 수 있습니다.If you are using authorization token for authentication, the following reasons could cause the error.

  • REST를 사용할 때 요청에서 Authorization 헤더가 누락되었습니다.the Authorization header is missing in the request when using REST
  • 권한 부여 헤더에 지정된 권한 부여 토큰이 잘못되었습니다.the authorization token specified in the Authorization header is invalid
  • 권한 부여 토큰이 만료되었습니다.the authorization token is expired. 액세스 토큰의 만료 기간은 10분입니다.The access token has an expiry of 10 minutes

인증에 대한 자세한 내용은 인증 페이지를 참조하세요.For more information about authentication, see the Authentication page.

문제 해결 단계Troubleshooting steps

구독 키가 유효한지 확인Verify that your subscription key is valid

다음 명령을 실행하여 확인할 수 있습니다.You can run the following command for verification. YOUR_SUBSCRIPTION_KEY를 사용자 고유의 구독 키로 바꿉니다.Note to replace YOUR_SUBSCRIPTION_KEY with your own subscription key. 구독 키가 유효하면 응답에서 권한 부여 토큰을 JWT(JSON Web Token)로 받습니다.If your subscription key is valid, you receive in the response the authorization token as a JSON Web Token (JWT). 그렇지 않으면 응답에 오류가 발생합니다.Otherwise you get an error in response.

참고

YOUR_SUBSCRIPTION_KEY를 사용자 고유의 구독 키로 바꾸세요.Replace YOUR_SUBSCRIPTION_KEY with your own subscription key.

$FetchTokenHeader = @{
  'Content-type'='application/x-www-form-urlencoded';
  'Content-Length'= '0';
  'Ocp-Apim-Subscription-Key' = 'YOUR_SUBSCRIPTION_KEY'
}

$OAuthToken = Invoke-RestMethod -Method POST -Uri https://api.cognitive.microsoft.com/sts/v1.0/issueToken -Headers $FetchTokenHeader

# show the token received
$OAuthToken

응용 프로그램 또는 REST 요청에서 위에서 사용한 것과 동일한 구독 키를 사용해야 합니다.Make sure that you use the same subscription key in your application or in the REST request as that is used above.

권한 부여 토큰 확인Verify the authorization token

이 단계는 인증에 권한 부여 토큰을 사용하는 경우에만 필요합니다.This step is only needed, if you use authorization token for authentication. 다음 명령을 실행하여 권한 부여 토큰이 여전히 유효한지 확인합니다.Run the following command to verify that the authorization token is still valid. 이 명령은 서비스에 POST를 요청하고 서비스의 응답 메시지를 예상합니다.The command makes a POST request to the service, and expects a response message from the service. 여전히 HTTP 403 Forbidden 오류가 발생하면 액세스 토큰이 정확하게 설정되고 만료되지 않았는지 다시 확인합니다.If you still receive HTTP 403 Forbidden error, double-check the access token is set correctly and not expired.

중요

토큰의 만료 기간은 10분입니다.The token has an expiry of 10 minutes.

참고

YOUR_AUDIO_FILE을 미리 녹음된 오디오 파일의 경로로 바꾸고, YOUR_ACCESS_TOKEN을 이전 단계에서 반환된 권한 부여 토큰으로 바꾸세요.Replace YOUR_AUDIO_FILE with the path to your prerecorded audio file, and YOUR_ACCESS_TOKEN with the authorization token returned in the previous step.


$SpeechServiceURI =
'https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=en-us&format=detailed'

# $OAuthToken is the authrization token returned by the token service.
$RecoRequestHeader = @{
  'Authorization' = 'Bearer '+ $OAuthToken;
  'Transfer-Encoding' = 'chunked'
  'Content-type' = 'audio/wav; codec=audio/pcm; samplerate=16000'
}

# Read audio into byte array
$audioBytes = [System.IO.File]::ReadAllBytes("YOUR_AUDIO_FILE")

$RecoResponse = Invoke-RestMethod -Method POST -Uri $SpeechServiceURI -Headers $RecoRequestHeader -Body $audioBytes

# Show the result
$RecoResponse

오류 HTTP 400 Bad RequestError HTTP 400 Bad Request

일반적으로 요청 본문에 잘못된 오디오 데이터가 포함되어 있기 때문에 이 오류가 발생합니다.This reason is usually that the request body contains invalid audio data. 현재 WAV 파일만 지원합니다.Currently we only support WAV file.

HTTP 408 Request Timeout 오류Error HTTP 408 Request Timeout

이 오류는 오디오 데이터를 서비스에 보내지 않아 발생했을 가능성이 크며, 시간 제한을 초과하면 서비스에서 이 오류를 반환합니다.The error is most likely because that no audio data is sent to the service and the service returns this error after timeout. REST API의 경우 오디오 데이터가 요청 본문에 배치되어야 합니다.For REST API, the audio data should be put in the request body.

응답에서 RecognitionStatusInitialSilenceTimeout입니다The RecognitionStatus in the response is InitialSilenceTimeout

일반적으로 오디오 데이터로 인해 문제가 발생합니다.Audio data is usually the reason causing the issue. 예를 들면 다음과 같습니다.For example,

  • 오디오의 시작 부분에 긴 묵음 시간이 있습니다.the audio has a long silence time at the beginning. 서비스에서 수 초 후에 인식을 중지하고 InitialSilenceTimeout을 반환합니다.The service will stop the recognition after some number of seconds and returns InitialSilenceTimeout.
  • 오디오에서 지원되지 않는 코덱 형식을 사용하고 있으며, 이에 따라 오디오 데이터가 묵음으로 처리되었습니다.the audio uses unsupported codec format, which makes the audio data be treated as silence.