Dialogflow destekli RBM aracısı oluşturma (Gelişmiş)

Bu codelab'de, RBM aracısına güç veren bir konuşma arayüzü oluşturmak için Dialogflow'u nasıl kullanacağınızı öğreneceksiniz.

Bu codelab'de neler oluşturacaksınız?

  • RBM temsilcisinin görüşmesini destekleyen bir Dialogflow aracısı
  • Hayali bir bisiklet mağazasının sohbet arayüzü. Kullanıcılara bisiklet hakkında bilgi verir ve bisikletlerini düzeltmek veya hizmet sunmak için randevu ayarlar.

Neler öğreneceksiniz?

  • Dialogflow'un üç ana yapısı (amaçlar, varlıklar ve bağlamlar) konuşulan bir arayüz oluşturmak için nasıl kullanılır?
  • Dialogflow'un istek karşılama ve satır içi düzenleyicisini (Cloud Functions for Firebase tarafından desteklenir) kullanarak konuşma arayüzünü kendi hizmetlerinize ve API'lerinize bağlama
  • Kullanıcılara zengin bir RBM deneyimi sunmak için Dialogflow'dan RBM yanıt türleri oluşturma

Gerekenler

  • Google Hesabı

İlk temsilcinizi oluşturun ve sorgulayın

Süre: 10:00

İlk Dialogflow aracınızı oluşturun

Dialogflow aracısı oluşturmak için:

  1. Yeni bir sekme açın ve Dialogflow'da oturum açın.
  2. Sol gezinme menüsünden Aracı oluştur'u tıklayın.

  3. Temsilcinizin adı için "CodelabRBMBikeShop" varsayılan dili olarak İngilizce &"İngilizce” girin ve varsayılan saat dilimini saat diliminize ayarlayın. Ardından Oluştur'u tıklayın.

Dialogflow konsolu

Şimdi Dialogflow konsolunu görürsünüz. Daha küçük bir ekranda çalışıyorsanız ve sol gezinme çubuğu gizlendiyse sol üst köşedeki gezinme düğmesini tıklayın. Ayarlar düğmesi sizi mevcut temsilcinin ayarlarına götürür.

Sayfanın ortasında, temsilcinin amaçlarının listesi gösterilir. Varsayılan olarak Dialogflow aracıları iki niyetle başlar. Temsilciniz, kullanıcılarınızın ne dediğini anlamadığında Varsayılan Geri Dönüş Niyeti ile eşleşir. Varsayılan Karşılama Niyeti kullanıcılarınıza selam verir. Deneyimi özelleştirmek için bu niyetleri değiştirebilirsiniz.

Sağda Dialogflow simülatörü bulunur. Bu sayede mesajları söyleyerek veya yazarak temsilcinizi deneyebilirsiniz.

Temsilcinizi sorgulama

Dialogflow aracıları en iyi şekilde NLU (Natural Language Understand) modüller olarak tanımlanır. Bunlar; doğal kullanıcı isteklerini uygulanabilir verilere dönüştürmek için uygulamanıza, ürününüze veya hizmetinize dahil edilebilir.

Müşteri temsilcinizi deneme zamanı! Sağdaki simülasyon aracında Şimdi deneyin yazan metin alanını tıklayıp "Hi&quot" yazın ve Enter tuşuna basın.

Dialogflow sorguyu tanımlar, Varsayılan Karşılama Niyeti ile eşleşir ve genel bir karşılama mesajıyla yanıt verir. Dialogflow, bazı örnek karşılama mesajlarıyla Varsayılan Karşılama Niyetini otomatik olarak eğittiği için bu yöntem işe yarar.

RBM aracısı oluşturma

İş İletişimi Geliştirici Konsolu'nda oturum açın, ardından Temsilci oluştur'u tıklayın.

Ad alanına, "Adınız Bisikletçi"düğmesini (ör. "Deniz Bisiklet Acentesi") girin, bir Bölge seçin ve Temsilci oluştur'u tıklayın.

RBM temsilcinizi Dialogflow'a bağlayın

RBM temsilciniz oluşturulduktan sonra, temsilcinin Genel Bakış sayfasını görmek için aracıyı tıklayın. Sol gezinme bölmesindeki Entegrasyonlar bağlantısını tıklayın.

Varsayılan olarak, RBM aracısının kullanıcı mesajlarını işlemek için Google Cloud Pub/Sub'ı kullanması. RBM temsilcinizi daha önce oluşturduğunuz Dialogflow temsilcisine bağlamak için Dialogflow entegrasyonunu tıklayın.

İletişim kutusunda Mevcut modeli bağla'yı tıklayın. Talimatları uygulayarak RBM temsilcinize Dialogflow aracınızı çağırma izni verin, ardından İleri'yi tıklayın.

Son olarak, Dialogflow proje kimliğini sağlamanız gerekir. İş İletişimi Geliştirici Konsolu'ndan farklı bir tarayıcı sekmesinde Dialogflow'a gidip daha önce oluşturduğunuz CodelabRBMBikeShop aracısını açın. Sol gezinme panelinde proje adının yanındaki dişli simgesini tıklayın.

Bu seçeneği tıkladığınızda modelin ayarlarına yönlendirilirsiniz. GOOGLE PROJECT'in altında Proje Kimliği'ni bulup kopyalayın.

İş İletişimi Geliştirici Konsolu açıkken sekmenize geri dönün, proje kimliğini iletişim kutusuna yapıştırın, ardından Entegrasyonu başlat'ı tıklayın.

Bu işlemin tamamlanması yaklaşık iki dakika sürer. Bu işlem tamamlandığında, Dialogflow entegrasyon seçeneğinin vurgulandığı ve Aracıyı görüntüle bağlantısının kullanılabildiğini görürsünüz.

Temsilcinize gönderilen ve aracınızdan gelen tüm mesajlar artık CodelabRBMBikeShop Dialogflow aracısı tarafından işleniyor.

Test cihazınızı davet edin ve mesaj gönderin

Dialogflow'a başlamadan önce test cihazınızın kurulumunu yapalım. Halihazırda RBM mesajları alabilen bir cihazınız yoksa cihazınızı hazırlamak için bu kılavuzu takip edin.

İş İletişimi Geliştirici Konsolu'nda, sol taraftaki gezinme panelinde Cihazlar'ı tıklayın. Formda, cihazınızın tam telefon numarasını E.164 biçiminde girin (ör. +12223334444) ve Ekle'yi tıklayın.

Cihazınızda test daveti alırsınız. Beni test kullanıcısı yap'a dokunun.

Tarayıcınızda, Cihazlar listesinde cihazınızı bulun ve cihazınıza bir test mesajı gönderin. Cihazınızda RBM temsilcinizden bir mesaj aldıysanız bu codelab ile devam edebilirsiniz.

Karşılama niyetinizi oluşturma

Genellikle Dialogflow destekli bir RBM aracısıyla görüşme başlatmak için kullanıcının telefon numarasını ve görüşmeyi başlatan Dialogflow niyetini belirten bir API çağrısı yaparsınız (genellikle temsilcinin karşılama niyeti). Bu codelab'de bu adımı atlayıp önceki adımda oluşturulan iş görüşmesini, İş İletişimi Geliştirici Konsolu'ndaki test cihazıyla birlikte kullanacağız. Ancak bu API özelliği hakkında daha fazla bilgi edinmek isterseniz bu kılavuza göz atın.

Dialogflow'un RBM temsilcinizle birlikte kullanabilmesi için Varsayılan Karşılama Niyeti'ne RBM yanıtları ekleyerek başlayalım. Öncelikle, Dialogflow'un açık olduğu tarayıcı sekmesine gidin. Varsayılan Karşılama Niyeti'ni tıklayın, Yanıtlar bölümüne ilerleyin, yanıt türleri listesinde + simgesini tıklayın ve RCS Business Messaging (RBM) seçeneğini belirleyin.

Yanıt Ekle'yi tıklayın, ardından Basit Yanıt'ı seçin. Basit Yanıt'ın metin alanına "Merhaba, Hogarth'ın bisiklet mağazasına hoş geldiniz" yazın. Nasıl yardım edebilirim? (Hogarth'ı adınızla değiştirin) ve Kaydet'i tıklayın.

Görüşme başlatma

Artık bir karşılama amacı yapılandırdığınıza göre, test cihazınıza dönün ve "Merhaba" mesajını gönderin. Bu mesaj, Varsayılan Karşılama Niyetini tetikler. Aşağıdaki resme benzer bir şey görürsünüz.

Karşılama niyetinizi güncelleyin

Dialogflow'un basit bir mesaj gönderdiğine göre artık mesajı daha faydalı hale getirmek için güncelleyebiliriz. Yalnızca kullanıcıyı karşılamakla kalmayıp aynı zamanda yaptıkları işlemlere de yol göstermek istiyoruz.

Oluşturduğumuz temsilcinin iki temel özelliği desteklemesi gerekiyor: Çalışma saatlerini kontrol etmek ve randevu almak. Basit yanıt karşılama mesajımızı, bu etkileşimlerin yerine getirilmesi için önerilen yanıtları sağlayan bir kartla değiştirelim.

Varsayılan Karşılama Niyeti's, Yanıtlar bölümünde RCS İş Mesajlaşması (RBM) sekmesini seçin. Çöp kutusu simgesini tıklayarak mevcut Basit Yanıtı kaldırın. Ardından Yanıt Ekle'yi tıklayıp Bağımsız Zengin Kart'ı seçin.

Bağımsız Zengin Kart formuna aşağıdakileri girin:

  • Kart Başlığı: Merhaba, Hogarth's bisiklet mağazasına hoş geldiniz.
  • Kart Açıklaması: Size nasıl yardımcı olabilirim? Aşağıdaki seçeneklerden birini belirleyin:
  • Kart Yönünü Seçin: Dikey
  • Resim/Video URL'si: https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • Medya Yüksekliğini Seçin: Orta

Öneri Ekle'yi tıklayın ve aşağıdakileri girin:

  • Öneri metni: Çalışma saatleriniz nedir?
  • Öneri Geri Bildirimi: response_hours

Öneri Ekle'yi tıklayıp aşağıdakileri girerek başka bir öneri ekleyin:

  • Öneri metni: Randevu alma
  • Öneri Geri Bildirimi: response_appointment

Kaydet'i tıklayın.

Deneyin.

Model "Temsilci eğitimi tamamlandı" ifadesini gördükten sonra cihazınıza dönüp "Merhaba" mesajını temsilcinize gönderin. Şimdi tasarladığınız Bağımsız Zengin Kart'ı görebilirsiniz.

Çalışma saatleriniz nedir? seçeneğine dokunmayı deneyin. Varsayılan Geri Dönüş Niyeti'nin tetiklendiğine dikkat edin. Bunun nedeni, Dialogflow aracınızın bu öneri için yapılandırdığınız geri gönderme verilerini nasıl işleyeceğini bilmemesidir: yanıt_saatleri&quot.

Şimdi bu sorunu çözelim.

Çalışma saatleriniz oluşturuluyor

Dialogflow, kullanıcının niyetini kategorilere ayırmak için amaçları kullanır. Amaçlar, kullanıcının aracınıza ne deyebileceğine dair eğitim ifadeleridir. Örneğin, bisikletimizin açık olduğu saatleri öğrenmek isteyen biri "Ne zaman açıyorsun?" diye sorabilir. "Çalışma saatleriniz ne kadar?" veya "Ne kadar gecikebilirim?"

Tüm bu sorgular benzersizdir ancak aynı amacı taşır: Bisiklet mağazamız açık olduğunda bilgi almak.

Bu sorguyu kapsamak için "Çalışma Saatleri" amacı oluşturun:

  1. Sol gezinme menüsünde Niyetler'ın yanındaki + simgesini tıklayın.
  2. Niyet adı için "Çalışma Saatleri" girin.
  3. Eğitim İfadeleri altında, Kullanıcı ifadesi ekle'yi tıklayın ve her girişten sonra enter tuşuna basarak aşağıdaki bilgileri girin:

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

    Bu son eğitim ifadesi, önceki bölümde yapılandırdığınız geri gönderme verilerini bu niyetle eşlemek için kullanılır.

  4. Yanıtlar altında + simgesini tıklayın ve RCS Business Messaging (RBM) seçeneğini belirleyin.

  5. Yanıt Ekle'yi tıklayın ve Basit Yanıt'ı seçin.

  6. Basit Yanıt için metin alanına, hafta içi 09:00-17:30 arası açıkyız.

  7. Kaydet'i tıklayın.

Deneyin.

Şimdi temsilcinize çalışma saatlerini sormayı deneyin. Cihazınızda, RBM temsilcinizin görüşmesine "Ne zaman açıyorsunuz?" yazın ve mesajı temsilcinize gönderin.

Temsilciniz artık sorguya doğru yanıt veriyor. Sorgunuzun eğitim ifadesinden biraz farklı olmasına rağmen ("Ne zaman açıyorsunuz?", "Ne zaman açıyorsunuz?", Dialogflow yine de sorguyu doğru niyetle eşleştirdi. Zengin kartta Çalışma saatleriniz nedir? seçeneğine dokunmayı da deneyebilirsiniz.

Dialogflow, kullanıcıları sorgularla doğru amaca uygun hale getirmek için makine öğrenimi modeline örnek olarak eğitim ifadeleri kullanır. Makine öğrenimi modeli, sorguyu aracıdaki her amaca göre kontrol eder, her niyet için bir puan verir ve en yüksek puanlı niyet eşleştirilir. En yüksek puana sahip puan çok düşükse yedek niyet eşleşir.

Sipariş karşılama ekleniyor

Her ne kadar işe yarasa da, oluşturduğumuz temsilcinin davranışı biraz doğal değil. Kullanıcı "Açık mısınız?" gibi bir şey sorduğunda temsilci yanıt verir ve hafta içi 09:00-17:30 saatleri arasında açık oluruz. Temsilcinin bize dükkanın açık olup olmadığını doğrudan söylemesi, çok daha doğal ve faydalı olurdu.

Bunu yapmak için temsilcimizin mağazanın şu anda açık olup olmadığını kontrol etmesi ve her iki durumda da farklı bir yanıt oluşturması gerekir. Dialogflow'da bu tür karmaşık mantık, sipariş karşılama webhook'una uygulanmalıdır.

Karşılama webhook'u, Dialogflow tarafından çağrılan ve mevcut görüşme durumu hakkında bilgi içeren bir HTTP sunucusudur. İstek karşılama kodu gerekli işlemleri yapar, ardından Dialogflow'un kullanıcıya döndürdüğü bir yanıt oluşturur.

Şimdi, temsilcimizin daha faydalı yanıt vermesine olanak tanıyan bir sipariş karşılama webhook'u dağıtma işlemini gerçekleştireceğiz.

Kurulum: Sipariş karşılamayı dağıtma ve etkinleştirme

Dialogflow'da, karşılamanıza yardımcı olacak JavaScript kodu yazıp dağıtmanıza olanak tanıyan, yerleşik Cloud Functions for Firebase düzenleyicisi bulunur.

Dialogflow'un sol gezinme panelinde, sipariş karşılama sayfasını açmak için Sipariş karşılama'yı tıklayın. Firebase için Cloud Functions düzenleyicisini etkinleştirmek amacıyla Satır İçi Düzenleyici'nin yanındaki açma/kapatma düğmesini tıklayın.

Düzenleyicinin iki dosya içerdiğini fark edeceksiniz: sipariş karşılama ana kodunu içeren "index.js" ve gerekli bağımlılıkları ayrıntılı olarak veren "package.json"

Şimdi, sipariş karşılama isteğinizi destekleyecek bazı örnek kodları içe aktaracağız.

Bu dosyanın metnini kopyalayıp mevcut .content.txt dosyasının her yerine yapıştırarak yapıştırın:

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

Şimdi sayfanın en altına gidip DAĞIT'ı tıklayın. Yaklaşık bir dakika sonra, kodunuz Firebase için Cloud Functions'a dağıtılır.

İşlev dağıtıldıktan sonra sayfanın alt kısmında dağıtımın tarihini ve saatini görürsünüz:

Sipariş karşılama koduna göz atın. hoursHandler işlevi, mağazanın şu anda açık olup olmadığını belirlemek için currentlyOpen yöntemini çağırır ve duruma bağlı olarak farklı bir RBM yanıtı ekler.

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); satırı, istek kitaplığına "Çalışma Saatleri" amacı karşılandığında hoursHandler işlevinin çalışması gerektiğini bildirir. Ancak Dialogflow'a, "Çalışma Saatleri" amacımıza uygun hareket etmesini sağlamamız gerektiğini de söylememiz gerekir.

Sol gezinme menüsünden Amaçlar'ı tıklayın ve "Saat" amacını açın. En alttaki İstek karşılama bölümünü açın ve açık olması için Bu niyet için webhook çağrısını etkinleştir'i seçin.

Niyeti kaydettikten sonra deneyebilirsiniz. Sağdaki simülasyon aracında "Açık mı?" ifadesini girin. Teşhis Bilgileri'ni tıklar ve API yanıtını denetlerseniz sipariş karşılama yanıtını görürsünüz. Firebase için Cloud Functions sunucusu tarafından kullanılan saat diliminin UTC olacağını ve bu nedenle geçerli yerel saatiniz için yanıtın doğru olmayabileceğini unutmayın.

Sipariş karşılamanızda bir hata varsa Dialogflow, Niyet sayfasının Yanıtlar bölümünde tanımlanan herhangi bir yanıtı kullanarak temsilcinizin zarif bir şekilde kurtarabilmesini sağlar.

Bir sonraki adım, kullanıcı sorgusunun alakalı bölümlerini ayıklamak için varlıkları kullanacağız. Bu, kullanıcılarımızın bisikletlerini tamir ettirmek veya servis etmek için bisiklet dükkanımızdan randevu almalarını sağlar.

Varlıklarla verileri çıkarma

Süre: 12:00

Bu bölümde, bir kullanıcının sorgusundan bisiklete binmek üzere randevu almasını sağlamak amacıyla kullanıcı sorgusundan nasıl veri çıkaracağımızı açıklayacağız.

Amaçlarınıza parametreler ekleme

