Dialogflow CX: یک نماینده مجازی خرده فروشی بسازید

1. قبل از شروع

در این کد لبه، یاد خواهید گرفت که چگونه با Dialogflow CX ، یک پلتفرم هوش مصنوعی مکالمه (CAIP) برای ساخت رابط‌های کاربری مکالمه، یک چت بات خرده‌فروشی بسازید. Dialogflow CX می‌تواند عوامل مجازی را پیاده‌سازی کند، مانند: ربات‌های گفتگو، ربات‌های صوتی، دروازه‌های تلفن و می‌تواند چندین کانال را به بیش از ۵۰ زبان مختلف پشتیبانی کند.

این کد لبه شما را راهنمایی می کند که چگونه یک ربات چت وب سایت برای خرده فروشی بسازید. کسب و کار خیالی که ما در حال ساخت ربات چت برای آن هستیم، نام دارد: G-Records . جی رکوردز یک شرکت موسیقی راک است که در کالیفرنیا قرار دارد. این لیبل دارای 4 گروه راک است. Alice Googler ، G's N' Roses ، The Goo Fighters و The Google Dolls . جی رکوردز کالاهای گروه را به همه طرفداران راک می فروشد.

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

نتیجه نهایی

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

با این کار مزایای Dialogflow CX را در مقایسه با Dialogflow ES خواهید آموخت! این شامل مفاهیم زیر است:

  • نحوه ایجاد یک عامل مجازی Dialogflow CX در Google Cloud
  • نحوه ایجاد جریان را بیاموزید
  • نحوه ایجاد موجودیت ها را بیاموزید
  • یاد بگیرید که چگونه قصد ایجاد کنید
  • نحوه ایجاد صفحات و صفحات انتقال با کنترل کننده های حالت را بیاموزید
  • نحوه انتقال صفحات با مسیرهای هدف را بیاموزید
  • نحوه انتقال صفحات با پارامترها و مسیرهای شرایط را بیاموزید
  • نحوه برگرداندن پاسخ های شرطی با توابع سیستم را بیاموزید
  • نحوه ایجاد پیام های بازگشتی را بیاموزید
  • نحوه استفاده از شبیه ساز را یاد بگیرید
  • نحوه ایجاد موارد تست و پوشش تست را بیاموزید

طراحی نهایی عامل Dialogflow CX به این صورت خواهد بود:

نتیجه نهایی

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

  • برای ایجاد یک عامل Dialogflow CX به یک آدرس Google Identity / Gmail نیاز دارید.
  • دسترسی به Google Cloud

2. تنظیم محیط

یک پروژه Google Cloud ایجاد کنید

از آنجایی که Dialogflow CX در Google Cloud اجرا می شود، باید یک پروژه Google Cloud ایجاد کنید . یک پروژه تمام منابع Google Cloud شما را سازماندهی می کند. این شامل مجموعه‌ای از همکاران، APIهای فعال (و سایر منابع)، ابزارهای نظارتی، اطلاعات صورت‌حساب، و کنترل‌های احراز هویت و دسترسی است.

هنگامی که یک پروژه جدید ایجاد می کنید، باید نام پروژه را وارد کنید. و باید آن را به یک حساب صورتحساب و سازمان موجود مرتبط کنید.

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

یک پروژه جدید ایجاد کنید

Dialogflow API را فعال کنید

برای استفاده از Dialogflow، باید Dialogflow API را برای پروژه خود فعال کنید.

  1. پروژه ای را که می خواهید API را برای آن فعال کنید انتخاب کنید و روی Continue کلیک کنید.
  2. منوی APIs & Services را جمع کنید و روی Create Credentials کلیک کنید
  3. روی Application Data کلیک کنید
  4. بگویید نه، من از آنها استفاده نمی کنم زیرا شما در حال حاضر از Kubernetes Engine، App Engine یا Cloud Functions استفاده نمی کنید.
  5. روی Done کلیک کنید

راه اندازی اعتبار

یک عامل جدید Dialogflow CX ایجاد کنید

برای ایجاد یک عامل جدید Dialogflow CX، ابتدا کنسول Dialogflow CX را باز کنید:

  1. پروژه Google Cloud قبلا ایجاد شده را انتخاب کنید.
  2. روی ایجاد عامل کلیک کنید.

فرم تنظیمات اصلی عامل را تکمیل کنید:

  • شما می توانید هر نام نمایشی را انتخاب کنید.
  • به عنوان مکان انتخاب کنید: us-central1
  • منطقه زمانی مورد نظر خود را انتخاب کنید.
  • en - انگلیسی را به عنوان زبان پیش فرض انتخاب کنید

روی ایجاد کلیک کنید.

ایجاد عامل

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

3. جریان می یابد

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

جریان خرده فروشی

جریان ها به تیم ها اجازه می دهد تا روی مسیرهای مکالمه فردی کار کنند. یک تمرین خوب ساده کردن جریان است، بنابراین به راحتی روی صفحه قرار می گیرد و ماژولارتر است.

جریان ها یک مفهوم جدید برای Dialogflow CX هستند. Dialogflow Essentials مفهوم Mega Agents را دارد که به نوعی شبیه به جریان هستند. با این حال، شما اغلب از Flow استفاده می کنید.

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

بیایید برویم و چند جریان ایجاد کنیم.

ایجاد جریان

  1. در Dialogflow CX ، روی نماد + > ایجاد جریان کلیک کنید.
  2. نام را مشخص کنید: Catalog و enter را بزنید.

یک جریان ایجاد کنید

اولین کاتالوگ جریان شما ایجاد شده است. حالا سایر جریان ها را ایجاد کنید:

  • Order Process
  • My Order
  • Customer Care

جریان می یابد

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

جریان می یابد

شبیه ساز

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

  1. روی دکمه Test Agent در سمت راست بالای صفحه کلیک کنید.
  2. در قسمت گفتگو با نماینده بنویسید: Hello نماینده مجازی با یک متن خوشامدگویی پیش فرض پاسخ می دهد: سلام! چگونه می توانم کمک کنم؟

شبیه ساز

بیایید این متن خوشامدگویی پیش فرض را اصلاح کنیم.

جریان شروع پیش فرض

بیایید با ایجاد یک Intent Route شروع کنیم که پس از خوشامدگویی به نماینده مجازی فعال می شود.

  1. در نوار کناری Build > Flows ، روی Default Start Flow کلیک کنید و گره درخت شروع را انتخاب کنید.

با این کار صفحه شروع باز می شود. به طور خودکار صفحه شروع را در قسمت Build > Pages sidebar انتخاب می کند.

  1. در Start > Routes بر روی Default Welcome Intent کلیک کنید.

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

  1. تمام ورودی های Agent را حذف کنید و این متن جدید را اضافه کنید:

Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?

برای ساده‌سازی مکالمه، به چند دکمه پاسخ سریع / تراشه‌های پیشنهاد نیز نیاز داریم.

  1. روی گزینه Add dialogue > Custom payload کلیک کنید و از قطعه کد زیر استفاده کنید.
  2. از قطعه کد زیر به عنوان یک بار سفارشی استفاده کنید و Save را بزنید.

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

{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }

پیش‌فرض پیش‌فرض خوش‌آمدگویی

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

احتمالاً از خود می پرسید که چرا نمی توانید محتوای غنی را مشاهده کنید. این به این دلیل است که محتوای غنی مانند تراشه‌های پیشنهادی به یکپارچگی وابسته است. مراحل زیر نیاز به یک حساب صورت‌حساب دارند، اما اگر حسابی ندارید، می‌توانید از آنها صرفنظر کنید.

  1. در نوار کناری سمت چپ، روی Manage > Integrations کلیک کنید.
  2. Dialogflow Messenger را انتخاب کرده و روی Connect کلیک کنید.
  3. در پنجره بازشو روی Enable کلیک کنید.

یکپارچه سازی را فعال کنید

