Actions SDK'sını kullanarak Google Asistan için İşlemler oluşturma (2. Seviye)

1. Genel Bakış

Google Asistan geliştirici platformu, Google Asistan'ın işlevselliğini akıllı hoparlörler, telefonlar, arabalar, TV'ler ve kulaklıklar dahil olmak üzere 1 milyardan fazla cihazda genişletmek için yazılım oluşturmanıza olanak tanır. Kullanıcılar, alışveriş yapmak veya araç çağırmak gibi işlemleri gerçekleştirmek için Asistan ile etkileşime girer. Geliştirici olarak, kullanıcılar ile kendi üçüncü taraf karşılama hizmetiniz arasında keyifli ve etkili sohbet deneyimleri oluşturup yönetmek için Asistan geliştirici platformunu kolayca kullanabilirsiniz.

Bu codelab'de, Google Asistan ile geliştirme yapmaya yönelik orta düzeydeki kavramlar ele alınmakta ve Actions SDK'yı kullanarak Google Asistan için İşlemler oluşturma (1. Düzey) adlı codelab'de oluşturulan İşlem temel alınmaktadır. Bu codelab'e başlamadan önce 1. Seviye codelab'ini tamamlamanızı önemle tavsiye ederiz.

Bu codelab'de oluşturacağınız işlem, kullanıcılara seçtikleri yardıma göre Gryffinberg adlı efsanevi bir ülkede yaptıkları görevle ilgili kehanetlerini söyler.

Ne oluşturacaksınız?

Bu codelab'de, aşağıdaki işlevlere sahip gelişmiş bir Sohbet İşlemi oluşturacaksınız:

  • Kullanıcıdan veri toplar ve değere bağlı olarak sohbet istemlerini değiştirir.
  • Sohbeti ilerletmek için ek sorularla yanıt verir.
  • Kullanıcının fal aldıktan sonra İşlem ile tekrar etkileşimde bulunabilmesi için bir oyun döngüsü oluşturur.

Geliştirmeye başlamadan önce Google Asistan özellikli cihazınızda canlı Action ile etkileşim kurmak için "Ok Google, Fate and Fortune ile konuş" diyebilirsiniz. Geri gelen bir kullanıcının bu işlemdeki varsayılan yolu aşağıdaki etkileşim gibi görünür:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

Neler öğreneceksiniz?

  • Kullanıcıdan veri toplamak için yuvaları kullanma
  • Sahneye mantık eklemek için koşulları kullanma
  • Oyun döngüsü ekleme
  • Destekleyici yol ekleme

İhtiyacınız olanlar

Bu codelab'in ön koşulları şunlardır:

  • Seçtiğiniz bir IDE/metin düzenleyici.
  • NodeJS, npm ve git yüklü olan bir terminalde kabuk komutlarını çalıştırma
  • Google Chrome gibi bir web tarayıcısı
  • Tamamlanmış bir codelab Level 1 Actions projesi.

Bu codelab'deki karşılama kodunu anlamak için JavaScript (ES6) hakkında bilgi sahibi olmanız şiddetle tavsiye edilir ancak zorunlu değildir.

İsteğe bağlı: Örnek kodu alma

İsterseniz bu codelab'i takip edebilmek için Actions Builder Codelab 1. Düzey GitHub deposundan 1. düzey proje kodunun tamamını alabilirsiniz. 2. seviye proje kodunun tamamını bu GitHub deposunda da görüntüleyebilirsiniz.

2. Konuşma arayüzü oluşturmaya devam etme

İlk codelab'de tek bir sahneye sahip basit bir Sohbet İşlemi oluşturmuştunuz Start.

Bu codelab'de, İşleminizin görüşmesini genişletiyorsunuz. Aşağıdaki bölümlerde, işleminizi aşağıdaki şekilde yapılandıracaksınız:

  • Kullanıcı geleceğini öğrenmek istediğinde yeni bir Fortune sahnesine geçiş yapma
  • Kullanıcıya yolculuğu için hangi yardımı seçmek istediğini sorun.
  • Kullanıcının seçimine göre özelleştirilmiş bir fal sunma

