ایجاد یک عامل RBM مبتنی بر Dialogflow (پیشرفته)

در این کد لبه، یاد خواهید گرفت که چگونه از Dialogflow برای ایجاد یک رابط مکالمه برای تامین انرژی یک عامل RBM استفاده کنید.

قرار است در این کد لبه چه چیزی بسازید؟

  • یک عامل Dialogflow که مکالمه یک عامل RBM را تقویت می کند
  • یک رابط مکالمه برای یک فروشگاه دوچرخه خیالی که به کاربران امکان می دهد اطلاعات مربوط به فروشگاه دوچرخه را بدانند و قرار ملاقات هایی را برای تعمیر یا سرویس دوچرخه خود تنظیم کنند.

چیزی که یاد خواهید گرفت

  • نحوه استفاده از سه ساختار اصلی Dialogflow (مقصد، موجودیت ها و زمینه ها) برای ایجاد یک رابط مکالمه
  • نحوه اتصال رابط مکالمه خود به سرویس ها و API های خود با استفاده از تکمیل و ویرایشگر درون خطی Dialogflow (تأمین شده توسط Cloud Functions برای Firebase)
  • نحوه ایجاد انواع پاسخ RBM از Dialogflow به منظور ایجاد یک تجربه RBM غنی برای کاربران

آنچه شما نیاز دارید

  • یک حساب کاربری گوگل

اولین نماینده خود را ایجاد و پرس و جو کنید

مدت زمان: 10:00

اولین عامل Dialogflow خود را ایجاد کنید

برای ایجاد یک عامل Dialogflow:

  1. یک برگه جدید باز کنید و وارد Dialogflow شوید .
  2. روی ایجاد عامل در ناوبری سمت چپ کلیک کنید.

  3. "CodelabRBMBikeShop" را برای نام نماینده خود، "English" را به عنوان زبان پیش فرض وارد کنید و منطقه زمانی پیش فرض را بر روی منطقه زمانی خود تنظیم کنید. سپس روی Create کلیک کنید.

کنسول Dialogflow

اکنون باید کنسول Dialogflow را ببینید. اگر روی صفحه کوچک‌تری کار می‌کنید و پیمایش سمت چپ پنهان است، روی دکمه پیمایش در گوشه بالا سمت چپ کلیک کنید. دکمه تنظیمات شما را به تنظیمات نماینده فعلی می برد.

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

در سمت راست شبیه ساز Dialogflow است. این به شما امکان می دهد نماینده خود را با صحبت کردن یا تایپ پیام ها امتحان کنید.

پرس و جو از نماینده شما

عوامل Dialogflow به بهترین وجه به عنوان ماژول های NLU (درک زبان طبیعی) توصیف می شوند. اینها می توانند در برنامه، محصول یا خدمات شما گنجانده شوند تا درخواست های کاربر طبیعی را به داده های عملی تبدیل کنند.

وقت آن است که نماینده خود را امتحان کنید! در شبیه ساز سمت راست، روی فیلد متنی که می گوید Try it now را کلیک کنید، "Hi" را تایپ کنید و Enter را فشار دهید.

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

یک عامل RBM ایجاد کنید

وارد کنسول توسعه دهنده Business Communications شوید ، سپس روی ایجاد عامل کلیک کنید.

در قسمت نام، «فروشگاه دوچرخه نام شما» را وارد کنید (مانند «عامل دوچرخه شون»)، یک منطقه را انتخاب کنید و روی ایجاد نماینده کلیک کنید.

عامل RBM خود را به Dialogflow وصل کنید

پس از ایجاد عامل RBM، روی عامل کلیک کنید تا صفحه نمای کلی نماینده را ببینید. روی پیوند Integrations در ناوبری سمت چپ کلیک کنید.

به طور پیش‌فرض، عامل RBM از Google Cloud Pub/Sub برای مدیریت پیام‌های کاربر استفاده می‌کند. برای اتصال عامل RBM خود به عامل Dialogflow که قبلا ایجاد کردید، روی ادغام Dialogflow کلیک کنید.

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

در نهایت، باید ID پروژه Dialogflow را ارائه دهید. در یک برگه مرورگر متفاوت از Business Communications Developer Console، به Dialogflow بروید و عامل CodelabRBMBikeShop را که قبلا ایجاد کردید باز کنید. روی نماد چرخ دنده در نزدیکی نام پروژه در ناوبری سمت چپ کلیک کنید.

با کلیک بر روی آن به تنظیمات مدل هدایت می شوید. در پروژه GOOGLE، شناسه پروژه را پیدا کرده و کپی کنید.