پنجره بازشو دیگری نشان داده می‌شود، این بار با کد جاوا اسکریپت یکپارچه که می‌توانید در وب‌سایت خود جایگذاری کنید تا مؤلفه Dialogflow Messenger را در وب‌سایت خود ادغام کنید. از آنجایی که ما هنوز وب سایت نداریم، عامل مجازی را مستقیماً در ابزار آزمایش خواهیم کرد.

Dialogflow Messenger اکنون امتحان کنید

  1. روی لینک Try Now کلیک کنید.
  2. روی نماد چت بات پایین سمت راست کلیک کنید تا پنجره چت باز شود. برای شروع گفتگو، Hello بنویسید.

Dialogflow Messenger اکنون امتحان کنید

در حال حاضر، وقتی روی تراشه های پیشنهاد کلیک می کنید، عامل مجازی منظور شما را متوجه نمی شود. این به این دلیل است که عامل مجازی ما هنوز بین حالت ها تغییر نمی کند. ما می توانیم این کار را در Dialogflow CX با Pages انجام دهیم. اجازه دهید آزمایشگاه را ادامه دهیم، ابتدا تعدادی Entity و Intent ایجاد می کنیم.

4. انواع موجودیت

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

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

موجودیت های جریان گفتگو

ایجاد موجودیت ها

بیایید یک موجودیت Artist ایجاد کنیم.

  1. روی Manage > Entity Types کلیک کنید
  2. روی + ایجاد کلیک کنید
  • نام نمایشی: Artist
  • نهادها:
  • The Google Dolls (با مترادف: Google Dolls )
  • The Goo Fighters (با مترادف: Goo Fighters )
  • G's N' Roses (با مترادف: Gs and Roses )
  • Alice Googler
  • روی گزینه های پیشرفته کلیک کنید و Fuzzy Matching را علامت بزنید. (اگر نام گروه را اشتباه نوشتید، ممکن است همچنان با موجودیت درست مطابقت داشته باشد.)
  • در گزینه های پیشرفته نیز Redact in log را علامت بزنید. (اگر نام گروه را اشتباه بنویسید، نام را در گزارش تصحیح می کند.)
  1. روی ذخیره کلیک کنید

ما همچنین به یک موجودیت برای مورد کالا نیاز داریم:

  1. روی Manage > Entity Types کلیک کنید
  2. روی + ایجاد کلیک کنید
  • نام نمایشی: Merch
  • نهادها:
  • T-shirt
  • Longsleeve (با مترادف: Longsleeve shirt )
  • Tour Movie
  • Digital Album (با مترادف: MP3 Album ، MP3 )
  • CD (با مترادف Disc ، Physical CD )
  1. روی ذخیره کلیک کنید

ما همچنین به یک موجودیت برای آلبوم نیاز داریم:

  1. روی Manage > Entity Types کلیک کنید
  2. روی + ایجاد کلیک کنید
  • نام نمایشی: Album
  • نهادها:
  • Live
  • Greatest Hits (با مترادف: Hits )
  1. روی ذخیره کلیک کنید

ما همچنین به یک موجودیت برای اندازه لباس نیاز داریم:

  1. روی Manage > Entity Types کلیک کنید
  2. روی + ایجاد کلیک کنید
  • نام نمایشی: ShirtSize
  • نهادها:
  • XS (با مترادف: Extra Small )
  • S (با مترادف: Small )
  • M (با مترادف: Medium )
  • L (با مترادف: Large )
  • XL (با مترادف: Extra Large )
  • 2XL (با مترادف: Extra Extra Large )
  • 3XL
  1. روی ذخیره کلیک کنید

و یک موجودیت برای اعداد سفارش ، که معمولاً 4 عددی و 3 عددی هستند. (مانند ABCD123)

  1. روی Manage > Entity Types کلیک کنید
  2. روی + ایجاد کلیک کنید
  • نام نمایشی: OrderNumber
  • موجودیت های Regexp
  • نهاد: [AZ]{4}[0-9]{3}
  1. روی ذخیره کلیک کنید

پیکربندی موجودیت شما باید مشابه شکل زیر باشد:

@هنرمند: @Artist نوع نهاد

@Merch: @Merch Entity نوع

@آلبوم: @Album Entity نوع

@ShirtSize: @ShirtSize نوع نهاد

@OrderNumber: @OrderNumber نوع نهاد

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

5. مقاصد

یک Intent قصد کاربر نهایی را برای یک نوبت مکالمه طبقه بندی می کند. آنها به طور چشمگیری در Dialogflow CX ساده شده اند، این دیگر بلوک ساختمانی برای کنترل مکالمه نیست. Dialogflow CX فقط از intent ها برای مطابقت با آنچه کاربران می گویند استفاده می کند. در Dialogflow ES، شما باید همه چیز را به یک هدف (پارامترها، رویدادها، تحقق و غیره) گره بزنید. Intent ها در Dialogflow CX فقط شامل عبارات آموزشی هستند و بنابراین قابل استفاده مجدد هستند. دیگر مکالمه را کنترل نمی کند. بنابراین روند ایجاد مقاصد مستقیم به جلو خواهد بود:

عبارات آموزشی در intent ها می توانند از Entities برای استخراج ورودی "متغیر" استفاده کنند، به همین دلیل است که تمرین خوبی است که انواع موجودیت خود را از قبل ایجاد کنید، کاری که در صفحه قبلی مراحل آزمایشگاهی انجام دادیم.

ایجاد مقاصد

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

  1. روی Manage > Intents کلیک کنید.
  2. روی + Create کلیک کنید

از جزئیات زیر استفاده کنید:

  • نمایش نام redirect.artists.overview
  • توضیحات Artists overview: The bands supported by the label

نیت جدید

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

  • Which bands are signed?
  • Which bands
  • Which artists
  • Which artists are part of the record label
  • Who is part of the label
  • From which bands can I buy merchandise
  • Band merchandise
  • Which music do you have?
  • I would like to know who are signed to the label
  • Who are supported by the label
  • From who can I buy shirts
  • What music can I order
  • Can I get an overview of all the artists

عبارات آموزشی

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

چند نکته را باید جستجو کرد:

  • توجه داشته باشید که با وارد کردن عبارت آموزشی خود، Dialogflow CX به طور خودکار موجودیت های شما را حاشیه نویسی می کند. اگر این کار را نکرد، ممکن است لازم باشد موجودیت خود را (با افزودن یک مترادف) یا با حاشیه نویسی دستی عبارت آموزشی خودتان به روز کنید.
  • عبارت‌های آموزشی کوتاه‌تر: سیستم NLU Dialogflow می‌تواند با عبارات آموزشی کوتاه‌تر نیز کار کند و ما در اینجا چند مثال ارائه کرده‌ایم.
  • تمرین بیش از حد: عبارات آموزشی بیش از حد برای یک هدف ممکن است باعث تمرین بیش از حد و نتیجه کمتر مطلوب شود. بهترین تمرین استفاده از تست تکراری و افزایشی و اضافه کردن عبارات آموزشی در مواردی است که هدفی مطابقت ندارد.

نام نمایشی

عبارات آموزشی

redirect.product.overview

"Which products do you sell?", "What merchandise items do you have?", "What are you selling?", "What are the items?", "Which products?" "What merchandise?", "Please tell me what you have"

confirm.artists.overview

"Yeah, let me buy merchandise", "Yes, I want to purchase something", "Yes, I would like to order merchandise from Alice Googler" (توجه: Alice Googler، باید به‌عنوان یک نهاد @Artist شناخته شود!) ، "Ok, let's buy stuff."

redirect.price

"How much does a t-shirt cost?", "What's the price for the tour movie?", "The album is how much?", "I want to know the price of a longsleeve shirt", "What's the price difference?", "What does each product costs?", "What does it cost?", "What is the price?"

redirect.product