Parametreler, Dialogflow'un çıkardığı ve temsilcinin doğru yanıt verebilmesi için kullanıcının sorgusundaki alakalı kelimeler veya ifadelerdir. Parametrelerle yeni bir amaç oluşturacaksınız. Bunların değerlerini yanıtlarınıza nasıl dahil edeceğinizi öğreneceksiniz.

  1. Yeni bir niyet oluşturmak için sol gezinme menüsünde Niyetler'in yanındaki + simgesini tıklayın.
  2. Amaç adı için sayfanın en üstündeki "Randevu Oluştur" ifadesini girin.
  3. Aşağıdakileri Eğitim İfadeleri olarak ekleyin:
    • 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, Eğitim İfadelerinizde bilinen parametreleri otomatik olarak tespit eder ve sizin için oluşturur.

Dialogflow, Eğitim İfadeleri bölümünde parametre tablosunu otomatik olarak, topladığı bilgilerle doldurur:

  • parametre isteğe bağlıdır (zorunlu değildir)
  • date ve time adlı
  • @sys.date ve @sys.time sistem varlık türüne karşılık gelir**
  • $date ve $time değerine sahip
  • bir liste değil

Parametre verilerini kullanma

Yanıtlarınızda bir parametrenin değerini kullanabilirsiniz. Bu durumda, yanıtlarınızda $date ve $time işaretlemelerini kullanabilirsiniz. Yanıtlar, temsilcinizle ilgili sorguda belirtilen tarih ve saatle değiştirilir.

Yanıtlar'da RCS Business Messaging sekmesini ekleyin, bir Basit Yanıt'a aşağıdakileri ekleyin ve Kaydet'i tıklayın:

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

Deneyin.

Şimdi, sağ paneldeki simülatörde "Yarın saat 14:00 için randevu alabilir miyim?" diyerek temsilcinizi sorgulayın.

Simülasyon aracının çıktısının alt kısmında Dialogflow'un parametrelerle sorgudan Yarın ve 14:00 parametrelerini doğru şekilde çıkarıp tarih ve saat olarak doğru bir şekilde ayrıştırdığını görebilirsiniz. Şimdi aynı şeyi test cihazınızdan deneyin ve yanıtın ayrıştırılan tarih ve saati nasıl doğru şekilde içerdiğine bakın.

Parametreleri zorunlu kılma

Bisiklet mağazamız söz konusu olduğunda, randevu ayarlayabilmemiz için hem tarihin hem de saatin değerlerini bilmemiz gerekir. Varsayılan olarak, tüm Dialogflow parametreleri isteğe bağlıdır. Bunları zorunlu kılmak için zorunlu kılmak istediğimiz her bir parametrenin yanındaki kutuyu işaretlememiz gerekir. &"Randevu Al" amacındaki her parametrenin yanındaki kutuyu işaretleyin:

Artık her parametre gerekli olduğundan, her parametre için bir istem oluşturmamız gerekiyor. İstemler, kullanıcı ilk olarak niyetini belirttiğinde (bu durumda randevu almak için) sağlanmayan parametreler için kullanıcıdan bir değer sağlamasını ister. Bir parametre için istem oluşturmak üzere İstemleri tanımla'yı tıklayın ve her bir parametre için aşağıdaki istemleri girin:

Parametre İstem
date Hangi gün gelmek istiyorsun?
time Siz için uygun zaman nedir?

İstemleri girdikten sonra Kaydet'i tıklayın.

Deneyin.

Cihazında Randevu al önerisine dokunun veya "Bisikletimi tamir etmek istiyorum" yazın. "Hangi gün içinde gelmek istiyorsun?" cevabını alıyorsunuz. Bir tarih belirtin ("yarın"); tarihten sonra saat belirtmenizi isteyen bir yanıt alırsınız. Bu soruya yanıt verdiğinizde randevunuzun ayarlandığını görebilirsiniz.

İlk istekte bazı bilgiler (örneğin, "Yarın için randevu almak istiyorum") içeren sorgular doğru parametreyi (tarih) doldurur, tarih istemini atlar ("Tarih, hangi günde gelmek istiyorsunuz?") ve isteme ("saat") uygun olur.

Kod kullanmadan ve çok az kurulumla tamamen benzersiz bir görüşme oluşturmak için Dialogflow varlıklarını ve parametrelerini kullandık. Bir sonraki bölümde, kullanıcının yanıtlarını "Hangi tarihte randevu almak istersiniz?"

Kurulum: Sipariş karşılama etkinleştiriliyor

