매개변수로 인텐트 만들기

이제 자전거 판매점에 일정을 예약할 인텐트가 필요합니다. 첫 번째 인텐트 Hours가 'We're open from 9 AM to 6 PM every day. Is there anything else I can do for you?(매일 오전 9시부터 오후 6시까지 영업합니다. 그 밖에 도와드릴 일이 있을까요?)'라는 정적 응답만을 반환하는 것과 달리 새 인텐트는 보다 복잡한 작업을 수행할 수 있어야 합니다.

사용자와 에이전트 간의 다음 상호작용을 살펴보겠습니다.

      사용자: Hi.(안녕하세요.)

      에이전트: Welcome. I can tell you the shop hours, or I can set up an appointment. Which would you like?(안녕하세요. 상점의 영업시간을 안내하거나 약속을 잡아 드릴 수 있습니다. 어떻게 도와드릴까요?)

      사용자: I need to make an appointment at 3 PM today.(오늘 오후 3시에 약속을 잡아주세요.)

      에이전트: Got it. I have your appointment scheduled on Wednesday, August 1 at 3 PM. See you soon. Good-bye.(알겠습니다. 8월 1일 수요일 오후 3시로 예약해 드렸습니다. 곧 뵙겠습니다. 안녕히 계세요.)

위의 대화에서 사용자 발화인 'I need to make an appointment at 3 PM today'(오늘 오후 3시에 약속을 잡아주세요.)에는 사용자가 자전거 판매점을 방문하고자 하는 시간과 날짜인 '오후 3시'와 '오늘'이라는 중요한 정보가 포함되어 있습니다. 에이전트의 응답은 사용자 발화에서 언급된 시간 및 날짜 정보를 다음과 같이 포함합니다. 'Got it. I have your appointment scheduled on Wednesday, August 1 at 3 PM. See you soon. Good-bye.'(알겠습니다. 8월 1일 수요일 오후 3시에 약속을 잡아 드렸습니다. 곧 뵙겠습니다. 안녕히 계세요.)

사람의 경우 발화에서 중요한 정보를 간단하게 식별할 수 있지만, 기계의 경우 이는 복잡한 작업입니다. 개발자는 사용자 발화에서 중요한 정보, 즉 매개변수를 추출할 수 있는 능력을 인텐트에 부여해야 합니다.

항목 및 매개변수를 사용하여 정보 추출

Dialogflow는 항목 및 매개변수라는 개념을 사용하여 사용자 발화에서 대상 정보를 추출하고 매개변수 집합으로 변환합니다. 이렇게 변환한 매개변수 집합은 다른 기능이나 시스템에서 처리되어 다양한 작업을 수행합니다.

매개변수를 사용하여 새 인텐트를 만들려면 다음 단계를 따르세요.

  1. Make Appointment라는 인텐트를 만듭니다.
  2. 학습 문구 섹션에서 다음 학습 문구를 추가합니다.

    I need to make an appointment at 3 PM today.

  3. 동작 및 매개변수 테이블에 시스템 항목 @sys.date@sys.time이 표시되는지 확인합니다.

  4. 텍스트 응답 테이블에 다음 응답 문구를 추가합니다.

    Got it. I have your appointment scheduled on $date at $time. See you soon. Good-bye.

  5. 저장을 클릭합니다.

    그림 5. Make Appointment 인텐트 추가를 보여주는 플로차트

이 설정으로 Make Appointment 인텐트는 사용자 발화를 확인하고, Dialogflow의 기본 제공 시스템 항목 @sys.date@sys.time에 매핑된 단어를 캡처하고, 이러한 캡처된 값을 매개변수 $date$time에 삽입합니다. 따라서 다음과 같이 응답에서 $date$time을 사용하여 사용자 발화에서 캡처한 날짜 및 시간 값을 참조할 수 있습니다. 'Got it. I have your appointment scheduled on $date at $time. See you soon. Good-bye.'(알겠습니다. 8월 1일 수요일 오후 3시에 약속을 잡아 드렸습니다. 곧 뵙겠습니다. 안녕히 계세요.)

Dialogflow를 사용하면 커스텀 항목을 만들어 일반적이지 않거나 분류되지 않은 매개변수를 추출할 수도 있습니다. 그러나 이 시나리오에서는 시스템 항목만 사용해도 시간 및 날짜와 같은 일반적인 매개변수를 캡처하는 데 충분합니다. 항목에 대한 자세한 내용은 항목을 참조하세요.

슬롯 채우기를 사용하여 필요한 매개변수 얻기

이전 섹션의 권장사항에 이어 이제는 현재 학습 문구인 'I need to make an appointment at 3 PM today.' 외에도 더 많은 학습 문구를 제공해야 합니다.