با باز کردن کنسول توسعه‌دهنده Business Communications به برگه خود بازگردید، شناسه پروژه را در گفتگو جای‌گذاری کنید، سپس روی Start integration کلیک کنید.

این فرآیند حدود دو دقیقه طول می کشد تا کامل شود. پس از تکمیل، باید گزینه Dialogflow integration برجسته شده و یک پیوند View agent را مشاهده کنید.

همه پیام‌های ارسالی و ارسالی از نماینده شما اکنون توسط نماینده CodelabRBMBikeShop Dialogflow مدیریت می‌شوند.

دستگاه تست خود را دعوت کنید و پیام ارسال کنید

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

از Business Communications Developer Console، روی Devices در ناوبری سمت چپ کلیک کنید. در فرم، شماره تلفن کامل دستگاه خود را با فرمت E.164 وارد کنید (به عنوان مثال +12223334444) و روی افزودن کلیک کنید.

در دستگاه خود، دعوتنامه آزمایشی را دریافت می کنید. روی Make me a tester ضربه بزنید.

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

ایجاد قصد خوش آمدگویی شما

معمولاً با یک عامل RBM مبتنی بر Dialogflow، برای شروع یک مکالمه، یک تماس API برقرار می‌کنید که شماره تلفن کاربر و هدف Dialogflow را که مکالمه را شروع می‌کند مشخص می‌کند (معمولاً قصد خوش آمدگویی نماینده شما). برای این کد، از این مرحله می گذریم و به جای آن از رشته مکالمه ای که قبلاً در مرحله قبل با دستگاه آزمایشی کنسول توسعه دهنده ارتباطات تجاری ایجاد کرده بودیم استفاده می کنیم. با این حال، اگر می‌خواهید درباره این ویژگی API بیشتر بخوانید، این راهنما را بررسی کنید.

بیایید با افزودن پاسخ‌های RBM به پیش‌فرض پیش‌فرض پیش‌فرض آغاز کنیم تا Dialogflow بتواند از آن با عامل RBM شما استفاده کند. ابتدا به برگه مرورگری که Dialogflow باز است بروید. روی Default Welcome Intent کلیک کنید، به بخش Responses بروید، روی + در لیست انواع پاسخ ها کلیک کنید و RCS Business Messaging (RBM) را انتخاب کنید.

روی Add Responses کلیک کنید، سپس Simple Response را انتخاب کنید. در قسمت متنی برای پاسخ ساده ، "سلام، به فروشگاه دوچرخه هوگارت خوش آمدید. چگونه می توانم کمک کنم؟" را وارد کنید. (نام خود را جایگزین Hogarth کنید)، سپس روی ذخیره کلیک کنید.

شروع گفتگو

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

قصد خوش آمدگویی خود را به روز کنید

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

نماینده ای که ما ایجاد می کنیم باید از دو ویژگی اصلی پشتیبانی کند: بررسی ساعات کار و برنامه ریزی یک قرار. بیایید پیام خوش آمدگویی ساده خود را با کارتی جایگزین کنیم که پاسخ‌های پیشنهادی را برای انجام این تعاملات ارائه می‌کند.

در بخش پیش‌فرض استقبال از Intent ، پاسخ‌ها ، تب RCS Business Messaging (RBM) را انتخاب کنید. با کلیک کردن روی نماد سطل زباله، Simple Response موجود را حذف کنید. در مرحله بعد، روی افزودن پاسخ ها کلیک کنید و کارت غنی مستقل را انتخاب کنید.

در فرم Standalone Rich Card موارد زیر را وارد کنید:

  • عنوان کارت : سلام، به فروشگاه دوچرخه Hogarth خوش آمدید.
  • توضیحات کارت : چگونه می توانم به شما کمک کنم؟ از گزینه های زیر انتخاب کنید:
  • جهت کارت: عمودی را انتخاب کنید
  • آدرس تصویر/ویدیو : https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • ارتفاع رسانه: متوسط ​​را انتخاب کنید

روی افزودن پیشنهاد کلیک کنید و موارد زیر را وارد کنید:

  • متن پیشنهاد : ساعات کاری شما چقدر است؟
  • پیشنهاد پس‌بازگشت: reply_hours

با کلیک روی افزودن پیشنهاد و وارد کردن موارد زیر، یک پیشنهاد دیگر اضافه کنید:

  • متن پیشنهاد : قرار ملاقات بگذارید
  • پیشنهاد پس‌بازگشت: reply_appointment

روی ذخیره کلیک کنید.

آن را امتحان کنید!

هنگامی که مدل گفت "آموزش نماینده کامل شد" به دستگاه خود برگردید و پیام "سلام" را برای نماینده خود ارسال کنید. اکنون باید کارت Rich Standalone را که به تازگی طراحی کرده اید ببینید.

