빌드 처리 (Dialogflow)

fulfillment는 작업이 가져올 대화 인터페이스를 정의합니다. 사용자 입력 및 입력을 처리하고 최종적으로 있습니다.

대화 정의하기

이제 작업을 정의했으므로 대화로 전달됩니다. 다음을 수행합니다. 문법 또는 사용자에게 필요한 내용을 정의하는 Dialogflow 인텐트 만들기 처리할 인텐트와 해당 처리를 트리거해야 합니다. 해당 인텐트가 트리거될 때 인텐트에 표시됩니다.

전체 대화의 인텐트를 정의할 수 있는 만큼 인텐트를 만들 수 있습니다. 문법을 따릅니다.

인텐트 만들기

Dialogflow의 UI에서 인텐트 메뉴 항목 옆의 + 기호를 클릭합니다. 왼쪽 탐색 메뉴입니다. 인텐트 편집기가 표시되며 다음 정보를 입력할 수 있습니다.

  • 인텐트 이름은 IDE에 표시되는 인텐트의 이름입니다.
  • 컨텍스트를 사용하면 인텐트 트리거 범위를 특정 사례로 지정할 수 있습니다. 컨텍스트에 대한 Dialogflow 문서를 읽어보세요. 를 참조하세요.
  • 이벤트는 사용자가 말을 할 필요 없이 인텐트를 트리거합니다. 1개 예시 이벤트는 GOOGLE_ASSISTANT_WELCOME 이벤트이며, 이를 통해 Google 어시스턴트가 작업을 호출합니다. 이 이벤트는 작업의 기본 작업 내장 도우미 인텐트에 관한 자세한 내용은 문서를 참고하세요.
  • 학습 문구는 트리거할 사용자가 말해야 하는 내용 (문법)을 정의합니다. 있습니다. 사용자가 트리거할 수 있는 문구 몇 개 (5~10)를 입력하세요. 있습니다. Dialogflow는 예시의 자연스러운 변형을 자동으로 처리 포함할 수 있습니다.
  • 작업 및 매개변수는 처리로 전달할 데이터를 정의합니다. fulfillment가 사용 설정되어 있는지 확인합니다. 여기에는 사용자 입력과 처리에서 어느 것을 감지하기 위해 사용할 수 있는 이름인지를 지정해야 합니다. 인텐트가 트리거되었습니다. 나중에 이 이름을 사용하여 인텐트를 처리 로직이 있어야 합니다. 작업 및 매개변수를 참고하세요. 작업 정의에 대한 자세한 내용은 Dialogflow 문서를 참조하세요.

  • 응답은 Dialogflow 응답 빌더로, 여기에서 이 인텐트에 대한 응답을 Dialogflow 내에서 합니다. 이 기능은 합니다. 간단한 환영 메시지나 작별 메시지를 제공할 때 사용할 수 있습니다. 하지만 대부분의 경우 처리를 사용하여 사용자에게 응답하게 됩니다. 인텐트를 지정할 수 있습니다.

  • fulfillment는 처리를 호출할지 여부를 지정합니다. 이 인텐트가 트리거될 때 표시됩니다. 대부분의 경우 이 옵션은 인텐트를 제거하도록 지시합니다. 인텐트에서 이 항목을 보려면 처리 메뉴에서 에이전트의 fulfillment를 사용 설정해야 합니다.

Dialogflow에서 응답 빌드

일부 인텐트의 경우 처리에서 응답을 반환하도록 하지 않아도 됩니다. 이러한 경우 Dialogflow의 응답 빌더를 사용하여 확인할 수 있습니다

응답 영역에 반환하려는 텍스트 응답을 입력합니다. 있습니다. 기본 텍스트 응답은 여러 Dialogflow 통합에 사용할 수 있습니다 Google 어시스턴트에 관한 대답 설명 응답 페이지에 나와 있습니다.

처리 응답 빌드

처리 코드는 작업의 웹훅 처리 로직에서 호스팅됩니다. 예를 들어 Silly Name Maker 샘플에서 이 로직은 Firebase용 Cloud 함수의 index.js에 있습니다.