FortuneSahneye geçiş yapma ve sahne oluşturma

Bu bölümde şunları yapacaksınız:

  • Kullanıcıya yanıt veren ve görüşmeyi sonlandıran mevcut istemi Start sahnesinden kaldırın.
  • Start sahnesinden Fortune sahnesine geçişi tanımlayın
  • Fortune sahnesini oluşturma

Start sahnesini değiştirmek ve Fortune sahnesine geçiş eklemek için aşağıdaki adımları uygulayın:

  1. 1. seviye codelab'indeki Actions projenizi metin düzenleyicinizde açın.
  2. custom/scenes/Start.yaml dosyasını açın.
  3. yes intent'i için handler değerini, kodunuz aşağıdaki snippet ile eşleşecek şekilde güncelleyin:

Start.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: I understand, stranger. Best of luck on your quest! Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Dosyayı kaydedin.

Fortune adlı yeni bir sahne oluşturmak için aşağıdaki adımları uygulayın:

  1. Terminalde 1. Seviye İşlemler codelab projenize gidin.
  2. scenes dizininde Fortune.yaml adlı yeni bir dosya oluşturun:
touch custom/scenes/Fortune.yaml

Bu dosyayı bir sonraki bölümde düzenleyeceksiniz.

Fortune sahnesi için sohbet mantığını tanımlayın

Bu codelab'de, Fortune sahnenizi kullanıcıya "Görevinde sana yardımcı olması için neyi seçersin: ejderha, çevirmen veya pusula?" diye soracak şekilde yapılandıracaksınız. Devam etmeden önce kullanıcıdan gerekli bilgileri toplamak için yuva doldurma adlı bir özellikten yararlanabilirsiniz.

İşleminiz üç yardım için fal sunuyor: ejderha, çevirmen ve pusula. İşleminizi, kullanıcının girişindeki bu üç seçeneği tanımlayacak şekilde yapılandırmak için yeni bir tür oluşturmanız gerekir.

Kullanıcıdan istediğiniz bilgileri tanımlamak için bir sahnenin boşluk doldurma aşamasındaki türleri kullanabilirsiniz. NLU motoru, kullanıcı girişinde bir yuva eşleşmesi algıladığında yuvayı yazılı bir parametre olarak ayıklar. Böylece, bir sahnede bu parametreyle mantık yürütebilirsiniz.

available_options türü oluşturma

Bu bölümde, kullanıcıların isteme yanıt olarak seçebileceği üç seçeneği (ejderha, çevirmen ve pusula) belirten available_options adlı yeni bir tür oluşturacaksınız. Ayrıca, kullanıcının benzer bir şey söylemesi ihtimaline karşı bu seçenekler için birkaç eş anlamlı kelime tanımlarsınız. Daha sonraki bir bölümde, kullanıcının seçimini almak istediğinizi belirtmek için bir yuvaya available_options türünü ekleyeceksiniz.

available_options türünü oluşturmak için aşağıdaki adımları uygulayın:

  1. types adlı yeni bir dizin oluşturun:
mkdir custom/types
  1. types dizininde available_options.yaml adlı yeni bir dosya oluşturun:
touch custom/types/available_options.yaml
  1. custom/types/available_options.yaml dosyasını metin düzenleyicinizde açın.

Türler, bilgi anahtar/değer çiftleri olarak yapılandırılır. Burada anahtar, türün adıdır ve değerler, bu anahtarın eş anlamlılarıdır. Anahtarı tanımladığınızda otomatik olarak değer olarak eklenir. Actions SDK ile anahtarları entities, değerleri ise synonyms olarak gösterirsiniz.

Kullanıcının seçebileceği üç seçeneği eklemek için aşağıdaki adımları uygulayın:

  1. available_options.yaml dosyasına aşağıdaki entities ve synonyms öğelerini ekleyin:

available_options.yaml

synonym:
  entities:
    dragon:
      synonyms:
      - dragon
      - hydra
      - lizard
    translator:
      synonyms:
      - translator
      - communicator
      - machine
      - decoder
      - translate
    compass:
      synonyms:
      - compass
      - direction
      - guide
      - navigator
  matchType: EXACT_MATCH
  1. Dosyayı kaydedin.

