Kakao i Agent::구현 시나리오::연속된 명령어 자동실행

페이지 이동경로

연속된 명령어 자동실행

연속된 명령어 자동실행은 사용자 발화에 2개 이상의 의도를 가진 문장이 병렬로 포함된 경우 해당 명령을 순차적으로 실행하는 기능입니다. 예를 들어 “회사로 길안내하고 열선시트 3단으로 설정해줘”와 같은 명령어는 “회사로 길안내해줘”와 “열선시트 3단으로 설정해줘” 2개의 명령으로 분석되어 실행됩니다. 연속된 명령어 묶음은 1개의 워크플로우로 생성되며, 워크플로우 시작 → 명령어 1(“회사로 길안내해줘”) 수행 → 명령어 2(“열선시트 3단으로 설정해줘”) 수행 → 워크플로우 종료의 단계로 진행됩니다.

안내
연속된 명령어 실행이 가능한 명령의 조합은 에이전트가 실행되는 서비스마다 다르게 구성될 수 있습니다.

사용자가 “회사로 길 안내하고 열선시트 3단으로 설정해줘” 라고 발화한 경우, “회사로 길안내해줘"와 “열선시트 3단으로 설정해줘" 명령이 순차적으로 동작됩니다. “회사로 길안내해줘"에 대한 답변이 제공된 후, “열선시트 3단으로 설정해줘”에 대한 답변이 제공되는 과정은 다음 시나리오와 같습니다.

Wake Up

Wake Up 시나리오 그림Wake Up 시나리오

  1. 사용자가 Wake-up 버튼을 누릅니다.

  2. Service Agent는 발화 효과음 “띠링”과 함께 발화가 시작되었음을 인식하는 Recognizer.Speech Event를 KVS(Kakao i Virtual Service)에 전송합니다.

    Recognizer.Speech
    구분 설명
    Interface Recognizer.Speech: Service Agent에서 발생한 사용자 발화를 KVS에 전달
    메시지 타입: Event
    인터페이스 타입: Recognizer
    인터페이스: Speech
    Body type으로 구성됨
    type: BUTTON_TAP
    안내
    Service Agent에서 발화 인식 기준이 미달되었지만 KVS에서 인식 기준을 충족했을 경우, Service Agent는 KVS로부터 전달받은 Recognizer.InformRecognized Instruction의 데이터를 기준으로 발화를 인식합니다.

음성 명령

음성 명령 시나리오 예시 그림음성 명령 시나리오 예시

음성 명령 인식 시작

  1. 사용자가 “회사로 길안내하고 열선시트 3단으로 설정해줘” 라고 음성 명령을 합니다.

  2. KVS가 음성 명령이 시작되었음을 인식하고 Recognizer.InformRecognized Instruction을 Service Agent에 전송합니다. * Recognizer.InformRecognized Instruction은 음성 인식 중간 결과와 최종 결과를 Service Agent에 전달해주는 인터페이스이며, 각 단계별 인식 결과를 전송할 때 type을 특정하여 전송합니다.

    Recognizer.InformRecognized
    구분 설명
    Interface Recognizer.InformRecognized: KVS가 음성 인식 진행 중간/최종 결과를 Service Agent에 전달
    메시지 타입: Instruction
    인터페이스 타입: Recognizer
    인터페이스: InformRecognized
    Body type, text으로 구성됨
    type: BPD(인식 시작)
    text: BPD
    type: PARTIAL(인식 중)
    text: 회사로, 회사로 길안내하고, 회사로 길안내하고 열선시트, 회사로 길안내하고 열선시트 3단으로 설정해줘
    type: EPD(인식 종료)
    text: EPD
    안내
    Recognizer.InformRecognized의 Body 타입에 사용되는 약자와 의미는 다음과 같습니다.
    BPD(Begin Point Detection): 사용자가 발화를 시작하는 것으로 판단
    PARTIAL(Partial Result): 사용자가 발화를 끝내기 전의 중간 인식 결과
    EPD(End Point Detection): 사용자가 발화를 종료한 것으로 판단
    FINAL(Final Result): 사용자가 발화한 음성의 최종 결과

