Dialogflow 에이전트의 대화 로직이 포함된 웹훅으로 배포된 코드인 fulfillment를 사용하여 작업의 대화를 정의합니다. 처리는 사용자가 요청할 때 실행할 작업을 작업에 알려줍니다.
Interactive Canvas의 경우 처리에서 웹 앱에 관한 정보도 어시스턴트에 전달합니다. HtmlResponse
를 사용하여 어시스턴트에 웹 앱을 렌더링하도록 지시할 수 있습니다. HtmlResponse
는 웹 앱 맞춤 로직이 웹 앱을 변경하는 데 사용하는 data
업데이트를 제공할 수도 있습니다.
이 페이지에서는 처리에서 HtmlResponse
를 사용하는 방법과 이 응답 유형을 사용하기 위한 일반 가이드라인을 설명합니다.
HTML 응답
웹 앱에 관한 정보를 어시스턴트에 전달하려면 인텐트별 처리에 HtmlResponse
를 포함해야 합니다. HtmlResponse
에는 웹 앱의 URL과 웹 앱을 업데이트하는 데이터가 포함될 수 있습니다. HtmlResponse
를 전송하면 다음 단계가 진행됩니다.
- 매칭된 인텐트의 처리는
HtmlResponse
를 기기로 전송합니다. - 기기는
HtmlResponse
의 URL을 사용하여 웹 앱을 로드합니다. data
JSON 페이로드는 콜백으로 웹 앱에 전달됩니다.대화형 작업이 새
HtmlResponse
를 전송하여 업데이트를 보내거나 새 상태를 로드합니다.
샘플 처리
샘플 처리 코드에서 발췌한 다음 부분은 HtmlResponse
를 구현하는 방법을 보여줍니다.
const functions = require('firebase-functions');
const {dialogflow, HtmlResponse} = require('actions-on-google');
const app = dialogflow({debug: true});
app.intent('welcome', (conv) => {
conv.ask('Welcome! Do you want me to change color or pause spinning?');
conv.ask(new HtmlResponse({
url: 'https://your-web-app.com',
}));
});
// map of human speakable colors to color values
const tints = {
red: 0xFF0000,
green: 0x00FF00,
blue: 0x0000FF,
};
app.intent('color', (conv, {color}) => {
if (color in tints) {
conv.ask(`Ok, I changed my color to ${color}. What else?`);
conv.ask(new HtmlResponse({
data: {
tint: tints[color],
},
}));
return;
}
conv.ask(`Sorry, I don't know that color. What else?`);
conv.ask(new HtmlResponse({
data: {
query: conv.query,
},
}));
});
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
app.intent('pause', (conv) => {
conv.ask(`Ok, I paused spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: false,
},
}));
});
app.intent('restart game', (conv) => {
conv.ask(new HtmlResponse({
data: {
command: 'RESTART_GAME',
},
}));
});
exports.conversation = functions.https.onRequest(app);
인텐트 welcome
개
위 스니펫에서 welcome
인텐트의 처리는 웹 앱의 URL과 함께 HtmlResponse
를 전송합니다. 어시스턴트는 이를 수신하고 이 주소에서 HTML과 자바스크립트를 로드합니다.
...
app.intent('welcome', (conv) => {
conv.ask('Welcome! Do you want me to change color or pause spinning?');
conv.ask(new HtmlResponse({
url: 'https://your-web-app.com',
}));
});
...
기타 인텐트
다른 인텐트 처리에서 HtmlResponse
는 변수 값(샘플의 tint
또는 spin
)을 웹 앱에 전달합니다. 웹 앱의 맞춤 로직은 이러한 값을 사용하여 요소 (애니메이션, 색상 등)를 업데이트합니다.
...
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
...
가이드라인 및 제한사항
처리를 빌드할 때 HtmlResponse
에 관한 다음 가이드라인과 제한사항에 유의하세요.
- 처리의 각 인텐트에는
HtmlResponse
가 포함되어야 합니다. 인텐트에HtmlResponse
가 없으면 웹 앱이 닫힙니다. - 사용자에게 전송하는 첫 번째 인텐트 (일반적으로
Welcome
인텐트)에만 웹 앱 URL을 포함하면 됩니다. HtmlResponse
의 크기는 50KB 이하여야 합니다.