RecognizeUtterance - Amazon Lex

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

RecognizeUtterance

Amazon Lex V2에 사용자 입력을 보냅니다. 문자 또는 연설을 보낼 수 있습니다. 클라이언트는 이 API를 사용하여 런타임 시 Amazon Lex V2로 텍스트 및 오디오 요청을 보냅니다. Amazon Lex V2는 봇용으로 구축된 머신 러닝 모델을 사용하여 사용자 입력을 해석합니다.

Amazon Lex V2로 전송하기 전에 다음 요청 필드를 gzip으로 압축한 다음 base64로 인코딩해야 합니다.

  • requestAttributes

  • 세션스테이트

다음 응답 필드는 gzip을 사용하여 압축한 다음 Amazon Lex V2에서 base64로 인코딩합니다. 이러한 필드를 사용하려면 먼저 해당 필드를 디코딩하고 압축을 풀어야 합니다.

  • inputTranscript

  • 해석

  • 메시지

  • requestAttributes

  • 세션스테이트

이 예제에는 Amazon Lex V2로 보낼 Java 객체를 압축 및 인코딩하는 Java 애플리케이션과 Amazon Lex V2의 응답을 디코딩 및 압축 해제하는 두 번째 Java 애플리케이션이 포함되어 있습니다.

선택적 사후 주문 처리 응답을 지정하면 다음과 같이 메시지가 반환됩니다. 자세한 내용은 단원을 참조하십시오.PostFulfillmentStatusSpecification.

  • 성공 메시지- Lambda 함수가 성공적으로 완료되고 인텐트 상태가 이행되거나 메시지가 있는 경우 이행 준비가 된 경우 반환됩니다.

  • 실패한 메시지- Lambda 함수가 예외를 throw하거나 Lambda 함수가 메시지 없이 실패한 인텐트 상태를 반환하는 경우 실패한 메시지가 반환됩니다.

  • 제한 시간 메시지- 제한 시간 메시지와 제한 시간을 구성하지 않고 Lambda 함수가 30초 이내에 반환되지 않으면 제한 시간 메시지가 반환됩니다. 시간 초과를 구성하면 기간이 초과되면 시간 초과 메시지가 반환됩니다.

자세한 내용은 단원을 참조하십시오.완료 메시지.

요청 구문

POST /bots/botId/botAliases/botAliasId/botLocales/localeId/sessions/sessionId/utterance HTTP/1.1 x-amz-lex-session-state: sessionState x-amz-lex-request-attributes: requestAttributes Content-Type: requestContentType Response-Content-Type: responseContentType inputStream

URI 요청 파라미터

요청은 다음의 URI 파라미터를 사용합니다.

botAliasId

요청을 수신해야 하는 봇에 대해 사용 중인 별칭 식별자입니다.

: 필수 사항 예

botId

요청을 수신해야 하는 봇의 식별자입니다.

길이 제약 조건: 고정 길이 10입니다.

Pattern: ^[0-9a-zA-Z]+$

: 필수 사항 예

localeId

세션이 사용 중인 로캘입니다.

길이 제약 조건: 최소 길이는 1이고,

: 필수 사항 예

requestAttributes

클라이언트 애플리케이션과 Amazon Lex V2 간에 전달되는 요청별 정보

네임스페이스x-amz-lex:는 특수 속성용으로 예약되어 있습니다. 접두사에 대한 요청 속성 생성 안 함x-amz-lex:.

requestAttributesAmazon Lex V2로 전송하기 전에 gzip을 사용하여 필드를 압축한 다음 base64로 인코딩해야 합니다.

requestContentType

오디오 입력 형식 또는 콘텐츠가 텍스트임을 나타냅니다. 헤더는 다음 접두사 중 하나로 시작해야 합니다.

  • PCM 형식, 오디오 데이터는 리틀 엔디안 바이트 순서여야 합니다.

    • 오디오/l16; 속도=16000; 채널=1

    • 오디오/x-l16; 샘플 속도=16000; 채널 수=1

    • 오디오/lpcm; 샘플 속도=8000;sample-size-bits=16; 채널 수=1;is-big-endian=false

  • 오푸스 형식

    • 오디오/x-cbr-opus프리앰블 포함; 프리앰블 크기=0; 비트 속도=256000;frame-size-milliseconds=4

  • 텍스트 형식

    • 텍스트/일반; 문자 세트=utf-8

길이 제약 조건: 최소 길이는 1이고,

: 필수 사항 예

responseContentType

