feature-skills2

Alexa Skills Kit (ASK) ile Amazon Echo yetenekleri geliştirme

  • Facebook
  • Twitter
  • LinkedIn
  • Add to favorites
  • Email
  • RSS

Bu yazıda, bir süredir üzerinde detaylıca çalışıyor olduğum, Amazon Alexa servisi ve Echo’ya custom skill geliştirme konularında bazı notlar düşeceğim.

Öncelikle biraz kavramlardan bahsedelim ki konu netliğe kavuşsun. Ancak bu içerikten önce, eğer okumadıysanız, Amazon Alexa ve kişisel asistan cihazlarıyla ilgili birçok ilginç noktaya değindiğim içeriği okumanızı tavsiye ediyorum. Kısa bir izlenimle başlamak gerekirse, Amazon Echo olarak bildiğimiz, Amazon’un self-assistant cihazı. Echo’daki, konuşmalarınızı algılayıp işleyen (bkz. NLP; Natural Language Processing) servis de Amazon Alexa.

Alexa’daki skill-yetenek yapısının nasıl çalıştığını önceki yazıda detaylandırmıştım. Bu yazıda ise skill development‘a odaklanacağım.

Alexa Skill geliştirmeye genel bakış

Ortalama bir Alexa Skill’inin geliştirme sürecini şu şekilde özetleyebiliriz.

  • Alexa developer portal üzerinde bir Alexa skill’i oluşturun.
  • Alexa skill’inizin temel yapılandırmasını yapın (Skill name, invocation name… etc)
  • Skill’in etkileşim modelini -interaction model- tasarlayın. Burada hangi “intent”lerin hangi parametreleri aldığı tanımlanıyor.
  • Skill’in endpoint’ini, yani bir request geldiğinde o requesti işleyip yanıtı üretecek skill yazılımınızın barındığı yeri göstermeniz gerekiyor.
  • Skill yazılımınızı geliştirip Amazon Lambda içerisinde ya da başka bir cloud serviste barındırın.

Buradaki süreçte birçok yeni kavrama denk geldiğinizin farkındayım, hands on bir deneme yapmak için hemen şu tutorial’ı takip edip 5 dakika içerisinde ilk Amazon skill’inizi yayıma alabilirsiniz. Böylece süreçteki kavramlara daha hızlı ısınırsınız diye düşünüyorum.

Yazının devamında öncelikle Alexa Developer Console’a derinlemesine bakacağız. Bu esnada geliştirdiğim sample skill repoları temelinde bir wiki hazırladım github üzerinde. Burayı da eş zamanlı olarak takip ederek daha detaylı bilgi edinmeniz mümkün. Bu wiki’yi Türkçe’ye çevirmeyi düşünmüyorum.

Alexa Skill Developer’ın evi: Alexa Developer Console

Custom Alexa Skill’lerin tüm yapılandırması Amazon Developer Console üzerindeki Alexa bölümünde yapılıyor. Yeni bir Skill oluşturma aşamasına geçtiğimizde şu ekran bizi karşılıyor.

Skill Information

alexa-developer-console-detay-1

Buradaki en önemli iki kısım;

  • Skill name: Alexa skill store’da görünecek olan skill ismi
  • Invocation name: Skill’i başlatmak için kullanacağınız kelime. Bu alana tıkladığınızda zaten size rehberlik eden bir bölüm görünmeye başlıyor.

Devamındaki kısımlarda da skill’in bir Audio skill mi, video skill mi gibi temel yapılandırmaları yer alıyor.

Interaction Model

alexa-developer-console-detay-interaction-model

Burada da Intent schema ve örnek kalıplar yapılandırılıyor. Paylaştığım sample alexa skill’lerin içerisinde “alexa-skill” klasörlerinde IntentSchema.json ve Utterances.txt olarak bu yapılandırmaları da paylaştım. Intent Schema ile alexa’ya söylediğiniz cümle kalıplarındaki parametreleri ve veri tiplerini tanımlıyorsunuz. Örnek kalıplar kısmında da hangi cümle kalıbının hangi parametreleri alıp hangi Intent üzerinden Alexa skill backend’e gideceğine karar veriyorsunuz. Yukarıda verdiğim örneğe bakarsak, ben alexa’ya “exchange two hundred dollars” dediğimde, calculateExchange’ine curreny = dollars, Amount = 200 olarak parametre gidiyor. Backend’te te “Eğer intentName = calculateExchange ise şunu yap” diye gerekli yanıtı üretebiliyorum. Buradaki skillde tek intent var. Ancak örneğin, buyExchange diye bir intent daha olup buna da

buyExchange buy {Amount} {Currency}

şeklinde bir utterance yazabilirdik.

Farkındaysanız Alexa skill’in tüm diyalog akışını ve yapılandırmasını bu sayfa tamamlıyor. O arayüzü çok iyi özümsemek ve doğru kullanmak çok önemli. Yepyeni voice UI’ların üretim merkezi tek başına şimdilik sadece bu sayfa.

Configuration

alexa-developer-console-detay-configuration

