fulfillment는 작업 프로젝트에서 가져올 대화형 인터페이스를 정의합니다. 사용자 입력과 입력을 처리하고 결국에는 작업을 처리하는 로직입니다.
개요
처리는 어시스턴트로부터 요청을 수신하고 요청을 처리하며 응답합니다. 이러한 주고받은 요청과 대응 프로세스는 결국 초기 사용자 요청을 충족할 때까지 계속 대화해야 합니다.
다음 단계에서는 Actions API를 사용하여 fulfillment를 빌드하는 방법을 설명합니다. Node.js 또는 Java/Kotlin 클라이언트 라이브러리가 포함된 SDK:
- ActionsSdkApp 객체를 초기화합니다.
- 처리 로직에서 요청을 처리할 함수를 만듭니다.
대화상자 빌드
ActionsSdkApp
객체 초기화
다음 코드는
ActionsSdkApp
드림
Google Cloud Functions의 상용구 Node.js 설정을 수행합니다.
'use strict'; const {actionssdk} = require('actions-on-google'); const functions = require('firebase-functions'); const app = actionssdk({debug: true}); app.intent('actions.intent.MAIN', (conv) => { conv.ask('Hi!'); }); // More intent handling if needed exports.myFunction = functions.https.onRequest(app);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!"); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi!" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
요청을 처리할 함수 만들기
사용자가 문구를 말하면 Google 어시스턴트의 요청이 전송됩니다. 받는사람 요청에 들어오는 인텐트를 처리하고, 인텐트를 실행합니다.
요청을 처리하려면 다음 안내를 따르세요.
사용자 입력을 처리하는 데 필요한 로직을 실행합니다.
표시할 응답을 전달하는
conv.ask()
함수를 호출합니다. 를 인수로 사용합니다.
다음 코드는 간단한 응답을 빌드하는 방법을 보여줍니다.
<ph type="x-smartling-placeholder">conv.ask(`Hi! Say something, and I'll repeat it.`);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi! Say something, and I'll repeat it."); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi! Say something, and I'll repeat it." } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
인텐트 처리
트리거된 인텐트를 처리할 모든 함수가 있으면 app.intent
를 사용하여 다음을 수행합니다.
인텐트에 핸들러를 할당합니다.
app.intent('actions.intent.TEXT', (conv) => { // handle text intent. }); app.intent('actions.intent.MAIN', (conv) => { // handle main intent. });
@ForIntent("actions.intent.MAIN") public ActionResponse main(ActionRequest request) { // handle main intent // ... } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { // handle text intent // ... }
대화 종료 중
더 이상 사용자 입력을 원하지 않고 대화를 종료하려는 경우
conv.close()
함수를 호출합니다.
이 기능은 사용자에게 텍스트를 음성으로 안내하고 마이크를 닫아 대화를 종료하라고 Google 어시스턴트에게 알립니다.
기본 호출 인텐트 처리
사용자가 app.intent.action.MAIN
인텐트를 트리거하는 경우 일반적으로는 트리거하지 않습니다.
사용자 입력 처리를
수행해야 합니다 작업 패키지에
다양한 사용 사례를 다루고 있다면
그들이 할 수 있는 몇 가지를 갖게 될 것입니다.
- 응답을 인수로 전달하는
conv.ask()
함수를 호출합니다. Google 어시스턴트가 사용자에게 응답을 말한 다음 사용자가 개발자가 지정한 인텐트 중 하나를 트리거할 때까지 기다립니다.
다음 스니펫은 간단한 시작 인텐트를 처리하는 방법을 보여줍니다.
<ph type="x-smartling-placeholder">// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) { return rb.add(input).build(); }
대화 상태
대화 HTTP/JSON 웹훅 API를 사용하는 경우
JSON 형식의 객체 (conversationToken
)를 사용한 대화의 상태
사용자와 Google 어시스턴트 사이를 오가는 데이터 세트입니다. 만약
Node.js 클라이언트 라이브러리를 사용하여
conv.data
필드에 직접 쓰고 읽을 수 있습니다. 이 입력란
요청과 응답 간에 자동으로 전달됩니다.
conv.data = {something: 10}; let value = conv.data.something;
ResponseBuilder rb = getResponseBuilder(request); rb.getConversationData().put("something", 10); Object value = rb.getConversationData().get("something");