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: