Actions on Google – Build for Google Assistant v2


Google Asistan’a nasıl uygulama geliştirilebileceğine dair genel bir bakış açısını paylaştım bu konuyla ilgili ilk yazımı linkten okuyabilirsiniz. Bu yazıda ise biraz daha derinlere dalacağız.

Hem ilk yazıyı biraz hatırlamak adına dedik ki iki tip action vardır. Bunlardan biri Direkt Actionlar, diğeri ise Conversational Action’lar.

screen-shot-2017-02-12-at-13-41-26

Direct actionlarda aslında asistan herşeyi yapabiliyor. Teoride bize ne isteğini veriyor ve biz de ilgili servisi çalıştırıyoruz. Ancak henüz geliştirmeye açık değil.
Bizim üzerinde çalışabileceğimiz kısım ise Conversational Actions. Yani karşısındakiyle iki yönlü iletişim kurarak, ilerleyen action tipi. Burada kullanıcı bir action için istekte bulunduğunda Google asistan bu isteği işler ve karşılığındaki eğer varsa ilgili Conversation action’a yönlendirir. Bu noktadan sonra, karşılamadan kapatma cümlelerinde kadar herşey o conversation action içinde yer alır.

Yine bir önceki yazıda da kısaca değindiğimiz Conversation API çok önemli bir görev görüyor, temel görevinin broker’lık olduğunu söylemiştik. Tabi broker görevi gören google asistan olduğu için bazı standart kalıplarla hitap etmemiz gerekmekte.

let me talk to $name
I want to talk to $name
can I talk to $name
talk to $name
at $name

$name invocation name’i ifade ediyor. Ancak mesela bir önceki örnekteki gibi de let me speak with my personal assistant about homemade cannoli dediğimizde aslında burada homemade cannoliyle action phrase’i de vermiş oluyoruz. Burada yaptığımız şey deep linking.

Invocation name‘in seçimi çok önemli. Kolay telaffuz edilebilen, eşleniği olmayan bir kelime olması faydalı olur. Bu invocation name bizim agentımızı ifade eden uniqe bir kelime olacak. Tabi neler olabilir neler olamazla gibi, naming policy için actions on google altında bir döküman var. Burada bir geliştirme yapmayı düşünüyorsanız. İncelemekte fayda var. İsme karar verdiğinizde ise Googler Developer Console’dan register olabilirsiniz.

Tamam isme de karar verdiğimize göre nasıl geliştireceğimize geri dönebiliriz. Şu an elimizde action’ınımızı nasıl trigger edeceğimiz bilgisi var.

Conversation action’ınımızı iki farklı şekilde geliştirebiliriz. Bunlar; Actions SDK ve API.AI kullanımı.

Actions SDK kullanarak ilerlediğimiz durumda, SDK bize aslında iki temek component verir. Bunlar Action Package ve Node.js web servisidir. Node.js client kütüphanesi, kullanıcıdan gelen inputu işlememize ve ilgili isteğe gerekli çıktıyı üretebilmek için yapacağımız geliştirmemize yardımcı olur. Yani aslında Fullfillment stepini sorunsuz bir şekilde geliştirmemize yardımcı olur. Action package’ları ise, action’ların nasıl tetikleneceği, hangi fulfillment endpoint’in çağrılacağı gibi bilgilerin tutulduğu JSON manifest’leridir. Bunlar dışında actionları test ve deploy edebilmek için CLI ve Google Home simulatoru olarak bir Web simülatörü sağlanmış olur.

API.AI alternatifiyle ilerlenmesi, geliştirme ve deploy etmeyi bizler için biraz daha kolaylaştırır yönde. Bir arayüz yardımıyla, actionları build edebilir ve ek özellikleri basitçe ekleyebiliriz. API.AI’ın verdikleri ise; ilk olarak NLU. API.AI’a bağlı doğal dil anlama vardır ve kullanıcıdan gelen isteğin içinde de kullanılır. Tabi ilk söylediğimiz özelliği bir GUI arayüzü sunuyor olması da action’ların tanımlanması ve konfigürasyonu için çok büyük bir kolaylık. Son olarak da API.AI bize bazı ileri seviye özellikler sunar – Conversation building features. Bunlar da mesela gömülü bir simülatör, makine öğrenmesi algoritmaları ve kullanıcının isteklerini  bağlamsallaştırmamız ve bu sayede bakımını daha kolay yapmamızı sağlayan bağlamlar sunması gibi.

References:

 

Actions on Google – Build for Google Assistant (Genel Bakış)


Actions on Google, temel olarak Google Asistan için birşeyler geliştirmemizi sağlıyor. 8 Aralık’da twitter’da yapılan anonsun ardından ufak ufak da uygulamalar çıkmaya başladı. Şu an için entegrasyon Google Home’a yapılabiliyor olsa da Google Asistan’ın hali hazırda var olduğu Pixel, Allo gibi daha birçok yerde ilerleyen günlerde görüleceği yönünde Google’ın blogları.

Google Asistan’la iletişim kurabilmemiz için iki tip action mevcut. Direct Actions ve Conversation Actions. Direct Action’larda Google Asistan bütün iletişimi gerçekleştiriyor ve yapılması gerekeni iletiyor biz de onunla ilgili geliştirmeyi yapıyoruz. Ancak şu an geliştirme ve deploya açık değil.

