Actions Builder ile Google Asistan için Etkileşimli Tuval İşlemi oluşturma

1. Genel Bakış

Actions on Google, Google'ın sanal kişisel asistanı Google Asistan'ın işlevlerini akıllı hoparlörler, telefonlar, arabalar, TV'ler, kulaklıklar ve diğer 1 milyardan fazla cihazda geliştirmenizi sağlayan bir geliştirici platformudur. Kullanıcılar, market alışverişi veya araç rezervasyonu gibi işlemler için Google Asistan'ı kullanarak sohbet eder. Şu anda yapabileceklerinin tam listesi için İşlemler dizinine göz atın. Geliştirici olarak, kullanıcılar ile kendi üçüncü taraf hizmetiniz arasındaki keyifli ve yararlı sohbet deneyimlerini kolayca oluşturmak ve yönetmek için Actions on Google'ı kullanabilirsiniz.

Bu codelab, Google Asistan için İşlemler oluşturma konusunda belirli bir deneyime sahip okuyuculara yönelik gelişmiş bir modüldür. Daha önce Actions on Google'da uygulama geliştirme deneyiminiz yoksa tanıtım amaçlı codelab'leri ( 1. Seviye ve 2. Seviye) izleyerek platform hakkında bilgi edinin. Bu modüller, Action'ınızın işlevlerini artırmanıza ve kitlenizi büyütmenize yardımcı olabilecek bir dizi özellik konusunda size yol gösterecektir.

Bu codelab'de, Konuşma İşlemi'ne tam ekran oyun eklemek için Google Asistan'da oluşturulmuş bir çerçeve olan Etkileşimli Tuval'i kullanacaksınız. Oyun, Asistan'ın görüşme sırasında kullanıcıya yanıt olarak gönderdiği etkileşimli bir web uygulamasıdır. Kullanıcı daha sonra akıllı ekranlarda ve Android mobil cihazlarda oyunu ses veya metin girişi yoluyla oynayabilir.

Oyunun tamamını kendiniz oluşturmak yerine Kar Arkadaşı adlı ve kısmen önceden oluşturulmuş bir oyunu dağıtıp codelab'de ilerledikçe oyunun mantığını ekleyin. Snow Pal, geleneksel Hangman oyununun bir varyasyonudur; Oyunda bir kelimeyi temsil eden çok sayıda boşluk var ve bu kelimede olabileceğini düşündüğünüz harfleri tahmin ediyorsunuz. Her yanlış tahminde Kar Arkadaşı'nız biraz daha erier. Bu kelimeyi söylerseniz Kar Arkadaşınız tamamen erimeden oyunu kazanırsınız.

af9931bb4d507e39.png

Şekil 1. Kısmen tamamlanmış bir Snow Pal oyunu

Neler oluşturacaksınız?

Bu codelab'de, Etkileşimli Tuval kullanan bir İşlem derleyeceksiniz. İşleminiz aşağıdaki özelliklere sahip olacak:

  • Kullanıcıların sesli olarak oynayabilecekleri tam ekran kelime oyunu
  • Kullanıcıların oyunu başlatmak için basabilecekleri bir düğme
  • Kullanıcıların oyunu tekrar oynamak için basabilecekleri bir düğme

Bu codelab'i tamamladığınızda tamamlanan İşleminiz aşağıdaki konuşma akışına sahip olur:

Asistan: Welcome to Snow Pal! Would you like to start playing the game?

Kullanıcı: Yes.

Asistan: Try guessing a letter in the word or guessing the word.

Kullanıcı: I guess the letter E.

Asistan: Let's see if your guess is there...E is right. Right on! Good guess.

Kullanıcı, oyun bitene kadar harfleri veya bilinmeyen kelimeyi tahmin etmeye devam eder.

Neler öğreneceksiniz?

  • Etkileşimli Tuval İşlemi oluşturma ve dağıtma
  • Kullanıcının sesine ve dokunmatik girişine göre kelime oyunu nasıl güncellenir?
  • Farklı yöntemler kullanarak web uygulamasına veri iletme
  • Etkileşimli Tuval İşleminizde hata ayıklama

Gerekenler

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

  • Google Chrome gibi bir web tarayıcısı
  • Tercih ettiğiniz bir IDE veya metin düzenleyici
  • Makinenizde Node.js, npm ve git yüklü

Bu codelab'de kullanılan kodu anlamanıza yardımcı olması için JavaScript (ES6) hakkında bilgi sahibi olmanız önemle tavsiye edilir.

İsteğe bağlı: Örnek kodun tamamını alın

Bu codelab'de, eksik bir sürümden örneği adım adım derleyeceksiniz. Dilerseniz tamamlanmış örneği GitHub deposundan da edinebilirsiniz.

2. Etkileşimli Tuval tanıtımı

Google Asistan üzerine inşa edilmiş olan Etkileşimli Tuval, Conversational Action'ınıza tam ekran görseller ve animasyonlar eklemenize olanak tanıyan bir çerçevedir.

Etkileşimli Tuval kullanan bir işlem, normal bir konuşmaya dayalı işleme benzer şekilde çalışır. Bununla birlikte, Etkileşimli Tuval İşlemi, tam ekran web uygulaması açan cihaza yanıt gönderme özelliğine sahiptir.

Kullanıcı, görüşme sona erene kadar sesle veya dokunarak web uygulamasına giriş sağlar.

fa63a599f215aa81.gif

Şekil 2. Etkileşimli Tuval ile oluşturulmuş bir Action.

Bu codelab'de projeniz aşağıdaki üç ana bölümde düzenlenmiştir:

  • Web uygulaması: Web uygulaması dosyaları, web uygulamanızın görsel ve animasyonlarının kodunu ve kullanıcının girişine göre web uygulamasını güncelleme mantığını içerir.
  • Conversational Action: Conversational Action, kullanıcının girişini tanıyan, işleyen ve yanıt veren konuşma mantığınızı içerir.
  • Webhook: Webhook, oyunun mantığını işler. Bu codelab'de webhook'u oyun sunucunuz olarak düşünebilirsiniz.

