اقدام مکالمه خود را بسازید (Dialogflow)

شما مکالمه را برای Action خود با تکمیل تعریف می‌کنید، که کدی است که به‌عنوان یک وبکهوک مستقر می‌شود که حاوی منطق مکالمه عامل Dialogflow شما است. Fulfillment به Action شما می گوید که وقتی کاربران درخواست می کنند چه کاری انجام دهید.

برای بوم تعاملی، انجام شما همچنین اطلاعات مربوط به برنامه وب شما را به دستیار منتقل می کند. می توانید از HtmlResponse استفاده کنید تا به دستیار بگویید برنامه وب شما را رندر کند. یک HtmlResponse همچنین می‌تواند به‌روزرسانی‌هایی را برای data ارائه کند، که منطق سفارشی برنامه وب شما از آنها برای ایجاد تغییرات در برنامه وب شما استفاده می‌کند.

در این صفحه نحوه استفاده از HtmlResponse در اجرای خود و دستورالعمل های کلی برای استفاده از این نوع پاسخ توضیح داده شده است.

پاسخ های HTML

برای انتقال اطلاعات مربوط به برنامه وب خود به دستیار، باید یک HtmlResponse را در تحقق هدف خاص خود بگنجانید. HtmlResponse می تواند حاوی URL برنامه وب و داده هایی باشد که برنامه وب را به روز می کند. هنگامی که یک HtmlResponse ارسال می کنید، مراحل زیر رخ می دهد:

  1. تحقق هدف منطبق یک HtmlResponse را به دستگاه ارسال می کند.
  2. دستگاه از URL موجود در HtmlResponse برای بارگیری برنامه وب استفاده می کند.
  3. محموله data JSON در یک تماس برگشتی به برنامه وب منتقل می شود.
  4. 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 کیلوبایت یا کوچکتر باشد.