İşleminiz artık available_options sembollerinin ejderha, çevirmen ve pusula olduğunu anlıyor ve bunlara karşılık gelen birkaç eş anlamlı kelimeyi de tanıyabiliyor.

Alan doldurmayı yapılandırma

Ardından, Fortune sahnesinde yuva doldurmayı yapılandırmanız gerekir. Yuva doldurma mantığını yapılandırmak için aşağıdaki adımları uygulayın:

  1. custom/scenes/Fortune.yaml dosyasını metin düzenleyicinizde açın.
  2. Fortune.yaml dosyasına aşağıdaki slots verilerini ekleyin:

Fortune.yaml

slots:
- commitBehavior:
    writeSessionParam: chosenOptions
  name: chosenOptions
  promptSettings:
    initialPrompt:
      staticPrompt:
        candidates:
        - promptResponse:
            firstSimple:
              variants:
              - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass?
            suggestions:
            - title: Dragon
            - title: Translator
            - title: Compass
  required: true
  type:
    name: available_options
  1. Dosyayı kaydedin.

Yuvaya available_options türünü eklediniz. Bu tür, işleme devam etmeden önce kullanıcılardan toplamanız gereken bilgileri (yardım seçimi) İşleminize bildirir. Ayrıca, kullanıcı sahnenin yuva doldurma aşamasına ulaştığında istem kuyruğuna eklenen bir istem de yapılandırdınız.

Yuvayı chosenOptions olarak adlandırdığınızda writeSessionsParam alanı aynı adla ($session.params.chosenOptions) güncellenir. Bu parametreye istemde ve istemci kitaplığı aracılığıyla karşılama işleminizde bu adla erişebilirsiniz.

Koşul ekle

Kullanıcının yardım seçmesini gerektiren bir yuva eklediğinize göre, kullanıcının sohbete devam edebilmesi için yuva verilerinin alındığını kontrol edecek bir koşul ekleyebilirsiniz.

Bu bölümde, yuva doldurma işleminin tamamlanıp tamamlanmadığını kontrol eden scene.slots.status == "FINAL" koşulunu eklersiniz. Tüm yuvalar doldurulduktan sonra koşul, istem kuyruğuna bir istem (You picked $session.params.chosenOptions.) ekler.

scene.slots.status == "FINAL" koşulunu yapılandırmak için aşağıdaki adımları uygulayın:

  1. custom/scenes/Fortune.yaml dosyasını metin düzenleyicinizde açın.
  2. conditionalEvents verilerini Fortune.yaml dosyasının en üstüne ekleyin:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: You picked $session.params.chosenOptions.
  1. Dosyayı kaydedin.

İşleminizi simülatörde test etme

Bu noktada, kullanıcının boşluğu doldurmak için hangi seçenekleri belirlemesi gerektiğini tanımlamış olursunuz. Kullanıcıdan bu bilgiyi aldıktan sonra İşleminiz, kullanıcının seçtiği belirli seçeneğe referans veren bir istem sağlamalıdır.

İşleminizi test etmek için aşağıdaki adımları uygulayın:

  1. Terminalde aşağıdaki komutu çalıştırın:
gactions deploy preview

Aşağıdakine benzer bir çıkış alırsınız:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sağlanan URL'yi kopyalayıp bir tarayıcıya yapıştırın.
  2. Input (Giriş) alanına Talk to my test app yazın veya bu alanı tıklayın ve Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak, Evet öneri çipini tıklayabilirsiniz.

a899d45c542668f6.png

  1. dragon simgesini tıklayın, yazın veya söyleyin. "Ejderhayı seçtiniz." istemini alırsınız.

Sonraki bölümde, kullanıcının seçebileceği her yardım için istemleri özelleştirirsiniz.

Koşulları kullanarak istemleri özelleştirme

Bu bölümde, kullanıcının seçebileceği her seçenek için koşullar ekleyip her koşula özel bir istem ekleyebilirsiniz.

dragon falını özelleştirme