روی ساعات کاری شما چقدر است ضربه بزنید؟ . توجه داشته باشید که Default Fallback Intent فعال می شود. این به این دلیل است که نماینده Dialogflow شما نمی‌داند چگونه داده‌های پس‌بازگشتی را که برای این پیشنهاد، "reply_hours" پیکربندی کرده‌اید، مدیریت کند.

بیایید این را درست کنیم.

ایجاد هدف ساعت خود

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

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

برای پوشش دادن این عبارت، یک هدف "Hours" ایجاد کنید:

  1. در پیمایش سمت چپ، روی + در کنار Intents کلیک کنید.
  2. برای Intent name ، "Hours" را وارد کنید.
  3. در زیر عبارات آموزشی ، روی افزودن عبارت کاربر کلیک کنید و موارد زیر را وارد کنید و بعد از هر ورودی اینتر را فشار دهید:

    • When do you open?
    • What are your hours?
    • How late can I come in?
    • reply_hours .

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

  4. در قسمت Responses ، روی + کلیک کنید و RCS Business Messaging (RBM) را انتخاب کنید.

  5. روی Add Responses کلیک کنید و Simple Response را انتخاب کنید.

  6. در قسمت نوشتاری برای پاسخ ساده ، «ما هر روز هفته از ساعت 9 صبح تا 5:30 بعد از ظهر باز هستیم» را وارد کنید.

  7. روی ذخیره کلیک کنید.

آن را امتحان کنید!

اکنون سعی کنید از نماینده خود ساعت کاری خود را بپرسید. در دستگاه خود، در مکالمه نماینده RBM خود، «When are you open» را وارد کنید. و پیام را برای نماینده خود ارسال کنید.

نماینده شما اکنون به پرس و جو به درستی پاسخ می دهد. توجه داشته باشید که اگرچه درخواست شما کمی با عبارت آموزشی ("When are you open?" در مقابل "When do you open?") متفاوت بود، اما Dialogflow همچنان پرس و جو را با هدف درست مطابقت داد. همچنین می‌توانید روی ساعات کاری شما ضربه بزنید؟ در کارت غنی

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

افزودن تحقق

در حالی که کار می کند، عاملی که ما ایجاد کرده ایم کمی غیر طبیعی رفتار می کند. وقتی کاربر چیزی مانند "آیا باز هستید؟" می پرسد، نماینده با "ما هر روز هفته از ساعت 9 صبح تا 5:30 بعد از ظهر باز هستیم" پاسخ می دهد. اگر نماینده مستقیماً به ما بگوید که آیا مغازه باز است یا خیر، بسیار طبیعی تر و مفیدتر خواهد بود.

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

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

ما اکنون فرآیند استقرار یک وبکهک تکمیلی را طی می کنیم که باعث می شود نماینده ما با کمک بیشتری پاسخ دهد.

راه اندازی: استقرار و فعال کردن انجام

Dialogflow دارای یک Cloud Functions داخلی برای ویرایشگر Firebase است که به شما امکان می دهد کد جاوا اسکریپت را بنویسید و استقرار دهید تا اجرای شما را مدیریت کند.

در ناوبری سمت چپ Dialogflow، روی Fulfillment کلیک کنید تا صفحه تکمیل باز شود. برای فعال کردن Cloud Functions برای ویرایشگر Firebase، روی کلید کنار Inline Editor کلیک کنید.

متوجه خواهید شد که ویرایشگر دارای دو فایل است: "index.js" که حاوی کد اصلی برای تکمیل است و "package.json" که جزئیات مربوط به وابستگی های مورد نیاز است.

اکنون می‌خواهیم چند کد نمونه وارد کنیم که اجرای شما را تقویت می‌کند.

متن این فایل را کپی و در "index.js" جایگذاری کنید و همه محتوای فعلی آن را جایگزین کنید:

https://storage.googleapis.com/df-rbm-codelab/index.js

اکنون به پایین صفحه بروید و روی DEPLOY کلیک کنید. پس از یک دقیقه یا بیشتر، کد شما در Cloud Functions برای Firebase مستقر می شود.

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

به کد تکمیلی نگاهی بیندازید. تابع hoursHandler برای تعیین اینکه آیا فروشگاه در حال currentlyOpen باز است یا نه، و بسته به شرایط، یک پاسخ RBM متفاوت را فراخوانی می کند.

function hoursHandler(agent) {
    let responseText = 'We\'re currently closed, but we open every weekday at 9am!';
    if (currentlyOpen()) {
      responseText = 'We\'re open now!! We close at 5pm today.';
    }

    let payload = {
    "fulfillmentMessages": [
        {
          "platform": "GOOGLE_RBM",
          "rbmText": {
              "text": responseText
          }
        }
      ]
    };

    return response.status(200).json(payload);
}