"Tour movie", "I am interested in a t-shirt", "Can I buy a digital album?", "I want the CD", "I want to buy something", "Can I purchase a record?", "I want to buy a t-shirt size M of The Google Dolls", "Can I purchase the Alice Googler digital album?"

redirect.product.of.artist

"Yeah, let's shop", "Give me merch of Alice Googler", "Shirts of The Google Dolls that would be nice.", "Yes", "I want The Goo Fighters stuff", "Yes, I want to order merchandise", "Yep, give me items of G's N' Roses", "Go for it", "Anything Alice Googler", "I am a G's N' Roses fan!", "Google Dolls", "Yes of The Google Dolls"

redirect.shirts

"Shirts", "I want to buy shirts", "I am interested in shirts", "I want a shirt", "Shirts of G's N' Roses please", "Give me shirts of the Google Dolls", "I want to buy shirts of Alice Googler"

redirect.music

"Music", "I want to buy music", "I am interested in music", "Give me music of the Goo Fighters", "Music of Goo Fighters please", "Interested in buying the Alice Googler album", "Purchase Alice Googler music"

redirect.album

"Hits", "Live Album", "I want the Greatest Hits Digital Album", "Give me the Greatest Hits CD", "Hits on MP3"

redirect.shirt.size

"XS", "I have M", "I want Large", "My size is 3XL", "Extra Large is the size"

redirect.my.order

"About my order", "I have a question about my order", "My order is ABCD123, I have a question about my order."

status

redirect.my.order.status

redirect.my.order.canceled

"I want to cancel my order", "I want to cancel order ABCD123", "Please cancel order ABCD123", "Undo my order", "Stop my order", "Cancel"

redirect.shipping.info

"How long will it take?", "How long is shipping?", "How long does shipping take?", "When will I receive it?"

redirect.refund.info

"I want a refund.", "Can I get a refund", "I want to return the CD", "I want to return my t-shirt"

redirect.swapping.info

"I want to swap my item", "Can I change my t-shirt for a larger size?", "Can I change my product?", "I want to swap the CD"

redirect.order.process

"I want to buy a t-shirt of the Google Dolls, size S", "Let me buy the digital CD of Alice Googler", "Get me the tour movie of G's N' Roses", "Buy a longsleeve shirt of The Goo Fighters", "Purchase the Alice Googler t-shirt", "Please order me the Google Dolls CD"

confirm.proceed.order

"Yes", "Yes, please continue", "Yes order", "I want to order", "Yeah", "Yep", "I confirm", "Agree", "Go ahead", "Order", "Buy it", "Purchase", "Okay"

decline.proceed.order

"No", "I rather not", "I don't want it anymore", "Don't order", "Stop", "Not anymore", "Nope", "Go back", "Reset", "Decline", "I don't need it"

redirect.home

"Go back", "Home", "Help", "What else can I ask", "Restart", "Can you tell me what I can order?", "What questions can I ask", "I need help", "Advice please", "Hi", "Hello", "Good day!"

redirect.end

"No that's it, goodbye", "Bye", "Cheers", "End", "That's it", "No more questions", "Exit", "Have a good day", "End Call", "Close"

اکنون که عناصر قابل استفاده مجدد ما (جریان‌ها، موجودیت‌ها و اهداف) آماده شده‌اند، می‌توانیم این موارد را با ایجاد Pages و State Handlers کنار هم بگذاریم.

6. صفحات و کنترل کننده های ایالتی

یک مکالمه Dialogflow CX (یک جلسه) را می توان به عنوان یک ماشین حالت محدود توصیف و تجسم کرد. یک ماشین فروش را به عنوان مثال در نظر بگیرید، می توان آن را به عنوان یک ماشین حالت محدود مدل کرد. حالت های زیر را دارد: Waiting for Coins، Select Candy، Give Candy و با توجه به مجموعه ای از ورودی ها، بین آن حالت ها حرکت می کند. به عنوان مثال، قرار دادن یک سکه، ماشین فروش را از Waiting for coins به Select Candy منتقل می کند. صفحات نحوه مدل سازی این حالت ها برای یک عامل مجازی Dialogflow CX هستند.

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

برای هر جریان ، صفحات زیادی را تعریف می‌کنید، که در آن صفحات ترکیبی شما می‌توانند یک مکالمه کامل در مورد موضوع(هایی) که جریان برای آن طراحی شده است انجام دهد. هر جریان یک صفحه شروع ویژه دارد. هنگامی که یک جریان در ابتدا فعال می شود، صفحه شروع به صفحه فعلی تبدیل می شود. برای هر نوبت مکالمه، صفحه فعلی یا ثابت می ماند یا به صفحه دیگری منتقل می شود. این مفهوم به شما این امکان را می دهد که عوامل بزرگتر با صفحات زیاد و چندین نوبت مکالمه ایجاد کنید.

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

وضعیت یک مکالمه با مدیریت انتقال بین صفحات با سه نوع مسیر مختلف کنترل می شود:

  • مسیرهای هدف : زمانی که یک هدف باید مطابقت داشته باشد (مثلاً تغییر صفحه بر اساس آنچه کاربر نهایی می‌گوید). (خطوط آبی در نمودار بصری.)
  • مسیرهای شرطی : زمانی که یک شرط باید بررسی شود (مثلاً تغییر صفحه بر اساس پارامترهای خاصی که در جلسه ذخیره شده است) (خطوط نارنجی در نمودار بصری.)
  • کنترل‌کننده‌های رویداد : زمانی که یک رویداد بازگشتی خاص باید مدیریت شود (مثلاً مدیریت بدون ورودی، بدون تطبیق، به منظور ابهام‌زدایی کاربر نهایی از مسیر قصد یا شرط) (خطوط سبز در نمودار بصری.)

گفته های مکالمه (یعنی محتوا یا پاسخ به کاربر) با انجام تعریف می شود که می تواند ثابت یا پویا باشد:

  • انجام استاتیک : هنگامی که یک پاسخ تحقق ایستا ارائه می شود
  • تحقق پویا : زمانی که یک وب هوک تکمیل برای پاسخ‌های پویا فراخوانی می‌شود

برای ربات خرده‌فروشی خود، ما مسیرهای هدف ایجاد می‌کنیم و برخی پاسخ‌های انجام ورود ثابت ارائه می‌کنیم که به محض فعال شدن صفحه به کاربر ارائه می‌شود. بعداً، ما پارامترهایی را با مسیرهای شرط ایجاد خواهیم کرد تا اطلاعاتی را که برای سفارش کالا به آن نیاز دارید جمع آوری کنیم.

مسیرهای هدف صفحه

ایجاد صفحات در جریان شروع پیش فرض

در اینجا یک نمودار جریان از جریان شروع پیش فرض آمده است:

کاتالوگ صفحات متصل

بیایید با هم روی این کلیک کنیم:

  1. روی ساخت > جریان شروع پیش‌فرض کلیک کنید
  2. روی صفحه شروع کلیک کنید
  3. روی نماد + در کنار مسیرها کلیک کنید
  4. redirect.artists.overview را اضافه کنید
  5. به پایین بروید و به Transition بروید و به جریان کاتالوگ بروید.
  6. ذخیره را بزنید
  7. مراحل بالا را برای redirect.product.overview و 11 ردیف دیگر از این جدول تکرار کنید:

صفحه (در جریان)

مسیرها > هدف

مسیرها > انتقال به

شروع کنید

Default Welcome Intent

-

شروع کنید

redirect.artists.overview

جریان: کاتالوگ

شروع کنید

redirect.product.overview

جریان: کاتالوگ

شروع کنید

redirect.shirts

جریان: کاتالوگ

شروع کنید

redirect.music

جریان: کاتالوگ

شروع کنید

redirect.product

جریان: کاتالوگ

شروع کنید

redirect.product.of.artist

جریان: کاتالوگ

شروع کنید

redirect.refund.info

جریان: مراقبت از مشتری

شروع کنید

redirect.shipping.info

جریان: مراقبت از مشتری

شروع کنید