Koşulu güncellemek ve kullanıcı "ejderha"yı seçtiğinde gösterilecek istemi özelleştirmek için aşağıdaki adımları uygulayın:

  1. custom/scenes/Fortune.yaml dosyasını metin düzenleyicinizde açın.
  2. conditionalEvents verilerini Fortune.yaml dosyasındaki aşağıdaki snippet ile değiştirin:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  1. Dosyayı kaydedin.

Artık kullanıcılar "ejderha" veya benzer bir kelime söylediğinde İşleminiz, bu seçime göre bir fal sunuyor. Ardından, kalan iki seçimi eklersiniz.

translator ve compass fal kurabiyelerini özelleştirme

Kullanıcı "çevirmen" veya "pusula" dediğinde koşulları eklemek ve istemleri özelleştirmek için aşağıdaki adımları uygulayın:

  1. custom/scenes/Fortune.yaml dosyasında, diğer iki koşulu dragon koşulunun altına ekleyin:

Fortune.yaml

- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  1. Dosyayı kaydedin.

İşleminizi simülatörde test etme

Bu noktada, kullanıcının seçtiği seçeneğe göre özel bir fal sunmanız gerekir.

İşleminizi test etmek için aşağıdaki adımları uygulayın:

  1. Terminalde aşağıdaki komutu çalıştırın:
gactions deploy preview

Aşağıdakine benzer bir çıkış alırsınız:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sağlanan URL'yi kopyalayıp bir tarayıcıya yapıştırın.
  2. Giriş alanına Talk to my test app yazıp Enter tuşuna basın.
  3. Input (Giriş) alanına Evet yazıp Enter tuşuna basın. Alternatif olarak, Evet öneri çipini tıklayın.
  4. Translator simgesini tıklayın, yazın veya söyleyin.

29e17f950bd0dd71.png

"Çevirmen" seçeneği için uygun yanıtı alırsınız.

3. Oyun döngüsü ekleme

Bu bölümde, kullanıcının seçim yaptıktan sonra başka bir seçenek belirleyip farklı bir fal dinleyebilmesi için İşleminizi yapılandıracaksınız. Bu değişiklik, oyunun sonunda gösterilen "Tekrar oynamak ister misiniz?" mesajına benzer. Bu döngüyü oluşturmak için daha önce oluşturulan yes ve no intent'lerini yeniden kullanabilir ve bunları Again adlı yeni bir sahneye ekleyebilirsiniz.

Again sahnesi oluşturma

Bu bölümde yeni bir Again sahne oluşturup kullanıcıya farklı bir seçenek belirlemek isteyip istemediğini soran bir istem ekleyin.

Again sahnesini oluşturup yapılandırmak için aşağıdaki adımları uygulayın:

  1. scenes dizininde Again.yaml adlı yeni bir dosya oluşturun:
touch custom/scenes/Again.yaml
  1. custom/scenes/Again.yaml dosyasını metin düzenleyicinizde açın.
  2. Aşağıdaki onEnter verilerini Again.yaml'e ekleyin:

Again.yaml

onEnter:
  staticPrompt:
    candidates:
    - promptResponse:
        firstSimple:
          variants:
          - speech: That is what I see for you. Would you like to choose a different option and explore another future?
        suggestions:
        - title: "Yes"
        - title: "No"
  1. Dosyayı kaydedin.

Fortune sahnesinden Again sahnesine geçiş ekleme

Kullanıcı falını aldıktan sonra sohbetin yeni Again sahnesine geçmesi gerekir.

Fortune sahnesinden Again sahnesine geçiş eklemek için aşağıdaki adımları uygulayın:

  1. custom/scenes/Fortune.yaml dosyasını metin düzenleyicinizde açın.
  2. Aşağıdaki snippet'te gösterildiği gibi her koşula transitionToScene: Again ekleyin:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  transitionToScene: Again
  1. Dosyayı kaydedin.

İşleminizi simülatörde test etme

Bu noktada, kullanıcının falı kendisine iletildikten sonra İşleminiz aşağıdaki istemi sağlamalıdır: "Sizin için gördüklerim bunlar. Farklı bir seçenek belirleyip başka bir geleceği keşfetmek ister misiniz?"

