انجام ساخت (Dialogflow)

Fulfillment رابط مکالمه ای را برای Action شما برای به دست آوردن ورودی کاربر و منطق پردازش ورودی و در نهایت انجام Action را تعریف می کند.

مکالمه خود را مشخص کنید

اکنون که Actions را تعریف کرده اید، می توانید مکالمه مربوطه را برای آن Actions بسازید. شما این کار را با ایجاد مقاصد Dialogflow انجام می‌دهید که دستور زبان یا آنچه را که کاربران باید بگویند برای راه‌اندازی intent و برآورده‌سازی مربوطه برای پردازش هدف در هنگام راه‌اندازی تعریف می‌کنند.

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

قصد ایجاد کنید

علامت + را توسط آیتم منوی Intents در ناوبری سمت چپ Dialogflow کلیک کنید. Intent Editor ظاهر می شود که در آن می توانید اطلاعات زیر را وارد کنید:

  • Intent name نام هدفی است که در IDE نمایش داده می شود.
  • زمینه‌ها به شما امکان می‌دهند که هدف را در موارد خاص مشخص کنید. برای اطلاعات بیشتر، اسناد Dialogflow را در زمینه Contexts بخوانید.
  • رویدادها بدون نیاز به گفتن چیزی توسط کاربران، مقاصد را تحریک می کنند. یک نمونه رویداد، رویداد GOOGLE_ASSISTANT_WELCOME است که به دستیار Google اجازه می‌دهد تا Action شما را فراخوانی کند. این رویداد برای اقدام پیش‌فرض Action شما استفاده می‌شود. برای اطلاعات بیشتر در مورد اهداف کمکی داخلی به اسناد ما مراجعه کنید.
  • عبارات آموزشی آنچه را که کاربران باید بگویند (گرامر) را برای تحریک هدف مشخص می کند. چند عبارت را در اینجا تایپ کنید (5-10) از آنچه کاربران می‌توانند برای راه‌اندازی هدف بگویند. Dialogflow به طور خودکار تغییرات طبیعی عبارات مثالی را که ارائه می کنید کنترل می کند.
  • عمل و پارامترها تعیین می‌کنند که اگر تحقق برای این هدف فعال باشد، چه داده‌هایی باید به انجام برسد. این شامل داده‌های تجزیه‌شده از ورودی کاربر و نامی است که می‌توانید در انجام خود برای تشخیص اینکه کدام هدف راه‌اندازی شده است استفاده کنید. بعداً از این نام برای ترسیم هدف خود به منطق تحقق متناظر آن استفاده خواهید کرد. برای اطلاعات بیشتر در مورد تعریف Actions، به اقدامات و پارامترها در اسناد Dialogflow مراجعه کنید.

  • Responses یک Dialogflow Response Builder است، که در آن می‌توانید پاسخ این intent را مستقیماً در Dialogflow بدون انجام فراخوانی تعریف کنید. این ویژگی برای پاسخ‌های ثابتی که نیازی به تکمیل ندارند مفید است. ممکن است از این برای ارائه پیام های خوش آمدگویی یا خداحافظی ساده استفاده کنید. با این حال، شما احتمالاً برای پاسخگویی به کاربران خود برای بیشتر مقاصد از تکمیل استفاده خواهید کرد.

  • Fulfillment مشخص می‌کند که آیا می‌خواهید در هنگام راه‌اندازی این هدف، تحقق خود را فراخوانی کنید یا خیر. شما به احتمال زیاد این را برای بیشتر مقاصد در عامل Dialogflow خود فعال خواهید کرد. برای مشاهده این مورد در intent، باید در منوی Fulfillment برای عامل فعال باشد.

ایجاد پاسخ در Dialogflow

برای برخی از مقاصد، ممکن است نیازی به پاسخ دادن به اجرای خود نداشته باشید. در این موارد، می توانید از سازنده پاسخ در Dialogflow برای ایجاد پاسخ استفاده کنید.

در قسمت Responses ، پاسخ متنی را که می خواهید به کاربران بازگردانید، ارائه دهید. پاسخ های متنی پیش فرض، پاسخ های متنی TTS ساده ای هستند که می توانند در چندین ادغام Dialogflow کار کنند. پاسخ های دستیار Google در صفحه پاسخ ها توضیح داده شده است.

ایجاد پاسخ های تحقق