redirect.swapping.info

جریان: مراقبت از مشتری

شروع کنید

redirect.my.order

جریان: سفارش من

شروع کنید

redirect.my.order.canceled

جریان: سفارش من

شروع کنید

redirect.my.order.status

جریان: سفارش من

شروع کنید

redirect.end

صفحه: پایان جلسه

مسیرهای صفحه شروع پیش فرض

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

مسیرهای صفحه شروع پیش فرض

ایجاد صفحات در جریان کاتالوگ

رونوشت چت زیر به جریان کاتالوگ تعلق دارد:

> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.

From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!

We sell shirts, music or the tour movie.

Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.

Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"

هنگامی که موسیقی یا فیلم تور را انتخاب می کنید، دیالوگ متفاوت خواهد بود: برای موسیقی، دیالوگ به این صورت خواهد بود:

 > "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"

برای فیلم تور دیالوگ به این صورت خواهد بود:

 > "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?

در اینجا یک نمودار جریان از تمام صفحات موجود در جریان کاتالوگ آمده است:

کاتالوگ صفحات متصل

به پیچیدگی این جریان توجه کنید:

  • می‌توانم از سؤال چه هنرمندانی بگذرم و فوراً بپرسم «کدام کالاهای موجود هستند» .
  • از جریان شروع پیش‌فرض، می‌توانم بپرسم: «می‌خواهم تی‌شرت عروسک Google بخرم» یا «می‌خواهم چیزی بخرم». این بدان معناست که عامل مجازی برای پر کردن شکاف‌های این پارامترهای مورد نیاز، سؤالات بعدی را می‌پرسد. مستقیماً به صفحه محصول می‌پرد.
  • گفتگوی قیمت از صفحه قیمت می آید که دوباره استفاده خواهد شد.
  • اگرچه دیالوگ فیلم تور به نظر ساده ترین دیالوگ است، اما در واقع کار خاصی با آن انجام خواهیم داد. ما از این بخش گفتگو مجددا استفاده خواهیم کرد، بنابراین کاربران نهایی نیز می توانند آن را مستقیماً برای یکی از محصولات دیگر وارد کنند، در صورتی که همه اطلاعات را به طور همزمان تخصصی کنند:
 > "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"

بیایید ابتدا با اتصال صفحات شروع کنیم.

  1. روی ساخت > کاتالوگ کلیک کنید
  2. روی صفحه شروع کلیک کنید
  3. روی نماد + در کنار مسیرها کلیک کنید
  4. redirect.artists.overview را اضافه کنید
  5. به پایین بروید و به Transition بروید، Page را انتخاب کنید و گزینه: + new Page را انتخاب کنید
  6. از نام صفحه استفاده کنید: Artist Overview و Save را بزنید

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

  1. مراحل قبلی را می توان با صفحات، مقاصد و تحقق های زیر تکرار کرد. این جدول را در دست بگیرید. صفحه ، صفحه‌ای است که در جریان انتخاب می‌کنید، مسیرها > انتقال به جریان یا صفحه جدیدی است که می‌سازید و به آن انتقال می‌دهید.

صفحه (در جریان)

مسیرها > هدف

مسیرها > انتقال به

شروع کاتالوگ

redirect.artists.overview

نمای کلی هنرمند

شروع کاتالوگ

redirect.product

محصول

شروع کاتالوگ

redirect.product.overview

بررسی اجمالی محصول

شروع کاتالوگ

redirect.product.of.artist

بررسی اجمالی محصول

شروع کاتالوگ

redirect.shirts

پیراهن

شروع کاتالوگ

redirect.music

موسیقی

شروع کاتالوگ

redirect.end

پایان جلسه

شروع کاتالوگ

redirect.home

پایان جریان

نمای کلی هنرمند

redirect.product.of.artist

بررسی اجمالی محصول

حالا بیایید ادامه دهیم و اجرای ثابت بیشتری اضافه کنیم.

  1. در جریان کاتالوگ، روی صفحه نمای کلی هنرمند کلیک کنید.
  2. در قسمت Entry realizment روی Edit realizment کلیک کنید.
  3. از اجراهای ثابت زیر استفاده کنید ( Agent می گوید ):
  • The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
  1. روی ذخیره کلیک کنید
  2. در جریان کاتالوگ، روی صفحه نمای کلی محصول کلیک کنید.
  3. در قسمت Entry realizment روی Edit realizment کلیک کنید.
  4. از انجام استاتیک زیر استفاده کنید ( Agent می گوید ):
  • We sell shirts, music or the tour movie.
  1. ذخیره را بزنید.

پارامترهای صفحه

پارامترها برای گرفتن و ارجاع مقادیری که توسط کاربر نهایی در طول یک جلسه ارائه شده است استفاده می شود. هر پارامتر یک نام و یک نوع موجودیت دارد. @Artist و @Merch حداقل پارامترهایی هستند که باید برای سفارش کالا جمع آوری کنیم. برای تی‌شرت‌ها یا آستین‌های بلند، می‌خواهید @ShirtSize نیز جمع‌آوری کنید و اگر می‌خواهید موسیقی سفارش دهید، به یک @Carrier و @Album نیز نیاز دارید.

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

به عنوان مثال، می‌توانید پیام‌های تکمیل استاتیک سفارشی را در بخش Parameter ارائه دهید. اگر پارامتر مورد نیاز باشد، انجام این پارامترها نشان داده خواهد شد. این پیام های پاسخ به صف پاسخ اضافه خواهند شد. در طول نوبت یک نماینده، ممکن است (و گاهی اوقات مطلوب) چندین تحقق فراخوانی شود، که هر یک ممکن است یک پیام پاسخ ایجاد کند. Dialogflow این پاسخ ها را در یک صف پاسخ نگهداری می کند. برای مطالعه بیشتر درباره چرخه عمر صفحه، و ترتیبی که این تکمیل‌ها به صف پاسخ اضافه می‌شوند، Dialogflow CX Page Docs را بخوانید.

ایجاد پارامترها در صفحه نمای کلی هنرمند

بیایید برخی از پارامترهای صفحه را تعریف کنیم:

  1. در جریان کاتالوگ ، روی صفحه نمای کلی هنرمند کلیک کنید.
  2. روی + در بلوک Parameters کلیک کنید. پارامتر هنرمند را اضافه کنید:
  • نام نمایشی: artist
  • نوع نهاد: @Artist
  • مورد نیاز: بررسی کنید
  • Redact in log: بررسی کنید
  1. اکنون چند پیام تکمیل پارامتر سفارشی اضافه می کنیم. اگر پارامتر هنرمند هنوز توسط عامل مجازی جمع‌آوری نشده باشد، کاربر نهایی این پاسخ عامل را به صف پاسخ اضافه می‌کند:

From which of these artists would you like to order merchandise?

  1. یک گزینه گفتگوی دوم اضافه کنید که تراشه های پیشنهادی غنی را ارائه می دهد. روی گزینه Add dialogue کلیک کنید و از این کد (در JSON ) استفاده کنید:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

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

  1. به سمت پایین به بخش Reprompt event handlers بروید.
  2. روی Add event handler کلیک کنید و رویداد را انتخاب کنید: No-match default
  3. از تکمیل متن استاتیک رویداد زیر استفاده کنید:

I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?

  1. روی ذخیره کلیک کنید
  2. روی Add event handler کلیک کنید و رویداد را انتخاب کنید: No-input default
  3. از تکمیل متن استاتیک رویداد زیر استفاده کنید:

I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?

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

مسیرهای وضعیت صفحه

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

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

Dialogflow CX به طور خودکار مقادیر پارامتر ارائه شده توسط کاربر نهایی را در هنگام پر کردن فرم تنظیم می کند. برای بررسی اینکه آیا فرم کامل صفحه فعلی پر شده است، از شرط زیر استفاده کنید: $page.params.status = "FINAL"