Sol gezinme menüsünden Amaçlar'ı tıklayın ve "Randevu Al" niyetini açın. Karşılama'yı açın, Bu amaç için webhook çağrısını etkinleştir'i ve Alan doldurma için webhook çağrısını etkinleştir'i seçin. Her iki seçeneğin de etkinleştirilmesi için Kaydet'i tıklayın.

Her ikisi de etkinleştirildiğinde bu niyet tetiklendiğinde Dialogflow, gerekirse parametreler için yanıtlar ve amaç için RBM yanıtını oluşturmak üzere istek karşılamayı kullanır.

Sipariş karşılama uygulayın

Dialogflow'un sol gezinme panelinde, sipariş karşılama sayfasını açmak için Sipariş karşılama'yı tıklayın. Aşağıya doğru ilerleyin

intentMap.set('Hours', hoursHandler);

Sonraki satır olarak aşağıdakileri ekleyin:

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

Bu ayar, sipariş karşılama kitaplığına "Randevu Al" niyetiyle bir eşleşme olduğunda makeAppointment işlevinin çalışması gerektiğini bildirir.

Ardından, aşağıdaki kodu kopyalayıp currentlyOpen işlevinin altına yapıştırın. İki işlev (getSuggestedTimes ve getSuggestedDates) kullanıcı yanıtlarını kolaylaştırmak için faydalı çip listeleri oluşturur.

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"
          }
        }
      ];
}

Ardından, hoursHandler kodunun altına, aşağıdaki kodu kopyalayıp yapıştırın ve ardından Dağıt'ı tıklayın.

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);
  }

Birkaç dakika ayırarak kodu inceleyin. Gerekli parametrelerin değerler için kontrol edildiğinden ve ayarlanmamışsa kullanıcıya uygun bir mesaj ve öneri grubu gösterildiğine dikkat edin.

Deneyin.

Cihazında Randevu al önerisine dokunun veya "Bisikletimi tamir etmek istiyorum" yazın. Cevap vermek için "hangi günde gelmek istiyorum?" ifadesiyle birlikte birkaç faydalı öneri gelir: "Yarın" ve "Bir hafta sonra", "Şu andan iki hafta sonra". Bir tarih (yarın) belirtin. Bir süre istemek için yanıt alın. Bu soruya yanıt verdiğinizde randevunuzun ayarlandığını görebilirsiniz.

Durumu bağlamlarla yönet

Süre: 7:00

Sohbet durumuna bağlam ekleme

Kullanıcımız randevuyu başarıyla kurduktan sonra bu kişiden bazı ek bilgiler toplamak isteyebiliriz. Bisiklet mağazamızın iki tür randevu hizmeti sunduğunu düzeltin: Onarım veya ayarlama. Kullanıcının bunlardan hangisine ihtiyacı olduğunu öğrenmek istiyoruz.

İlk olarak, kullanıcıya hangi randevu türünü ihtiyacı olduğunu sormak için "Randevu Al" niyetine verilen yanıtı güncelleyelim. makeAppointment sipariş karşılama işlevinizdeki başarı yanıtını aşağıdaki metinle değiştirin ve ardından Dağıt'ı tıklayın.

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

Bu sorunun yanıtını toplamak için başka bir niyet oluşturmamız gerekiyor. Ancak bu yeni amacın yalnızca bu soru cevaplandıktan sonra eşleştirilmesi önemlidir. Bunu uygulamak için bunu bir takip niyeti olarak tanımlayabiliriz.

Takip intent'leri, yalnızca "ebeveyn" niyetleri ile eşleştirildikten sonra eşleştirilebilecek niyetlerdir. Sol gezinme menüsünde Niyetler'ı tıklayın (menü gizliyse sol üst köşedeki menü MDM düğmesini tıklayın). Ardından , farenizle "Randevu Amaç" niyetinin üzerine gelin ve niyet adının sağında görünen Takip amacı ekle'yi tıklayın:

Ardından, açılır menüden özel'i tıklayın.

Dialogflow, takip hedefini "Randevu Alın - özel" şeklinde otomatik olarak adlandırdı ve ok, niyetler arasındaki ilişkiyi gösteriyor.

Takip amaçları yalnızca üst niyet eşleştirildikten sonra eşleştirilebilir. Bu amaç sadece "Randevu Al" amacından sonra eşleşeceğinden, kullanıcıya "'Onarım mı yoksa ayarlama mı gerekiyor?" sorusunun sorulduğu varsayılabilir.

Bu sorunun yanıtını öğrenmek için öncelikle bazı varlıklar tanımlamamız gerekiyor.

İlk varlığınızı oluşturma