خط intentMap.set('Hours', hoursHandler); به کتابخانه تکمیل می گوید که تابع hoursHandler باید زمانی اجرا شود که هدف "Hours" مطابقت داشته باشد. با این حال، ما همچنین باید به Dialogflow بگوییم تا برای هدف «ساعت‌ها» ما، تحقق را فعال کند.

در پیمایش سمت چپ، روی Intents کلیک کنید و هدف "Hours" را باز کنید. بخش Fulfillment را در پایین باز کنید و Enable webhook call for this intent را انتخاب کنید تا روشن شود.

هنگامی که قصد را ذخیره کردید، می توانید آن را امتحان کنید. در شبیه ساز سمت راست، "آیا باز هستید؟" را وارد کنید. اگر روی اطلاعات تشخیصی کلیک کنید و پاسخ API را بررسی کنید، باید پاسخ تکمیل را ببینید. توجه داشته باشید که منطقه زمانی استفاده شده توسط Cloud Functions برای سرور Firebase UTC خواهد بود، بنابراین ممکن است پاسخ برای زمان محلی فعلی شما صحیح نباشد.

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

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

استخراج داده ها با موجودیت ها

مدت زمان: 12:00

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

پارامترهایی را به اهداف خود اضافه کنید

پارامترها کلمات یا عبارات مرتبط در پرس و جوی کاربر هستند که Dialogflow استخراج می کند تا نماینده شما بتواند پاسخ مناسبی ارائه دهد. شما یک هدف جدید با پارامترها ایجاد می کنید و یاد می گیرید که چگونه مقادیر آنها را در پاسخ های خود بگنجانید.

  1. برای ایجاد یک intent جدید، روی + در کنار Intents در ناوبری سمت چپ کلیک کنید.
  2. برای نام هدف، "Make Appointment" را در بالای صفحه وارد کنید.
  3. عبارت زیر را به عنوان عبارات آموزشی اضافه کنید:
    • reply_appointment
    • I'd like to schedule an appointment for next Thursday
    • I'd like to get my bike fixed I have a mountain bike that needs servicing
    • My bike is broken
    • Can I schedule service for 4pm tomorrow?
    • Can you fix my road bike?
    • Can I set up an appointment for noon on Friday?

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

در زیر عبارات آموزشی ، Dialogflow به طور خودکار جدول پارامترها را با اطلاعاتی که جمع آوری می کند پر می کند:

  • پارامتر اختیاری است (لازم نیست)
  • به نام تاریخ و زمان
  • مربوط به نوع موجودیت سیستم @sys.date و @sys.time **
  • دارای ارزش $date و $time است
  • یک لیست نیست

استفاده از داده های پارامتر

می توانید از مقدار یک پارامتر در پاسخ های خود استفاده کنید. در این صورت می‌توانید از $date و $time در پاسخ‌های خود استفاده کنید و تاریخ و ساعت مشخص شده در درخواست نماینده شما جایگزین آن‌ها شود.

در Responses ، تب RCS Business Messaging را اضافه کنید، موارد زیر را به Simple Response اضافه کنید و روی Save کلیک کنید:

Great! I've set up your appointment for $date at $time.  See you then!

آن را امتحان کنید!

اکنون، از نماینده خود با "آیا می توانم فردا برای ساعت 2 بعدازظهر وقت بگیرم؟" در شبیه ساز در پانل سمت راست.

در قسمت پایین خروجی شبیه ساز مشاهده می کنید که Dialogflow به درستی پارامترهای "tomorrow" و "2pm" را از پرس و جو استخراج کرده و آنها را به درستی به عنوان تاریخ و زمان تجزیه کرده است. اکنون همین مورد را از دستگاه تست خود امتحان کنید و ببینید که چگونه پاسخ به درستی تاریخ و زمان تجزیه شده را شامل می شود.

ایجاد پارامترهای مورد نیاز

در مورد فروشگاه دوچرخه ما، قبل از تعیین قرار ملاقات، باید مقادیر تاریخ و زمان را بدانیم. به طور پیش فرض، تمام پارامترهای Dialogflow اختیاری هستند. برای اینکه آنها را مورد نیاز کنیم، باید کادر کنار هر پارامتری را که می‌خواهیم مورد نیاز قرار دهیم علامت بزنید. کادر کنار هر پارامتر را در هدف "Make Appointment" علامت بزنید:

اکنون که هر پارامتر مورد نیاز است، باید برای هر پارامتر یک دستور ایجاد کنیم. درخواست‌ها از کاربر می‌خواهند که مقداری برای هر پارامتری که زمانی که کاربر در ابتدا قصد خود را نشان داده (در این مورد، قرار ملاقات) ارائه نشده است، ارائه دهد. برای ایجاد یک درخواست برای یک پارامتر، روی Define prompts کلیک کنید و اعلان های زیر را برای هر پارامتر وارد کنید:

پارامتر سریع
تاریخ چه روزی میخوای بیای؟
زمان چه زمانی برای شما کار می کند؟

پس از وارد کردن دستورات، روی ذخیره کلیک کنید.

آن را امتحان کنید!

در دستگاهتان، روی پیشنهاد قرار ملاقات ضربه بزنید یا «I want to get my bike fixed» را تایپ کنید. شما پاسخ "چه روزی می خواهید وارد شوید؟" دریافت می کنید. یک تاریخ ("فردا") را مشخص کنید و پاسخی دریافت می کنید که در آن زمان را می خواهید. به آن پاسخ دهید و خواهید دید که قرار ملاقات شما تعیین شده است.

درخواست‌های حاوی اطلاعاتی در درخواست اولیه (یعنی «می‌خواهم برای فردا قرار ملاقات بگذارم») پارامتر صحیح (تاریخ) را پر می‌کنند، از درخواست تاریخ صرفنظر می‌کنند («چه روزی می‌خواهی وارد شوی؟») و به اعلان زمان ("زمان برای شما کار می کند؟") بروید.

ما فقط از موجودیت ها و پارامترهای Dialogflow برای ایجاد یک مکالمه کاملا منحصر به فرد بدون کد و تنظیمات بسیار کم استفاده کرده ایم! در ادامه نحوه استفاده از تکمیل را برای کمک به راهنمایی کاربر در پاسخ به درخواست‌هایی مانند "چه تاریخی می‌خواهید یک قرار تعیین کنید؟" را پوشش خواهیم داد.

راه اندازی: فعال کردن انجام

در پیمایش سمت چپ، روی Intents کلیک کنید و هدف "Make Appointment" را باز کنید. Fulfillment را باز کنید، Enable webhook call for this intent و Enable webhook call for slot filling را انتخاب کنید تا هر دو روشن شوند و روی Save کلیک کنید.

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

اجرای تحقق

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

intentMap.set('Hours', hoursHandler);

و موارد زیر را به عنوان خط بعدی اضافه کنید:

intentMap.set('Make Appointment', makeAppointment);

این به کتابخانه تکمیل می‌گوید که عملکرد makeAppointment باید زمانی اجرا شود که هدف "Make Appointment" مطابقت داشته باشد.

سپس کد زیر را کپی کرده و در زیر تابع currentlyOpen قرار دهید. دو تابع، getSuggestedTimes و getSuggestedDates ، فهرست‌های تراشه‌های مفیدی را برای تسهیل پاسخ‌های کاربر ایجاد می‌کنند.

function getSuggestedTimes() {
  return [
        {
          "reply": {
            "text": "9 am",
            "postbackData": "9:00am"
            }
        },
        {
          "reply": {
            "text": "10 am",
            "postbackData": "10:00am"
          }
        },
        {
          "reply": {
            "text": "1 pm",
            "postbackData": "1:00pm"
          }
        },
        {
          "reply": {
            "text": "2 pm",
            "postbackData": "2:00pm"
          }
        }
      ];
}

function getSuggestedDates() {
  return [
        {
          "reply": {
            "text": "Tomorrow",
            "postbackData": "Tomorrow"
          }
        },
        {
          "reply": {
            "text": "A week from now",
            "postbackData": "A week from now"
          }
        },
        {
          "reply": {
            "text": "Two weeks from now",
            "postbackData": "Two weeks from now"
          }
        }
      ];
}

سپس، در زیر hoursHandler ، کد زیر را کپی و جایگذاری کنید، سپس روی Deploy کلیک کنید.

function makeAppointment(agent) {
    // extract required parameters
    const appointmentDate = agent.parameters.date;
    const appointmentTime = agent.parameters.time;

    const gotAppointmentDate = appointmentDate.length > 0;
    const gotAppointmentTime = appointmentTime.length > 0;

    let responseText = '';
    let suggestions = [];

    if(gotAppointmentDate && gotAppointmentTime) {
      // We have all required parameters, return success message
      responseText = 'Great! I\'ve set up your appointment for ' +
          appointmentDate + ' at ' + appointmentTime + '.  See you then!';
    }
    else if(gotAppointmentDate) {
      responseText = 'What time works for you?';
      suggestions = getSuggestedTimes();
    }
    else if(gotAppointmentTime) {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }
    else {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText,
          "rbmSuggestion": suggestions
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

چند دقیقه وقت بگذارید و کد را بررسی کنید. توجه داشته باشید که پارامترهای مورد نیاز برای مقادیر بررسی می شوند و در صورت تنظیم نشدن، پیام مناسب و مجموعه ای از پیشنهادات را از کاربر می خواهند.

آن را امتحان کنید!

در دستگاهتان، روی پیشنهاد قرار ملاقات ضربه بزنید یا «I want to get my bike fixed» را تایپ کنید. شما پاسخ "چه روزی می خواهید وارد شوید؟" به همراه چند پیشنهاد مفید: «فردا»، «یک هفته دیگر» و «دو هفته دیگر». تاریخ ("فردا") را مشخص کنید و پاسخی دریافت خواهید کرد که زمان را می خواهد. به آن پاسخ دهید و خواهید دید که قرار ملاقات شما تعیین شده است.

مدیریت وضعیت با زمینه ها

مدت زمان: 7:00

زمینه ها را به حالت مکالمه اضافه کنید

هنگامی که کاربر ما با موفقیت یک قرار ملاقات را تنظیم کرد، ممکن است بخواهیم اطلاعات بیشتری از آنها جمع آوری کنیم. تصور کنید فروشگاه دوچرخه ما دو نوع قرار ملاقات ارائه می دهد: تعمیر یا تنظیم. ما می خواهیم بدانیم که کاربر به کدام یک از این موارد نیاز دارد.

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

responseText = 'Great! I\'ve set up your appointment for ' +
    appointmentDate + ' at ' + appointmentTime + '.  Do you need a repair for just a tune-up?';

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

مقاصد پیگیری، مقاصدی هستند که فقط پس از مطابقت با هدف "والد" آنها (در این مورد، قصد "قرار ملاقات" ما) مطابقت داده می شود. روی Intents در ناوبری سمت چپ کلیک کنید (اگر منو پنهان است، روی دکمه منو ☰ در گوشه بالا سمت چپ کلیک کنید). سپس ماوس خود را روی هدف "Make Appointment" ببرید و روی Add follow-up intent کلیک کنید، که در سمت راست نام intent ظاهر می شود:

سپس از منوی کشویی بر روی سفارشی کلیک کنید.

Dialogflow به طور خودکار هدف بعدی را "Make Appointment - Custom" نامگذاری کرد و فلش نشان دهنده رابطه بین intent ها است.

مقاصد پیگیری فقط پس از مطابقت با قصد والدین قابل تطبیق است. از آنجایی که این هدف فقط بعد از هدف "قرار ملاقات" مطابقت داده می شود، می توانیم فرض کنیم که از کاربر به تازگی این سوال پرسیده شده است "آیا به تعمیر نیاز دارید یا فقط تنظیم؟".

برای دریافت پاسخ به این سوال، ابتدا باید چند موجودیت را تعریف کنیم.

ایجاد اولین موجودیت شما

Dialogflow به شما امکان می دهد تا موجودیت های توسعه دهنده را تعریف کنید که عملکردی مشابه با موجودیت های سیستمی Dialogflow دارند. بیایید با ایجاد یک نوع موجودیت شروع کنیم. از آنجایی که می‌خواهیم کاربران بتوانند نوع قرار ملاقاتی را که می‌خواهند با فروشگاه ما بگیرند، انتخاب کنند، اجازه دهید نوع نهاد را AppointmentType . ما دو نهاد را در نوع نهاد AppointmentType برای دو نوع مختلف قرار اضافه می کنیم: service و fix .

برای ایجاد یک نوع موجودیت:

  1. روی + در کنار Entities در ناوبری سمت چپ کلیک کنید.
  2. برای نام نوع نهاد، "AppointmentType" را وارد کنید.
  3. روی فیلد متن کلیک کنید و ورودی های زیر را اضافه کنید:
    • سرویس
    • ثابت
  4. هنگامی که یک ورودی را وارد می کنید، با فشار دادن tab مکان نما شما را به فیلد مترادف منتقل می کند. مترادف های زیر را برای هر ورودی اضافه کنید. مطمئن شوید که به جای کپی و چسباندن کل رشته، هر کلمه را جداگانه اضافه کنید:
ورود مترادف
سرویس
  • سرویس
  • تعمیرات اساسی
  • نگهداری
  • تنظیم کردن
  • کوک کردن
ثابت
  • ثابت
  • تعمیر
  • بهبودی یافتن
  • شکسته شده
  • لاستیک پنچر شده
  • درست شد
  1. روی ذخیره کلیک کنید.

هر نوع موجودیت باید دارای موارد زیر باشد:

  • نامی برای تعریف دسته ("AppointmentType")
  • یک یا چند ورودی ("سرویس"، "رفع")
  • یک یا چند مترادف ("نگهداری"، "تنظیم"، و غیره)

Dialogflow چیزهای ساده ای مانند کثرت و حروف بزرگ را کنترل می کند، اما مطمئن شوید که همه مترادف های ممکن را اضافه کنید. هرچه بیشتر اضافه کنید، نماینده شما بهتر می تواند موجودیت های شما را تعیین کند.

در حال افزودن موجودیت جدید

اکنون که نوع نهاد خود را برای قرار ملاقات تعریف کرده‌ایم، می‌توانیم از آن در عبارات آموزشی هدف "ساخت قرار ملاقات - سفارشی" استفاده کنیم:

  1. روی Intents در پیمایش سمت چپ کلیک کنید، سپس روی فلش کنار هدف "Make Appointment" کلیک کنید تا اهداف بعدی آن مشخص شود. روی هدف "ساخت قرار - سفارشی" کلیک کنید.
  2. موارد زیر را به عنوان عبارات آموزشی اضافه کنید:

    • آیا می توانید دوچرخه من را سرویس کنید؟
    • من نیاز به تعمیر دارم

  3. باید نوع نهاد قرار ملاقات را به طور خودکار در عبارات آموزشی که وارد کرده‌اید، مشروح کنید. این پارامتر AppointmentType را به جدول اضافه می کند که در زیر قسمت عبارات آموزشی قرار دارد. برای علامت‌گذاری این پارامتر به‌عنوان مورد نیاز ، روی کادر تأیید کلیک کنید.

  4. روی Define prompts کلیک کنید و "ما می توانیم دوچرخه شما را سرویس یا تعمیر کنیم. کدام یک را می خواهید؟" را وارد کنید.

  5. در Responses ، پاسخ را به «بسیار خوب، ما یک $AppointmentType را برنامه ریزی می کنیم» تغییر دهید، سپس روی ذخیره کلیک کنید.

آن را امتحان کنید!

در دستگاهتان، روی پیشنهاد قرار ملاقات ضربه بزنید یا «I want to get my bike fixed» را تایپ کنید. شما پاسخ "چه روزی می خواهید وارد شوید؟" به همراه چند پیشنهاد مفید: «فردا»، «یک هفته دیگر» و «دو هفته دیگر». یک تاریخ ("فردا") را مشخص کنید و پاسخی دریافت خواهید کرد که در آن زمان را می خواهید.

زمانی را انتخاب کنید، و پاسخ جدیدی را که ایجاد کرده‌اید می‌بینید که می‌پرسد آیا این برای سرویس است یا تنظیم.

بعد، "I need a repair" را وارد کنید. شما باید پاسخ «بسیار خوب، ما یک اصلاح را برنامه ریزی می کنیم» را ببینید، که نشان می دهد Dialogflow AppointmentType صحیح را به عنوان یک موجودیت استخراج کرده است.

در حال حاضر، پاسخ به این هدف ("بسیار خوب، ما برای رفع مشکل برنامه ریزی می کنیم.") بسیار مفید نیست. اگر پاسخ، تاریخ و ساعت تعیین وقت ملاقات را تأیید کند، عالی خواهد بود. برای انجام این کار، به تاریخ و زمان نیاز داریم، اما پارامترهای تاریخ و زمان فقط در هدف "ساخت قرار ملاقات" وجود دارد و در هدف "ساخت قرار - سفارشی" وجود ندارد.

مقاصد و زمینه ها

برای پاسخ دادن با پارامتری که از هدف "قرار ملاقات" جمع آوری شده است، باید بدانید که اهداف پیگیری چگونه کار می کنند. هدف‌های پیگیری از زمینه‌ها برای پیگیری اینکه آیا قصد والدین ایجاد شده است استفاده می‌کنند. اگر هدف "Make Appointment" را بررسی کنید، "MakeAppointment-followup" را می بینید که به عنوان یک زمینه خروجی فهرست شده است که با شماره 2 پیشگفتار شده است:

پس از تطبیق هدف "Make Appointment"، Dialogflow متن "MakeAppointment-followup" را برای دو نوبت به مکالمه متصل می کند. بنابراین، هنگامی که کاربر به این سوال پاسخ می دهد ("آیا به تعمیر نیاز دارید یا فقط تنظیم؟")، زمینه "MakeAppointment-followup" فعال است. هر هدفی که زمینه ورودی یکسانی داشته باشد، هنگامی که Dialogflow با مقاصد مطابقت دارد، به شدت مورد توجه قرار می گیرد.

روی Intents در ناوبری سمت چپ کلیک کنید، سپس روی هدف "MakeAppointment - custom" کلیک کنید.

می بینید که intent دارای همان زمینه ورودی ("MakeAppointment- followup") با زمینه خروجی "Make Appointment" است. به همین دلیل، "MakeAppointment - سفارشی" فقط پس از مطابقت با هدف "Make Appointment" مطابقت دارد.

زمینه ها و پارامترها

Contexts مقادیر پارامتر را ذخیره می کند، به این معنی که می توانید به مقادیر پارامترهای تعریف شده در هدف "Make Appointment" در مقاصد دیگری مانند "MakeAppointment - custom" دسترسی داشته باشید.

پاسخ زیر را به هدف "MakeAppointment - سفارشی" اضافه کنید و روی ذخیره کلیک کنید: "بسیار خوب، ما یک $AppointmentType، #MakeAppointment- followup.date، در #MakeAppointment-followup.time برنامه ریزی می کنیم. سپس شما را می بینیم."

اکنون می توانید دوباره از نماینده خود سوال کنید و پاسخ مناسب را دریافت کنید. ابتدا «آیا می‌توانم قرار ملاقاتی برای سرویس دوچرخه‌ام در ساعت 11 صبح فردا تنظیم کنم؟» را وارد کنید و سپس به سؤال «من نیاز به تعمیر دارم» پاسخ دهید.

در پاسخ تایید قرار ملاقات، باید ببینید که مقادیر پارامتر تاریخ و زمان از متن بازیابی شده است.

بهبود فرمت پاسخگویی

مدت زمان: 5:00

از تکمیل برای قالب بندی تاریخ و زمان استفاده کنید

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

با کلیک بر روی Intent در ناوبری سمت چپ، به هدف "Make Appointment - custom" بروید و سپس روی " MakeAppointment - custom" کلیک کنید. به پایین صفحه بروید و روی Enable webhook call for this intent تغییر دهید، سپس روی Save کلیک کنید.

با کلیک کردن روی پیوند Fulfillment در ناوبری سمت چپ، به سمت تحقق حرکت کنید. کد زیر را کپی کرده و در زیر تابع makeAppointment قرار دهید.

function makeAppointmentFollowUp(agent) {
    let context = agent.getContext('makeappointment-followup');

    // extract required parameters
    const appointmentDate = new Date(context.parameters.date);
    const appointmentTime = new Date(context.parameters.time);
    const appointmentType = agent.parameters.AppointmentType;

    // format date and time to be human-readable
    const dateAsString = appointmentDate.toLocaleDateString('en-US',
        { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
    const timeAsString = appointmentTime.toLocaleString('en-US',
        { hour: 'numeric', minute: 'numeric', hour12: true });

    // compose response for user
    let responseText = 'Okay, we'll schedule a ' + appointmentType + ', ' + dateAsString +
        ', at ' + timeAsString + '.  We'll see you then.';

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

در زیر این تابع، خط intentMap.set('Make appointment', makeAppointment); و intentMap.set('Make appointment - custom', makeAppointmentFollowUp); به طوری که وقتی هدف پیگیری فراخوانی می شود، تابعی که قبلا چسبانده اید فراخوانی می شود.

به کد makeAppointmentFollowUp نگاهی بیندازید و ببینید که چگونه پارامترها هم از متن ورودی و هم از این intent استخراج می شوند. قبل از اینکه responseText متن تولید شود، کد اکنون تاریخ و زمان را طوری قالب بندی می کند که قابل خواندن برای انسان باشد.

آن را امتحان کنید!

در دستگاهتان، روی پیشنهاد قرار ملاقات ضربه بزنید یا «I want to get my bike fixed» را تایپ کنید. شما پاسخ "چه روزی می خواهید وارد شوید؟" به همراه چند پیشنهاد مفید: «فردا»، «یک هفته دیگر» و «دو هفته دیگر». یک تاریخ ("فردا") را مشخص کنید و پاسخی دریافت خواهید کرد که در آن زمان را می خواهید.

زمانی را انتخاب کنید، و پاسخ جدیدی را که ایجاد کرده‌اید می‌بینید که می‌پرسد آیا این برای سرویس است یا تنظیم.

بعد، "I need a repair" را وارد کنید. شما باید پاسخ تایید قرار ملاقات را با نوع قرار، تاریخ و زمان در قالبی قابل خواندن ببینید.

شما تمام شده اید!

مدت زمان: 1:00

کارت خوب بود!

شما اکنون تمام مراحل ساخت یک عامل RBM را پشت سر گذاشته اید که توسط Dialogflow طراحی شده است.

از توسعه برای این پلت فرم جدید هیجان انگیز لذت ببرید!