봇으로 스트리밍 시작하기 - Amazon Lex

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

봇으로 스트리밍 시작하기

StartConversation 작업을 사용하여 애플리케이션에서 사용자와 Amazon Lex V2 봇 간의 스트림을 시작할 수 있습니다. 애플리케이션의 POST 요청에 따라 애플리케이션과 Amazon Lex V2 봇 간의 연결이 설정됩니다. 이렇게 하면 애플리케이션과 봇이 이벤트를 통해 서로 정보를 교환할 수 있습니다.

StartConversation 작업은 다음 SDK에서만 지원됩니다.

애플리케이션이 Amazon Lex V2 봇으로 전송해야 하는 첫 번째 이벤트는 ConfigurationEvent입니다. 이 이벤트에는 응답 유형 형식과 같은 정보가 포함됩니다. 구성 이벤트에서 사용할 수 있는 파라미터는 다음과 같습니다.

  • responseContentType – 봇이 사용자 입력에 텍스트 또는 음성으로 응답할지 여부를 결정합니다.

  • sessionState – 미리 정해진 의도 또는 대화 상태 등 봇과의 스트리밍 세션과 관련된 정보입니다.

  • WelcomeMessages – 봇과의 대화를 시작할 때 사용자에게 재생되는 환영 메시지를 지정합니다. 이러한 메시지는 사용자가 입력을 하기 전에 재생됩니다. 환영 메시지를 활성화하려면 sessionStatedialogAction 파라미터에 대한 값도 지정해야 합니다.

  • DisablePlayback – 봇이 발신자 입력을 수신하기 전에 클라이언트의 신호를 기다려야 할지 여부를 결정합니다. 기본적으로 재생이 활성화되므로 이 필드의 값은 false입니다.

  • requestAttributes – 요청에 대한 추가 정보를 제공합니다.

이전 파라미터에 대한 값을 지정하는 방법에 대한 자세한 내용은 StartConversation 작업의 ConfigurationEvent 데이터 유형을 참조하세요.

봇과 애플리케이션 간의 각 스트림에는 구성 이벤트가 하나만 있을 수 있습니다. 애플리케이션이 구성 이벤트를 보낸 후 봇은 애플리케이션으로부터 추가 통신을 받을 수 있습니다.

사용자가 오디오를 사용하여 Amazon Lex V2 봇과 통신하도록 지정한 경우 애플리케이션은 해당 대화 중에 봇에 다음 이벤트를 전송할 수 있습니다.

  • AudioInputEvent – 최대 크기가 320바이트인 오디오 청크를 포함합니다. 서버에서 봇으로 메시지를 보내려면 애플리케이션이 여러 개의 오디오 입력 이벤트를 사용해야 합니다. 스트림의 모든 오디오 입력 이벤트는 동일한 오디오 형식을 가져야 합니다.

  • DTMFinputEvent – DTMF 입력을 봇에 보냅니다. 각 DTMF 키 누름은 단일 이벤트에 해당합니다.

  • PlaybackCompletionEvent – 사용자 입력의 응답이 재생되었음을 서버에 알립니다. 사용자에게 오디오 응답을 보내는 경우 재생 완료 이벤트를 사용해야 합니다. 구성 이벤트의 disablePlaybacktrue이면 이 기능을 사용할 수 없습니다.

  • DisconnectionEvent – 사용자가 대화에서 연결을 끊었다는 사실을 봇에게 알립니다.

사용자가 텍스트를 사용하여 봇과 통신하도록 지정한 경우 애플리케이션은 해당 대화 중에 봇에 다음 이벤트를 전송할 수 있습니다.

  • TextInputEvent – 애플리케이션에서 봇으로 전송되는 텍스트입니다. 텍스트 입력 이벤트에는 최대 512자를 포함할 수 있습니다.

  • PlaybackCompletionEvent – 사용자 입력의 응답이 재생되었음을 서버에 알립니다. 사용자에게 오디오를 재생하려면 이 이벤트를 사용해야 합니다. 구성 이벤트의 disablePlaybacktrue이면 이 기능을 사용할 수 없습니다.

  • DisconnectionEvent – 사용자가 대화에서 연결을 끊었다는 사실을 봇에게 알립니다.

Amazon Lex V2 봇에 보내는 모든 이벤트를 올바른 형식으로 인코딩해야 합니다. 자세한 내용은 이벤트 스트림 인코딩 섹션을 참조하세요.

모든 이벤트에는 이벤트 ID가 있습니다. 스트림에서 발생할 수 있는 문제를 해결하는 데 도움이 되도록 각 입력 이벤트에 고유한 이벤트 ID를 할당하십시오. 그런 다음 봇의 모든 처리 실패 문제를 해결할 수 있습니다.

또한 Amazon Lex V2는 각 이벤트에 타임스탬프를 사용합니다. 이벤트 ID와 함께 이러한 타임스탬프를 사용하여 네트워크 전송 문제를 해결할 수 있습니다.

사용자와 Amazon Lex V2 봇 간의 대화 중에 봇은 사용자에 대한 응답으로 다음과 같은 아웃바운드 이벤트를 전송할 수 있습니다.

  • IntentResultEvent – Amazon Lex V2가 사용자 발언으로부터 판단한 의도를 포함합니다. 각 내부 결과 이벤트에는 다음이 포함됩니다.

    • InputMode – 사용자 발화 유형입니다. 유효한 값은 Speech, DTMF 또는 Text입니다.

    • interpretations – Amazon Lex V2가 사용자 발화로부터 결정하는 해석입니다.

    • requestAttributes – 람다 함수를 사용하여 요청 속성을 수정하지 않았다면, 이 속성은 대화 시작 시 전달된 것과 동일합니다.

    • sessionId – 대화에 사용되는 세션 식별자입니다.

    • sessionState – Amazon Lex V2를 사용한 사용자 세션의 상태입니다.

  • TranscriptEvent – 사용자가 애플리케이션에 입력을 제공하는 경우, 이 이벤트에는 사용자가 봇에게 말한 내용의 대화 기록이 포함됩니다. 사용자 입력이 없는 경우 애플리케이션은 TranscriptEvent를 수신하지 않습니다.

    애플리케이션으로 전송되는 트랜스크립트 이벤트의 값은 대화 모드로 오디오(음성 및 DMTF) 또는 텍스트를 지정했는지 여부에 따라 달라집니다.

    • 음성 입력 대화 기록 – 사용자가 봇과 대화하고 있는 경우 대화 기록 이벤트는 사용자 오디오의 트랜스크립션입니다. 이는 사용자가 말을 시작한 시점부터 말을 끝낼 때까지의 모든 음성 대화를 기록한 것입니다.

    • DTMF 입력의 대화 기록 – 사용자가 키패드로 타이핑하는 경우 대화 기록 이벤트에는 사용자가 입력에서 누른 모든 숫자가 포함됩니다.

    • 텍스트 입력의 대화 기록 – 사용자가 텍스트 입력을 제공하는 경우 대화 기록 이벤트에는 사용자 입력의 모든 텍스트가 포함됩니다.

  • TextResponseEvent – 봇 응답을 텍스트 형식으로 포함합니다. 기본적으로 텍스트 응답이 반환됩니다. Amazon Lex V2가 오디오 응답을 반환하도록 구성한 경우 이 텍스트는 오디오 응답을 생성하는 데 사용됩니다. 각 텍스트 응답 이벤트에는 봇이 사용자에게 반환하는 메시지 객체 배열이 포함됩니다.

  • AudioResponseEventTextResponseEvent에서 생성된 텍스트에서 합성된 오디오 응답을 포함합니다. 오디오 응답 이벤트를 수신하려면 오디오 응답을 제공하도록 Amazon Lex V2를 구성해야 합니다. 모든 오디오 응답 이벤트는 동일한 오디오 형식을 갖습니다. 각 이벤트에는 100바이트 이하의 오디오 청크가 포함됩니다. Amazon Lex V2는 오디오 응답 이벤트가 종료되었음을 나타내는 bytes 필드가 null로 설정된 빈 오디오 청크를 애플리케이션에 전송합니다.

  • PlaybackInterruptionEvent – 봇이 애플리케이션에 보낸 응답을 사용자가 중단하면 Amazon Lex V2가 이 이벤트를 트리거하여 응답 재생을 중지합니다.

  • HeartbeatEvent – Amazon Lex V2는 애플리케이션과 봇 간의 연결 제한 시간이 초과되지 않도록 이 이벤트를 주기적으로 다시 전송합니다.