Dialogflow, Entityflow'un sistem varlıklarına benzer şekilde çalışan geliştirici varlıklarını tanımlamanıza olanak tanır. Bir varlık türü oluşturarak başlayalım. Kullanıcıların mağazamızla ne tür randevu almak istediklerini seçebilmelerini istediğimizden AppointmentType varlık türünü adlandıralım. AppointmentType varlık türüne iki farklı randevu türü için iki varlık ekleyeceğiz: service ve fix.

Varlık türü oluşturmak için:

  1. Sol gezinme menüsünde Varlıklar'ın yanında + simgesini tıklayın.
  2. Varlık türünün adı için "AppointmentType&" yazın.
  3. Metin alanını tıklayıp aşağıdaki girişleri ekleyin:
    • hizmet
    • düzelt
  4. Bir giriş girdiğinizde, sekme tuşuna bastığınızda imleciniz eş anlamlı alanına taşınır. Her giriş için aşağıdaki eş anlamlıları ekleyin. Dizenin tamamını kopyalayıp yapıştırmak yerine her kelimeyi tek tek eklediğinizden emin olun:
Giriş Eş anlamlı
hizmet
  • hizmet
  • revizyon
  • bakım
  • ince ayar
  • ince ayar yap
düzelt
  • düzelt
  • repair
  • düzelt
  • bozuk
  • patlak
  • sabit
  1. Kaydet'i tıklayın.

Her varlık türü aşağıdakilere sahip olmalıdır:

  • Kategoriyi tanımlayan bir ad ("ActpointmentType")
  • bir veya daha fazla giriş ("hizmet", "düzeltme")
  • bir veya daha fazla eş anlamlı kelime (""bakım", "ayarlama" vb.)

Dialogflow, çoğulluk ve büyük harf kullanımı gibi basit şeyleri işler. Ancak olası tüm eş anlamlıları eklediğinizden emin olun. Siz ekledikçe temsilciniz varlıklarınızı daha iyi belirleyebilir.

Yeni varlık ekleme

Varlık türümüzü randevu için tanımladığımıza göre, bu tanımı "Randevu" - "özel" niyetimizin Eğitim ifadelerinde kullanabiliriz:

  1. Sol gezinme menüsünden Amaçlar'ı tıklayın; ardından, takip amaçlarını görmek için "Randevu Al" niyetinin yanındaki oku tıklayın. "Randevu - özel" niyeti tıklayın.
  2. Aşağıdakileri Eğitim ifadeleri olarak ekleyin:

    • Bisikletime hizmet verebilir misiniz?
    • Tamir gerekiyor.

  3. Randevu öğe türüne, girdiğiniz Eğitim ifadelerinde otomatik olarak ek açıklama gösterilir. Bu işlem, Eğitim ifadeleri bölümünün altında bulunan AppointmentType parametresini tabloya ekler. Bu parametreyi GEREKLİ olarak işaretlemek için onay kutusunu tıklayın.

  4. İstemleri tanımla'yı tıklayın ve &bisikletinizi tamir edebilir veya onarabiliriz. Hangisini isterdin?

  5. Yanıtlar'da yanıtı "&";Tamam, bir $AppointmentType." planlayıp Kaydet'i tıklayın.

Deneyin.

Cihazında Randevu al önerisine dokunun veya "Bisikletimi tamir etmek istiyorum" yazın. Cevap vermek için "hangi günde gelmek istiyorum?" ifadesiyle birlikte birkaç faydalı öneri gelir: "Yarın" ve "Bir hafta sonra", "Şu andan iki hafta sonra". Bir tarih belirtin ("yarın"); tarihte bir saat istemek için bir yanıt alırsınız.

Bir saat seçtiğinizde oluşturduğunuz yeni yanıtın hizmet mi yoksa ayarlama için mi olduğunu görürsünüz.

Sonra "Onarıma ihtiyacım var" yazın. "Tamam, bir düzeltme planlayacağız," şeklinde bir yanıt göreceksiniz. Bu, Dialogflow'un doğru AppointmentType'ı bir varlık olarak ayıkladığını gösterir.

Şu anda bu niyete verilen yanıt ("Tamam, bir düzeltme planlayalım.") yanıtı hiç de faydalı değil. Yanıt, randevunun planlandığı tarih ve saati onaylasaydı çok güzel olurdu. Bunu yapmak için tarih ve saate ihtiyacımız var, ancak tarih ve saat parametreleri yalnızca "Randevu Al" niyetinde değil, "Randevu Al" özelinde değil.

Amaçlar ve bağlamlar

"Randevu Alın" amacından toplanan bir parametreyle yanıt vermek için takip amaçlarının nasıl çalıştığını bilmeniz gerekir. İzleme amaçları, bir üst niyetin tetiklenip tetiklenmediğini takip etmek için bağlamları kullanır. "Randevu"nu incelerseniz2 rakamının önünde & işareti; Çıktı bağlamı olarak listelenen"MakeAppointment-follow-é&quot"ifadesini görürsünüz:

"Randevu Oluştur" amacı eşleştirildikten sonra Dialogflow, konuşmaya iki geniş katılımlı "Randevu Alın, Takip Et" bağlamını ekler. Bu nedenle, kullanıcı soruya yanıt verdiğinde ("Onarım mı yoksa sadece ayarlama mı gerekiyor?" bağlamı) etkin hale gelir. Dialogflow niyetlerle eşleştiğinde, aynı giriş bağlamına sahip tüm niyetler büyük ölçüde tercih edilir.

Sol gezinme menüsünde Niyetler'ı ve ardından "MakeAppointment - custom" intent'i tıklayın.

Bu niyetin, "Randevu Alın" çıkışının bağlamıyla aynı giriş bağlamına ("MakeAppointment-follow up") sahip olduğunu görebilirsiniz. Bu nedenle "Randevu Alın" - yalnızca "Randevu Alın" amacından sonra eşleşir.

Bağlamlar ve parametreler

Bağlamlar, parametre değerlerini depolar. Bu da, "Randevu Al" niyetinde tanımlanan parametre değerlerine, "MakeAppointment - custom" gibi özel amaçlarla ulaşabileceğiniz anlamına gelir.

"MakeAppointment - custom&ât; intent. Görüşürüz."

Artık temsilcinizi tekrar sorgulayabilir ve uygun yanıtı alabilirsiniz. İlk olarak, yarın saat 11:00'de bisikletime servis yaptırmak için bir randevu ayarlayabilir miyim, ardından soruyu "Onarıma ihtiyacım var" şeklinde yanıtlayın.

Randevuyu onaylayan yanıtta tarih ve saat parametre değerlerinin bağlamdan alındığını görmeniz gerekir.

Yanıt biçimini iyileştirme

Süre: 5:00

Tarih ve saati biçimlendirmek için sipariş karşılama kullanın

Sizin de fark etmiş olabileceğiniz gibi, başarı mesajında gösterilen tarih ve saat son derece kullanıcı dostudur. Bunu düzeltmek üzere tarih ve saat parametrelerini kullanıcının kolayca okuyabileceği şekilde biçimlendirmek için JavaScript'i kullanabilmemiz için teminatın tekrar kullanılması gerekir.

Sol gezinme menüsünden Amaçlar'ı ve ardından"Randevu Al - özel"niyetini tıklayarak"Randevu Al"özel bölümüne gidin. Sayfanın altına doğru ilerleyin ve Bu niyet için webhook çağrısını etkinleştir'i açıp Kaydet'i tıklayın.

Sol gezinme menüsündeki Sipariş karşılama bağlantısını tıklayarak sipariş karşılama bölümüne gidin. Aşağıdaki kodu kopyalayıp makeAppointment işlevinin altına yapıştırın.

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);
  }