응답에서 Amazon Lex V2가 반환하는 메시지는responseContentTypeUSD 상당.

  • 값이 다음과 같으면text/plain;charset=utf-8, Amazon Lex V2가 응답에서 텍스트를 반환합니다.

  • 값이 다음으로 시작하는 경우audio/, Amazon Lex V2가 응답에서 음성을 반환합니다. Amazon Lex V2는 Amazon Polly를 사용하여 사용자가 지정한 구성을 사용하여 음성을 생성합니다.requestContentType파라미터. 예를 들어 를 지정하는 경우audio/mpegAmazon Lex V2는 음성을 MPEG 형식으로 반환합니다.

  • 값이 다음과 같으면audio/pcm반환된 연설은 다음과 같습니다.audio/pcm16kHz에서 16비트, 리틀 엔디안 형식.

  • 허용되는 값은 다음과 같습니다.

    • 오디오/mpeg

    • 오디오/ogg

    • 오디오/PCM (16 킬로헤르츠)

    • 오디오/* (기본값 mpeg)

    • 텍스트/일반; 문자 세트=utf-8

길이 제약 조건: 최소 길이는 1이고,

sessionId

사용 중인 세션의 식별자입니다.

길이 제약 조건: 최소 길이는 2이고, 최대 길이는 100입니다.

Pattern: [0-9a-zA-Z._:-]+

: 필수 사항 예

sessionState

사용자와의 세션 상태를 설정합니다. 이 옵션을 사용하여 현재 의도, 속성, 컨텍스트 및 대화 동작을 설정할 수 있습니다. 대화상자 작업을 사용하여 Amazon Lex V2가 사용자와의 대화에 사용해야 하는 다음 단계를 결정합니다.

sessionStateAmazon Lex V2로 전송하기 전에 gzip을 사용하여 필드를 압축한 다음 base64로 인코딩해야 합니다.

요청 본문

요청은 다음의 이진 데이터를 허용합니다.

inputStream

에 설명된 대로 PCM 또는 Opus 오디오 형식 또는 텍스트 형식의 사용자 입력requestContentType파라미터.

응답 구문

HTTP/1.1 200 x-amz-lex-input-mode: inputMode Content-Type: contentType x-amz-lex-messages: messages x-amz-lex-interpretations: interpretations x-amz-lex-session-state: sessionState x-amz-lex-request-attributes: requestAttributes x-amz-lex-session-id: sessionId x-amz-lex-input-transcript: inputTranscript audioStream

응답 요소

작업이 성공하면 서비스가 HTTP 200 응답을 다시 전송합니다.

응답에 다음 HTTP 헤더가 반환됩니다.

contentType

에 지정된 콘텐츠 유형responseContentType않습니다.

길이 제약 조건: 최소 길이는 1이고,

inputMode

작업에 대한 입력 모드가 텍스트 또는 음성인지 여부를 나타냅니다.

길이 제약 조건: 최소 길이는 1이고,

inputTranscript

요청을 처리하는 데 사용되는 텍스트입니다.

입력이 오디오 스트림인 경우 inputTranscript 필드에는 오디오 스트림에서 추출한 텍스트가 포함됩니다. 이 텍스트는 의도 및 슬롯 값을 인식하기 위해 실제로 처리되는 텍스트입니다. 이 정보를 사용하여 Amazon Lex V2가 전송하는 오디오를 올바르게 처리하고 있는지 확인할 수 있습니다.

inputTranscript필드는 gzip으로 압축된 다음 base64로 인코딩됩니다. 필드의 내용을 사용하려면 먼저 내용을 디코딩하고 압축을 풀어야 합니다. 내용을 디코딩 및 압축 해제하는 간단한 함수는 예제를 참조하십시오.

길이 제약 조건: 최소 길이는 1이고,

interpretations

Amazon Lex V2가 결정한 인텐트 목록은 사용자의 발언을 만족시킬 수 있습니다.

각 해석에는 의도, 해석이 올바른지 Amazon Lex V2가 얼마나 확신하는지 나타내는 점수, 발언으로 표현된 감정을 나타내는 선택적 감정 응답이 포함됩니다.

interpretations필드는 gzip으로 압축된 다음 base64로 인코딩됩니다. 필드의 내용을 사용하려면 먼저 내용을 디코딩하고 압축을 풀어야 합니다. 내용을 디코딩 및 압축 해제하는 간단한 함수는 예제를 참조하십시오.

길이 제약 조건: 최소 길이는 1이고,

messages

사용자에게 마지막으로 전송된 메시지 목록입니다. 메시지는 Lambda 함수에서 메시지를 반환한 순서 또는 메시지가 봇에 정의된 순서에 따라 정렬됩니다.

messages필드는 gzip으로 압축된 다음 base64로 인코딩됩니다. 필드의 내용을 사용하려면 먼저 내용을 디코딩하고 압축을 풀어야 합니다. 내용을 디코딩 및 압축 해제하는 간단한 함수는 예제를 참조하십시오.

길이 제약 조건: 최소 길이는 1이고,

requestAttributes

요청에서 보낸 속성입니다.

requestAttributes필드는 gzip으로 압축된 다음 base64로 인코딩됩니다. 필드의 내용을 사용하려면 먼저 내용을 디코딩하고 압축을 풀어야 합니다.

길이 제약 조건: 최소 길이는 1이고,

sessionId

사용 중인 세션의 식별자입니다.

길이 제약 조건: 최소 길이는 2이고, 최대 길이는 100입니다.

Pattern: [0-9a-zA-Z._:-]+

sessionState

사용자와 봇 사이의 대화 상자의 현재 상태를 나타냅니다.

이 옵션을 사용하여 대화의 진행률과 다음 작업을 결정할 수 있습니다.

sessionState필드는 gzip으로 압축된 다음 base64로 인코딩됩니다. 필드의 내용을 사용하려면 먼저 내용을 디코딩하고 압축을 풀어야 합니다. 내용을 디코딩 및 압축 해제하는 간단한 함수는 예제를 참조하십시오.

길이 제약 조건: 최소 길이는 1이고,

응답에 다음 내용이 HTTP 본문으로 반환됩니다.

audioStream

사용자에게 보낼 프롬프트 또는 문입니다. 이는 봇 구성 및 컨텍스트를 기반으로 합니다. 예를 들어, Amazon Lex V2가 사용자 의도를 이해하지 못하면clarificationPrompt봇에 대해 구성됩니다. 이행 작업을 수행하기 전에 인텐트에 확인이 필요한 경우confirmationPrompt. 또 다른 예시: Lambda 함수가 인텐트를 성공적으로 이행하고 사용자에게 전달할 메시지를 보냈다고 가정합니다. 그런 다음 Amazon Lex V2가 응답으로 해당 메시지를 보냅니다.

오류

모든 작업에 공통적인 오류에 대한 자세한 내용은 단원을 참조하십시오.일반적인 오류.

AccessDeniedException

HTTP 상태 코드: 403

BadGatewayException

HTTP 상태 코드: 502

ConflictException

HTTP 상태 코드: 409

DependencyFailedException

HTTP 상태 코드: 424

InternalServerException

HTTP 상태 코드: 500

ResourceNotFoundException

HTTP 상태 코드: 404

ThrottlingException

HTTP 상태 코드: 429

ValidationException

HTTP 상태 코드: 400

예제

필드 인코딩 및 디코딩

다음 예제에서는 gzip으로 문자열을 압축한 다음 base64로 인코딩하고 다른 하나는 문자열을 디코딩하고 압축을 해제하는 두 가지 함수를 제공합니다.

package com.amazonaws.deepsense.util; import com.amazonaws.deepsense.runtime.conversation.serialize.RuntimeSdkSerializer; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.google.common.base.Preconditions; import java.io.IOException; import java.util.Base64; public class CompressionAndEncoding { private CompressionAndEncoding() { } /** * Given a generic object * 1. Serialize the object using jackson * 2. Compress the serialized object * 3. Base64 encode the compressed data */ public static String compressAndEncodeBase64(Object object) { if (object == null) { return null; } String objectAsString = GsonSerializer.serialize(object); byte[] compressedString = Compressions.compress(objectAsString); return Base64.getEncoder().encodeToString(compressedString); } /** * Given a base64 encoded, compressed, serialized object * 1. Base64 decodes the data * 2. Decompresses the base64 decoded data * 3. Converts the serialized object into a proper POJO */ public static <T> T decodeBase64AndDecompress(String objectAsString, TypeReference<T> typeRef) { if (objectAsString == null) { return null; } Preconditions.checkNotNull(typeRef, "Serialization class can't be null."); byte[] decodedBytes = Base64.getDecoder().decode(objectAsString); String decompressedObjectAsString = Compressions.uncompress(decodedBytes); try { return RuntimeSdkSerializer.instance().readValue(decompressedObjectAsString, typeRef); } catch (IOException e) { throw new RuntimeException(String.format("Unable to deserialize string %s", decompressedObjectAsString), e); } } }

참고 항목

이 API를 언어별 AWS SDK 중 하나로 사용하는 방법에 대한 자세한 내용은 다음을 참조하세요.