İşleminizi test etmek için aşağıdaki adımları uygulayın:

  1. Terminalde aşağıdaki komutu çalıştırın:
gactions deploy preview

Aşağıdakine benzer bir çıkış alırsınız:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sağlanan URL'yi kopyalayıp bir tarayıcıya yapıştırın.
  2. Giriş alanına Talk to my test app yazıp Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak, Evet öneri çipini tıklayın.
  4. dragon simgesini tıklayın, yazın veya söyleyin.

b299e9fed9aedb69.png

Ejderha seçeneği ve Again istemi için falınız gösterilir.

Amacın eklenmesi ve Again sahnesine geçiş

Bu bölümde, yes ve no amaçlarını Again sahnesine ekleyerek İşleminizin, kullanıcının yeni bir seçenek belirlemek isteyip istemediğini anlamasını sağlarsınız. Ayrıca, yes ve no amaçları için uygun geçişleri de eklersiniz. yes amacı Fortune sahnesine, no amacı ise End conversation sistem sahnesine geçiş yapar.

Again sahnesine amaç ve geçiş eklemek için aşağıdaki adımları uygulayın:

  1. custom/scenes/Again.yaml dosyasını metin düzenleyicinizde açın.
  2. intentEvents verilerini Again.yaml dosyasının en üstüne, OnEnter'nin üzerine ekleyin:

Again.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: It pleases me that you are satisfied with your choice. Best
                of luck on your quest. Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Dosyayı kaydedin.

İşleminizi simülatörde test etme

İşleminiz artık kullanıcının yeni bir seçenek belirlemek mi yoksa görüşmeyi sonlandırmak mı istediğini anlayabilir.

yes amacını test etmek için aşağıdaki adımları uygulayın:

  1. Terminalde aşağıdaki komutu çalıştırın:
gactions deploy preview

Aşağıdakine benzer bir çıkış alırsınız:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sağlanan URL'yi kopyalayıp bir tarayıcıya yapıştırın.
  2. Giriş alanına Talk to my test app yazıp Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak, Evet öneri çipini tıklayın.
  4. Seçeneklerden birini tıklayın, yazın veya söyleyin.
  5. Giriş alanına Yes yazıp Enter tuşuna basın.

5d0690332efe2e29.png

"Görevinde sana yardımcı olması için neyi seçersin: ejderha, çevirmen veya pusula?" istemini alırsınız.

no amacını test etmek için aşağıdaki adımları uygulayın:

  1. Seçeneklerden birini tıklayın, yazın veya söyleyin.
  2. Giriş alanına No yazıp Enter tuşuna basın.

End conversation istemini alırsınız: "Seçiminizden memnun olmanız beni mutlu etti. Bu macerada başarılar dileriz. Hoşça kalın."

4. Destekleyici bir yol ekleme

Artık çoğu kullanıcının İşleminizde izlediği ana yolu oluşturdunuz. Ancak kullanıcı, Fortune sahnesindeki "Görevinde sana yardımcı olması için neyi seçersin: ejderha, çevirmen veya pusula?" istemine, sağlanan seçeneklerden biri olmayan bir yanıt verebilir.

Bu bölümde, kullanıcının "sihir", "para", "at" veya "telefon" dediğinde ne yapacağını anlaması için İşleminizi yapılandırır ve bu seçeneklerden birini seçtiğinde kullanıcıya ilk üç seçenekten birini belirlemesi için yeniden istem gönderirsiniz. Bu mantığı yapılandırmak için bu diğer seçenekleri ve yeni bir amaç olan other_option'ı içeren yeni bir type oluşturmanız gerekir. Bu amaç, kullanıcı bu seçeneklerden birini söylediğinde eşleştirilir. Ayrıca, other_option amacındaki eğitim ifadelerini not ekleyerek amaç parametrelerini tanımlayıp çıkarmanız gerekir.

Asistanın doğal dil işleme motoru, kullanıcı girişinde bir parametre eşleşmesi algıladığında değeri yazılı parametre olarak ayıklar. Böylece, bir sahnede bu değerle mantıksal işlemler yapabilirsiniz. Bu codelab'de, kullanıcının seçtiği yardımı ayıklamak ve istemde bu seçime başvurmak için işleminizi yapılandıracaksınız.