Bu codelab'in her bölümünde web uygulamasını, Conversational Action'ı ve webhook'u değiştirerek Etkileşimli Tuval İşleminize işlev ekleyeceksiniz.

Snow Pal Action'daki Conversational Action, webhook ve web uygulaması aşağıdaki gibi çalışır:

  1. Conversational Action, kullanıcıdan kelimedeki bir harfi veya tüm kelimeyi tahmin etmesini ister.
  2. Kullanıcı, akıllı ekranda Snow Pal web uygulamasına "Sanırım i harfini düşünüyorum" diyor.
  3. Kullanıcının girişi, Actions Builder ve/veya Actions SDK projenizde tanımlanan Conversational Action'a yönlendirilir.
  4. Conversational Action, kullanıcının girişini işler ve girişin ne olduğuna bağlı olarak, web uygulamasını güncelleyen veya web uygulamasını doğrudan güncellemek için meta veri gönderen webhook mantığını tetikler.
  5. Web uygulaması, harfin kelimede göründüğü yeri gösterecek şekilde güncellenir ve kullanıcıdan tekrar tahmin etmesi istenir.

Etkileşimli Tuval altyapısını anlama bölümünde Etkileşimli Tuval'in işleyiş şekli hakkında daha fazla bilgi edinebilirsiniz. Artık temel bilgileri edindiğinize göre, bu codelab için ortamınızı oluşturmaya başlayabilirsiniz.

3. Kur

Google izin ayarlarınızı kontrol etme

Bu codelab için oluşturduğunuz İşlemi test etmek istiyorsanız Actions konsolu simülatörünün İşleminize erişebilmesi için gerekli izinleri etkinleştirmeniz gerekir. İzinleri etkinleştirmek için şu adımları uygulayın:

  1. Etkinlik kontrolleri'ne gidin.
  2. Gerekirse Google Hesabınızla oturum açın.
  3. Aşağıdaki izinleri etkinleştirin:
  • Web ve Uygulama Etkinliği
  • Web ve Uygulama Etkinliği bölümünde, Chrome geçmişini ve Google hizmetlerini kullanan site, uygulama ve cihazlardaki etkinlikleri ekle onay kutusunu işaretleyin.

gactions komut satırı arayüzünü yükleme

Bu codelab'de, Actions projenizi Actions konsolu ile yerel dosya sisteminiz arasında senkronize etmek için gactions komut satırı arayüzü (KSA) aracını kullanacaksınız.

Gactions CLI'sını yüklemek için Gactions komut satırı aracını yükleme bölümündeki talimatları uygulayın.

Firebase komut satırı arayüzünü yükleme

Firebase komut satırı arayüzü (KSA), Actions projenizi Cloud Functions'a dağıtmanıza ve web uygulamanızı barındırmanıza olanak tanır.

Bu codelab, Firebase CLI'yı yüklemek için npm'yi kullanır. Genellikle Node.js ile birlikte gelen npm'yi yüklediğinizden emin olun.

  1. CLI'yı yüklemek veya yükseltmek için bir terminal açın ve aşağıdaki npm komutunu çalıştırın:
npm install -g firebase-tools
  1. CLI'ın düzgün şekilde yüklendiğini doğrulamak için aşağıdaki komutu çalıştırın:
firebase --version

Firebase CLI'ın, Cloud Functions için gereken en yeni özelliklerin tümüne sahip olması için 8 veya daha yeni bir sürüm olduğundan emin olun. Yüklü değilse yeni sürüme geçmek için npm install -g firebase-tools komutunu çalıştırın.

  1. Firebase'e giriş yapmak için aşağıdaki komutu çalıştırın:
firebase login

Firebase'e giriş yaptığınızda, Actions projenizi oluştururken kullandığınız Google Hesabı'nı kullandığınızdan emin olun.

Depoyu klonlama

Bu bölümde, bu codelab için ihtiyacınız olan dosyaları klonlayacaksınız. Bu dosyaları almak için aşağıdaki adımları izleyin:

  1. Bir terminal penceresi açın ve genellikle kodlama projelerini depoladığınız bir dizine geçiş yapın. Google Hesabınız yoksa ana dizininize geçin.
  2. Bu depoyu klonlamak için terminalinizde aşağıdaki komutu çalıştırın:
git clone https://github.com/actions-on-google/actions-builder-canvas-codelab-nodejs

start/ dizinini açın. Bu kod deposu, üzerinde çalışacağınız aşağıdaki önemli dizinleri içerir:

  • public/: Bu dizin, web uygulamanızın HTML, CSS ve JavaScript kodunu içerir.
  • sdk/custom/: Bu dizin, Conversational Action'ınızın mantığını (sahneler, amaçlar ve türler) içerir.
  • sdk/webhooks/: Bu dizin sizin webhook'unuzdur ve oyun mantığını içerir.

4864e8047bb2c8f6.png

Şekil 3. start dizin kodunun yapısı.

4. Actions projenizi oluşturma

Bu bölümde Actions projenizi oluşturup yapılandıracaksınız, ayrıca klonlanan depodaki kodu gactions CLI ile Actions Console'a aktaracak, web uygulamanızı ve webhook'unuzu dağıtacaksınız.

Actions projesi oluşturma

Actions projeniz, İşleminiz için bir kapsayıcıdır. Bu codelab için Actions projenizi oluşturmak üzere şu adımları uygulayın:

  1. Actions Console'u açın.
  2. Yeni proje'yi tıklayın.
  3. canvas-codelab gibi bir Proje adı yazın. Bu ad dahili referans içindir. Daha sonra projeniz için harici bir ad ayarlayabilirsiniz.

7ea69f1990c14ed1.png

  1. Create project (Proje oluştur) seçeneğini tıklayın.
  2. Ne tür bir İşlem oluşturmak istiyorsunuz? ekranında Oyun kartını seçin.
  3. İleri'yi tıklayın.
  4. Boş proje kartını seçin.
  5. Derlemeye başla'yı tıklayın.

İşleminiz için proje kimliğini kaydedin