음성 명령 캡처 중지

  1. KVS가 전달받은 음성을 통해 완전한 명령어를 인식하면, Service Agent에게 음성 캡처 중지를 요청하는 Recognizer.StopCapture Instruction을 전송합니다.

    • Service Agent는 Recognizer.StopCapture Instruction을 전달받으면 즉시 마이크를 닫습니다.
    Recognizer.StopCapture
    구분 설명
    Interface Recognizer.StopCapture: KVS가 사용자의 의도를 파악했거나 명령어 인식을 종료할 때 사용자의 음성 캡처를 중지하도록 Service Agent에 지시
    메시지 타입: Instruction
    인터페이스 타입: Recognizer
    인터페이스: StopCapture

음성 명령 인식 완료

KVS는 음성 명령어 인식을 완료하면 최종 인식 결과를 Recognizer.InformRecognized(type: FINAL) Instruction을 통해 Service Agent에 전달합니다.

Recognizer.InformRecognized
구분 설명
Interface Recognizer.InformRecognized: KVS가 음성 인식 진행 중간 결과와 최종 결과를 Service Agent에 전달하는 Instruction
메시지 타입: Instruction
인터페이스 타입: Recognizer
인터페이스: InformRecognized
Body type, text로 구성됨
type: FINAL(인식 완료)
text: 회사로 길안내하고 열선시트 3단으로 설정해줘

워크플로우 시작

워크플로우 시작 그림워크플로우 시작 시나리오

  1. 워크플로우가 시작되면 Service Agent로 Workflow.CheckIn Instruction가 전달됩니다.

    Workflow.CheckIn
    구분 설명
    Interface Workflow.CheckIn: 순차적인 명령의 묶음인 워크플로우가 시작할 때 발생하는 Instruction
    메시지 타입: Instruction
    인터페이스 타입: Workflow
    인터페이스: CheckIn
    Body token, ttl로 구성됨
    token:kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711506.coord
    ttl: 3600000

명령어 1(회사로 길 안내하고)

명령어 1(회사로 길안내하고) 시나리오 그림명령어 1(회사로 길안내하고) 시나리오 예시

  1. 명령어 1의 진행 준비를 위해, idle 상태를 구독하는 System.SubscribeNextIdle Instruction가 Service Agent로 전달됩니다.

    System.SubscribeNextIdle
    구분 설명
    Interface System.SubscribeNextIdle: Service Agent의 유휴 상태가 일정 시간 이상 지속될 때 KVS가 Service Agent에 전송
    메시지 타입: Instruction
    인터페이스 타입: System
    인터페이스: SubscribeNextIdle
    Body idleType, interval, token, ttl로 구성됨
    idleType: DIALOG_PLAY
    interval: 1500
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord
    ttl: 60000
  2. Service Agent에서 1단계에 대한 응답으로써 System.Idle Event로 음성대화 진행이 없고 진행이 가능한 상태임을 KVS로 전송합니다.

    System.Idle
    구분 설명
    System.Idle System.Idle: System.SubscribeNextIdle Instruction에서 주어진 interval 동안 Service Agent의 유휴 상태가 지속될 경우 Service
    메시지 타입: Event
    인터페이스 타입: System
    인터페이스: Idle
    Body token으로 구성됨
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord
  3. KVS는 명령어 1을 진행하기 전에 효과음을 재생하기 위한 Synthesizer.Speak Instruction와 다음 단계 진행을 위한 System.SubscribeNextIdle Instruction를 Service Agent로 전송합니다.

    Synthesizer.Speak
    구분 설명
    Synthesizer.Speak Synthesizer.Speak: Service Agent에게 음성 응답이 필요할 때마다 KVS가 Service Agent에 전달
    메시지 타입: Instruction
    인터페이스 타입: Synthesizer
    인터페이스: Speak
    Body url로 구성됨
    url: 효과음 URL
    System.SubscribeNextIdle
    구분 설명
    Interface System.SubscribeNextIdle: Service Agent의 유휴 상태가 일정 시간 이상 지속될 때 KVS가 Service Agent에 전송
    메시지 타입: Instruction
    인터페이스 타입: System
    인터페이스: SubscribeNextIdle
    Body idleType, interval, token, ttl로 구성됨
    idleType: DIALOG_PLAY
    interval: 300
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord
    ttl: 60000
  4. Service Agent는 효과음 재생을 진행한 후 System.Idle Event로 음성대화 진행이 없고 진행이 가능한 상태임을 KVS로 전송합니다. (상황에 따라 효과음 재생이 필요 없다고 판단되면 3, 4단계는 스킵 되고 바로 5단계로 진행될 수 있습니다.)

    System.Idle
    구분 설명
    Interface System.Idle: System.SubscribeNextIdle Instruction에서 주어진 interval 동안 Service Agent의 유휴 상태가 지속될 경우 Service
    메시지 타입: Event
    인터페이스 타입: System
    인터페이스: Idle
    Body token으로 구성됨
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord
  5. KVS는 명령어 1(회사로 길안내하고)의 실행을 요청하기 위해 Service Agent에 Recognizer.RequestText Instruction을 전송하고, 명령어 1의 대화가 끝나면 다음 단계를 진행할 수 있도록 System.SubscribeNextIdle Instruction을 Service Agent로 전송해둡니다.

    Recognizer.RequestText
    구분 설명
    Interface Recognizer.RequestText: KVS가 Service Agent로 Text Event를 보내도록 요청하는 Instruction
    메시지 타입: Instruction
    인터페이스 타입: Recognizer
    인터페이스: RequestText
    Body utterance, triggerType으로 구성됨
    utterance: 회사로 길안내하고
    triggerType: WORKFLOW
    System.SubscribeNextIdle
    구분 설명
    Interface System.SubscribeNextIdle: Service Agent의 유휴 상태가 일정 시간 이상 지속될 때 KVS가 Service Agent에 전송
    메시지 타입: Instruction
    인터페이스 타입: System
    인터페이스: SubscribeNextIdle
    Body idleType, interval, token, ttl로 구성됨
    idleType: DIALOG_PLAY
    interval: 1500
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord
    ttl: 60000
  6. 이후는 대표 명령어의 명령어 1 설명과 동일하므로 해당 설명을 참고해주시기 바랍니다.

  7. Service Agent에서 System.Idle Event로 음성대화 진행이 없고 다음 진행이 가능한 상태임을 KVS로 전송합니다.

    System.Idle
    구분 설명
    Interface System.Idle: System.SubscribeNextIdle Instruction에서 주어진 interval 동안 Service Agent의 유휴 상태가 지속될 경우 Service
    메시지 타입: Event
    인터페이스 타입: System
    인터페이스: Idle
    Body token으로 구성됨
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord

명령어 2(열선 시트 3단으로 설정해줘)