fulfillment를 사용하는 인텐트가 트리거되면 인텐트에 대한 정보가 포함된 Dialogflow입니다. 그런 다음 요청을 처리하기 위해 사용해야 합니다. 이 요청과 Dialogflow 웹훅으로 정의됩니다.

Node.js 클라이언트 라이브러리를 사용하여 요청을 처리하는 것이 좋습니다. 응답을 반환할 수 있습니다 다음은 클라이언트 라이브러리를 사용하는 일반적인 프로세스입니다.

  1. Dialogflow 객체를 초기화합니다. 이 객체는 자동으로 요청 수신 대기 및 파싱을 처리하므로 처리에서 처리할 수 있는 몇 가지를 알고 있어야 합니다
  2. 요청을 처리할 함수를 만듭니다. 이러한 함수는 사용자 입력과 인텐트의 기타 구성요소를 처리하고 응답을 빌드하여 Dialogflow로 돌아갑니다.

Dialogflow 객체 초기화

다음 코드는 Dialogflow를 인스턴스화하고 상용구를 실행합니다. Google Cloud Functions용 Node.js 설정:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Node.js
'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
드림
<ph type="x-smartling-placeholder">
</ph>
자바
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }
드림

요청을 처리할 함수 만들기

사용자가 인텐트를 트리거하는 문구를 말하면 처리에서 함수로 처리하는 Dialogflow입니다. 이 함수를 사용하면 일반적으로 다음 작업을 하게 됩니다.

  1. 사용자 입력을 처리하는 데 필요한 로직을 실행합니다.
  2. 트리거된 인텐트에 응답하는 응답을 빌드합니다. 이러한 특성의 사용자가 사용하는 정보 표시 경로를 더 정확히 파악할 수 있습니다. 자세한 내용은 표면 기능 다양한 표시 경로에 대한 응답을 수용하는 방법에 대해 자세히 알아보세요.
  3. 응답으로 ask() 함수를 호출합니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.

다음 코드는 호출 인텐트 (input.welcome)와 대화상자 인텐트 (input.number)를 사용자를 작업에 환영하고 사용자가 말한 숫자를 되풀이합니다. 다음 이름을 가진 Dialogflow 인텐트:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
드림
<ph type="x-smartling-placeholder">
</ph>
자바
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

위의 코드와 함께 제공되는 맞춤 인텐트 입력 번호@sys.number 개체를 사용하여 사용자 발화에서 숫자를 추출합니다. 그러면 인텐트는 사용자의 번호가 포함된 num 매개변수를 함수를 호출합니다.

인텐트마다 개별 핸들러를 사용하는 대신 사용할 수 있습니다 대체 함수 내에서 어느 인텐트를 트리거했는지 확인 적절하게 작업을 실행하세요.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
드림
<ph type="x-smartling-placeholder">
</ph>
자바
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

일치하지 않는 메시지 재메시지 표시

Dialogflow가 인텐트에 정의된 입력 문법과 일치시킬 수 없는 경우 학습 문구: 대체 인텐트를 트리거합니다. 대체 인텐트는 일반적으로 사용자에게 작업에 필요한 입력을 제공하도록 다시 요청합니다. 다음과 같은 작업을 할 수 있습니다. 프롬프트의 응답 영역에 지정하여 재프롬프트를 제공할 수 대체 인텐트를 사용하거나 웹훅을 사용하여 응답을 제공할 수 있습니다.

사용자의 응답이 작업의 학습 문구와 일치하지 않으면 Google은 어시스턴트가 입력을 처리하려고 시도합니다. 이 동작은 사용자가 대화 도중의 작업 예를 들어 사용자가 "이번 주에 플레이하는 건 어때?" 대화 중에 맥락을 바꿉니다. "이것이 내일 날씨 어때?" 이 예시에서는 '내일 날씨는 어때?' 초기 프롬프트로 트리거된 대화에 대한 유효한 응답이 아닌 경우 어시스턴트는 자동으로 매칭을 처리하려고 시도하며 사용자를 대화를 나눌 수 있습니다.

어시스턴트가 사용자 입력과 일치하는 적절한 작업을 찾지 못하는 경우 사용자가 작업의 컨텍스트로 돌아갑니다.