Bu işlevin altında, intentMap.set('Make appointment', makeAppointment); satırını bulun ve intentMap.set('Make appointment - custom', makeAppointmentFollowUp); ifadesini ekleyin. Böylece, izleme niyeti çağrıldığında, daha önce yapıştırdığınız işlev çağrılır.

makeAppointmentFollowUp koduna göz atarak parametrelerin hem gelen bağlamda hem de bu amaçla nasıl çıkarıldığını görün. Kod, responseText oluşturulmadan önce tarih ve saati kullanıcıların okuyabileceği şekilde biçimlendiriyor.

Deneyin.

Cihazında Randevu al önerisine dokunun veya "Bisikletimi tamir etmek istiyorum" yazın. Cevap vermek için "hangi günde gelmek istiyorum?" ifadesiyle birlikte birkaç faydalı öneri gelir: "Yarın" ve "Bir hafta sonra", "Şu andan iki hafta sonra". Bir tarih belirtin ("yarın"); tarihte bir saat istemek için bir yanıt alırsınız.

Bir saat seçtiğinizde oluşturduğunuz yeni yanıtın hizmet mi yoksa ayarlama için mi olduğunu görürsünüz.

Sonra "Onarıma ihtiyacım var" yazın. Randevu türü, tarih ve saat ile randevunun okunaklı bir biçimde alındığını onaylayan bir yanıt görürsünüz.

Hepsi bu kadar!

Süre: 1:00

İstek gönderildi.

Dialogflow tarafından desteklenen bir RBM aracısı oluşturmanın tüm adımlarını tamamladınız.

Bu heyecan verici yeni platform için geliştirme yaparken eğlenin.