Configuration sekmesinde ise alexa skill backend’ini yazdığınız AWS Lambda fonksiyonunun ARN’sini giriyorsunuz. Ya da eğer skill’iniz 3rd party bir serviste HTTPS endpoint olarak barınıyorsa yine buradan tanımlıyorsunuz. Yani bu sayfa, interaction model sayfasında belirlediğimiz parametrelerle elde edilen skill request’imizin nereye gönderilip yanıt bekleneceğini belirlediğimiz sayfa. Eklemeden geçmek istemiyorum ki Amazon Alexa skill’lerinde mutlaka AWS Lambda kullanılması öneriliyor. Zaten tüm inftrastructre’ın tek çatı altında olması gayet mantıklı. Başka bir yerde barındırmak için ise pek mantıklı bir sebep yok.

Account linking yapılandırması da bu sayfada. Skill’inizi kullananların diğer servislerdeki hesaplarını bağlayıp skill’iniz ile birlikte bu hesaplarla işlem yapabilmesini sağlayan özellik bu.Account linking konusunda detaylar için wikideki 3. step‘e bakabilirsiniz.

Test

alexa-developer-console-detay-test

Test sekmesinde zekice tasarlanmış 2 özellik var.

  • Voice simulator: Bir yanıt geliştirdiniz ve alexa skill’e response olarak döndürdünüz. Ancak alexa’nın bunu nasıl seslendireceğini merak ediyorsunuz. Bunu test etmek için cümleyi girip ses çıktısını alabilirsiniz. Burada desteklenen bazı SSML tagleri var, olanaklarından faydalanabilirsiniz. Mesela cümlenin bazı kısımlarını fısıltıyla söyletebilirsiniz. Fena sayılmaz.
  • Service simulator: Burada da Alexa’ya skill’imizi kullanırken birşey söylediğimizde bunun Alexa servisi tarafından nasıl parse edilip nasıl bir request JSON oluştuğu ve bizim backend’imizin buna nasıl bir response ürettiği test edilebiliyor. AWS Lambda üzerinden de cloudwatch loglarıyla konsola loglattığınız mesajları ya da oluşan hataları izleyebilirsiniz. JSON sekmesinden direkt JSON da gönderilebiliyor. Geliştirme esnasında bir ekranınızda sürekli açık olacak sekme bu olacaktır muhtemelen.

Ekstra olarak şunu da eklemeliyim, buradaki test arabirimine ve loglara bağlı kalmayın. Mutlaka AWS üzerinden debug edilebilecek bir geliştirme ortamı kurmaya çalışın. Örneğin, nodejs ile bu mümkün ve Amazon’un bu ortamın kurulmasıyla ilgili rehberleri var.


Geliştirdiğim Alexa Skill’leri

Paylaştığım skill repoları ile ilgili detaylı bir wiki hazırladığımı söylemiştim. Bu repolar hakkında özet şekilde bilgi vermek istiyorum.

Step 1: Simple Exchange Calculator Skill with Nodejs

Repo: eercanayar/alexa-skill-exchange-calculator

Bu geliştirdiğim ilk Alexa skill’iydi. Alexa’ya sorduğunuz EUR/USD kurundan TRY’ye dönüşümü bir API’dan güncel kuru alarak hesaplıyor. alexa-sdk kullanmadan yapılmış, Hello World kıvamında bir skill.

Step 2: Simple Exchange Calculator Skill with NodeJs + Alexa-SDK

Repo: eercanayar/alexa-skill-exchange-calculator-sdk

Step 1’deki skill’in alexa-sdk kullanılarak geliştirilmiş hali. Ayrıca Visual Studio Code üzerinde debug da edilebiliyor. Şu tutorial’da detayları mevcut.

Step 3: Exchange Calculator Skill with NodeJs + Alexa-SDK + Account Linking with Twitter

Repo: eercanayar/alexa-skill-linked-account-twitter-nodejs

Repo: eercanayar/alexa-skill-linked-account-twitter-middleware

Burada, hesapladığımız kur dönüşümünü Twitter’da paylaşıyoruz. Accont linking fonksiyonunu kullandım. Heroku üzerinde çalışan bir middleware var bir de burada. Alexa ile Twitter’ın arada birşey olmadan entegre edilememesi ise oauth ile ilgili bir konu.

Step 3-EX: Exchange Calculator Skill with C# .NET Core + Alexa-SDK + Account Linking with Twitter

Repo: eercanayar/alexa-skill-linked-account-twitter-dotnet-core

Step 2’deki nodejs backend’in birebir C# .NET Core ile yazılmış hali. Bu aslında “JSON request’i Lambda üzerinde bu sefer C# ile process etsek acaba nasıl olur, dotnetcore alexa-sdk ne durumda?” diye merak edişim sonucu ortaya çıktı. Visual Studio üzerinden direkt Amazon’a upload edilebiliyor solution’ın o anki hali.

Step 4: More IoTing; Alexa Skill – Thingworx Integration

Repo: eercanayar/alexa-skill-thingworx-basic

Repo: eercanayar/alexa-skill-thingworx-basic-middleware

Step 5-Final: Complete Integration with Alexa, Thingworx and Twitter

Repo: eercanayar/alexa-skill-thingworx-integration

ITU Control and Automation Engineering, Software developer, #Electronics #Cloud #IoT #InternetOfThings #OpenSource



Yorum yap

*