ساختن انجام درخواست (Dialogflow)

تحقق، میانای مکالمه‌ای را برای «کنش» شما تعریف می‌کند تا ورودی کاربر و منطق پردازش ورودی را به‌دست آورد و درنهایت «کنش» را محقق کند.

مکالمه‌تان را تعریف کنید

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

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

ایجاد قصدها

روی علامت + در کنار گزینه منوِ قصدها در پیمایش سمت راست Dialogflow کلیک کنید. «ویرایشگر قصد» ظاهر می‌شود و می‌توانید اطلاعات زیر را وارد کنید:

  • نام هدف نام هدفی است که در IDE نمایش داده می‌شود.
  • بافت‌ها به شما امکان می‌دهند راه‌اندازی قصد را به موارد خاصی محدود کنید. برای اطلاعات بیشتر، مستندات Dialogflow درباره بافت‌ها را بخوانید.
  • رویدادها قصدها را بدون نیاز به اینکه کاربران چیزی بگویند راه‌اندازی می‌کنند. یک نمونه رویداد، رویداد GOOGLE_ASSISTANT_WELCOME است که به «دستیار Google» اجازه می‌دهد «کنش» شما را فراخوانی کند. این رویداد برای کنش پیش‌فرض «کنش» شما استفاده می‌شود. برای اطلاعات بیشتر درباره قصد کمک‌کننده داخلی، به اسناد ما مراجعه کنید.
  • عبارت‌های آموزشی آنچه را که کاربران باید بگویند (دستور زبان) برای راه‌اندازی قصد تعریف می‌کنند. چند عبارت (۵ تا ۱۰) را در اینجا تایپ کنید که کاربران می‌توانند برای راه‌اندازی قصد بگویند. Dialogflow به‌طور خودکار انواع طبیعی عبارت‌های نمونه‌ای را که ارائه می‌دهید مدیریت می‌کند.
  • کنش و پارامترها مشخص می‌کند که اگر تحقق برای این هدف فعال باشد، چه داده‌هایی به تحقق ارسال شود. این شامل داده‌های تجزیه‌شده از ورودی کاربر و نامی است که می‌توانید در تحقق خود برای تشخیص اینکه کدام هدف فعال شده است استفاده کنید. بعداً از این نام برای نگاشت قصدتان به منطق برآورده‌سازی متناظر آن استفاده خواهید کرد. برای اطلاعات بیشتر درباره تعریف «کنش‌ها»، به کنش‌ها و پارامترها در اسناد Dialogflow مراجعه کنید.

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

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

ساختن پاسخ‌ها در Dialogflow

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

در بخش پاسخ‌ها، پاسخ نوشتاری‌ای را که می‌خواهید به کاربران برگردانده شود ارائه دهید. پاسخ‌های نوشتاری پیش‌فرض پاسخ‌های نوشتاری ساده تبدیل نوشتار به گفتار هستند که می‌توانند در چندین ادغام Dialogflow کار کنند. پاسخ‌های «دستیار Google» در صفحه پاسخ‌ها شرح داده شده است.

درحال ساختن پاسخ‌های برآورده‌سازی

کد برآورده‌سازی شما در منطق برآورده‌سازی وب‌قلاب برای «کنش» میزبانی می‌شود. برای مثال، در نمونه Silly Name Maker، این منطق در index.js برای Cloud Function for Firebase یافت می‌شود.

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

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

  1. راه‌اندازی شیء Dialogflow. این شیء به‌طور خودکار گوش دادن به درخواست‌ها و تجزیه آن‌ها را مدیریت می‌کند تا بتوانید آن‌ها را در تحقق خود پردازش کنید.
  2. توابعی برای رسیدگی به درخواست‌ها ایجاد کنید. این توابع ورودی کاربر و دیگر مؤلفه‌های قصد را پردازش می‌کنند و پاسخ را برای برگرداندن به Dialogflow می‌سازند.

مقداردهی اولیه شیء Dialogflow

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

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
    // ...
  }

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

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

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

کد زیر به شما نشان می‌دهد که چگونه دو پاسخ TTS بسازید که یک قصد فراخوانی (input.welcome) و یک قصد گفتگو (input.number) را مدیریت می‌کنند که به کاربر در «کنش» شما خوش‌آمد می‌گوید و عددی را که کاربر برای یک قصد 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();
}

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

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

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 نتواند با هیچ‌کدام از دستورهای ورودی تعریف‌شده در عبارت‌های آموزشی هدف‌های شما مطابقت پیدا کند، هدف بازگشتی را راه‌اندازی می‌کند. هدف‌های بازگشتی معمولاً از کاربر می‌خواهند ورودی لازم را برای «کنش» شما ارائه دهد. می‌توانید عبارت‌های بازدرخواست را با مشخص کردن آن‌ها در بخش پاسخ قصد بازگشت ارائه دهید یا می‌توانید از وب‌قلاب برای ارائه پاسخ‌ها استفاده کنید.

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

اگر «دستیار» نتواند «کنش» مناسبی پیدا کند که با ورودی کاربر مطابقت داشته باشد، کاربر به بافت «کنش» شما برگردانده می‌شود.

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

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

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

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

    برای انجام این کار با تکمیل:

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

    برای مثال، تابع زیر از شیء conv.data (یک بار داده دلخواه که می‌توانید برای حفظ وضعیت استفاده کنید) از کتابخانه کارخواه Node.js برای ذخیره شمارنده‌ای استفاده می‌کند که تعداد دفعات راه‌اندازی قصد بازگشت را ردیابی می‌کند. اگر بیش‌از یک‌بار راه‌اندازی شود، «کنش» متوقف می‌شود. اگرچه این موضوع در کد نشان داده نشده است، باید کاری کنید که وقتی قصد غیرجایگزینی راه‌اندازی می‌شود، سایر قصدها این شمارنده را به ۰ بازنشانی کنند. (برای جزئیات نحوه پیاده‌سازی این مورد، نمونه 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 قصد جایگزین را فقط در شرایط خاصی راه‌اندازی کند، از زمینه‌ها استفاده کنید. این کار زمانی مفید است که بخواهید برای سناریوهای مختلف عدم تطابق، قصد پشتیبان متفاوتی داشته باشید.

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

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

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

  • اگر بافت خروجی را روی قصد بازگشت تنظیم کنید، کاربر را در همان بافت نگه می‌دارید بعداز اینکه قصد بازگشت راه‌اندازی و پردازش شد.

برای اطلاعات بیشتر، زمینه‌های Dialogflow را ببینید.

بازدرخواست بدون ورودی

برای جزئیات درباره نحوه رسیدگی به شرایطی که کاربر ورودی بیشتری در دستگاه صوتی (مثل Google Home) که به تعامل مداوم نیاز دارد ارائه نمی‌دهد، به صفحه درخواست‌های مجدد مراجعه کنید.