شما مکالمه را برای Action خود با تکمیل تعریف میکنید، که کدی است که بهعنوان یک وبکهوک مستقر میشود که حاوی منطق مکالمه عامل Dialogflow شما است. Fulfillment به Action شما می گوید که وقتی کاربران درخواست می کنند چه کاری انجام دهید.
برای بوم تعاملی، انجام شما همچنین اطلاعات مربوط به برنامه وب شما را به دستیار منتقل می کند. می توانید از HtmlResponse
استفاده کنید تا به دستیار بگویید برنامه وب شما را رندر کند. یک HtmlResponse
همچنین میتواند بهروزرسانیهایی را برای data
ارائه کند، که منطق سفارشی برنامه وب شما از آنها برای ایجاد تغییرات در برنامه وب شما استفاده میکند.
در این صفحه نحوه استفاده از HtmlResponse
در اجرای خود و دستورالعمل های کلی برای استفاده از این نوع پاسخ توضیح داده شده است.
پاسخ های HTML
برای انتقال اطلاعات مربوط به برنامه وب خود به دستیار، باید یک HtmlResponse
در تحقق هدف خاص خود بگنجانید. HtmlResponse
می تواند حاوی URL برنامه وب و داده هایی باشد که برنامه وب را به روز می کند. هنگامی که یک HtmlResponse
ارسال می کنید، مراحل زیر رخ می دهد:
- تحقق هدف منطبق یک
HtmlResponse
را به دستگاه ارسال می کند. - دستگاه از URL موجود در
HtmlResponse
برای بارگیری برنامه وب استفاده می کند. - محموله
data
JSON در یک تماس برگشتی به برنامه وب منتقل می شود. Action مکالمه شما یک
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
یک HtmlResponse
با URL برای برنامه وب ارسال می کند. دستیار این را دریافت می کند و 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
نباشد، برنامه وب شما بسته می شود. - شما فقط باید URL برنامه وب خود را در اولین هدفی که برای کاربر ارسال می کنید قرار دهید (این معمولاً هدف
Welcome
است). -
HtmlResponse
باید 50 کیلوبایت یا کوچکتر باشد.