unavailable_options türü oluşturma

Artık, İşleminizin kullanıcının girişindeki verileri tanımlayabilmesi için çeşitli farklı seçenekler içeren bir unavailable_options türü oluşturabilirsiniz.

unavailable_options türünü oluşturmak için aşağıdaki adımları uygulayın:

  1. types dizininde unavailable_options.yaml adlı yeni bir dosya oluşturun:
touch custom/types/unavailable_options.yaml
  1. custom/types/unavailable_options.yaml dosyasını metin düzenleyicinizde açın.
  2. unavailable_options.yaml dosyasına aşağıdaki synonyms verilerini ekleyin:

unavailable_options.yaml

synonym:
  entities:
    money:
      synonyms:
      - money
      - cash
      - gold
    horse:
      synonyms:
      - horse
      - stallion
      - steed
    magic:
      synonyms:
      - magic
      - enchanted
      - spells
    phone:
      synonyms:
      - phone
      - cell
      - apps
  matchType: EXACT_MATCH
  1. Dosyayı kaydedin.

other_option amacı oluşturma

Ardından, other_option adlı bir amaç oluşturur ve unavailable_options türündeki seçenekleri içeren eğitim cümleleri eklersiniz. Bu amaç, kullanıcı unavailable_options türünde yer alan bir seçeneği belirlediğinde eşleştirilir.

other_option amacını oluşturmak ve yapılandırmak için aşağıdaki adımları uygulayın:

  1. intents dizininde other_option.yaml adlı yeni bir dosya oluşturun:
touch custom/intents/other_option.yaml
  1. custom/intents/other_option.yaml dosyasını metin düzenleyicinizde açın.
  2. other_option.yaml dosyasına aşağıdaki parameters verilerini ve trainingPhrases verilerini ekleyin:

other_option.yaml

parameters:
- name: chosenUnavailableOption
  type:
    name: unavailable_options
trainingPhrases:
- I want to use ($chosenUnavailableOption 'spells' auto=true)
- I really really want to use a ($chosenUnavailableOption 'phone' auto=true)
- ($chosenUnavailableOption 'magic' auto=true)!
- ($chosenUnavailableOption 'cash' auto=true)
- I want to ride a ($chosenUnavailableOption 'horse' auto=true)

Burada, eğitim ifadelerini önceki bölümde belirttiğiniz kullanılamayan seçeneklerle manuel olarak açıklama ekleyin. Amaç parametresi chosenUnavailableOption, seçeneğin adını çıkarmanıza ve bu seçeneği istemde kullanmanıza olanak tanır. Bunu bir sonraki bölümde yapacaksınız.

  1. Dosyayı kaydedin.

Fortune sahnesine other_option amacı ekle

Artık kullanıcının orijinal seçeneklerden biri olmayan bir seçeneği belirtmesini işleyebilen bir niyetiniz (other_option) var. Bu bölümde, other_option amacını Fortune sahnesine ekleyeceksiniz. İstemi kullanıcının girişine göre özelleştirmek için amaç parametresini kullanırsınız.

other_option amacını Fortune sahnesine eklemek için aşağıdaki adımları uygulayın:

  1. custom/scenes/Fortune.yaml dosyasını metin düzenleyicinizde açın.
  2. intentEvents verilerini, conditionalEvents verileri ile slots verileri arasına ekleyin:

Fortune.yaml

intentEvents:
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech:  I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey.
  intent: other_option
  1. Dosyayı kaydedin.

$intent.params.chosenUnavailableOption ifadesi amaç parametresi nesnesini, $intent.params.chosenUnavailableOption.original ise bu nesnenin değerini ifade eder. original özelliği, kullanıcının belirttiği ham girişi ifade eder.

Kullanıcı, Fortune sahnesi sırasında unavailable_options türünde listelenen bir seçeneği söylediğinde other_option amacı eşleştirilir ve istem kuyruğuna bir istem eklenir. Geçiş belirtilmediğinden sahne yürütme döngüsü, koşullar aşaması yeniden değerlendirilerek devam eder. chosenOptions yuvası daha sonra istemini istem sırasına ekler ve istem sırası kullanıcıya iletilir.