어시스턴트가 유효한 일치하지 않음에 응답하기 위해 작업을 중단할 수 있기 때문에 시나리오에서는 사용자 쿼리를 처리하는 방법으로 대체 인텐트를 사용하지 마세요. 나 사용자에게 유효한 입력을 요청하는 메시지를 다시 표시하는 데만 대체 인텐트만 사용해야 합니다.

대체 인텐트를 만들려면 다음 안내를 따르세요.

  1. Dialogflow의 탐색 메뉴에서 인텐트를 클릭합니다.
  2. 인텐트 만들기 옆에 있는 ⋮를 클릭하고 대체 인텐트를 만듭니다. 또는 기본 대체 Intent를 사용하여 수정할 수 있습니다.)
  3. 사용자에게 대답할 메시지 재창조 문구를 지정합니다. 이러한 구문은 사용자의 현재 상황에 가능한 한 유용해야 합니다.

    처리 없이 이렇게 하려면: 응답 영역에 문구를 지정합니다. 정의합니다. Dialogflow는 이 목록에서 읽을 문구를 무작위로 선택합니다. 사용자에게 다시 제공할 수 있습니다.

    fulfillment로 이 작업을 수행하려면 다음 안내를 따르세요.

    1. 인텐트의 fulfillment 섹션에서 이 인텐트에 웹훅 호출 사용 설정으로 전환합니다. <ph type="x-smartling-placeholder"></ph>
    2. 처리 로직에서 대체 인텐트를 다른 인텐트와 마찬가지로 처리합니다. 인텐트를 만들 수 있습니다. 이 작업은 요청을 처리할 함수 만들기에 설명되어 있습니다. 섹션으로 이동합니다.

    예를 들어 다음 함수는 conv.data 객체( 상태를 유지하는 데 사용할 수 있는 임의 데이터 페이로드) Node.js 클라이언트 라이브러리로 카운터로 대체 인텐트가 트리거되는 횟수를 추적합니다. 만약 2번 이상 트리거되면 작업이 종료됩니다. 여기에 표시되지는 않지만 다른 인텐트에서 이 카운터를 0으로 재설정하도록 해야 합니다. 비 대체 인텐트가 트리거될 때 ( Number Genie 샘플 구현 방법을 자세히 알아보세요.)

    <ph type="x-smartling-placeholder">
    </ph> <ph type="x-smartling-placeholder">
    </ph>
    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    드림
    <ph type="x-smartling-placeholder">
    </ph>
    자바
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

컨텍스트 사용

Dialogflow가 특정 상황에서만 대체 인텐트를 트리거하도록 하려면 컨텍스트를 사용하세요. 있습니다. 이 방법은 여러 대체 인텐트를 사용하려는 경우 일치하지 않을 때 발생할 수 있습니다

  • 대체 인텐트에 컨텍스트를 설정하지 않으면 다른 인텐트가 없을 때 Dialogflow에서 트리거하는 전역 대체 인텐트 일치하지 않습니다. 둘 중 하나를 사용하도록 선택한 경우 둘 중 하나만 정의해야 합니다.
  • 대체 인텐트에 입력 컨텍스트를 설정하면 Dialogflow가 다음을 트리거합니다. 대체 인텐트를 사용할 수 있습니다.

    • 사용자의 현재 컨텍스트는 인텐트를 지정할 수 있습니다.
    • 다른 인텐트 일치 항목이 없습니다.

    이를 통해 입력 컨텍스트가 서로 다른 여러 대체 인텐트를 사용하여 특정 시나리오에 맞춰 일치하지 않는 재프롬프트를 맞춤설정할 수 있습니다.

  • 대체 인텐트에 출력 컨텍스트를 설정하면 동일한 컨텍스트를 사용해야 합니다

자세한 내용은 Dialogflow 컨텍스트를 참조하세요.

입력 없이 재프롬프트

자세한 내용은 재프롬프트 페이지에서 확인하세요. 사용자가 음성 기기에 추가 입력을 제공하지 않는 경우 지속적인 상호작용이 필요한 Google Home