Proje kimliği, işleminiz için benzersiz bir tanımlayıcıdır. Bu codelab'deki çeşitli adımlar için proje kimliğiniz gerekir.

Proje Kimliğinizi almak için şu adımları izleyin:

  1. Actions konsolunda üç dikey noktayı tıklayın > Proje ayarları.

6f59050b85943073.png

  1. Proje kimliğini kopyalayın.

Faturalandırma hesabı ilişkilendirin

İstek karşılama işleminizi Cloud Functions'ı kullanarak daha sonra bu codelab'de dağıtmak için Google Cloud'daki projenizle bir faturalandırma hesabı ilişkilendirmeniz gerekir. Zaten bir faturalandırma hesabınız varsa aşağıdaki adımları göz ardı edebilirsiniz.

Projenizle bir faturalandırma hesabını ilişkilendirmek için şu adımları uygulayın:

  1. Google Cloud Platform faturalandırma sayfasına gidin.
  2. Faturalandırma hesabı ekle veya Hesap oluştur'u tıklayın.
  3. Ödeme bilgilerinizi girin.
  4. Ücretsiz denememi başlat veya Gönder ve faturalandırmayı etkinleştir'i tıklayın.
  5. Google Cloud Billing sayfasına gidin.
  6. Projelerim sekmesini tıklayın.
  7. Üç noktayı tıklayın > Faturalandırmayı değiştirebilirsiniz.
  8. Açılır menüde, yapılandırdığınız faturalandırma hesabını seçin.
  9. Hesap belirle'yi tıklayın.

Ücret ödememek için Projenizi temizleme bölümündeki adımları uygulayın.

Web uygulamasını dağıtın

Bu bölümde, Firebase CLI'yı kullanarak web uygulamanızı (Snow Pal oyunu) dağıtacaksınız. Dağıtım yaptıktan sonra web uygulamasının URL'sini alabilir ve oyunun tarayıcıda nasıl göründüğünü görebilirsiniz.

Web uygulamanızı dağıtmak için şu adımları uygulayın:

  1. Terminalde start/ dizinine gidin.
  2. {PROJECT_ID} kısmını proje kimliğinizle değiştirerek aşağıdaki komutu çalıştırın:
firebase deploy --project {PROJECT_ID} --only hosting

Birkaç dakika sonra göreceğiniz "Deploy complete!", Snow Pal web uygulamasını Firebase'e başarıyla dağıttığınızı gösterir.

Snow Pal oyununu tarayıcıda görüntülemek için aşağıdaki adımları izleyin:

  1. Terminalinizin çıkışında sağlanan barındırma URL'sini alın. URL şu biçimde olmalıdır: https://<PROJE_KİMLİĞİ>.web.app
  1. URL'yi bir tarayıcıya yapıştırın. Snow Pal oyunu başlangıç ekranında Oyunu Başlat düğmesi gösterilir:

68429faae5141ed0.png

Actions projesine web uygulaması URL'si ve proje kimliği ekle

Sonra, actions.intent.MAIN.yaml dosyasına web uygulaması URL'nizi ve proje kimliğinizi ekleyin. Web uygulaması URL'sini eklemek, Conversational Action'ın hangi URL'ye veri gönderileceğini bilmesini sağlar. settings.yaml içinde proje kimliğini de eklemek, indirilen dosyaları Actions Console'da doğru projeye aktarmanıza olanak tanır.

Web uygulaması URL'nizi ve proje kimliğinizi eklemek için şu adımları uygulayın:

  1. start/sdk/custom/global/actions.intent.MAIN.yaml dosyasını metin düzenleyicinizde açın.
  2. URL alanında yer tutucu dizesini web uygulaması URL'nizle değiştirin.
  3. start/sdk/settings/settings.yaml dosyasını metin düzenleyicinizde açın.
  4. projectId alanında, yer tutucu dizesini proje kimliğinizle değiştirin.

Projeyi Actions konsoluna aktar

Actions konsolunu yerel projenizle güncellemek için Actions projenizi Actions konsoluna aktarmanız gerekir. Bunun için, aşağıdaki adımları uygulayın:

  1. sdk dizinine geçin:
cd sdk/
  1. Yerel dosya sisteminizin yapılandırmasını Actions konsoluna kopyalamak için aşağıdaki komutu çalıştırın:
gactions push 

Webhook'u dağıt

gactions push çalıştırdığınızda, başlangıç webhook'u kodunu Actions konsoluna aktardınız. Bu codelab'in geri kalanı için webhook kodunuzu Actions Console'da düzenleyebilirsiniz. Bu noktada, webhook'u Actions konsolundan dağıtabilirsiniz.

Webhook'unuzu dağıtmak için şu adımları uygulayın:

  1. Actions konsolunda, gezinme çubuğunda Geliştir'i tıklayın.
  2. Gezinme çubuğunda Webhook sekmesini tıklayın.
  3. Dağıtımı Dağıt'ı tıklayın.

Cloud Functions'ın karşılamanızı sağlaması ve dağıtması birkaç dakika sürebilir. Cloud Function dağıtımı devam ediyor... mesajını görürsünüz. Kod başarıyla dağıtıldığında mesaj, Cloud Functions dağıtımınız güncel olur olarak güncellenir.

Simülasyon aracında test etme

İşleminiz bu noktada web uygulamasına bağlanmıştır. İşleminizi çağırdığınızda web uygulamasının göründüğünden emin olmak için Actions konsolu simülatörünü kullanabilirsiniz.

İşleminizi test etmek için şu adımları uygulayın:

  1. Actions konsolu gezinme çubuğunda Test et'i tıklayın.
  2. Giriş alanına Talk to Snow Pal sample yazıp Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak Oyunu başlat'ı da tıklayabilirsiniz.

37f7bc4e550d817c.png

Bir harfi veya kelimeyi tahmin etmek için mantığı henüz yapılandırmadığınız için, bir kelimeyi veya harfi tahmin ederseniz "...Yanlış. Denemeye devam edin. Görünüşe göre bu özelliğin düzgün çalışması için daha fazla işlev eklememiz gerekiyor."