다음 학습 문구를 추가합니다.

  • Can I schedule service for 4 PM tomorrow?
  • Can I set up an appointment for noon on Friday?

지금까지 모든 학습 문구에는 '3 PM today'(오늘 오후 3시), '4 PM tomorrow'(내일 오후 4시), 'noon on Friday'(금요일 정오)와 같은 시간 및 날짜 정보가 포함됩니다. 하지만 실제로는 사용자 발화가 항상 필요한 모든 매개변수를 포함하지는 않습니다. 다음 학습 문구를 추가합니다.

  • Can you fix my road bike?
  • My bike is broken.
  • I'd like to get my bike fixed, I have a mountain bike that needs servicing.
  • I need to fix my bike today.
  • I'd like to schedule an appointment on this Thursday.

위의 모든 문구는 사용자가 일정을 예약하고자 한다는 사실을 나타냅니다. 따라서 일정을 예약하는 작업을 처리하려면 새 인텐트가 해당 문구와 일치해야 합니다. 그러나 이러한 문구에는 시간 정보와 날짜 정보, 또는 두 정보가 모두 없습니다. 인텐트는 시간 및 날짜 정보 없이는 일정을 예약할 수 없으므로 이러한 문구는 문제가 됩니다.

Dialogflow는 슬롯 채우기라는 기능을 제공하여 인텐트가 사용자로부터 필요한 모든 정보를 얻을 수 있도록 합니다. 이 기능을 활성화하려면 매개변수를 필수로 표시해야 합니다.

필수 매개변수가 있는 인텐트가 필수 매개변수가 없는 사용자 발화와 일치하는 경우, 인텐트는 필요한 매개변수를 사용자로부터 얻기 위해 프롬프트 질문을 표시합니다. 다음 대화를 살펴보겠습니다.

      사용자: Hi.(안녕하세요.)

      에이전트: Welcome. I can tell you the shop hours, or I can set up an appointment. Which would you like?(안녕하세요. 상점의 영업시간을 안내하거나 약속을 잡아 드릴 수 있습니다. 어떻게 도와드릴까요?)

      사용자: I need to fix my bike.(자전거를 수리해야 해요.)

      에이전트: Okay, I can help you with that. What day do you want to come in?(알겠습니다. 제가 도와드리겠습니다. 언제 상점에 방문하시겠어요?)

      사용자: Today.(오늘이요)

      에이전트: And what time works for you?(몇 시가 좋으세요?)

      사용자: 3 PM.(오후 3시요.)

      에이전트: Got it. I have your appointment scheduled on Wednesday, August 1 at 3 PM. See you soon. Good-bye.(알겠습니다. 8월 1일 수요일 오후 3시로 예약해 드렸습니다. 곧 뵙겠습니다. 안녕히 계세요.)

$time$date 매개변수를 필수로 설정하고 매개변수에 대한 프롬프트 질문을 제공하려면 다음 단계를 따르세요.

  1. Make Appointment 인텐트를 클릭합니다.
  2. 동작 및 매개변수 테이블에서 $time$date 매개변수의 REQUIRED 상자에 체크합니다. PROMPTS라는 열이 생성됩니다.
  3. $date 매개변수가 테이블의 $time 매개변수 아래에 있는 경우 $date 매개변수의 행을 $time 매개변수 위로 끌어올립니다. 테이블의 배치에 따라 프롬프트 질문의 순서가 결정됩니다.
  4. $date 매개변수의 경우 PROMPTS 열의 프롬프트 정의 링크를 클릭하고 다음 프롬프트를 추가합니다.
    • Okay, I can help you with that. What day do you want to come in?
    • Sure, what day are you coming in?
    • Okay, what day will work for you?
  5. $time 매개변수의 경우 프롬프트 정의 링크를 클릭하고 다음 프롬프트를 추가합니다.
    • And what time works for you?
    • What time?
    • Now, what time do you want the appointment?
  6. 저장을 클릭합니다.
  7. Dialogflow 콘솔의 시뮬레이터를 사용하여 슬롯 채우기 설정을 테스트합니다.

    그림 6. 필수 매개변수에 대한 슬롯 채우기 프롬프트를 표시하는 플로차트

이제 사용자가 일정을 예약해야 한다는 사실을 암시하는 경우 날짜 및 시간 정보를 얻는 인텐트를 만들었습니다. 그러나 현재 인텐트는 모의 응답으로 대답할 뿐 실제로 일정을 예약하지는 않습니다. 실제로 예약하려면 Google 캘린더에서 일정 예약 작업을 수행할 수 있는 백엔드 프로세스인 fulfillment를 만들어야 합니다.

다음 섹션에서는 인텐트 Make Appointmentfulfillment를 만드는 방법을 알아보겠습니다.