ایجاد مسیرهای مشروط در صفحه نمای کلی هنرمند

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

  1. در صفحه نمای کلی هنرمند ، روی نماد + در قسمت Routes کلیک کنید.
  2. به قسمت Condition پایین بروید.
  3. حداقل یکی را انتخاب کنید (OR)
  4. در مرحله بعد، عبارتی را می نویسیم که
  • پارامتر: $page.params.status
  • اپراتور: =
  • مقدار: "FINAL"
  1. اکنون، یک پیغام انجام استاتیک خاص در مسیر ایجاد می کنیم که انتخاب کاربر نهایی را تایید می کند. به بلوک Fulfillment بروید و پیام های تکمیل زیر را بنویسید:
  • $session.params.artist, great choice! Rock on!
  • You want to rock with $session.params.artist merchandise. Awesome!
  1. وقتی شرط درست است، باید به صفحه نمای کلی محصول منتقل شوید. به بخش انتقال به پایین بروید و از صفحه زیر استفاده کنید: Product Overview
  2. ذخیره را بزنید.

پارامترها

ایجاد مسیرها در صفحه نمای کلی محصول

اکنون که می دانیم چگونه می توانید پارامترها و مسیرهای شرطی ایجاد کنید، بیایید پارامترهای بیشتری برای صفحات زیر ایجاد کنیم:

بررسی اجمالی محصول

  1. ایجاد پارامتر artist در صفحه نمای کلی محصول :
  • نام نمایشی: artist
  • نوع نهاد: @Artist
  • مورد نیاز: بررسی کنید
  • Redact in log: بررسی کنید
  • انجام فوری اولیه: From which of these artists would you like to order merchandise?
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • رویداد Handler > No-match default : To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
  • محموله سفارشی:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • رویداد Handler > No-input default : To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention?
  • محموله سفارشی:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. ایجاد پارامتر merch :
  • نام نمایشی: merch
  • نوع نهاد: @Merch
  • مورد نیاز: بررسی کنید
  • Redact in log: بررسی کنید
  • تحقق: Which merchandise item do you want?
  • کلیک کنید: گزینه افزودن گفتگو > بار سفارشی :
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • رویداد Handler > No-match default
  • اجرای رویداد: We sell Shirts, Music or the Tour movie. Which of these items do you want?
  • محموله سفارشی:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • رویداد Handler > No-input default
  • اجرای رویداد: I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want?
  • محموله سفارشی:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  1. مسیری ایجاد کنید که برای زمانی که artist ارائه می شود و کالای merch ارائه می شود، به صفحه محصول منتقل می شود.
  • وضعیت:
  • مطابقت با هر قانون (AND)
  • عبارت: $session.params.artist != null
  • عبارت: $session.params.merch != null
  • تکمیل: Alright! $session.params.merch of $session.params.artist, let's go!
  • انتقال: صفحه: Product
  1. یک مسیر برای زمانی که کاربر می گوید "Shirts" ایجاد کنید
  • هدف: redirect.shirts
  • انتقال: صفحه: Shirts
  1. یک مسیر برای زمانی که کاربر می گوید "موسیقی" ایجاد کنید
  • هدف: redirect.music
  • انتقال: صفحه: Music
  1. یک مسیر برای زمانی که کاربر اطلاعات قیمت را می خواهد ایجاد کنید
  • هدف: redirect.price
  • انتقال: ایجاد صفحه جدید: Price

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

شروع جریان کاتالوگ

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

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

صفحه پیراهن:

  1. تنظیمات زیر را در صفحه پیراهن ایجاد کنید:
  • ثبت نام: Do you want a longsleeve or a t-shirt?
  • محموله سفارشی تکمیل ورودی:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. یک مسیر هدف ایجاد کنید: redirect.price با انتقال به صفحه Price
  2. پارامتر زیر را ایجاد کنید:
  • پارامتر: merch - نوع نهاد: @Merch , Required و Redact in log
  • Parameter > Event Handler > No-match default
  • Parameter > Event Handler Fulfillment: You can choose between a t-shirt or a longsleeve. Which of these do you want?
  • Parameter > Event Handler Fulfillment Payload Custom:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  • Parameter > Event Handler > No-input default
  • Parameter > Event Handler Fulfillment: I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want?
  • Parameter > Event Handler Fulfillment Payload Custom:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  1. روی تکمیل ورودی کلیک کنید و به قسمت از پیش تنظیمات پارامتر بروید، هر بار که صفحه پیراهن ها فعال می شود، پارامتر دسته روی پیراهن ها تنظیم می شود:

پارامتر

ارزش

category

shirts

  1. یک مسیر مشروط اضافه کنید:
  • حداقل یک قانون را مطابقت دهید (OR)
  • عبارت: $session.params.merch = "T-shirt"
  • عبارت: $session.params.merch = "Longsleeve"
  • انتقال به صفحه جدید: Shirt Size

صفحه قیمت:

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

  1. تنظیمات زیر را در صفحه قیمت ایجاد کنید:
  • انجام ورودی: PRICE TODO

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

  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $session.params.category = "shirts"
  • عبارت: $session.params.merch = "null"
  • انتقال به صفحه جدید: Shirts
  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $session.params.category = "shirts"
  • عبارت: $session.params.size = "null"
  • انتقال به صفحه جدید: Shirt Size
  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $session.params.category = "music"
  • عبارت: $session.params.album = "null"
  • انتقال به صفحه جدید: Music
  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $session.params.category = "music"
  • عبارت: $session.params.merch = "null"
  • انتقال به صفحه جدید: Carrier
  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $session.params.category = "null"
  • انتقال به صفحه جدید: Product Overview

صفحه سایز پیراهن:

  1. تنظیمات زیر را در صفحه اندازه پیراهن ایجاد کنید:
  • تکمیل ورودی: What shirt size do you want?
  • محموله سفارشی تکمیل ورودی:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. یک مسیر Intent ایجاد کنید: redirect.price با انتقال به صفحه Price .
  2. پارامتر زیر را ایجاد کنید:
  • پارامتر: shirtsize - نوع نهاد: @ShirtSize - Required ، Redact In Log
  • Parameter > Event Handler > No-match default
  • Parameter > Event Handler Fulfillment: Please tell me the shirt size, such as XL.
  • Parameter > Event Handler Fulfillment Payload Custom:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  • Parameter > Event Handler > No-input default
  • Parameter > Event Handler Fulfillment: I couldn't understand the shirt size. What size do you want?
  • Parameter > Event Handler Fulfillment Payload Custom:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $page.params.shirtsize != "null"
  • انتقال به صفحه: Product

صفحه موسیقی:

  1. تنظیمات زیر را در صفحه موسیقی ایجاد کنید:
  • تکمیل ورودی: We have a Greatest Hits Album or the Live Album. Which one do you want?
  • محموله سفارشی تکمیل ورودی:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. یک مسیر هدف ایجاد کنید: redirect.price با انتقال به Page: Price .
  2. پارامتر زیر را ایجاد کنید:
  • پارامتر: album - نوع موجودیت: @Album - Required , Redact In Log
  • Parameter > Event Handler > No-match default
  • Parameter > Event Handler Fulfillment: You can choose between Greatest Hits and Live Album. Which of these do you want?
  • Parameter > Event Handler Fulfillment Payload Custom:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  • Parameter > Event Handler > No-input default
  • Parameter > Event Handler Fulfillment: I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want?
  • Parameter > Event Handler Fulfillment Payload Custom:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  1. روی تکمیل ورودی کلیک کنید و به قسمت از پیش تنظیمات پارامتر بروید، هر بار که صفحه موسیقی فعال می شود، پارامتر دسته روی موسیقی تنظیم می شود:

پارامتر

ارزش

category

music

  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $page.params.album != "null"
  • انتقال به صفحه: Carrier