کد تکمیل شما در منطق تحقق webhook برای یک Action میزبانی می شود. به عنوان مثال، در نمونه Silly Name Maker ، این منطق در index.js برای تابع Cloud برای Firebase یافت می شود.

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

ما به شدت توصیه می کنیم که از کتابخانه مشتری Node.js برای پردازش درخواست ها و بازگرداندن پاسخ ها استفاده کنید. در اینجا روند کلی برای استفاده از کتابخانه مشتری آمده است:

  1. شی Dialogflow را راه اندازی کنید . این شی به طور خودکار به درخواست ها گوش می دهد و آنها را تجزیه می کند تا بتوانید آنها را در انجام خود پردازش کنید.
  2. ایجاد توابع برای رسیدگی به درخواست ها این توابع ورودی کاربر و سایر اجزای intent را پردازش کرده و پاسخی را برای بازگشت به Dialogflow ایجاد می کنند.

شی Dialogflow را راه اندازی کنید

کد زیر Dialogflow نمونه‌سازی می‌کند و مقداری Boilerplate Node.js را برای توابع Google Cloud انجام می‌دهد:

Node.js
'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
جاوا
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

ایجاد توابع برای رسیدگی به درخواست ها

وقتی کاربران عبارتی را بیان می‌کنند که یک intent را راه‌اندازی می‌کند، درخواستی از Dialogflow دریافت می‌کنید که با یک تابع در اجرای خود مدیریت می‌کنید. در این تابع، به طور کلی کارهای زیر را انجام خواهید داد:

  1. هر منطق مورد نیاز برای پردازش ورودی کاربر را انجام دهید.
  2. پاسخ های خود را بسازید تا به مقاصد تحریک شده پاسخ دهید. سطحی را که کاربران شما برای ایجاد پاسخ های مناسب استفاده می کنند، در نظر بگیرید. برای اطلاعات بیشتر در مورد نحوه پاسخگویی به سطوح مختلف به قابلیت های سطح مراجعه کنید.
  3. تابع ask() را با پاسخ خود فراخوانی کنید.

کد زیر به شما نشان می دهد که چگونه دو پاسخ TTS بسازید که یک هدف فراخوانی ( input.welcome ) و یک هدف محاوره ای ( input.number ) که کاربر را به Action شما خوشامد می گوید و عددی را که کاربر برای هدف Dialogflow صحبت کرده است بازتاب می دهد. با نام:

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
جاوا
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

Intent Input Number سفارشی که کد بالا را همراهی می‌کند، از موجودیت @sys.number برای استخراج یک عدد از گفته‌های کاربر استفاده می‌کند. سپس intent پارامتر num را که حاوی عدد کاربر است به تابع موجود در اجرا ارسال می کند.

به جای داشتن کنترل کننده های جداگانه برای هر intent، می توانید یک تابع بازگشتی اضافه کنید. در داخل تابع بازگشتی، بررسی کنید که کدام هدف آن را راه‌اندازی کرده است و بر اساس آن کار مناسب را انجام دهید.

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
جاوا
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

بازپرداخت بدون مسابقه

وقتی Dialogflow نمی تواند با هیچ یک از گرامرهای ورودی تعریف شده در عبارات آموزشی intent مطابقت داشته باشد، یک intent بازگشتی ایجاد می کند. مقاصد بازگشتی معمولاً از کاربر می خواهند تا ورودی لازم را برای Action شما ارائه دهد. می توانید عبارات بازپرداخت را با مشخص کردن آنها در ناحیه Response یک هدف بازگشتی ارائه کنید یا می توانید از یک هوک برای ارائه پاسخ استفاده کنید.

وقتی پاسخ کاربر با عبارات آموزشی Action شما مطابقت ندارد، دستیار Google سعی می‌کند ورودی را مدیریت کند. این رفتار باعث می‌شود تا کاربران در وسط مکالمه، اقدام‌ها را تغییر دهند. به عنوان مثال، کاربر می پرسد "این هفته چه فیلم هایی پخش می شود؟" و سپس متن را در میانه مکالمه تغییر می دهد: "آب و هوا فردا چیست؟" در این مثال، به دلیل "آب و هوا فردا چیست؟" پاسخ معتبری به مکالمه ای نیست که با درخواست اولیه راه اندازی شده است، دستیار به طور خودکار تلاش می کند تا مطابقت را مدیریت کند و کاربر را به یک مکالمه مناسب منتقل کند.