googleassistantConversation Action‘lar ise kullanıcılarla aramızda iki taraflı iletişim olanacağı sunarak, kullanıcılarımızın isteklerine yanıt vermemize yardımcı olur. Kullanıcı bir action için istekte bulunduğunda, Google Assistant bu isteği işler ve hangi eğer böyle bir action varsa, hangi action’ın çalıştırılacağına karar verir. Buradan itibaren ise bizim action’ımız geri kalan işi yapar. Google Asistan’ın daha iyi hizmet verebilmesinin yolu da aslında herkesin alıştığı kendi ekosistemindeki servisleri de sağlıyor olması. Böylece aslında developerlar ya da firmalar olarak kendi servislerimizi Google Asistan’a entegre edebilir ve kullanıcılarımızın böylece erişmesini sağlayabiliriz. Aslında burada bahsettiğimiz aynen bir chatbot. Ancak alıştığımız üzere bir uygulama, web sayfası vs üzerinden yazışarak değil de bu sefer sesle yönettiğimiz bir ascreen-shot-2017-01-15-at-15-38-54sistandan bahsediyoruz.

Google’ın conversation’ın nasıl çalıştığını anlattığı bir videosu var. Aslında bu video üzerinden ilerleyebiliriz. Videoda Google Home’u kullanan kişi “Let me talk to personal chef” diye Google Home’a sesleniyor. Bu noktada Personal Chef keyword’ü aslında action’ımız. Başlangıç için ilgili action’ın trigger edileceği bir anahtar kelimeye ihtiyacımız var. Kendi Google Home cihazımda denedim. Maalesef benim cihazım henüz, Personal Chef desteği veremiyormuş. Bu biraz üzdü tabi 🙂 Personal Chef de modunu, nasıl birşey istediğini soruyor. Kullanıcının verdiği yanıtın içerisinde bazı keyler aranıyor. Mesela sağdaki conversation’da da gördüğümüz gibi, bu action için hot soup, fast, chicken  ve tomatoe kelimeleri anahtar kelimeler, bu noktada asistanı bunları içeren bir tarifi, bir web sitesi aracılığıyla kullanıcıya sunuyor.

Toparlayacak olursak, bir conversation action’ın 3 adet temel bileşene ihtiyacı var.

  1. Invocation triggers
  2. Dialogs
  3. Fulfillment

conversation-action

Screen Shot 2017-01-28 at 20.21.20.png

Invocation trigger‘lar kullanıcıların actionları nasıl keşfedeği ve başlatabileceği aslında. Mesela az önceki örnekte invocation trigger “Personal Chef”ti. Bir kere o action tetiklendiğinde sonrasında tanımlı dialoglarla kullanıcıyla iletişime geçer. Dialog’lar adından da anlaşılacağı üzere, action’ların kullanıcı arayüzüdürler. Kullanıcıların actionlarla nasıl iletişime geçeceklerini belirlerler. Tabi ki konuşma akışını devam ettirebilmek için de fulfillment‘a bağlı. Fulfillment, kullanıcıdan gelen inputu işleyip, bir cevap dönen koddur. REST olarak, kullanıma açabiliyoruz. Aynı zamanda logic’de fulfilment’de yer almakta. Mesela bir önceki örnek için tarifleri alma işi de buranın. Tüm bu conponentler de Conversation API‘nın içerisinde bulunmakta.

Conversation API’ı ise Google Asistan’la iletişimde request ve response formatını tanımlar. Her ne kadar biz action tetiklendiğinde kullanıcı deneyimini kontrol ediyor olsak da Google halen broker görevi görür ve requesti valide eder. Bu noktada Google’ın bizden beklediği JSON formatında bir input bekler ve yine JSON formatında bir HTTP requesti bizim webhook agentımıza gönderir. Yeri gelmişken, webhook JSON formatında request ve response’la uyumlu bir restfull servistir. JSON formatının ise aşağıdaki gibi olması gerekmektedir.

{
  "user": {
    "user_id": "...",
    "profile": {
      "given_name": "John",
      "family_name": "Doe",
      "display_name": "John Doe"
    },
    "access_token": "..."
  },
  "device": {
    "location": {
      "coordinates": {
        "latitude": 123.456,
        "longitude": -123.456
      },
      "formatted_address": "1234 Random Road, Anytown, CA 12345, United States",
      "city": "Anytown",
      "zip_code": "12345"
    }
  },
  "conversation": {
    "conversation_id": "...",
    "type": "ACTIVE",
    "conversation_token": "..."
  },
  "inputs": [
    {
      "intent": "assistant.intent.action.MAIN",
      "raw_inputs": [
        {
          "query": "..."
        }
      ],
      "arguments": [
        {
          "name": "destination",
          "raw_text": "SFO",
          "location_value": {
            "latlng": {
              "latitude": 37.620565,
              "longitude": -122.384964
            },
            "formatted_address": "1000 Broadway, San Francisco, CA 95133"
          }
        }
      ]
    }
  ]
}

Peki genel olarak conceptleri öğrendikten sonra aslında en önemli konuya geliyoruz. Action’ları nasıl yazacağımız. Bu noktada Google bize 2 opsiyon sunuyor. İlki herseyi kendimizin yapabileceği Actions SDK, bir diğeri ise birçok şeyi arayüzü aracılığıyla hazır olarak kullanabileceğimiz API.AI. Genel konsepti tanıma adına bu yazıyı yazdığım için şimdilik nasıl implement edileceği detayına burada girmiyorum. Bir sonraki yazıda daha detaylı inceleyeceğiz.

References: