Actions Builder를 사용하여 Google 어시스턴트용 작업 빌드하기(레벨 2)

1. 개요

Google 어시스턴트 개발자 플랫폼을 사용하면 스마트 스피커, 스마트폰, 자동차, TV, 헤드폰 등 10억 대 이상의 기기에서 가상 개인 비서인 Google 어시스턴트의 기능을 확장하는 소프트웨어를 만들 수 있습니다. 사용자는 어시스턴트와의 대화를 통해 식료품 구매, 택시 예약과 같은 작업을 수행할 수 있습니다. 개발자는 어시스턴트 개발자 플랫폼을 사용하여 사용자와 타사 처리 서비스 간의 즐겁고 효과적인 대화 환경을 쉽게 만들고 관리할 수 있습니다.

이 Codelab에서는 Google 어시스턴트 개발을 위한 중간 수준의 개념을 다루며 레벨 1 Codelab에서 만든 작업을 기반으로 합니다. 이 Codelab을 시작하기 전에 레벨 1 Codelab을 완료하는 것이 좋습니다.

이 Codelab에서 빌드하는 작업은 사용자가 선택한 도우미를 기반으로 신비로운 땅, 그리핀버그를 누비는 사용자의 여정에 어떠한 운명이 깃들어 있는지 말해 줍니다.

빌드할 항목

이 Codelab에서는 다음과 같은 기능을 갖춘 고급 대화 작업을 빌드합니다.

  • 사용자로부터 데이터를 수집하고 값에 따라 대화 메시지를 변경합니다.
  • 대화를 진행시키기 위해 후속 질문을 사용해 대답합니다.
  • 사용자가 운세를 받은 후 작업과 다시 상호작용할 수 있도록 게임 루프를 만듭니다.

빌드를 시작하기 전에 "Hey Google, 운명의 예언자에게 말 걸어 줘"이라고 말하면 Google 어시스턴트 지원 기기에서 실시간 작업과 상호작용할 수 있습니다. 재사용자를 위한 이 작업의 기본 경로는 다음의 상호작용으로 구성됩니다.

dd6f5c61296b8b50.png

eba043f546aa8c51.png

학습할 내용

  • 슬롯을 사용하여 사용자로부터 데이터를 수집하는 방법
  • 조건을 사용하여 장면에 로직을 추가하는 방법
  • 게임 루프를 추가하는 방법
  • 지원 경로를 추가하는 방법

필요한 항목

이 Codelab에 필요한 항목은 다음과 같습니다.

이 Codelab의 처리 코드를 이해하려면 자바스크립트(ES6)를 능숙하게 다루는 것이 좋지만, 필수사항은 아닙니다.

2. 대화형 인터페이스 빌드하기

첫 번째 Codelab에서는 하나의 장면인 Start를 사용하여 간단한 대화 작업을 만들었습니다.

이번 Codelab에서는 작업의 대화를 확장합니다. 다음 섹션에서는 다음 작업을 할 수 있는 작업을 구성합니다.

  • 사용자가 운세를 듣고 싶어 하는 경우 새로운 Fortune 장면으로 전환합니다.
  • 사용자에게 자신의 여정에 동행할 도우미를 선택하라고 요청합니다.
  • 사용자의 선택에 따라 맞춤 운세를 제공합니다.

Fortune 장면 만들기

이 섹션에서는 Fortune 장면을 만들고 사용자가 대화 중에 장면으로 어떻게 전환되는지 정의합니다.

Fortune이라는 새 장면을 만들려면 다음 단계를 따르세요.

  1. Codelab 레벨 1 작업 프로젝트를 엽니다.
  2. 탐색 메뉴에서 개발을 클릭합니다.
  3. 장면에서 시작 장면을 클릭합니다.
  4. 인텐트('예'가 일치하는 경우 체크박스)를 클릭하여 옵션을 엽니다.
  5. 메시지 보내기를 지워 메시지를 삭제합니다.
  6. 전환 섹션에서 드롭다운 메뉴를 클릭하고 텍스트 상자를 클릭한 후 Fortune이라고 입력합니다.
  7. 추가를 클릭합니다. 이렇게 하면 Fortune이라는 새로운 장면이 생성되며 사용자가 운세를 듣고 싶어 하는 경우 Start 장면에서 Fortune 장면으로의 전환도 추가됩니다.

56682a0c7459b98c.png

Fortune 장면의 대화 로직 정의하기

이 Codelab에서는 사용자에게 ‘여러분의 여정에 도움을 줄 도우미를 하나 선택하세요. 드래곤, 번역사, 나침반 중에서 무엇을 선택하시겠어요?’라는 질문을 던지도록 Fortune 장면을 구성합니다. 슬롯 채우기라는 기능을 사용하여 사용자에게 필요한 정보를 수집한 후 다음으로 진행할 수 있습니다.

작업에서는 드래곤, 번역사, 나침반이라는 세 가지 도우미에 관한 운세를 제공합니다. 사용자의 입력에서 이 세 가지 옵션을 파악할 수 있도록 작업을 구성하려면 반드시 새로운 유형을 만들어야 합니다.

장면의 슬롯 채우기 스테이지에서 유형을 사용하여 사용자로부터 원하는 정보를 정의할 수 있습니다. NLU 엔진이 사용자 입력에서 슬롯 일치를 감지하면 슬롯을 입력된 매개변수로 추출하므로 이 장면에서 슬롯을 사용해 로직을 실행할 수 있습니다.

available_options 유형 만들기

이 섹션에서는 사용자가 메시지에 대한 응답으로 선택할 수 있는 세 가지 옵션(드래곤, 번역사, 나침반)을 지정하는 새로운 유형, available_options를 만듭니다. 또한 사용자가 유사한 내용을 말하는 경우에 대비하여 이러한 옵션의 동의어 몇 가지도 정의합니다. 이후 섹션에서 available_options 유형을 슬롯에 추가하여 사용자가 선택한 항목을 확보하고 싶다고 명시하게 됩니다.

available_options 유형을 만들려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 유형을 클릭합니다.
  2. + (더하기) 기호를 클릭하고 available_options라고 입력한 다음 Enter 키를 누릅니다.
  3. available_options를 클릭하여 옵션을 엽니다.

유형은 정보의 키-값 쌍으로 구성되며, 여기에서 는 유형 이름이고 은 해당 키의 동의어입니다. 키를 정의하면 값이 자동으로 추가됩니다.

사용자가 선택할 수 있는 세 가지 옵션을 추가하려면 다음 단계를 따르세요.

  1. 항목 추가 섹션으로 스크롤합니다.
  2. 새 항목 필드에 dragon을 입력하고 Enter 키를 누릅니다. 이 작업을 통해 dragon 키가 생성됩니다.
  3. 값 추가 필드에 hydra라고 입력하고 Enter 키를 눌러 값(동의어)으로 추가합니다. 그런 다음 lizard 값에 이 단계를 반복합니다.
  4. 나머지 키와 해당 값을 추가합니다.
  • translator | translator, communicator, machine, decoder, translate
  • compass | compass, direction, guide

8333b1b67445f21.png

  1. 저장을 클릭합니다.

이제 작업에서 available_options가 드래곤, 통역사, 나침반임을 이해하며 이에 해당하는 몇 가지 동의어도 인식할 수 있습니다.

슬롯 채우기 구성하기

이제 Fortune 장면에 슬롯 채우기를 구성해야 합니다. 슬롯 채우기 로직을 구성하려면 다음 단계를 따르세요.

  1. 탐색 메뉴의 장면에서 Fortune을 클릭합니다.
  2. Fortune 장면에서 슬롯 채우기+(더하기) 기호를 클릭합니다.
  3. 슬롯 이름 입력 필드에 chosenOptions를 슬롯 이름으로 추가합니다.
  4. 유형 선택 드롭다운 목록에서 슬롯 유형으로 available_options를 선택합니다.
  5. 필수 슬롯입니다 체크박스를 선택합니다.

a461b906476e244.png

  1. 메시지 보내기를 선택하고 다음의 메시지 및 추천 칩을 추가합니다.
candidates:
  - first_simple:
      variants:
        - speech: >-
            What do you choose to help you on your quest, a dragon, a
            translator, or a compass?
    suggestions:
      - title: 'Dragon'
      - title: 'Translator'
      - title: 'Compass'
  1. 저장을 클릭합니다.

이제 available_options 유형이 슬롯에 추가되었습니다. 이 유형은 작업에 다음으로 진행하기 전에 사용자로부터 수집해야 하는 정보(도우미 선택)를 알립니다. 또한 슬롯 내의 메시지도 구성했는데, 이 메시지는 사용자가 장면의 슬롯 채우기 스테이지에 도달하는 시점의 메시지 대기열에 추가되었습니다.

슬롯의 이름을 chosenOptions로 지정하면 슬롯 값 재작성 맞춤설정 필드가 동일한 이름 ($session.params.chosenOptions)으로 업데이트됩니다. Actions Builder 및 클라이언트 라이브러리 처리에서 해당 이름으로 이 매개변수에 액세스할 수 있습니다.

scene.slots.status == "FINAL" 조건 구성하기

슬롯을 추가하면 scene.slots.status == "FINAL" 조건이 조건 목록에 자동으로 추가됩니다.

scene.slots.status == "FINAL" 조건은 슬롯 채우기가 완료되었는지 확인합니다. 모든 슬롯이 채워지면 조건을 사용해 웹훅을 트리거하거나, 새로운 장면으로 전환하거나, 메시지 대기열에 메시지를 추가할 수 있습니다.

이 섹션에서는 슬롯이 채워지면 메시지 대기열에 메시지를 추가하도록 scene.slots.status == "FINAL"을 구성합니다.

이 메시지를 FINAL 조건에 추가하려면 다음 단계를 따르세요.

  1. scene.slots.status == "FINAL" 아이콘을 클릭하여 옵션 창을 엽니다.
  2. 메시지 보내기를 선택하고 다음 메시지를 추가합니다.
candidates:
  - first_simple:
      variants:
        - speech: You picked $session.params.chosenOptions.
  1. 저장을 클릭합니다.

시뮬레이터에서 작업 테스트하기

이제 사용자가 슬롯을 채울 때 선택해야 하는 옵션을 정의했습니다. 사용자로부터 이 정보를 획득하면 작업에서 사용자가 선택한 특정 옵션을 참조하는 메시지를 제공해야 합니다.

작업을 테스트하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 테스트를 클릭합니다.
  2. 입력 필드에서 Talk to my test app을 클릭하거나 입력하고 Enter 키를 누릅니다.
  3. 입력 필드에 Yes를 입력하고 Enter 키를 누릅니다. 또는 추천 칩을 클릭해도 됩니다.

a899d45c542668f6.png

  1. dragon를 클릭하거나, 입력하거나, 말합니다. ‘드래곤을 선택하셨습니다.’라는 메시지가 표시됩니다.

다음 섹션에서 사용자가 선택할 수 있는 각 지원 방법에 대한 메시지를 맞춤설정합니다.

조건을 사용하여 메시지 맞춤설정하기

이 섹션에서는 사용자가 선택할 수 있는 각 옵션에 조건을 추가하고 각 조건에 대한 맞춤 메시지를 추가합니다.

dragon 운세 맞춤설정하기

조건을 업데이트하고 사용자가 '드래곤'을 선택한 경우의 메시지를 맞춤설정하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 개발을 클릭합니다.
  2. 탐색 메뉴에서 Fortune 장면을 클릭합니다.
  3. scene.slots.status == "FINAL" 아이콘을 클릭하여 옵션 창을 엽니다.
  4. 조건문을 scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"으로 업데이트합니다.
  5. 메시지 보내기를 선택합니다.
  6. 코드 편집기에서 다음 운세를 사용하여 메시지를 업데이트합니다.
candidates:
  - first_simple:
      variants:
        - speech: >-
            The people of Gryffinberg will be awestruck by the beauty and power
            of the ancient dragon. Much to your dismay, the townspeople fall
            into dispute over who will receive the honor of riding the dragon
            first. You return home from your quest without everlasting glory or
            a dragon.
  1. 저장을 클릭합니다.

d31767232ad908bd.png

이제 사용자가 '드래곤'이라고 말하거나 이와 비슷한 소리가 나는 단어를 말했을 때 작업에서 사용자의 선택에 따라 운세를 제공합니다. 이어서 나머지 두 개의 선택지를 추가합니다.

translator 운세 맞춤설정하기

조건을 업데이트하고 사용자가 '통역사'를 선택한 경우의 메시지를 맞춤설정하려면 다음 단계를 따르세요.

  1. 조건 옆에 있는 +(더하기) 기호를 클릭합니다.
  2. 다른 선택 필드에 scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"를 추가합니다.
  3. 메시지 보내기를 선택합니다.
  4. 코드 편집기에 다음 메시지를 추가합니다.
candidates:
  - first_simple:
      variants:
        - speech: >-
            With the help of the translator, the rival factions in Gryffinberg
            are finally able to communicate with each other and resolve their
            disputes. You will complete your quest to restore peace in the town.
            The translator will be used on many subsequent journeys across the
            earth. After its work is done, it retires honorably to a premier
            location in the Gryffinberg History Museum.
  1. 저장을 클릭합니다.

c1af65e70dbf3dfe.png

compass 운세 맞춤설정하기

조건을 업데이트하고 사용자가 '나침반'을 선택한 경우의 메시지를 맞춤설정하려면 다음 단계를 따르세요.

  1. 조건 옆에 있는 +(더하기) 기호를 클릭합니다.
  2. 다른 선택 텍스트 상자에 scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"를 추가합니다.
  3. 메시지 보내기를 선택합니다.
  4. 코드 편집기에 다음 메시지를 추가합니다.
candidates:
  - first_simple:
      variants:
        - speech: >-
            The compass will help you find the mystical and ancient Library of
            Gryffinberg. Among its infinite stacks of dusty books, you find one
            entitled "Wisdom of the Ages". By the time you've read the
            50,000-page tome, the townspeople have forgotten their problems. You
            will write a second edition of "Wisdom of the Ages", but have
            limited commercial success.
  1. 저장을 클릭합니다.

시뮬레이터에서 작업 테스트하기

이 시점에서 작업은 사용자가 선택하는 옵션에 맞게 맞춤 운세를 제공해야 합니다.

작업을 테스트하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 Test를 클릭합니다.
  2. 입력 필드에 Talk to my test app을 입력하고 Enter 키를 누릅니다.
  3. 입력 필드에 Yes를 입력하고 Enter 키를 누릅니다. 또는 추천 칩을 클릭합니다.
  4. Translator을 클릭하거나, 입력하거나, 말합니다.

29e17f950bd0dd71.png

'번역사' 옵션에 적합한 운세가 제공되어야 합니다.

3. 게임 루프 추가하기

이 섹션에서는 사용자가 선택한 후에도 다른 옵션을 선택하고 다른 운세를 들을 수 있도록 작업을 구성합니다. 이 변경사항은 게임이 끝날 때 표시되는 '다시 플레이하시겠습니까?' 메시지와 비슷합니다. 이 루프를 빌드하려면 이전에 만든 yesno 인텐트를 다시 사용하고 Again이라는 새로운 장면에 추가하면 됩니다.

Again 장면 만들기

이 섹션에서는 새로운 Again 장면을 만들고 사용자에게 다른 옵션을 선택할 것인지 묻는 메시지를 추가합니다.

Again 장면을 만들려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 개발을 클릭합니다.
  2. 장면에서 +(더하기) 기호를 클릭합니다.
  3. Again이라고 입력하고 Enter 키를 누릅니다.
  4. 탐색 메뉴에서 Again 장면을 클릭합니다.
  5. Enter 키 입력 시 옆의 +(더하기)기호를 클릭합니다.
  6. 메시지 보내기를 선택하고 다음의 메시지 및 추천 칩을 추가합니다.
candidates:
  - first_simple:
      variants:
        - speech: >-
            That is what I see for you. Would you like to choose a different option and
            explore another future?
    suggestions:
      - title: 'Yes'
      - title: 'No'
  1. 저장을 클릭합니다.

Fortune에서 Again 장면으로의 전환 추가하기

사용자가 운세를 받은 다음 대화가 새로운 Again 장면으로 전환되어야 합니다.

Fortune 장면에서 Again 장면으로의 전환을 추가하려면 다음 단계를 따르세요.

  1. Fortune 장면을 클릭합니다.
  2. 첫 번째 조건 (scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon")을 클릭하여 옵션 창을 엽니다.
  3. 스크롤하여 전환에서 Again을 선택합니다.
  4. 저장을 클릭합니다.
  5. 두 번째 조건을 클릭하여 옵션 창을 엽니다.
  6. 스크롤하여 전환에서 Again을 선택합니다.
  7. 저장을 클릭합니다.
  8. 세 번째 조건을 클릭하여 옵션 창을 엽니다.
  9. 스크롤하여 전환에서 Again을 선택합니다.
  10. 저장을 클릭합니다.

시뮬레이터에서 작업 테스트하기

이 시점에서 작업은 운세를 받은 사용자에게 다음과 같은 메시지를 제공해야 합니다. ‘제게 보인 당신의 운명을 들려드렸습니다. 다른 옵션을 선택하고 다른 미래를 살펴보시겠어요?’

작업을 테스트하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 Test를 클릭합니다.
  2. 입력 필드에 Talk to my test app을 입력하고 Enter 키를 누릅니다.
  3. 입력 필드에 Yes를 입력하고 Enter 키를 누릅니다. 또는 추천 칩을 클릭합니다.
  4. dragon을 클릭하거나, 입력하거나, 말합니다.

b299e9fed9aedb69.png

드래곤 옵션에 해당하는 운세와 Again 메시지가 표시되어야 합니다.

인텐트 추가 및 Again 장면 전환하기

이 섹션에서는 작업이 사용자가 새로운 옵션을 선택하고 싶은지 이해할 수 있도록 Again 장면에 yesno 인텐트를 추가합니다. 또한 yesno 인텐트에 적절한 전환도 추가합니다. yes 인텐트가 Fortune 장면으로 전환되고 no 인텐트는 시스템 장면 End conversation으로 전환됩니다.

Again 장면에 인텐트와 전환을 추가하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 개발을 클릭합니다.
  2. Again 장면을 클릭합니다.
  3. 사용자 인텐트 처리 옆에 있는 +(더하기) 기호를 클릭합니다.
  4. 인텐트 드롭다운 메뉴에서 를 선택합니다.
  5. 전환 드롭다운 메뉴에서 Fortune을 선택합니다.
  6. 저장을 클릭합니다.

c2efba35ea881b0d.png

  1. 사용자 인텐트 처리 옆에 있는 +(더하기) 기호를 클릭합니다.
  2. 인텐트 드롭다운 메뉴에서 아니요를 선택합니다.
  3. 전환 드롭다운 메뉴에서 대화 종료를 선택합니다.
  4. 메시지 보내기를 선택하고 코드 편집기에 다음 메시지를 추가합니다.
candidates:
  - first_simple:
      variants:
        - speech: >-
            It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell.
  1. 저장을 클릭합니다.

시뮬레이터에서 작업 테스트하기

이제 작업에서 사용자가 새로운 옵션을 선택하고자 하는지, 아니면 대화를 종료하고자 하는지 결정해야 합니다.

yes 인텐트를 테스트하려면 다음 안내를 따르세요.

  1. 탐색 메뉴에서 테스트를 클릭합니다.
  2. 입력 필드에 Talk to my test app을 입력하고 Enter 키를 누릅니다.
  3. 입력 필드에 Yes를 입력하고 Enter 키를 누릅니다. 또는 추천 칩을 클릭합니다.
  4. 옵션 중 하나를 클릭하거나, 입력하거나, 말합니다.
  5. 입력 필드에 Yes를 입력하고 Enter 키를 누릅니다.

5d0690332efe2e29.png

‘여러분의 여정에 도움을 줄 도우미를 하나 선택하세요. 드래곤, 번역사, 나침반 중에서 무엇을 선택하시겠어요?’라는 메시지가 표시됩니다.

no 인텐트를 테스트하려면 다음 안내를 따르세요.

  1. 옵션 중 하나를 클릭하거나, 입력하거나, 말합니다.
  2. 입력란에 No를 입력하고 Enter 키를 누릅니다.

다음과 같은 End conversation 메시지가 표시됩니다. ‘만족스러운 선택을 하셨다니 저도 기쁩니다. 당신의 여행에 행운이 깃들기 바랍니다. 그럼 안녕히.’

4. 보조 경로 추가하기

이제 작업에서 대부분의 사용자가 선택할 기본 경로를 빌드했습니다. 하지만 사용자가 Fortune 장면의 프롬프트에 응답할 수 있습니다. '여러분의 여정에 도움을 줄 도우미를 하나 선택하세요. 드래곤, 번역사, 나침반 중에서 무엇을 선택하시겠어요?'는 제공된 옵션 중 하나가 아닌 다른 항목을 사용합니다.

이 섹션에서는 사용자가 언제 '마법', '돈', '말'을 선택하는지 이해하고 사용자가 이러한 옵션 중 하나를 선택하면 원래 제공되는 세 가지 선택지 중 하나를 선택하라는 메시지를 표시하도록 작업을 구성합니다. 이 로직을 구성하려면 다른 선택지를 포함하는 새로운 type과 사용자가 이러한 옵션 중 하나를 말했을 때 일치하는 새로운 인텐트 other_option을 만들어야 합니다. 또한 인텐트 매개변수를 식별하고 추출할 수 있도록 other_option 인텐트 내의 학습 문구에 주석을 추가해야 합니다.

어시스턴트의 자연어 처리 (NLU) 엔진이 사용자 입력에서 매개변수 일치를 감지하면 이 값을 입력된 매개변수로 추출하므로 이 장면에서 슬롯을 사용해 로직을 실행할 수 있습니다. 이 Codelab에서는 사용자가 선택한 도우미를 추출하고 메시지에서 사용자가 선택한 도우미를 참조할 수 있도록 작업을 구성합니다.

unavailable_options 유형 만들기

이제 작업이 사용자 입력에서 데이터를 식별할 수 있도록 다양한 옵션을 포함하고 있는 unavailable_options 유형을 만들 수 있습니다.

unavailable_options 유형을 만들려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 개발을 클릭합니다.
  2. 유형에서 +(더하기) 기호를 클릭합니다.
  3. unavailable_options라고 입력하고 Enter 키를 누릅니다.
  4. unavailable_options를 클릭하여 옵션을 엽니다.
  5. 항목 추가 섹션에 다음 항목 및 항목에 해당하는 값을 입력합니다.

horse

horse, stallion, steed

magic

magic, enchanted, spells

money

money, cash, gold

phone

phone, cell, apps

키-값 표는 다음과 같이 표시됩니다.

c9e119e0f5fb2a47.png

  1. 저장을 클릭합니다.

other_option 인텐트 만들기

다음으로 other_option이라는 인텐트를 만들고 unavailable_options 유형의 옵션을 포함하는 학습 문구를 추가합니다. 이 인텐트는 사용자가 unavailable_options 유형에 포함된 항목을 선택할 때 일치됩니다.

other_option 인텐트를 만들고 구성하려면 다음 단계를 따르세요.

  1. Custom Intents에서 + (더하기 기호)를 클릭합니다.
  2. other_option이라고 입력하고 Enter 키를 누릅니다.
  3. other_option을 클릭하여 창을 엽니다.
  4. 다음 학습 문구를 추가하고 문구가 끝날 때마다 Enter 키를 누릅니다.
  • I want to use spells
  • I really really want to use a phone
  • magic!
  • cash
  • I want to ride a horse
  1. 인텐트 매개변수 추가 섹션에서 매개변수 이름을 chosenUnavailableOption으로 업데이트합니다.
  2. 저장을 클릭합니다.

학습 문구를 입력하면 Actions Builder가 unavailable_options 유형에서 spells, phone, magic, cash, horse를 인식하여 이러한 단어를 자동으로 강조 표시(주석)합니다. Actions Builder는 다음 이미지에서 표시된 것과 같이 인텐트 매개변수 추가 섹션에 인텐트 매개변수를 자동으로 추가합니다.

인텐트 매개변수를 사용하면 옵션 이름을 추출하고 메시지에서 이 옵션을 사용할 수 있습니다.

df61d4489f0910.png

Fortune 장면에 other_option 인텐트 추가하기

이제 other_option 인텐트로 사용자가 원래 옵션 중 하나가 아닌 옵션을 지정했을 때 이를 처리할 수 있습니다. 이 섹션에서는 Fortune 장면에 other_option 인텐트를 추가합니다. 인텐트 매개변수를 사용하여 사용자의 입력에 따라 메시지를 맞춤설정하세요.

Fortune 장면에 other_option 인텐트를 추가하려면 다음 단계를 따르세요.

  1. Fortune 장면을 클릭합니다.
  2. 사용자 인텐트 처리 옆에 있는 +(더하기) 기호를 클릭합니다.
  3. 인텐트 드롭다운 메뉴에서 other_option을 선택합니다.
  4. 메시지 보내기를 선택하고 다음 메시지를 추가합니다.
candidates:
  - first_simple:
      variants:
        - speech: >-
            I have seen the future and a $intent.params.chosenUnavailableOption.original
            will not aid you on your journey. 

$intent.params.chosenUnavailableOption 표현식은 인텐트 매개변수 객체를 참조하며 $intent.params.chosenUnavailableOption.original은 해당 객체의 값을 참조합니다. original property는 사용자가 지정하는 원시 입력을 나타냅니다.

  1. 저장을 클릭합니다.

4bab1efbe21056aa.png

사용자가 Fortune 장면에서 unavailable_options 유형에 나열된 옵션을 말하면 other_option 인텐트가 일치되고 메시지 대기열에 메시지가 추가됩니다. 지정된 전환이 없으므로 장면 실행 루프는 조건 스테이지를 재평가하여 계속됩니다. 그런 다음 chosenOptions 슬롯이 메시지 대기열에 메시지를 추가하며, 메시지 대기열이 사용자에게 전달됩니다.

시뮬레이터에서 작업 테스트하기

이제 사용자가 unavailable_options 유형에 명시된 옵션 중 하나를 선택하면 작업에서 적절히 응답하고 사용자가 선택한 도우미를 지정할 수 있어야 합니다. 그런 다음 작업에서 사용자에게 드래곤, 번역사, 나침반 등 원래 선택지 중 하나를 선택하라는 메시지를 표시해야 합니다.

시뮬레이터에서 작업을 테스트하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 테스트를 클릭합니다.
  2. 입력 필드에 Talk to my test app을 입력하고 Enter 키를 누릅니다.
  3. 입력 필드에 Yes를 입력하고 Enter 키를 누릅니다. 또는 추천 칩을 클릭합니다.
  4. 입력 필드에 magic을 입력하고 Enter 키를 누릅니다.

3a42c33eca435f32.png

사용자가 '마법'을 선택하면 그 앞에 붙은 정관사 'a' 때문에 메시지가 올바르지 않게 표시되지 않습니다. 다음 섹션에서 이 문제를 해결합니다.

unavailable_options 핸들러 추가하기

unavailable_options 유형에서 선택할 수 있는 항목 앞에 'a' 정관사를 붙이려면 사용자가 선택한 옵션 앞에 'a'가 필요한지 확인할 수 있도록 처리 로직의 이벤트 핸들러를 구성하세요. 먼저 콘솔에서 핸들러를 호출하도록 작업을 구성해야 합니다.

unavailable_options 핸들러를 추가하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 개발을 클릭합니다.
  2. Fortune 장면을 클릭합니다.
  3. 사용자 인텐트 처리에서 other_option가 일치할 때를 클릭하여 창을 엽니다.
  4. 메시지 보내기 체크박스를 선택 해제합니다.
  5. 웹훅 호출 체크박스를 선택합니다.
  6. 이벤트 핸들러의 텍스트 상자에 unavailable_options라고 입력합니다.

52a0fba115f1b377.png

  1. 저장을 클릭합니다.

처리 업데이트 및 배포하기

이제 작업에서 unavailable_options 이벤트 핸들러를 호출하도록 구성했으므로 처리의 핸들러를 업데이트하고 배포할 수 있습니다.

처리를 업데이트하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 웹훅을 클릭합니다.
  2. greeting 핸들러 아래에 다음 코드를 추가합니다.
app.handle('unavailable_options', conv => {
  const option = conv.intent.params.chosenUnavailableOption.original;
  const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
  let message = 'I have seen the future and ';
  if(optionsNeedA.has(optionKey)){
    message = message + 'a ';
  }
  message = message + `${option} will not aid you on your journey. `;
  conv.add(message);
});
  1. const app = conversation(); 아래에 다음 코드를 추가합니다.
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Save Fulfillment를 클릭합니다.
  2. Deploy Fulfillment를 클릭합니다. 배포가 완료되면 편집기 위에 Cloud 함수 배포가 최신 상태입니다라는 메시지가 표시됩니다.

코드 이해하기

unavailable_options 핸들러는 다음을 진행합니다.

  • conv 객체에서 option 데이터를 가져와서 사용자의 원시 입력인 original 속성에 option을 할당합니다.
  • unavailable_options 유형의 키인 resolved 속성에 optionKey를 할당합니다.
  • optionKey가 'a'가 필요한 옵션 중 하나인지 확인합니다. 'a'가 필요한 경우 'a'가 추가된 메시지를 작성합니다.
  • conv.add(message)를 통해 메시지를 추가합니다.

시뮬레이터에서 작업 테스트하기

이제 작업이 unavailable_options 유형에서 사용자가 선택한 항목 앞에 정관사 'a'가 필요한지에 따라 메시지를 조정해야 합니다.

작업을 테스트하려면 다음 단계를 따르세요.

  1. 탐색 메뉴에서 테스트를 클릭합니다.
  2. 입력 필드에서 Talk to my test app을 클릭하거나 입력하고 Enter 키를 누릅니다.
  3. 입력 필드에 Yes를 입력하고 Enter 키를 누릅니다. 또는 추천 칩을 클릭합니다.
  4. 입력 필드에 magic을 입력하고 Enter 키를 누릅니다.
  5. 입력 필드에 horse를 입력하고 Enter 키를 누릅니다.

54ee24c5c3c56e.png

'말'이 선택되면 작업이 'a'를 추가해야 하지만 '마법'이 선택되면 'a'가 들어가지 않은 메시지를 구성해야 합니다.

프로젝트 정리하기[권장]

요금이 청구되지 않도록 하려면 사용하지 않을 프로젝트를 삭제하는 것이 좋습니다. 이 Codelab에서 만든 프로젝트를 삭제하려면 다음 단계를 따르세요.

  1. 클라우드 프로젝트 및 리소스를 삭제하려면 프로젝트 종료(삭제) 섹션에 나열된 단계를 완료합니다.
  1. 선택사항: Actions 콘솔에서 프로젝트를 즉시 삭제하려면 프로젝트 삭제하기를 참고하세요. 이 단계를 완료하지 않으면 프로젝트가 약 30일 후에 자동으로 삭제됩니다.

5. 수고하셨습니다.

이제 Google 어시스턴트용 작업을 빌드하는 데 필요한 중간 난이도의 기술을 배웠습니다.

학습한 내용

  • Node.js 처리 라이브러리를 사용하여 대화 작업을 개발하는 방법
  • 슬롯을 사용하여 사용자로부터 데이터를 수집하는 방법
  • 조건을 사용하여 장면에 로직을 추가하는 방법
  • 게임 루프를 추가하는 방법
  • 지원 경로를 추가하는 방법

자세히 알아보기

Google 어시스턴트용 작업을 빌드하는 방법을 자세히 알아보려면 다음 자료를 살펴보세요.

Twitter에서 @ActionsOnGoogle을 팔로우하여 최신 소식을 확인하고 #AoGDevs로 트윗을 보내 내가 빌드한 결과물을 공유하세요.

의견 설문조사

종료하기 전에 간단한 설문조사에 참여해 주세요.