5. Etkileşimli Tuval altyapısını anlama

Bu projede işlevler üç ana bileşen halinde düzenlenmiştir: Conversational Action, web uygulaması ve webhook. Bunun, İşleminizi nasıl ayarlayabileceğinizi gösteren bir model olduğunu ve Etkileşimli Tuval'in temel işlevini vurgulayacak şekilde düzenlendiğini unutmayın.

Aşağıdaki bölümlerde Conversational Action, webhook ve web uygulamasının birlikte nasıl çalıştığı ve diğer önemli Etkileşimli Tuval öğeleri açıklanmaktadır.

Konuşma İşlemi

İşleminizin Konuşma İşlemi bileşeni kullanıcı girişini tanıma, işleme ve kullanıcıya bir yanıtın oluşturulduğu uygun sahneye gönderme işlemlerini yürütür. Örneğin, bir kullanıcı Snow Pal oyununda "Sanırım e harfini" söylüyorsa Sohbet İşleminiz bu harfi intent parametresi olarak alır ve uygun oyun mantığına iletir. Bu mantık, tahminin doğru olup olmadığını belirleyip web uygulamasını buna göre günceller. Bu konuşma mantığını, Actions Console'daki web tabanlı bir entegre geliştirme ortamı olan Actions Builder'da görüntüleyip değiştirebilirsiniz. Aşağıdaki ekran görüntüsünde, Actions Builder'daki Conversational Action'ın bir bölümü gösterilmektedir:

91d1c5300f015ff9.png

4.Şekil İşlem Oluşturucu'daki Main invocation öğesinin görselleştirmesi.

Bu ekran görüntüsünde İşleminiz için Main invocation gösteriliyor. Kullanıcılar, "Ok Google, Snow Pal örneği ile konuş" gibi bir ifade söylediklerinde eşleştiriliyor. Kullanıcı işleminizi çağırdığında Main invocation, web uygulamanızın URL'sini içeren canvas yanıtıyla bir istem gönderir.

İşleminizdeki ilk canvas yanıt, web uygulaması URL'sini içermelidir. Bu yanıt, Asistan'a, Asistan'a kullanıcının cihazındaki söz konusu adresteki web uygulamasını oluşturmasını söyler. İşlem Oluşturucu'daki ek canvas yanıtları, true olarak ayarlanmış bir send_state_data_to_canvas_app alanı içerebilir. Bu alan, intent eşleştiğinde intent adını ve parametre değerlerini web uygulamasına gönderir. Web uygulaması, kullanıcı girişinden alınan bu verilere göre güncellenir.

Webhook