صفحه حامل:

  1. تنظیمات زیر را در صفحه حامل ایجاد کنید:
  • اجرای ورودی: Do you want this album on CD or MP3?
  • محموله سفارشی تکمیل ورودی:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. یک مسیر قصد ایجاد کنید: redirect.price که به صفحه Price منتقل می شود.
  2. پارامتر زیر را ایجاد کنید:
  • پارامتر: merch - نوع نهاد: @Merch - Required ، Redact In Log
  • Parameter > Event Handler > No-match default
  • Parameter > Event Handler Fulfillment: Do you want a physical CD or the digital album?
  • Parameter > Event Handler Fulfillment: payload سفارشی:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "Digital Album"
            }
          ]
        }
      ]
    ]
  }
  • Parameter > Event Handler > No-input default
  • Parameter > Event Handler Fulfillment: I couldn't understand if you mean CD or MP3. Which one do you want?
  • Parameter > Event Handler Fulfillment: payload سفارشی:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            }
          ]
        }
      ]
    ]
  }
  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $page.params.merch != "null"
  • انتقال به صفحه: Product

صفحه محصول:

  1. پارامترهای زیر را ایجاد کنید:

پارامتر نمایش نام

نوع نهاد پارامتر

چک ها

artist

@Artist

مورد نیاز، ویرایش در ورود به سیستم

merch

@Merch

مورد نیاز، ویرایش در ورود به سیستم

  1. پارامتر هنرمند به انجام فوری اولیه زیر نیاز دارد، که وقتی هنرمند شناخته نشده باشد نشان داده خواهد شد. You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help?
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Which artists?"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • همچنین یک کنترل‌کننده رویداد No-input default با تکمیل اضافه کنید: I couldn't understand what you just said. Ask me which artists are signed.
  • و یک کنترل‌کننده رویداد No-match default با تکمیل: I missed that. Please ask me which artists are signed.
  1. پارامتر کالا به کنترل‌کننده‌های رویداد reprompt نیز نیاز دارد.
  • یک کنترل‌کننده رویداد No-input default با تکمیل اضافه کنید: I couldn't understand what you just said. Which merchandise item do you want?
  • و یک کنترل‌کننده رویداد No-match default با تکمیل: I missed that. Which merchandise item do you want?

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

  1. یک مسیر مشروط اضافه کنید:
  • مطابقت با هر قانون (AND)
  • عبارت: $session.params.artist != null
  • عبارت: $session.params.merch = "Tour Movie"
  • تنظیمات از پیش تعیین شده پارامتر افزودن پارامتر > price = 25
  • انتقال به صفحه جدید: Confirmation

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

  1. یک مسیر مشروط اضافه کنید:
  • عبارت سفارشی: $session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null
  • تنظیمات از پیش تعیین شده پارامتر افزودن پارامتر > price = 25
  • انتقال به صفحه: Confirmation

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

  1. یک مسیر مشروط اضافه کنید:
  • عبارت سفارشی: $session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null
  • تنظیمات از پیش تعیین شده پارامتر افزودن پارامتر > price = 30
  • انتقال به صفحه: Confirmation

مسیر بعدی زمانی به صفحه تایید منتقل می شود که هنرمند شناخته شود و کاربر یک "CD" را انتخاب کند و نام آلبوم نیز انتخاب شود.

  1. یک مسیر مشروط اضافه کنید:
  • عبارت سفارشی: $session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null
  • تنظیمات از پیش تعیین شده پارامتر افزودن پارامتر > price = 15
  • انتقال به صفحه: Confirmation

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

  1. یک مسیر مشروط اضافه کنید:
  • عبارت سفارشی: $session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null
  • تنظیمات از پیش تعیین شده پارامتر افزودن پارامتر > price = 10
  • انتقال به صفحه: Confirmation

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

  1. یک مسیر مشروط اضافه کنید:
  • عبارت سفارشی: $session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null
  • تحقق: I would also need to know which album you would like to buy!
  • انتقال به صفحه: Music

و آخرین مسیر زمانی به صفحه تایید منتقل می شود که هنرمند شناخته شود و کاربر یک "تی شرت" یا "آستین بلند" را انتخاب کند، اما زمانی که اندازه تی شرت انتخاب نشده باشد.

  1. یک مسیر مشروط اضافه کنید:
  • عبارت سفارشی: $session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null
  • برآورده شدن: I would also need to know which shirt size you need!
  • انتقال به صفحه: Shirt Size

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

7. پاسخ های مشروط

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

if [condition]
  [response]
elif [condition]
  [response]
elif [condition]
  [response]
else
  [response]
endif
  • مثالی از یک [شرط] می تواند این باشد: $session.params.user-age >= 21 . از قالب بندی مشابه شرایط موجود در مسیرها استفاده می کند.
  • یک [پاسخ] پاسخ متن ایستا را می گیرد
  • پاسخ های مشروط همیشه با if شروع می شوند
  • بلوک های elif و else اختیاری هستند

Dialogflow CX همچنین می تواند از توابع داخلی سیستم برای استفاده استفاده کند. برای مثال برای قالب‌بندی تاریخ یا زمان، یا نمایش زمان فعلی ( $sys.func.NOW() )

بیایید جریان کاتالوگ را با اصلاح صفحات تایید و قیمت نهایی کنیم.

صفحه تایید:

اکنون صفحه تایید را می سازیم. الزامات زیر را دارد:

  • اگر کالا سی دی یا آلبوم دیجیتال است. فیلدهای زیر را در تأیید نشان خواهیم داد: هنرمند ، کالا ، آلبوم و قیمت .
  • اگر کالا تی شرت یا آستین بلند است. فیلدهای زیر را در تأیید نشان خواهیم داد: هنرمند ، کالا ، اندازه و قیمت .
  • در غیر این صورت (و به این ترتیب اگر کالا فیلم تور باشد). فیلدهای زیر را در تأیید نشان خواهیم داد: هنرمند ، کالا و قیمت .
  1. روی صفحه تایید کلیک کنید.
  2. روی Edit Fulfillment > Agent Responses > Add option dialog > Conditional Response کلیک کنید:
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
  The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
  A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
  The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
  It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
  1. Create the following Custom payload:
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Yes, confirm"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

Next, create two intent routes:

  1. confirm.proceed.order transitions to: Order Process Flow.
  2. decline.proceed.order transitions to End Flow

When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.

  1. In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:

Parameter

Value

artist

null

merch

null

shirtsize

null

category

null

album

null

price

null

restart

true

Notice that we have created an additional parameter called restart. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.

  1. Click on the Default Start Flow, Start Page, and create another Conditional Route:
  • $session.params.restart = "true"
  • Fulfillment: "Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?"
  • Custom payload:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }
  1. Select the Start Page and click on the redirect.end intent. Create the following fulfillment: Thank you for contacting G-Records! Have a nice day!

Price Page:

Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:

  • Delete the Agent Says entry fulfillment.
  • Create a new Conditional Response:
if $session.params.category = "shirts"
  A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
  A CD costs $15. The digital album on MP3 costs $10.
else
  A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif

Conditional Responses

Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:

8. Wrapping up the agent

We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.

Creating the My Order Flow

  1. Go to the My Order Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

My Order Start

redirect.my.order

My Order

My Order Start

redirect.my.order.status

My Order Status

My Order Start

redirect.my.order.canceled

My Order Cancellation

My Order Start

redirect.end

End Session

My Order Start

redirect.home

End Flow

My Order

redirect.my.order.status

My Order Status

My Order

redirect.my.order.canceled

My Order Cancellation

Default Start Flow

redirect.my.order.canceled

Flow: My Order

Default Start Flow

redirect.my.order.status

