إنشاء المهام الحوارية (Dialogflow)

يمكنك تحديد المحادثة للإجراء الخاص بك باستخدام تنفيذ، وهو الرمز الذي يتم نشره كرد تلقائي على الويب يحتوي على منطق المحادثة لوكيل Dialogflow. يُخبر توصيل الطلبات الإجراء بما يجب فعله عندما يقدّم المستخدمون طلبات.

بالنسبة إلى "لوحة الرسم التفاعلية"، يساهم طلبك في نقل معلومات حول تطبيق الويب إلى "مساعد Google". يمكنك استخدام HtmlResponse لتطلب من "مساعد Google" عرض تطبيق الويب. ويمكن أيضًا أن توفّر HtmlResponse أيضًا تحديثات لـ data، الذي يستخدمه المنطق المخصّص لتطبيق الويب لديك لإجراء تغييرات على تطبيق الويب.

تتناول هذه الصفحة كيفية استخدام السمة HtmlResponse في عملية التنفيذ والإرشادات العامة لاستخدام هذا النوع من الردود.

استجابات HTML

لإرسال معلومات عن تطبيق الويب إلى "مساعد Google"، يجب تضمين HtmlResponse في تنفيذ الغرض المحدد. يمكن أن يحتوي HtmlResponse على عنوان URL لتطبيق الويب وعلى البيانات التي تعمل على تعديل تطبيق الويب. عند إرسال HtmlResponse، تحدث الخطوات التالية:

  1. يؤدي تحقيق الغرض المطابق إلى إرسال HtmlResponse إلى الجهاز.
  2. يستخدم الجهاز عنوان URL الوارد في HtmlResponse لتحميل تطبيق الويب.
  3. يتم تمرير حمولة بيانات JSON بتنسيق data إلى تطبيق الويب في معاودة الاتصال.
  4. يرسل "الإجراء الحواري" 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 لتطبيق الويب. يتلقّى "مساعد Google" هذا الطلب ويحمّل ترميز HTML وJavaScript على ذلك العنوان.

...
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 كيلوبايت أو أصغر.