명령어 2(열선 시트 3단으로 설정해줘) 시나리오 그림명령어 2(열선 시트 3단으로 설정해줘) 시나리오 예시

  1. KVS는 명령어 2를 진행하기 전에 효과음을 재생하기 위해 Synthesizer.Speak Instruction와 다음 단계 진행을 위한 System.SubscribeNextIdle Instruction을 Service Agent로 전송합니다.

    Synthesizer.Speak
    구분 설명
    Interface Synthesizer.Speak: Service Agent에게 음성 응답이 필요할 때마다 KVS가 Service Agent에 전달
    메시지 타입: Instruction
    인터페이스 타입: Synthesizer
    인터페이스: Speak
    Body url로 구성됨
    url: 효과음 URL
    System.SubscribeNextIdle
    구분 설명
    Interface System.SubscribeNextIdle: Service Agent의 유휴 상태가 일정 시간 이상 지속될 때 KVS가 Service Agent에 전송
    메시지 타입: Instruction
    인터페이스 타입: System
    인터페이스: SubscribeNextIdle
    Body idleType, interval, token, ttl로 구성됨
    idleType: DIALOG_PLAY
    interval: 300
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord|
    ttl: 60000
  2. Service Agent는 효과음 재생한 후 System.Idle Event로 음성대화 진행이 없고 진행이 가능한 상태임을 KVS로 전송합니다. (상황에 따라 효과음 재생이 필요 없다고 판단되는 경우 1, 2단계는 스킵 되고 바로 3단계로 진행될 수 있습니다.)

    System.Idle
    구분 설명
    Interface System.Idle: System.SubscribeNextIdle Instruction에서 주어진 interval 동안 Service Agent의 유휴 상태가 지속될 경우 Service
    메시지 타입: Event
    인터페이스 타입: System
    인터페이스: Idle
    Body token으로 구성됨
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord
  3. KVS는 명령어 2(열선시트 3단으로 설정해줘)의 실행을 요청하기 위해 Service Agent에 Recognizer.RequestText Instruction을 전송하고, 명령어 2의 대화가 끝나면 다음 단계를 진행할 수 있도록 System.SubscribeNextIdle Instruction을 Service Agent로 전송해둡니다.

    Recognizer.RequestText
    구분 설명
    Interface Recognizer.RequestText: KVS가 Service Agent로 Text Event를 보내도록 요청하는 Instruction
    메시지 타입: Instruction
    인터페이스 타입: Recognizer
    인터페이스: RequestText
    Body utterance, triggerType으로 구성됨
    utterance: 열선시트 3단으로 설정해줘
    triggerType: WORKFLOW
    System.SubscribeNextIdle
    구분 설명
    Interface System.SubscribeNextIdle: Service Agent의 유휴 상태가 일정 시간 이상 지속될 때 KVS가 Service Agent에 전송
    메시지 타입: Instruction
    인터페이스 타입: System
    인터페이스: SubscribeNextIdle
    Body idleType, interval, token, ttl로 구성됨
    idleType: DIALOG_PLAY
    interval: 1500
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord
    ttl: 60000
  4. 이후는 대표 명령어의 명령어 2 설명과 동일하므로 해당 설명을 참고하시기 바랍니다.

  5. Service Agent에서 System.Idle Event로 음성대화 진행이 없고 다음 진행이 가능한 상태임을 KVS로 전송합니다.

    System.Idle
    구분 설명
    Interface System.Idle: System.SubscribeNextIdle Instruction에서 주어진 interval 동안 Service Agent의 유휴 상태가 지속될 경우 Service
    메시지 타입: Event
    인터페이스 타입: System
    인터페이스: Idle
    Body token으로 구성됨
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711670.coord

워크플로우 종료

워크플로우 종료 그림워크플로우 종료 시나리오

  1. 워크플로우가 종료되는 것을 알리기 위해 클라이언트로 Workflow.CheckOut Instruction가 전달됩니다.

    Workflow.CheckOut
    구분 설명
    Interface Workflow.CheckOut: 순차적인 명령의 묶음인 워크플로우가 종료할 때 발생하는 Instruction
    메시지 타입: Instruction
    인터페이스 타입: Workflow
    인터페이스: CheckOut
    Body token으로 구성됨
    token: kakao/5b0e76e01073e9710dcb573e/WORKFLOW.2015924.1660711506.coord
이 문서가 만족스러운 이유를 알려주세요.
이 문서에 아쉬운 점을 알려주세요.
평가해주셔서 감사합니다.

더 자세한 의견은 contact.dkt@kakaocorp.com 으로 제보해주세요.