İşleminizi simülatörde test etme

İşleminiz artık kullanıcı unavailable_options türünde listelenen seçeneklerden birini belirlediğinde uygun şekilde yanıt vermeli ve kullanıcının hangi yardımı seçtiğini belirtmelidir. Ardından İşleminiz, kullanıcıya orijinal seçeneklerden birini (ejderha, çevirmen veya pusula) seçmesi için tekrar istem göndermelidir.

İşleminizi simülatörde test etmek için aşağıdaki adımları uygulayın:

  1. Terminalde aşağıdaki komutu çalıştırın:
gactions deploy preview

Aşağıdakine benzer bir çıkış alırsınız:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sağlanan URL'yi kopyalayıp bir tarayıcıya yapıştırın.
  2. Giriş alanına Talk to my test app yazıp Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak, Evet öneri çipini tıklayın.
  4. Giriş alanına magic yazıp Enter tuşuna basın.

3a42c33eca435f32.png

Kullanıcı "magic" (sihir) kelimesini seçtiğinde, önüne "a" (bir) kelimesi eklendiği için istemin doğru telaffuz edilmediğini fark edebilirsiniz. Bu sorunu aşağıdaki bölümlerde ele alacağız.

unavailable_options işleyici ekleme

unavailable_options türündeki uygun seçeneklerin önüne "a" makalesini yerleştirmek için, kullanıcının seçtiği seçeneğin önüne "a" gerekip gerekmediğini kontrol etmek üzere karşılama mantığınızda bir etkinlik işleyici yapılandırabilirsiniz. Öncelikle, İşleminizi Fortune sahnesindeki işleyiciyi çağıracak şekilde yapılandırmanız gerekir.

unavailable_options işleyiciyi Fortune sahnesine eklemek için aşağıdaki adımları uygulayın:

  1. custom/scenes/Fortune.yaml dosyasını metin düzenleyicinizde açın.
  2. Fortune.yaml dosyasını aşağıdaki intentEvents verileriyle güncelleyin:

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. Dosyayı kaydedin.

Güncelleme ve karşılama dağıtımı

İşleminizi unavailable_options etkinlik işleyicisini çağıracak şekilde yapılandırdığınıza göre, işleyiciyi karşılama bölümünüzde güncelleyip dağıtabilirsiniz.

Yerine getirme işleminizi güncellemek için aşağıdaki adımları uygulayın:

  1. webhooks/ActionsOnGoogleFulfillment/index.js dosyasını metin düzenleyicinizde açın.
  2. index.js işleyicisinin altına aşağıdaki kodu ekleyin:greeting

index.js

app.handle('unavailable_options', conv => {
  const option = conv.intent.params.chosenUnavailableOption.original;
  const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
  let message = 'I have seen the future and ';
  if(optionsNeedA.has(optionKey)){
    message = message + 'a ';
  }
  message = message + `${option} will not aid you on your journey. `;
  conv.add(message);
});
  1. const app = conversation({debug:true}); bölümüne aşağıdaki kodu ekleyin:

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Dosyayı kaydedin.

Kodu anlama

unavailable_options işleyici şunları yapar:

  • option nesnesinden option verilerini alır ve option değerini, kullanıcıdan alınan ham giriş olan original özelliğine atar.conv
  • optionKey değerini, unavailable_options türünün anahtarı olan resolved özelliğine atar.
  • optionKey öğesinin "a" gerektiren seçeneklerden biri olup olmadığını kontrol eder. Bu seçeneklerden biriyse mesaja "a" ekleyerek mesajı oluşturur.
  • Mesajı conv.add(message) üzerinden ekler.

İşleyicileri güncelleme

İşlemin unavailable_options kullanmasına izin vermek için unavailable_options işleyicisini webhooks/ActionsOnGoogleFulfillment.yaml'ye ekleyin.

  1. unavailable_options işleyici adını ActionsOnGoogleFulfillment.yaml öğesine ekleyin:

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. Dosyayı kaydedin.

İşleminizi simülatörde test etme

İşleminiz artık unavailable_options türündeki kullanıcının seçiminin önüne "a" makalesi gerekip gerekmediğine göre istemi ayarlamalıdır.

İşleminizi test etmek için aşağıdaki adımları uygulayın:

  1. Terminalde aşağıdaki komutu çalıştırın:
gactions deploy preview

Aşağıdakine benzer bir çıkış alırsınız:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sağlanan URL'yi kopyalayıp bir tarayıcıya yapıştırın.
  2. Input (Giriş) alanına Talk to my test app yazın veya bu alanı tıklayın ve Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak, Evet öneri çipini tıklayın.
  4. Giriş alanına magic yazıp Enter tuşuna basın. Ardından, Giriş alanına horse yazıp Enter tuşuna basın.

54ee24c5c3c56e.png

İşleminiz, istemi oluştururken "at" seçeneğinden önce "a" makalesini eklemeli, "sihir" seçeneği için ise "a" makalesi olmadan oluşturmalıdır.

5. Actions Console'da işlemi görselleştirme

Actions SDK, Actions Console'a entegre edilmiş Actions Builder adlı web tabanlı bir IDE ile birlikte çalışabilir. gactions push komutuyla yerel dosya sisteminizi konsoldaki İşleminizin taslağına aktarabilirsiniz. İşlemler Konsolu, İşleminizin yapılandırmasının görsel bir temsilini sunar. İşleminizin görsel olarak haritasını görmek geliştirme sırasında faydalı olabilir ve İşleminizin test için sunulan sürümünü etkilemez.

Actions projenizi göndermek ve Actions Console'da görüntülemek için aşağıdaki adımları uygulayın:

  1. Projenizi Actions Console'a göndermek için terminalde aşağıdaki komutu çalıştırın:
gactions push

Aşağıdakine benzer bir çıkış alırsınız:

✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
  1. Sağlanan URL'yi kopyalayıp bir tarayıcıya yapıştırın.
  2. Actions Console'da üst gezinme çubuğundaki Geliştir'i tıklayın.
  3. Sahneler'in yanındaki açılır oku ve Başlat'ı tıklayın. Aşağıdaki ekran görüntüsünde gösterildiği gibi, İşleminizin Start sahnesinin görsel bir temsilini görmeniz gerekir:

cae526c647f8d40f.png

Projenizi temizleme [önerilir]

Olası ücretlerden kaçınmak için kullanmayı düşünmediğiniz projeleri kaldırmanız önerilir. Bu codelab'de oluşturduğunuz projeleri silmek için aşağıdaki adımları uygulayın:

  1. Cloud projesini ve kaynaklarını silmek için Projeleri kapatma (silme) bölümünde listelenen adımları tamamlayın.
  1. İsteğe bağlı: Projenizi hemen Actions Console'dan kaldırmak için Proje silme bölümünde listelenen adımları uygulayın. Bu adımı tamamlamazsanız projeniz yaklaşık 30 gün sonra otomatik olarak kaldırılır.

6. Tebrikler!

Artık Actions SDK ile Google Asistan için İşlemler oluşturmak üzere gereken ara düzey becerilere sahipsiniz.

İşlediğiniz konular

  • Node.js istek karşılama kitaplığını kullanarak etkileşimli işlemler geliştirme
  • Kullanıcıdan veri toplamak için yuvaları kullanma
  • Koşulları kullanarak sahneye mantık ekleme
  • Oyun döngüsü ekleme
  • Destekleyici yol ekleme

Daha fazla bilgi

Google Asistan için İşlemler oluşturma hakkında bilgi edinmek üzere aşağıdaki kaynakları inceleyebilirsiniz:

En son duyurularımızdan haberdar olmak için Twitter'da @ActionsOnGoogle hesabımızı takip edin ve geliştirdiklerinizi paylaşmak için #AoGDevs etiketini kullanarak tweet atın.

Geri bildirim anketi

Ayrılmadan önce lütfen deneyiminizle ilgili kısa bir anket doldurun.