오디오 대화에 대한 이벤트의 시간 순서

다음 다이어그램은 사용자와 Amazon Lex V2 봇 간의 스트리밍 오디오 대화를 보여줍니다. 애플리케이션은 봇에 지속적으로 오디오를 스트리밍하고, 봇은 오디오에서 사용자 입력을 찾습니다. 이 예에서 사용자와 봇은 모두 음성을 사용하여 통신합니다. 각 다이어그램은 사용자 발화 및 해당 발화에 대한 봇의 반응에 해당합니다.

다음 다이어그램은 애플리케이션과 봇 간의 대화 시작을 보여줍니다. 스트림은 타임 0(t0)에 시작됩니다.

다음 목록은 위 다이어그램의 이벤트에 대해 설명합니다.

  • t0: 애플리케이션이 봇에 구성 이벤트를 전송하여 스트림을 시작합니다.

  • t1: 애플리케이션이 오디오 데이터를 스트리밍합니다. 이 데이터는 애플리케이션에서 일련의 입력 이벤트로 나뉩니다.

  • t2: 사용자 발화 1의 경우 사용자가 말하기 시작하면 봇이 오디오 입력 이벤트를 감지합니다.

  • t2: 사용자가 말하는 동안 봇은 연결을 유지하기 위해 하트비트 이벤트를 보냅니다. 연결이 시간 초과되지 않도록 이러한 이벤트를 간헐적으로 전송합니다.

  • t3: 봇은 사용자 발화의 끝을 감지합니다.

  • t4: 봇은 사용자 음성의 대화 기록이 포함된 대화 기록 이벤트를 애플리케이션에 다시 전송합니다. 이는 사용자 발화 1에 대한 Bot의 응답의 시작입니다.

  • t5: 봇은 의도 결과 이벤트를 전송하여 사용자가 수행하고자 하는 작업을 나타냅니다.

  • t6: 봇이 텍스트 응답 이벤트에서 응답을 텍스트로 제공하기 시작합니다.

  • t7: 봇은 일련의 오디오 응답 이벤트를 애플리케이션에 전송하여 사용자를 위해 재생합니다.

  • t8: 봇은 연결을 간헐적으로 유지하기 위해 또 다른 하트비트 이벤트를 보냅니다.

다음 다이어그램은 이전 다이어그램과 이어집니다. 애플리케이션이 봇에 재생 완료 이벤트를 전송하여 사용자에 대한 오디오 응답 재생을 중지했음을 알리는 것을 보여줍니다. 애플리케이션은 사용자 발화 1에 대한 봇 응답을 사용자에게 재생합니다. 사용자는 사용자 발언 1에 대한 봇의 응답사용자 발화 2로 응답합니다.

다음 목록은 위 다이어그램의 이벤트에 대해 설명합니다.

  • t10: 애플리케이션이 사용자에게 봇의 메시지 재생을 완료했음을 알리는 재생 완료 이벤트를 보냅니다.

  • t11: 애플리케이션은 사용자의 응답인 사용자 발화 2를 봇에 다시 보냅니다.

  • t12: 사용자 발화 2에 대한 봇 응답의 경우, 봇은 사용자가 말을 멈출 때까지 기다린 다음 음성 응답을 제공하기 시작합니다.

  • t13: 봇이 사용자 발화 2에 대한 봇 응답을 애플리케이션에 보내는 동안 봇은 사용자 발화 3의 시작을 감지합니다. 봇은 사용자 발화 2에 대한 봇의 응답을 중지하고 재생 중단 이벤트를 보냅니다.

  • t14: 봇은 재생 중단 이벤트를 애플리케이션에 전송하여 사용자가 프롬프트를 중단했음을 알립니다.

다음 다이어그램은 사용자 발화 3에 대한 봇의 응답과 봇이 사용자 발화에 응답한 후에도 대화가 계속되는 것을 보여줍니다.