اگر Assistant نتواند یک Action مناسب را که با ورودی کاربر مطابقت دارد پیدا کند، کاربر به متن Action شما بازگردانده می‌شود.

از آنجایی که Assistant ممکن است Action شما را برای پاسخ به یک سناریوی معتبر بدون تطابق قطع کند، از اهداف بازگشتی به عنوان راهی برای پاسخگویی به درخواست‌های کاربر استفاده نکنید. شما فقط باید از مقاصد بازگشتی برای درخواست مجدد از کاربر خود برای ورودی معتبر استفاده کنید.

برای ایجاد یک قصد بازگشتی:

  1. روی Intents در منوی پیمایش Dialogflow کلیک کنید.
  2. روی ⋮ در کنار Create Intent کلیک کنید و Create Fallback Intent را انتخاب کنید. (همچنین، روی Default Fallback Intent کلیک کنید تا آن را ویرایش کنید.)
  3. عبارات درخواستی را برای صحبت با کاربران مشخص کنید. این عبارات باید محاوره ای باشند و تا حد امکان برای شرایط فعلی کاربر مفید باشند.

    برای انجام این کار بدون انجام : عباراتی را در ناحیه Response intent مشخص کنید. Dialogflow به طور تصادفی عباراتی را از این لیست انتخاب می کند تا با کاربران صحبت کند تا زمانی که هدف خاصی فعال شود.

    برای انجام این کار با تحقق :

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

    به عنوان مثال، تابع زیر از شیء conv.data (یک بار داده دلخواه که می‌توانید برای حفظ وضعیت استفاده کنید) از کتابخانه مشتری Node.js برای ذخیره شمارنده‌ای استفاده می‌کند که تعداد دفعات اجرای یک هدف بازگشتی را ردیابی می‌کند. اگر بیش از یک بار فعال شود، Action خارج می شود. در حالی که در کد نشان داده نمی‌شود، باید مقاصد دیگر را تنظیم کنید که این شمارنده را به 0 بازنشانی کنید، وقتی یک intent غیر بازگشتی فعال می‌شود. ( نمونه Number Genie را برای جزئیات بیشتر در مورد نحوه اجرای آن ببینید.)

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    جاوا
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

استفاده از زمینه ها

اگر می‌خواهید Dialogflow فقط در موقعیت‌های خاص، مقاصد بازگشتی را راه‌اندازی کند، از زمینه‌ها استفاده کنید. اگر می‌خواهید برای سناریوهای مختلف بدون تطابق، مقاصد بازگشتی متفاوتی داشته باشید، مفید است.

  • اگر زمینه‌ها را روی یک intent بازگشتی تنظیم نکنید، به عنوان یک هدف بازگشتی کلی در نظر گرفته می‌شود که وقتی Dialogflow با هدف دیگری مطابقت ندارد، آن را راه‌اندازی می‌کند. اگر بخواهید از یکی استفاده کنید، فقط باید یکی از این موارد را تعریف کنید.
  • اگر زمینه‌های ورودی را روی یک intent بازگشتی تنظیم کنید، Dialogflow این هدف بازگشتی را زمانی فعال می‌کند که موارد زیر درست باشد:

    • زمینه‌های فعلی کاربر ابرمجموعه‌ای از زمینه‌های تعریف‌شده در intent هستند.
    • هیچ منطبق با هدف دیگری وجود ندارد.

    این به شما امکان می دهد از چندین هدف بازگشتی با زمینه های ورودی مختلف برای سفارشی کردن بازپرداخت بدون تطابق برای سناریوهای خاص استفاده کنید.

  • اگر یک زمینه خروجی را روی یک intent بازگشتی تنظیم کنید، کاربر را پس از راه اندازی و پردازش هدف بازگشتی در همان زمینه نگه می دارید.

برای اطلاعات بیشتر به Contexts Dialogflow مراجعه کنید.

ارسال مجدد بدون ورودی

برای جزئیات بیشتر در مورد نحوه رسیدگی به زمانی که کاربر ورودی بیشتری در دستگاه صوتی مانند Google Home که نیاز به تعامل مداوم دارد، ارائه نمی دهد، به صفحه Reprompts مراجعه کنید.