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의 응답을 디코딩 및 압축 해제하는 두 번째 애플리케이션이 포함되어 있습니다.

선택적 사후 처리 응답이 지정된 경우 메시지는 다음과 같이 반환됩니다. 자세한 내용을 알아보려면 다음 섹션을 참조하세요.PostFulfillmentStatusSpecification.

  • 성공 메시지- Lambda 함수가 성공적으로 완료되고 의도 상태가 충족되거나 이행 준비 (메시지가 있는 경우) 일 때 반환됩니다.

  • 실패 메시지- Lambda 함수에서 예외가 발생하거나 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

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

Length Constraints: 고정 길이는 10입니다.

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

필수: 예

localeId

세션이 사용 중인 로케일.

Length Constraints: 최소 길이는 1이고,

필수: 예

requestAttributes

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

네임스페이스입니다x-amz-lex:특수 속성을 위한 용도로만 사용됩니다. 접두사에 대한 요청 속성을 만들지 마세요.x-amz-lex:.

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

requestContentType

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

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

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

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

    • 오디오/레코드값; 샘플 레이트=8000; sample-size-bits=16, 채널 수=1; is-big-endian=false

  • 오푸스 형식

    • 오디오/x-cbr-opus-with-프리앰블; 프리앰블 크기=0; 비트 레이트=256000;frame-size-milliseconds=4

  • 텍스트 형식

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

Length Constraints: 최소 길이는 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

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

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

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

Length Constraints: 최소 길이는 1이고,

sessionId

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

Length Constraints: 최소 길이는 2이고, 최대 길이는 100입니다.

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

필수: 예

sessionState

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

sessionState필드는 Amazon 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요청에서

Length Constraints: 최소 길이는 1이고,

inputMode

작업의 입력 모드가 텍스트인지 음성인지 여부를 나타냅니다.

Length Constraints: 최소 길이는 1이고,

inputTranscript

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

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

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

Length Constraints: 최소 길이는 1이고,

interpretations

Amazon Lex V2에서 사용자의 발언을 만족시킬 수 있다고 판단한 인텐트 목록입니다.

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

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

Length Constraints: 최소 길이는 1이고,

messages

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

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

Length Constraints: 최소 길이는 1이고,

requestAttributes

요청에서 전송된 속성.

requestAttributes필드는 gzip으로 압축된 다음 base64로 인코딩됩니다. 필드 콘텐츠를 사용하려면 먼저 콘텐츠를 디코딩하고 압축 해제해야 합니다.

Length Constraints: 최소 길이는 1이고,

sessionId

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

Length Constraints: 최소 길이는 2이고, 최대 길이는 100입니다.

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

sessionState

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

이를 사용하여 대화의 진행 상황과 다음 조치를 결정할 수 있습니다.

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

Length Constraints: 최소 길이는 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 중 하나로 사용하는 방법에 대한 자세한 내용은 다음을 참조하세요.