Bu codelab'de webhook'unuz oyun mantığını içerir (Webhook'unuzu bir oyun sunucusu gibi düşünebilirsiniz). Oyun mantığı, kullanıcının tahmininin doğru mu yanlış mı olduğunu, kazanıp kazanmadığını veya kaybettiğini belirleme ve sonuca göre bir yanıt oluşturma gibi unsurları içerir. Webhook'unuzu Actions Builder'da değiştirebilirsiniz.

İşleminizin oyun mantığını yürütmesi gerektiğinde Actions Builder, webhook'a bir çağrı yapar. Örneğin, Game sahnesindeki guess niyeti, guess işleyiciye bir webhook çağrısı yapar ve ardından kullanıcının tahmininin doğru olup olmadığını belirlemek için mantık yürütür. Webhook, web uygulaması dosyalarıyla eşlenen ve web'i uygun şekilde güncelleyen işleyicilerin içinde Canvas yanıtları içerebilir.

Web uygulaması

ca564ef59e1003d4.png

5. Şekil. Etkileşimli Tuval İşlemi'nde Conversational Action, webhook ve web uygulaması arasındaki etkileşimin görsel temsili.

Web uygulaması dosyaları, web uygulamanızın görsel ve animasyonlarının kodunu ve kullanıcı girişine göre web uygulamasını güncelleme mantığını içerir. Web uygulaması dosyalarınızı metin düzenleyicinizde değiştirir ve bu değişiklikleri Firebase CLI'ı kullanarak dağıtırsınız.

Conversational Action ve web uygulaması arasında iletişim kurma

Web uygulamanızın kullanıcı girişine göre güncellenebilmesi için Conversational Action ile web uygulamanız arasında iletişimi etkinleştirmeniz gerekir. Örneğin, bir kullanıcı "Sanırım f harfini" söylüyorsa,

Web uygulamasının uygun şekilde güncellenebilmesi için Sohbet İşlemi'nin web uygulamasına f harfini sağlaması gerekir. Kullanıcının girişini Conversational Action'dan web uygulamasına aktarmak için Interactive Canvas API'yi yüklemeniz gerekir.

Bu API'nin komut dosyası, Snow Pal oyununun ana HTML dosyası olan /public/index.html içinde yer almaktadır. Bu dosya, kullanıcı arayüzünüzün çeşitli komut dosyalarında nasıl göründüğünü ve yüklendiğini tanımlar:

index.html

<!-- Load Assistant Interactive Canvas API -->
 <script type="text/javascript" src="https://www.gstatic.com/assistant/interactivecanvas/api/interactive_canvas.min.js"></script>

Web uygulamasını kullanıcı girişine göre güncellemek için web uygulaması dosyanıza geri çağırmalar da kaydetmeniz ve yapılandırmanız gerekir. Geri çağırma işlevleri, web uygulamanızın Conversational Action'daki bilgilere veya isteklere yanıt vermesine olanak tanır.

/public/js/action.js ürününde, geri çağırmaları bildirmek ve kaydetmek için Action adında önceden yapılandırılmış bir sınıf bulunmaktadır. Action sınıfı, Interactive Canvas API'si etrafında oluşturulmuş bir sarmalayıcıdır. Web uygulaması scene.js içinde create() işleviyle oluşturulduğunda, yeni bir Action örneği oluşturulur ve aşağıdaki snippet'te gösterildiği gibi setCallbacks() çağrılır:

scene.js

// Set Assistant at game level.
this.assistant = new Action(this);
// Call setCallbacks to register Assistant Action callbacks.
this.assistant.setCallbacks();

setCallbacks() işlevi, /public/js/action.js öğesinin Action sınıfında tanımlanır. Bu işlev, geri çağırmaları tanımlar ve oyun oluşturulduktan sonra bunları Interactive Canvas API'ye kaydeder:

  setCallbacks() {
    // Declare the Interactive Canvas Action callbacks.
    const callbacks = {
      onUpdate: (data) => {
     ...
    // Called by the Interactive Canvas web app once web app has loaded to
    // register callbacks.
    this.canvas.ready(callbacks);
  }

setCallbacks() işlevi, her Canvas yanıtı gönderdiğinizde çağrılan onUpdate() geri çağırmasını tanımlar.

Sonraki bölümde, Conversational Action'dan web uygulamasına veri iletmek için bu projeye özel kodun nasıl yapılandırıldığı açıklanmaktadır.

Kullanıcı girişine göre web uygulamasını güncelleme

Bu codelab'de, kullanıcı girişine göre web uygulamasını güncellemek için bir komut eşlemesi kullanacaksınız. Örneğin, start_game amacı Welcome sahnesinde eşleştiğinde isteme dahil edilen canvas yanıtı web uygulamasına gönderilir. onUpdate(), canvas yanıtındaki meta verileri ayrıştırır ve START_GAME komutunu çağırır. Bu komut da scene.js öğesindeki start() işlevini çağırır ve web uygulamasını yeni bir oyun oturumu başlatmak üzere günceller.

scene.js içindeki start() işlevi, webhook'unuzun erişebileceği durum verilerini eklemek için setCanvasState() adlı bir yöntemi kullanan updateCanvasState() işlevini de çağırır.

updateCanvasState() yöntemi, her komutun sonunda çağrılır (bu komutları codelab boyunca ekleyeceksiniz) ve web uygulamasının durumunu günceller. updateCanvasState() her çağrıldığında displayedWord ve incorrectGuesses değerleri geçerli duruma göre güncellenir:

scene.js

...
  updateCanvasState() {
    window.interactiveCanvas.setCanvasState({
      correctWord: this.word.text,
      displayedWord: this.word.displayText.text,
      incorrectGuesses: this.incorrectGuesses,
    });

Güncellenen durum, bir sonraki konuşma sırası için kullanılabilir. Bu duruma, aşağıdaki kod snippet'inde gösterildiği gibi conv.context.canvas.state aracılığıyla webhook'tan erişebilirsiniz:

index.js

...
  let displayedWord = conv.context.canvas.state.displayedWord;
...

6. Tahmin işlevi ekleyin

Bu bölümde İşleminize guess işlevini eklersiniz. Bu işlev, kullanıcının kelime veya kelime içindeki harfleri tahmin etmesine olanak tanır.

Konuşma İşlemi

Simülatörde test etme bölümünde "Bu özelliğin düzgün çalışması için daha fazla işlev eklememiz gerekiyor" ifadesini içeren bir yanıt aldınız. Artık bu istemi Actions Console'dan silebilirsiniz. Böylece yalnızca webhook'u çağırırsınız (Game sahnesinde, guess niyeti, eşleştiğinde bir webhook çağrısı yapacak şekilde zaten yapılandırılmıştır).

guess amacı eşleştiğinde statik istemi kaldırmak için şu adımları uygulayın:

  1. Actions konsolundaki gezinme çubuğunda Sahneler'i tıklayın.
  2. Game sahnesine gitmek için Oyun'u tıklayın.
  3. Kullanıcı amacı işleme bölümünde Tahmin eşleştiğinde'yi tıklayın. İstemi kaldırmak için İstemleri gönder'i temizleyin.
  4. Kaydet'i tıklayın.

Webhook

Bu bölümde webhook'unuzu, bir kullanıcının doğru veya yanlış tahminini bir web uygulaması dosyasındaki mantığa eşleyen ve ardından web uygulamasını buna uygun şekilde güncelleyen bir mantıkla güncelleyeceksiniz. guess intent işleyicisi webhook'ta sizin için zaten yapılandırılmış. Bu nedenle, web uygulamasını güncelleyen mantığı tetiklemek için bu niyete yalnızca Canvas yanıtları eklemeniz gerekir.

Webhook'unuzu güncellemek için aşağıdaki adımları uygulayın:

  1. Actions konsolunda, gezinme çubuğunda Webhook'u tıklayın.
  2. guess işleyicinin altında index.js öğesine şu kodu ekleyin:

index.js (Bölüm A):

// Add Section A `conv.add(new Canvas({` content here.
conv.add(new Canvas({
  data: {
    command: 'CORRECT_ANSWER',
    displayedWord: displayedWord
  },
}));

index.js (Bölüm B):

// Add Section B `conv.add(new Canvas({` content here.
conv.add(new Canvas({
  data: {
    command: 'INCORRECT_ANSWER',
  },
}));
  1. Sipariş Karşılamayı Kaydet'i tıklayın.
  2. Dağıtımı Dağıt'ı tıklayın. Dağıtım tamamlandığında Cloud Function dağıtımınız güncel mesajı gösterilir.

Web uygulaması

Artık web uygulamanızı CORRECT_ANSWER ve INCORRECT_ANSWER komutlarını işleyecek şekilde yapılandırabilirsiniz.

  1. public/js/action.js dosyasını metin düzenleyicinizde açın.
  2. CORRECT_ANSWER ve INCORRECT_ANSWER komutlarını işlemek için web uygulamasını güncelleyin:

action.js (Bölüm C):

// Add Section C `CORRECT_ANSWER: (params) => {` content here.
      CORRECT_ANSWER: (params) => {
        this.gameScene.correctAnswer(params);
      },
      INCORRECT_ANSWER: (params) => {
        this.gameScene.incorrectAnswer();
      },
  1. Web uygulamasını güncellemek için aşağıdaki komutu çalıştırın:
firebase deploy --project {PROJECT_ID} --only hosting

İşleminizi simülatörde test etme

Bu noktada İşleminiz bir tahminin doğru mu yanlış mı olduğunu belirleyebilir ve web uygulamasını buna göre güncelleyebilir.

İşleminizi test etmek için şu adımları uygulayın:

  1. Gezinme çubuğunda Test et'i tıklayın.
  2. Giriş alanına Talk to Snow Pal sample yazıp Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak Evet düğmesini de tıklayabilirsiniz.
  4. Tahmin etmek istediğiniz harfi Giriş alanına yazın ve Enter tuşuna basın.

1c2c2d59a418642b.png

Kodu anlama

Önceki bölümde kullanıcıların oyununuzdaki harfleri tahmin edip bu tahminlerin kelimede ya da Kar Arkadaşı'nda gösterilmesini sağlayan bir kod eklemiştiniz. Yüksek bir düzeyde, guess niyeti eşleştiğinde Actions Builder'da bir webhook çağrısı yaparsınız. Bu çağrı, uygun şekilde güncellenmesi için web uygulamanıza veri iletir. Örneğin, kullanıcı Snow Pal oyununda kelimede bulunan bir harfi tahmin ederse web uygulaması güncellenerek bu harfi kelimede doğru konumda gösterir.

Etkileşimli Tuval kullanan İşlemler için verilerin webhook'tan web uygulamasına nasıl aktarıldığına ilişkin genel akış aşağıdaki gibidir:

  1. Kullanıcının girişi, Canvas yanıtı içeren bir intent'le eşleşiyor.
  2. Conversational Action veya webhook Canvas yanıtını gönderir. Bu da onUpdate() geri çağırmasını tetikler.
  3. onUpdate() geri çağırması, web uygulamasını uygun şekilde güncelleyen özel mantıkla eşlenir.

Bu proje için kod şu şekilde çalışır:

  1. Kullanıcı, guess amacıyla eşleştiğinde İşlem Oluşturucu, kullanıcının girişinden bu harfi parametre olarak çıkarır.
  2. Actions Builder, webhook'unuzda guess işleyiciyi çağırır. Bu işleyici, kullanıcının tahmin ettiği harfin kelimede görünüp görünmediğini belirlemeye yönelik bir mantık içerir.
  3. guess işleyicisi, biri harf doğru olduğunda, diğeri harf yanlış olduğunda yürütülen iki Canvas yanıt içerir. Her Canvas yanıtı, uygun verileri (CORRECT_ANSWER veya INCORRECT_ANSWER komutu) web uygulamasına iletir.
  4. Canvas yanıtının data alanında bulunan veriler, action.js öğesindeki onUpdate() yöntemine iletilir. onUpdate(), scene.js uygulamasındaki komut eşlemesinde uygun komutu çağırır.
  5. Komut eşlemesi, scene.js içindeki correctAnswer() ve incorrectAnswer() işlevleriyle eşlenir. Bu işlevler, web uygulamasını kullanıcının tahminini yansıtacak şekilde günceller ve web uygulamanızdan webhook'unuza durum verileri göndermek için setCanvasState() komutunu çağırır.

7. Kazanma/kaybetme işlevi ekleyin

Bu bölümde, İşleminize kazanan ve kaybeden işlevleri eklersiniz. Bu işlevler, kullanıcının kazanıp kaybetmediğini belirleyen mantığı ve kullanıcının sonucuna göre web uygulaması resmini güncelleme mantığını içerir.

Konuşma İşlemi

Kullanıcının oyunu kazanmasını veya kaybetmesini sağlayan işlev, guess amacı içinde yapılandırılacağından Actions Builder'da ek yapılandırma yapmanız gerekmez.

Webhook

Bu bölümde webhook'unuzu, kullanıcının oyunu kazandığında veya kaybettiğinde işleme koyan mantıkla güncelleyecek ve oyunu uygun kazanan veya kaybeden ekranla güncelleyen web uygulaması mantığıyla eşleyeceksiniz.

Webhook'unuzu güncellemek için aşağıdaki adımları uygulayın:

  1. Actions konsolunda, gezinme çubuğunda Webhook'u tıklayın.
  2. guess işleyicinin altında index.js öğesine şu kodu ekleyin:

index.js (Bölüm D):

// Add Section D `if (userHasWon)` content here.
    if (userHasWon) {
      conv.add(`<speak>Let's see if your guess is there...<break
        time='2500ms'/> ${guess} is right. That spells ${correctWord}!  
        ${randomArrayItem(WIN_RESPONSES)}</speak>`);
      conv.add(new Canvas({
        data: {
          command: 'WIN_GAME',
          displayedWord: displayedWord
        },
      }));
      conv.add(`<speak>${PLAY_AGAIN_INSTRUCTIONS}</speak>`);
    } else {

index.js (Bölüm E):

// Add Section E `}` here.
}

index.js (Bölüm F):

// Add Section F `Check if the user has exceeded the maximum` content here.
// Check if the user has exceeded the maximum amount of max guesses allowed.
    const userHasLost = conv.context.canvas.state.incorrectGuesses + 1 >= MAX_INCORRECT_GUESSES;
    if (userHasLost) {
      conv.add(`<speak>Let's see if your guess is there...<break
      time='2500ms'/> ${guess} is wrong. Sorry you lost. The word is ${correctWord}!</speak>`);
      conv.add(new Canvas({
        data: {
          command: 'LOSE_GAME',
        },
      }));
      conv.add(`<speak>${PLAY_AGAIN_INSTRUCTIONS}</speak>`);
    } else {

index.js (G Bölümü):

// Add Section G `}` here.
}
  1. Sipariş Karşılamayı Kaydet'i tıklayın.
  2. Dağıtımı Dağıt'ı tıklayın. Dağıtım tamamlandığında Cloud Function dağıtımınız güncel mesajı gösterilir.

Burada, kullanıcılar oyunu kazandığında veya kaybettiğinde yönetmek için WIN_GAME ve LOSE_GAME komutlarını içeren iki Canvas yanıtı eklediniz. Sonraki bölümde, kullanıcının kazanmasına veya kaybetmesine bağlı olarak web uygulamasını güncelleyen işlev ekleyeceksiniz.

Web uygulaması

Artık web uygulamanızı, kullanıcının kazanmasına veya kaybetmesine göre güncelleme yapacak şekilde yapılandırabilirsiniz. Web uygulamanızı güncellemek için aşağıdaki adımları uygulayın:

  1. public/js/action.js dosyasını metin düzenleyicinizde açın.
  2. Web uygulamanızı WIN_GAME ve LOSE_GAME komutlarını işleyecek şekilde güncelleyin:

action.js (Bölüm H):

// Add Section H `WIN_GAME: (params) => {` content here.
      WIN_GAME: (params) => {
        this.gameScene.winGame(params);
      },
      LOSE_GAME: (params) => {
        this.gameScene.loseGame();
      },
  1. Web uygulamasını güncellemek için aşağıdaki komutu çalıştırın:
firebase deploy --project {PROJECT_ID} --only hosting

İşleminizi simülatörde test etme

İşleminiz bu noktada kullanıcı oyunu kazandığında veya kaybettiğinde başa çıkabilir ve her sonuç için uygun ekranı sunar.

İşleminizi test etmek için şu adımları uygulayın:

  1. Actions konsolu gezinme çubuğunda Test et'i tıklayın.
  2. Giriş alanına Talk to Snow Pal sample yazıp Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak Oyunu başlat düğmesini de tıklayabilirsiniz.
  4. Kazanana veya kaybedene kadar harf ve kelime tahmin edin.

ee572870f9a7df36.png

Tekrar oynamak için isterseniz, tekrar oynamak için gereken işlevin henüz eklenmediğini belirten bir mesaj alırsınız. Bu işlevi bir sonraki bölümde ekleyeceksiniz.

Kodu anlama

Kazanma ve kaybetme işlevi, tahmin işleviyle aynı şekilde çalışır. Kullanıcı guess niyetiyle eşleşir ve webhook'unuz da kullanıcının tahminini değerlendirir. Tahmini doğruysa kod, kullanıcının kazanıp kazanmadığını kontrol eder. varsa WIN_GAME komutu web uygulamasına gönderilir. Tahmini yanlışsa kod, kaybedip kaybetmediğini kontrol eder. LOSE_GAME komutu web uygulamasına gönderilir. Bu komutlar, scene.js oyunundaki winGame() ve loseGame() işlevlerini tetikler. Bu işlevler, web uygulamasını kazanan veya kaybeden ekranı gösterecek ve oyunun durumunu güncelleyecek şekilde günceller.

8. Tekrar oynatma işlevi ekleme

Bu bölümde, kullanıcının yeni bir oyuna başlamak için "Tekrar oyna" demesini veya web uygulamasındaki Tekrar Oyna düğmesini tıklamasını sağlayan işlevler eklersiniz. Actions Builder'da play_again amacını, web uygulamasını uygun şekilde güncelleyen bir canvas yanıtı gönderecek şekilde değiştirir ve kullanıcı Tekrar Oyna düğmesini tıkladığında play_again amacını tetikleyen bir mantık eklersiniz.

Konuşma İşlemi

Önceki bölümde İşleminizi test ettiğinizde, oyunu tekrar oynamayı denediğinizde şu istemi aldınız: "Bu çok iyi olurdu, ancak bu işlevi sonraki bir bölümde geliştireceğiz. Şimdilik yalnızca işlemi sıfırlayabilirsiniz." Artık bu istemi silip yerine, kullanıcı başka bir oyun istediğinde ("Tamam, işte başka bir oyun daha!") yanıt veren ve web uygulamasını yeni bir oyun başlatması için canvas yanıtı içeren istemle değiştirebilirsiniz.

Kullanıcı tekrar oynamak istediğinde istemi güncellemek için aşağıdaki adımları uygulayın:

  1. Actions konsolunda Sahne açılır menüsünü tıklayın.
  2. Oyun sahnesini tıklayın.
  3. Kullanıcı amacı işleme altında play_again eşleştirildiğinde'i tıklayın.
  4. İstemi şununla değiştirin:
candidates:
  - first_simple:
      variants:
        - speech: 'Okay, here''s another game!' 
    canvas:
      sendStateDataToCanvasApp: true
  1. Kaydet'i tıklayın.

Webhook

Bu codelab'de webhook, oyun mantığını yönetir. Tekrar oynat işlevi herhangi bir mantık doğrulaması gerektirmediğinden webhook'u çağırmanıza da gerek yoktur. bunun yerine, gerekli verileri web uygulamasına iletmek için doğrudan Actions Builder'dan canvas yanıtı gönderebilirsiniz (bunu önceki bölümde yapılandırmıştınız).

Web uygulaması

Artık kullanıcı tekrar oynamak istediğinde web uygulaması dosyalarınızı uygun şekilde güncellenecek şekilde değiştirebilirsiniz. Bu işlevi eklemek için aşağıdaki adımları izleyin:

  1. public/js/action.js dosyasını metin düzenleyicinizde açın.
  2. PLAY_AGAIN komutunu işleyecek şekilde web uygulamasını güncelleyin:

action.js (Bölüm I):

// Add Section I `PLAY_AGAIN: (params) => {` content here.
      PLAY_AGAIN: (params) => {
        this.gameScene.start();
      },
  1. public/js/scene.js dosyasını metin düzenleyicinizde açın.
  2. Kullanıcı "Tekrar Oyna"yı tıkladığında yeni bir oyun oturumu başlatmak için web uygulamasını güncelleyin. düğme:

sahne.js (Bölüm J):

// Add Section J `sendTextQuery` content here.
     window.interactiveCanvas.sendTextQuery('Play again');
  1. Web uygulamasını güncellemek için aşağıdaki komutu çalıştırın:
firebase deploy --project {PROJECT_ID} --only hosting

İşleminizi simülatörde test etme

İşleminiz artık kullanıcı "Tekrar oyna" dediğinde veya Tekrar Oyna düğmesini tıkladığında yeni bir oyun oturumu başlatabilir.

İşleminizi test etmek için şu adımları uygulayın:

  1. Gezinme çubuğunda Test et'i tıklayın.
  2. Giriş alanına Talk to Snow Pal sample yazıp Enter tuşuna basın.
  3. Giriş alanına Yes yazıp Enter tuşuna basın. Alternatif olarak Oyunu başlat düğmesini de tıklayabilirsiniz.
  4. Kazanana veya kaybedene kadar harf ve kelime tahmin edin.
  5. Giriş alanına Play again yazıp Enter tuşuna basın. Alternatif olarak, Tekrar oyna düğmesini de tıklayabilirsiniz.

1fbc7193f7a9d0f5.png

Kodu anlama

İşleminizi test ettiğinizde ses girişi ("Tekrar oyna") veya dokunmatik girişle (Tekrar oyna düğmesini tıklayarak) yeni bir oyun başlatabilirsiniz.

Ses girişi seçeneğinde, kullanıcı "Tekrar oyna" dediğinde veya bunun bir varyasyonunu söylediğinde play_again niyeti eşleştirilir ve istem sırasına bir istem ("Tamam, başka bir oyun daha!") ekler. İsteme dahil edilen canvas yanıtı, amaç adını ve diğer meta verileri web uygulamasına gönderir. Amaç adı onUpdate() geri çağırmasına iletilir ve bu komut da ilgili komutu (PLAY_AGAIN) action.js konumundaki komut eşlemesiyle eşler. PLAY_AGAIN komutu, scene.js içinde start() işlevini tetikler ve web uygulamasını yeni bir oyun oturumuyla günceller.

Dokunmatik giriş seçeneği olarak, düğmenin çalışması için dokunmatik giriş aracılığıyla intent tetiklemenize olanak tanıyan Interactive Canvas API'si sendTextQuery()'yi kullanıyorsunuz.

Bu codelab'de, kullanıcı Tekrar oynat düğmesini tıkladığında play_again amacını çağırmak için sendTextQuery() yöntemini kullanırsınız. Play again bağımsız değişkeni, play_again amacındaki bir eğitim ifadesiyle eşleşir ve bu amacı, kullanıcının "Tekrar oynat" demesine benzer şekilde tetikler. Ardından play_again amacı, web uygulamasını güncelleyen ve yeni bir oyun oturumu başlatan mantığı tetikler.

9. PLAY_GAME yerleşik amacını güncelleme

Bu bölümde, PLAY_GAME yerleşik intent'i güncellersiniz.

PLAY_GAME yerleşik amacı, kullanıcıların "Oyun oynamak istiyorum" gibi genel bir istekte bulunduklarında İşleminizi çağırmalarına olanak tanır.

Kaynak kodu, /sdk/custom/global/actions.intent.PLAY_GAME.yaml adresinde bulunan PLAY_GAME yerleşik amacını içeriyor. Bu durum, konsoldaki Çağrı bölümünde PLAY_GAME olarak aşağıdaki ekran görüntüsünde gösterildiği gibi yansıtılır:

c4f11e2d1c255219.png

Kullanıcıların işleminizi bu yerleşik intent aracılığıyla çağırmasını sağlamak için PLAY_GAME yerleşik amacına web uygulaması URL'sini içeren bir canvas yanıtı eklemeniz gerekir. Bunun için, aşağıdaki adımları uygulayın:

  1. Actions konsolunda, gezinme çubuğunda PLAY_GAME'yi tıklayın.
  2. İstemi, aşağıdaki snippet'te gösterildiği gibi web uygulaması URL'nizi içerecek şekilde güncelleyin:
candidates:
  - canvas:
      url: 'https://<PROJECT_ID>.web.app'
  1. Kaydet'i tıklayın.

İşleminizi simülatörde test etme

İşleminiz artık PLAY_GAME yerleşik amacını destekliyor.

İşleminizi test etmek için şu adımları uygulayın:

  1. Gezinme çubuğunda Test et'i tıklayın.
  2. Yerleşik amaç işlemeyi test et'i tıklayın.
  3. İşlemi çağır'ı tıklayın.

1a4f647e17ebab53.png

İşleminiz simülatörde çağrılmalıdır.

10. Ek: Etkileşimli Tuval İşlemi ile ilgili sorunları giderme

Bu bölümde, Etkileşimli Tuval İşleminiz düzgün çalışmadığında nasıl hata ayıklayacağınızı öğreneceksiniz. Snow Pal projesi, etkinleştirebileceğiniz bir hata ayıklama yer paylaşımıyla birlikte hazır olarak gelir. Yer paylaşımı, tüm console.log() ve console.error() çıkışını aşağıdaki ekran görüntüsünde gösterildiği gibi ekranın sağ alt köşesinde görüntüler:

4c8531d24366b5df.png

Bu yer paylaşımını etkinleştirmek için /public/css/main.css dosyasını açın ve display: none !important; satırını aşağıdaki snippet'te gösterildiği gibi yorumlayın:

main.css

.debug {
 display: flex;
 flex-direction: column;

/* Comment below to view debug overlay */
/* display: none !important; */

 width: 500px;
 height: 150px;
 right: 0;
 bottom: 0;
 position: absolute;
}

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 şu adımları uygulayın:

  1. Google 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 Actions konsolundan hemen kaldırmak için Proje silme bölümünde listelenen adımları tamamlayın. Bu adımı tamamlamazsanız projeniz yaklaşık 30 gün sonra otomatik olarak kaldırılır.

11. Tebrikler!

Tanıtım amaçlı Etkileşimli Tuval codelab'ini tamamladınız ve artık kendi Etkileşimli Tuval İşleminizi oluşturmak için gereken becerilere sahipsiniz.

Öğrendikleriniz

  • Etkileşimli Tuval İşlemi oluşturma, dağıtma ve test etme
  • Web uygulamasını güncellemek için Canvas yanıtları nasıl kullanılır?
  • İşleminizi iyileştirmek için sendTextQuery() ve setCanvasState() gibi farklı yöntemleri kullanma
  • İşleminizde hata ayıklama

Daha fazla bilgi

Etkileşimli Tuval hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atın:

Geri bildirim anketi

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