Flow: My Order

  1. Let's create the following entry fulfillment for the My Order Page:
  • Entry fulfillment: I can look up the status of your order, or I can cancel an order.
  1. In the My Order Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required: checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. Create the following conditional route:
  • Customize Expression: $page.params.status = "FINAL"
  • Fulfillment: And do you want to Cancel your order, or should I look up the status?
  1. Click on Add state handler > Event Handlers and create the Event Handler: No-input default
  • Fulfillment: I'm sorry, what was that? Would you like me to cancel an order or look up the status?
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Status"
          },
          {
            "text": "Cancel"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. Create the Event Handler: No-match default
  • Fulfillment: Would you like me to cancel an order or lookup the status?
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Status"
          },
          {
            "text": "Cancel"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. In the My Order Status Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. In the My Order Status Page create the following conditional route:
  • Customize Expression: $session.params.ordernumber != null
  • Fulfillment: Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items.
  • Add dialogue option > Text: Is there anything else I can help you with?
  1. In the My Order Cancelation Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. In the My Order Cancelation Page create the following conditional route:
  • Customize Expression: $session.params.ordernumber != null
  • Fulfillment: Your order $session.params.ordernumber has been canceled.
  • Add dialogue option > Text: Is there anything else I can help you with?
  1. Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"

And:

>"What's the status of order DEFG222"
  1. Select the Start Page and click on the redirect.end intent. Create the following fulfillment: Thank you for contacting G-Records! Have a nice day!
  2. Select the Start Page and click on the redirect.home intent. Create the following parameter preset: restart = true

Default Negative intents (Fallback)

When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.

  1. Try in the simulator: I don't like Alice Googler.

You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.

  1. Go to Manage > Intents and select the Default Negative Intent.
  2. Add the following training phrases that will trigger the No-match event.
  • I don't like Alice Googler
  • I am not a fan of G's N' Roses
  • I can't stand the music of the Google Dolls
  1. Hit Save and test the following sentence in the simulator: I am really not a fan of the Goo Fighters

This time the No-match event was triggered, you stayed on the Start Page.

Default Fallback Messages

  1. Click the Default Start Flow, select the sys.no-input-default event handler.

The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:

  1. Remove all answers, and add these text dialogues:
  • I'm sorry, I didn't receive an answer. Can you say it again?
  • I missed your answer, can you say it again?
  • Sorry, I didn't hear anything. Can you say it again?
  • I couldn't hear what you were saying, what was that?
  • I'm sorry, I missed your answer. What were you trying to say?

Don't forget to click Save.

  1. Click the Default Start Flow, select the sys.no-match-default event handler.

The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.

  1. Remove all answers, and add these text dialogues:
  • Sorry, I didn't get that. Can you please rephrase?
  • I'm sorry, I don't understand. Can you please rephrase?
  • I don't understand, please rephrase.
  • Sorry, I didn't get that. What was that?
  • I didn't get that, can you please rephrase?

Don't forget to click Save.

  1. It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.

Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.

Creating the Order Process Flow

  1. Go to the Order Process Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

Order Process Start

redirect.end

End Session

Order Process Start

redirect.home

End Flow

Order Process Start

confirm.proceed.order

New Page: Shipping Details

  1. Let's create the following entry fulfillment for the Shipping Details Page:
  • Entry fulfillment: To complete your order I will first need to collect your shipping details.
  1. Create the following parameters:

These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.

Parameter Display name

Entity

Required?

Initial prompt fulfillment

No-match default

No-input default

firstname

@sys.person

Required

What's your first name?

I'm sorry I missed that. What's the first name?

I'm sorry, I didn't understand. What's the first name?

lastname

@sys.person

Required

What's your last name?

I'm sorry I missed that. What's the last name?

I'm sorry, I didn't understand. What's the last name?

address

@sys.address

Required

What's your address?

I missed that. What's the address?

I'm sorry, I didn't understand. What's the address?

zipcode

@sys.any

Required

What postal code or zipcode do you have?

I'm sorry, what's the zip or postal code? For example: 1234AB or 10001.

I'm sorry, I didn't understand. What's the zip or postal code? For example: 1234AB or 10001.

city

@sys.geo-city

Required

What's the name of the city?

I missed that, what's the name of the city?

I'm sorry, I didn't understand. What's the name of the city?

country

@sys.geo-country

Required

What's the name of the country?

I missed that, what's the name of the country?

I'm sorry, I didn't understand. What's the name of the country?

email

@sys.email

Required

Lastly, what's your email address?

I am sorry. What's the email address? For example name@domain.com.

I am sorry, I didn't understand. What's the email address? For example name@domain.com.

  1. Create the following conditional route:
  • Customize Expression: $page.params.status = "FINAL"
  • Transition to new Page: Payment Details
  1. Create the following entry fulfillment.

Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:

  • Agent Says:
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
  • Conditional Response
if $session.params.merch != "Digital Album"
  Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
  Your merchandise will be shipped to:
  $session.params.firstname $session.params.lastname
  $session.params.address
  $session.params.zipcode $session.params.city
  $session.params.country
  To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
  The total costs will be: $$session.params.price.
  After purchasing the digital album, you will receive an email with the download link.
  To continue the order process please explicitly say "I confirm".
  Do you want to confirm your $session.params.artist $session.params.merch order?
endif
  1. Intent Route زیر را ایجاد کنید
  • هدف: confirm.proceed.order
  • نماینده می گوید: Thank you for your order! Your merchandise will be shipped today!
  • افزودن گزینه گفتگو > متن: Here's the order number: ABCD123 .
  • افزودن گزینه گفتگو > متن: Have a good day!
  • انتقال: End Session
  1. صفحه شروع را انتخاب کنید و روی intent redirect.end کلیک کنید. تکمیل زیر را ایجاد کنید: Thank you for contacting G-Records! Have a nice day!
  2. صفحه شروع را انتخاب کنید و روی redirect.home intent کلیک کنید. پیش تنظیم پارامتر زیر را ایجاد کنید: restart = true

عالی! در حال حاضر ما یک ربات چت خرده‌فروشی کاملاً فعال در دنیای واقعی داریم! در آزمایشگاه بعدی، عملکرد عامل مجازی را بررسی خواهیم کرد!

9. عامل مجازی خود را تست کنید

می توانید از شبیه ساز داخلی برای تست دیالوگ های عامل مجازی خود استفاده کنید. مزیت آزمایش جریان‌ها در شبیه‌ساز این است که یک نمای کلی خوب از جریان‌ها، صفحات، پارامترها و رویدادهای (DTMF) که شبیه‌ساز هنگام قدم زدن در جریان‌های شما جمع‌آوری کرده است، خواهید دید. این امر آزمایش را آسان تر از آزمایش مستقیم آن در یک ادغام می کند، زیرا این نوع اطلاعات از کاربر نهایی پنهان می شود. حتی امکان ایجاد موارد آزمایشی، ذخیره و استفاده مجدد از آن موارد آزمایشی وجود دارد. این بسیار منطقی است، زیرا زمانی که جریان های خود را در طول زمان حفظ یا ویرایش می کنید، و می خواهید مطمئن باشید که هیچ یک از تغییرات شما کار قبلی شما را خراب نمی کند.

همچنین امکان صادرات و وارد کردن موارد آزمایشی ساخته شده قبلی، با ذخیره آزمایشات در Google Cloud Storage یا محلی وجود دارد. با صادر کردن یک آزمایش، یک فایل blob بارگیری می شود. برای کسب اطلاعات بیشتر در مورد شبیه‌ساز و موارد آزمایشی ، Simulator / Test Cases Docs را بررسی کنید.

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

ایجاد جریان مراقبت از مشتری

  1. به «جریان مراقبت از مشتری» بروید و انتقال‌های هدف زیر را ایجاد کنید:

صفحه (در جریان)

مسیرها > هدف

مسیرها > انتقال به

شروع مراقبت از مشتری

redirect.shipping.info

حمل و نقل

شروع مراقبت از مشتری

redirect.refund.info

بازپرداخت

شروع مراقبت از مشتری

redirect.swapping.info

مبادله

شروع مراقبت از مشتری

redirect.home

پایان جریان

شروع مراقبت از مشتری

redirect.end

پایان جلسه

جریان مراقبت از مشتری

  1. تکمیل ورودی های زیر را برای صفحه حمل و نقل ایجاد کنید:
  • Shipping physical merchandise items can take up to 2 weeks.
  • Is there anything else I can help you with?
  1. موارد زیر را برای صفحه بازپرداخت ایجاد کنید:
  • We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
  • Is there anything else I can help you with?
  1. تکمیل‌های ورودی زیر را برای صفحه تعویض ایجاد کنید:
  • If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
  • Is there anything else I can help you with?
  1. صفحه شروع را انتخاب کنید و روی intent redirect.end کلیک کنید. تکمیل زیر را ایجاد کنید: Thank you for contacting G-Records! Have a nice day!
  2. صفحه شروع را انتخاب کنید و روی redirect.home intent کلیک کنید. پیش تنظیم پارامتر زیر را ایجاد کنید: restart = true

موارد آزمایشی ایجاد کنید

  1. روی دکمه Test Agent در سمت راست صفحه کلیک کنید.

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

  1. نوع: Hi

جریان مراقبت از مشتری

  1. بپرسید: Which artists are signed with your label?
  2. بگویید: The Google Dolls
  3. بگویید: I am interested in buying a shirt
  4. بگو: A t-shirt
  5. بگو: Medium
  6. حالا روی دکمه save test case کلیک کنید. که می‌توانید در بالای شبیه‌ساز پیدا کنید (کنار پیکان تکرار و بازنشانی نماد سطل زباله)

جریان مراقبت از مشتری

  1. جزئیات زیر را به آن بدهید:
  • نام مورد آزمایشی: Buy Google Dolls t-shirt size M
  • برچسب‌ها: #کاتالوگ، #پیراهن، #تیشرت، #TheGoogle Dolls
  1. روی ذخیره کلیک کنید

بیایید موارد آزمایشی بیشتری ایجاد کنیم.

  1. ابتدا گفتگوی فعلی را با کلیک بر روی نماد Reset (Trash bin) پاک کنید.
  2. موارد تست زیر را ایجاد کنید:

خرید تی شرت آلیس گوگلر:

>"Buy the Alice Googler t-shirt."
>"XL"
  • نام مورد آزمایشی: Buy the Alice Googler t-shirt
  • برچسب‌ها: #catalog, #shirts, #t-shirt, #AliceGoogler

یک تی شرت سایز M بخرید: (توجه داشته باشید که نام هنرمند ذکر نشده است، اما می خواهید از مرور کلی نوارها، نمای کلی محصولات، پیراهن ها و صفحات اندازه پیراهن صرفنظر کنید)

>"Buy a t-shirt size M"
>"The Google Fighters"
  • نام کیس تست: Buy a t-shirt size M
  • برچسب‌ها: #catalog, #shirts, #t-shirt, #TheGoogleFighters
  • توضیحات: (توجه داشته باشید که نام هنرمند ذکر نشده است، اما می خواهید از نمای کلی باندها، نمای کلی محصولات، صفحات پیراهن و اندازه پیراهن صرفنظر کنید)

خرید Music of G's N' Roses (توجه داشته باشید با این کار از نمای کلی گروه ها و صفحه نمای کلی محصولات صرفنظر می شود)

>"Purchase music of G's N' Roses"
>"Live"
>"CD"
  • نام مورد آزمایشی: Purchase music of G's N' Roses
  • برچسب‌ها: #catalog, #music, #CD, #GsNRoses, #live
  • توضیحات: (توجه داشته باشید که با این کار از نمای کلی باندها و صفحه نمای کلی محصولات صرفنظر می شود)

بررسی اطلاعات قیمت:

>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
  • نام مورد آزمایشی: Price info
  • برچسب‌ها: #catalog, #music, #tourmovie, #shirts
  • توضیحات: اطلاعات قیمت را در مورد نکات مختلف در گفتگو آزمایش کنید

موارد تست از پیش ثبت شده را آزمایش کنید

  1. Manage > Test Cases را در منوی اصلی Dialogflow در سمت چپ انتخاب کنید.
  2. تمام موارد تست را انتخاب کنید و دکمه Run را در بالای جدول فشار دهید.

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

موارد تست

  1. در شبیه ساز سوال زیر را بپرسید: How long will shipping take?
  2. نتیجه را یادداشت کنید و مورد آزمایشی را به عنوان Shipping با برچسب: #shipping ذخیره کنید.
  3. به پنل Manage > Test Cases بروید و دکمه Run را در سمت راست بالای شبکه فشار دهید تا فقط مورد آزمایش Shipping اجرا شود.

این آزمون باید قبول شود.

  1. به Care Care Flow برگردید، صفحه شروع را انتخاب کنید و روی هدر Routes کلیک کنید.

این یک صفحه با یک شبکه نشان می دهد که تمام مسیرها را نشان می دهد.

  1. redirect.shipping.info route بردارید
  2. به پنل Manage > Test Cases بروید و دکمه Run را در سمت راست بالای شبکه فشار دهید تا فقط مورد آزمایش Shipping اجرا شود.

این آزمون باید شکست بخورد.

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

در این مورد، آزمایش با پیغام خطای زیر ناموفق بود:

Page: Page mismatch:
Expected: Shipping
Actual: Start Page

دلیل این امر این است که صفحه دیگر در جریان وجود ندارد. ما انتظار داشتیم که صفحه Shipping ، اما در عوض هرگز از صفحه Start دور نشدیم. (یا کاربران نهایی شما یک پیام بازگشتی دریافت خواهند کرد.)

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

  1. به «جریان مراقبت از مشتری» برگردید و redirect.shipping.info به عنوان یک مسیر هدف، به صفحه شروع اضافه کنید. فراموش نکنید که به صفحه حمل و نقل منتقل شده و ذخیره را فشار دهید.
  2. در شبیه‌ساز، مورد آزمایشی زیر را ضبط کنید: I want to swap my item ، این مورد آزمایشی را با نام Swapping #swapping ذخیره کنید.
  3. Manage >Intents > redirect.refund.info را باز کنید و عبارت آموزشی زیر را اضافه کنید: I want to swap this item for a refund

بدون آن عبارت آموزشی، وقتی کاربر درخواست تغییر یک مورد را برای بازپرداخت می‌کند، هدف redirect.swapping.info را می‌زند، اما ما نمی‌خواهیم اطلاعاتی در مورد تغییر موارد ارائه دهیم، بلکه می‌خواهیم اطلاعاتی درباره بازپرداخت بدهیم.

  1. مورد آزمایشی طلایی زیر را ایجاد کنید: I want to swap this item for a refund و این مورد آزمایشی را به عنوان Swap for Refund #refund ذخیره کنم.
  2. به Manage >Intents > redirect.refund.info برگردید و خط I want to swap this item for a refund را حذف کنید.
  3. به Manage > Test Cases برگردید، گزینه Swap for Refund test را انتخاب کنید و آن را اجرا کنید .

آخرین آزمایش شما با پیام خطای زیر ناموفق بود:

If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
 Page: Page mismatch:
Expected: Refund
Actual: Swapping

به عبارت دیگر، این یک درخواست درک نشده، یک نتیجه آزمایش مثبت کاذب است. آزمون شکست خورد. ما انتظار صفحه بازپرداخت را داشتیم، اما صفحه تعویض فعال شد.

پوشش

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

  1. برای مشاهده گزارش پوشش آزمایشی برای همه موارد آزمایش، روی پوشش کلیک کنید.
  2. روی تب Transitions کلیک کنید.

این پوشش آزمایشی برای تمام انتقالات صفحه را به شما نشان می دهد.

پوشش انتقال

  1. روی تب Intents کلیک کنید.

این پوشش آزمایشی را برای همه مقاصد به شما نشان می دهد.

پوشش مقاصد

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

10. نتیجه گیری

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

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

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

نتیجه نهایی

مراجع

برای کسب اطلاعات بیشتر در مورد Dialogflow CX به وبلاگ ها و مستندات زیر نگاهی بیندازید!